Bakalarska_praca/metric_run.py

97 lines
5.6 KiB
Python
Raw Permalink Normal View History

2024-10-29 13:08:43 +00:00
import torch
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import jiwer
import sacrebleu
# 1. Загрузка модели и токенизатора
2024-11-10 11:40:38 +00:00
model_path = "T5Autocorrection_Book2" # Укажите путь к вашей модели
2024-10-29 13:08:43 +00:00
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSeq2SeqLM.from_pretrained(model_path)
# Устройство (GPU/CPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
# 2. Функция для генерации предсказаний модели
def generate_correction(sentence):
inputs = tokenizer(sentence, return_tensors="pt", max_length=128, truncation=True, padding="max_length").to(device)
with torch.no_grad():
outputs = model.generate(inputs["input_ids"], max_length=128, num_beams=5, early_stopping=True)
corrected_sentence = tokenizer.decode(outputs[0], skip_special_tokens=True)
return corrected_sentence
test_data = [
2024-11-11 22:51:16 +00:00
{"incorrect": "Toto je jednoduchy priklad textu.", "correct": "Toto je jednoduchý príklad textu."},
{"incorrect": "Mam rad slovensku kulturu a historiiu.", "correct": "Mám rád slovenskú kultúru a históriu."},
{"incorrect": "Dnes bol velmi krasny den na prechadzku.", "correct": "Dnes bol veľmi krásny deň na prechádzku."},
{"incorrect": "V škole sme mali prednasku o dejepise.", "correct": "V škole sme mali prednášku o dejepise."},
{"incorrect": "Chcel by som sa naucit lepsie pisat po slovensky.", "correct": "Chcel by som sa naučiť lepšie písať po slovensky."},
{"incorrect": "Zahrada je plna kvetou a voni.", "correct": "Záhrada je plná kvetov a vôní."},
{"incorrect": "Potrebujem pomoc s mojou domácou ulohou.", "correct": "Potrebujem pomoc s mojou domácou úlohou."},
{"incorrect": "Kazdy den sa ucime nove veci.", "correct": "Každý deň sa učíme nové veci."},
{"incorrect": "Moja oblubena kniha sa nazyva 'Pýcha a predsudok'.", "correct": "Moja obľúbená kniha sa nazýva 'Pýcha a predsudok'."},
{"incorrect": "Som velmi stastny, ze zijem na Slovensku.", "correct": "Som veľmi šťastný, že žijem na Slovensku."},
{"incorrect": "Prajem ti krasny a uspesny den.", "correct": "Prajem ti krásny a úspešný deň."},
{"incorrect": "Moje oblubene jedlo je bryndzove halusky.", "correct": "Moje obľúbené jedlo je bryndzové halušky."},
{"incorrect": "Tento vikend pojdeme na vylet do Tater.", "correct": "Tento víkend pôjdeme na výlet do Tatier."},
{"incorrect": "Kazdy rok chodime na dovolenku k moru.", "correct": "Každý rok chodíme na dovolenku k moru."},
{"incorrect": "Na stole je kniha o slovenskej literatur.", "correct": "Na stole je kniha o slovenskej literatúre."},
{"incorrect": "Ucim sa po slovensky kazdy den.", "correct": "Učím sa po slovensky každý deň."},
{"incorrect": "Vcera som videl nadherny zapad slnka.", "correct": "Včera som videl nádherný západ slnka."},
{"incorrect": "Moje oblubene mesto je Bratislava.", "correct": "Moje obľúbené mesto je Bratislava."},
{"incorrect": "Dnes sme mali skvelu prednasku o umeni.", "correct": "Dnes sme mali skvelú prednášku o umení."},
{"incorrect": "Chcem sa naucit viac o slovenskej historii.", "correct": "Chcem sa naučiť viac o slovenskej histórii."},
{"incorrect": "Slovensko je krasna krajina s bohatou kulturou.", "correct": "Slovensko je krásna krajina s bohatou kultúrou."},
{"incorrect": "Zajtra planujeme ist na turu do hor.", "correct": "Zajtra plánujeme ísť na túru do hôr."},
{"incorrect": "Moje oblubene miesto na relax je pri jazere.", "correct": "Moje obľúbené miesto na relax je pri jazere."},
{"incorrect": "Rano som si dal kavu s mliekom.", "correct": "Ráno som si dal kávu s mliekom."},
{"incorrect": "Na dovolenke sme navstivili historicke pamiatky.", "correct": "Na dovolenke sme navštívili historické pamiatky."},
{"incorrect": "Vcera sme isli na vylet do lesa.", "correct": "Včera sme išli na výlet do lesa."},
{"incorrect": "V praci mame velmi dobry kolektiv.", "correct": "V práci máme veľmi dobrý kolektív."},
{"incorrect": "Na obed sme mali typicke slovenske jedlo.", "correct": "Na obed sme mali typické slovenské jedlo."},
{"incorrect": "Dnes vecer pojdeme na koncert do mesta.", "correct": "Dnes večer pôjdeme na koncert do mesta."},
{"incorrect": "Mam rad slovenske ludove piesne.", "correct": "Mám rád slovenské ľudové piesne."}
2024-10-29 13:08:43 +00:00
]
2024-11-11 22:51:16 +00:00
2024-10-29 13:08:43 +00:00
# Списки для хранения истинных и предсказанных значений
references = []
predictions = []
# 4. Генерация предсказаний для тестового набора
for item in test_data:
incorrect_sentence = item['incorrect']
correct_sentence_reference = item['correct']
# Генерация предсказания
prediction = generate_correction(incorrect_sentence) # Вызов функции generate_correction
references.append(correct_sentence_reference)
predictions.append(prediction)
# 5. Оценка метрик
# WER (Word Error Rate)
wer = jiwer.wer(references, predictions)
print(f"WER: {wer}")
# CER (Character Error Rate)
cer = jiwer.cer(references, predictions)
print(f"CER: {cer}")
# SER (Sentence Error Rate)
def calculate_ser(references, predictions):
errors = 0
for ref, pred in zip(references, predictions):
if ref != pred:
errors += 1
ser = errors / len(references)
return ser
ser = calculate_ser(references, predictions)
print(f"SER: {ser}")
# BLEU (Bilingual Evaluation Understudy Score)
bleu = sacrebleu.corpus_bleu(predictions, [references])
print(f"BLEU: {bleu.score}")