Code: Select all
def compute_oov_rate_subword(tokenizer, sentences):
total_words = 0
oov_words = 0
for s in sentences:
words = s.split()
for word in words:
total_words += 1
word_tokens = tokenizer.tokenize(word)
if tokenizer.unk_token in word_tokens:
oov_words += 1
return oov_words / total_words if total_words \> 0 else 0.0
subword_oov_results = {}
Das Problem ist, dass ich 0,00 % für alle von mir ausgewählten Modell-Tokenizer erhalte (GPT2, LLaMa, XLM-R), außer BERT (bert-base-uncased um genau zu sein) – es sind 0,967623 %.
Es funktioniert, wenn ich meinen anderen Algorithmus verwende – den, der jedes Wort zeichenweise aufteilt Charakter. Ich erhalte dann 0,15 %–0,20 %, was in Ordnung ist, da die Datensätze recht klein sind (1000 Sätze pro Sprache). Wenn sie also größer wären, würde der OOV näher bei 0 % liegen (ich denke, korrigieren Sie mich, wenn ich falsch liege).
Ja, ich weiß, dass die OOV-Metrik normalerweise zum Vergleichen/Analysen von Modellen verwendet wird und nicht für die Tokenisierer, aber ich würde trotzdem gerne nach den UNK-Tokens suchen meine Datensätze (es gibt Sätze auf Englisch, Japanisch und Humgarisch).
Ich denke, dass es nicht 0,00 % sein sollte und vielleicht haben diese Tokenizer eine andere Möglichkeit, mit unbekannten Token zu arbeiten. Alle Tipps werden hilfreich sein, insbesondere, dass ich immer wieder viele Artikel über Modelle und ihre Analyse finde, aber nicht über die Tokenizer selbst.
Mobile version