Views
No views yet
| Model | File | Performance |
|---|---|---|
| Document Regressor | bert_orality_regressor.pt | MAE: 0.109, R²: 0.60 |
| Category Classifier | bert_marker_category.pt | 86% accuracy, F1: 0.86 |
| Subtype Classifier | bert_marker_subtype.pt | 68-class, 49% accuracy |
1import torch
2from transformers import BertTokenizer, BertModel
3import torch.nn as nn
4
5class BertOralityRegressor(nn.Module):
6 def __init__(self, bert_model_name='bert-base-uncased', dropout=0.1):
7 super().__init__()
8 self.bert = BertModel.from_pretrained(bert_model_name)
9 self.dropout = nn.Dropout(dropout)
10 self.regressor = nn.Linear(self.bert.config.hidden_size, 1)
11 self.sigmoid = nn.Sigmoid()
12
13 def forward(self, input_ids, attention_mask):
14 outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
15 pooled_output = outputs.pooler_output
16 pooled_output = self.dropout(pooled_output)
17 logits = self.regressor(pooled_output)
18 return self.sigmoid(logits).squeeze(-1)
19
20# Load model
21model = BertOralityRegressor()
22model.load_state_dict(torch.load('bert_orality_regressor.pt', map_location='cpu'))
23model.eval()
24
25# Predict
26tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
27text = "Tell me, O Muse, of that ingenious hero who travelled far and wide"
28inputs = tokenizer(text, return_tensors='pt', truncation=True, max_length=512, padding='max_length')
29
30with torch.no_grad():
31 score = model(inputs['input_ids'], inputs['attention_mask'])
32print(f"Orality score: {score.item():.2f}")| Score | Interpretation |
|---|---|
| 0.9+ | Highly oral (epic poetry, hip-hop, sermons) |
| 0.7-0.9 | Oral dominant (speeches, podcasts) |
| 0.4-0.7 | Mixed oral/literate |
| 0.1-0.4 | Literate dominant (essays, journalism) |
| <0.1 | Highly literate (academic, legal, philosophy) |