|
|
|
|
|
""" |
|
|
Generate 8 synthetic examples for README with model predictions |
|
|
2 examples per class: simple + nuanced |
|
|
""" |
|
|
|
|
|
import torch |
|
|
from transformers import DebertaV2Tokenizer, DebertaV2ForSequenceClassification |
|
|
|
|
|
def get_examples(): |
|
|
"""Define 8 synthetic examples: 2 per class (simple + nuanced)""" |
|
|
return [ |
|
|
|
|
|
{ |
|
|
"text": "Margaret runs the village bakery, making fresh bread every morning at 5 AM for the past thirty years.", |
|
|
"expected": "NONE", |
|
|
"type": "simple" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Dr. Harrison performs routine medical check-ups with methodical precision, maintaining professional distance while patients share their deepest fears about mortality.", |
|
|
"expected": "NONE", |
|
|
"type": "nuanced" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Emma struggles with overwhelming anxiety after her father's harsh criticism, questioning her self-worth and abilities.", |
|
|
"expected": "INTERNAL", |
|
|
"type": "simple" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "The renowned pianist Clara finds herself paralyzed by perfectionism, her childhood trauma surfacing as she prepares for the performance that could define her legacy.", |
|
|
"expected": "INTERNAL", |
|
|
"type": "nuanced" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Knight Roderick embarks on a dangerous quest to retrieve the stolen crown from the dragon's lair.", |
|
|
"expected": "EXTERNAL", |
|
|
"type": "simple" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Master thief Elias infiltrates the heavily guarded fortress, disabling security systems and evading patrol routes, each obstacle requiring new techniques and tools to reach the vault.", |
|
|
"expected": "EXTERNAL", |
|
|
"type": "nuanced" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Sarah must rescue her kidnapped daughter from the terrorist compound while confronting her own paralyzing guilt about being an absent mother.", |
|
|
"expected": "BOTH", |
|
|
"type": "simple" |
|
|
}, |
|
|
|
|
|
{ |
|
|
"text": "Archaeologist Sophia discovers an ancient artifact that could rewrite history, but must confront her own ethical boundaries and childhood abandonment issues as powerful forces try to silence her.", |
|
|
"expected": "BOTH", |
|
|
"type": "nuanced" |
|
|
} |
|
|
] |
|
|
|
|
|
def predict_examples(): |
|
|
"""Run predictions on all examples""" |
|
|
print("Loading model...") |
|
|
tokenizer = DebertaV2Tokenizer.from_pretrained('.') |
|
|
model = DebertaV2ForSequenceClassification.from_pretrained('.') |
|
|
|
|
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
model.to(device) |
|
|
model.eval() |
|
|
|
|
|
class_names = ['NONE', 'INTERNAL', 'EXTERNAL', 'BOTH'] |
|
|
examples = get_examples() |
|
|
|
|
|
results = [] |
|
|
|
|
|
print(f"Running predictions on {len(examples)} examples...\n") |
|
|
|
|
|
for i, example in enumerate(examples, 1): |
|
|
text = example['text'] |
|
|
expected = example['expected'] |
|
|
example_type = example['type'] |
|
|
|
|
|
|
|
|
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=512) |
|
|
inputs = {k: v.to(device) for k, v in inputs.items()} |
|
|
|
|
|
with torch.no_grad(): |
|
|
outputs = model(**inputs) |
|
|
probabilities = torch.softmax(outputs.logits, dim=-1) |
|
|
predicted_idx = torch.argmax(probabilities, dim=-1).item() |
|
|
confidence = probabilities[0][predicted_idx].item() |
|
|
|
|
|
predicted = class_names[predicted_idx] |
|
|
is_correct = predicted == expected |
|
|
|
|
|
result = { |
|
|
'text': text, |
|
|
'expected': expected, |
|
|
'predicted': predicted, |
|
|
'confidence': confidence, |
|
|
'correct': is_correct, |
|
|
'type': example_type |
|
|
} |
|
|
|
|
|
results.append(result) |
|
|
|
|
|
status = "✅" if is_correct else "❌" |
|
|
print(f"{status} Example {i} ({expected} - {example_type})") |
|
|
print(f" Predicted: {predicted} (confidence: {confidence:.3f})") |
|
|
print(f" Text: {text[:80]}...") |
|
|
print() |
|
|
|
|
|
return results |
|
|
|
|
|
def format_for_readme(results): |
|
|
"""Format results for README inclusion""" |
|
|
|
|
|
|
|
|
by_class = {} |
|
|
for result in results: |
|
|
expected = result['expected'] |
|
|
if expected not in by_class: |
|
|
by_class[expected] = [] |
|
|
by_class[expected].append(result) |
|
|
|
|
|
readme_content = """ |
|
|
## Example Classifications |
|
|
|
|
|
Here are sample classifications showing the model's predictions with confidence scores: |
|
|
|
|
|
""" |
|
|
|
|
|
for class_name in ['NONE', 'INTERNAL', 'EXTERNAL', 'BOTH']: |
|
|
if class_name in by_class: |
|
|
readme_content += f"### {class_name}\n\n" |
|
|
|
|
|
for result in by_class[class_name]: |
|
|
confidence_icon = "✅" if result['confidence'] > 0.7 else "⚠️" if result['confidence'] > 0.5 else "❌" |
|
|
|
|
|
readme_content += f"**{result['type'].title()} Example:**\n" |
|
|
readme_content += f"> *\"{result['text']}\"*\n\n" |
|
|
readme_content += f"**Prediction:** {result['predicted']} {confidence_icon} (confidence: {result['confidence']:.3f})\n\n" |
|
|
|
|
|
return readme_content |
|
|
|
|
|
if __name__ == "__main__": |
|
|
results = predict_examples() |
|
|
readme_section = format_for_readme(results) |
|
|
|
|
|
print("README Section:") |
|
|
print("=" * 50) |
|
|
print(readme_section) |
|
|
|
|
|
|
|
|
with open('readme_examples_section.txt', 'w') as f: |
|
|
f.write(readme_section) |
|
|
|
|
|
print("Saved README section to 'readme_examples_section.txt'") |