Код: Выделить всё
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 = {}
Проблема в том, что я получаю 0,00 % для токенизаторов всех моделей, которые я выбрал (GPT2, LLaMa, XLM-R), за исключением BERT (точнее, без регистра в базе bert) — это 0,967623%.
Это работает, когда я использую другой алгоритм — тот, который разбивает каждый символ слова на персонаж. Тогда я получаю 0,15%-0,20%, что нормально, поскольку наборы данных довольно малы (1000 предложений на один язык), поэтому, если бы они были больше, OOV был бы ближе к 0% (я думаю, поправьте меня, если я ошибаюсь).
Да, я знаю, что метрика OOV обычно используется для сравнения/анализа моделей, а не для токенизаторов, но, тем не менее, я бы хотел проверить токены UNK. в моих наборах данных (есть предложения на английском, японском и венгерском языках).
Я думаю, что оно не должно быть 0,00% и, возможно, у этих токенизаторов есть другой способ работы с неизвестными токенами. Любые советы будут полезны, тем более, что я продолжаю находить много статей о моделях и их анализе, но не о самих токенизаторах.
Подробнее здесь: https://stackoverflow.com/questions/798 ... t-shouldnt
Мобильная версия