Быстрое текстовое представление для короткой фразы, но не для более длинной фразы, содержащей короткую фразу - PullRequest
1 голос
/ 06 марта 2019

Я использую Gensim для загрузки немецких .bin файлов из Fasttext, чтобы получить векторные представления для словесных слов и фраз вне словарного запаса. Пока все работает нормально, и в целом я достигаю хороших результатов.
Я знаком с KeyError :'all ngrams for word <word> absent from model'. Очевидно, что модель не обеспечивает векторное представление для каждой возможной комбинации ngram.
Но теперь я столкнулся с запутанной (по крайней мере для меня) проблемой.
Я просто приведу небольшой пример:
модель обеспечивает представление для фразы AuM Wert.
Но когда я хочу получить представление для AuM Wert 50 Mio. Eur, я получу KeyError, упомянутый выше. Таким образом, модель, очевидно, имеет представление для более короткой фразы, но не для расширенной.
Он даже возвращает представление для AuM Wert 50 Mio.Eur (я только что убрал пробел между 'Mio' и 'Eur')
Я имею в виду, что утверждение в Error просто неверно, потому что первый пример показывает, что он знает некоторые нграммы. Может кто-нибудь объяснить это мне? Что я здесь не понимаю? Мое понимание нграмм неверно?

Вот код:

from gensim.models.wrappers import FastText
model = FastText.load_fasttext_format('cc.de.300.bin')
model.wv['AuM Wert'] #returns a vector
model.wv['AuM Wert 50 Mio.EUR'] #returns a vector
model.wv['AuM Wert 50 Mio. EUR'] #triggers the error

Заранее спасибо,
Amos

1 Ответ

0 голосов
/ 10 марта 2019

Я не уверен, что вызывает поведение, которое вы видите, хотя у меня есть теория ниже.

Но, обратите внимание, что текущее поведение gensim (через 3.7.1) иногда возвращается KeyError: all ngrams for word <...> absent для слова OOV, не соответствует поведению исходной реализации FastText в Facebook и поэтому считается ошибкой.

Это должно быть исправлено в следующем выпуске.Вы можете прочитать примечание об изменении о новом совместимом поведении .

Итак, в ближайшем будущем с обновленной версией gensim вы никогда не увидите этот `KeyError '.

В то же время факторы, которые могут объяснить ваше наблюдаемое поведение, включают:

  • Передача разделенных пробелом фраз на FastText не характерна.Кроме того, обычные токенизации обучающих текстов будут передавать только лексемы без никакого внутреннего пробела.Таким образом, для типичной модели нет шансов, что такие фразы, содержащие пространство, будут иметь векторы из полных слов.И ни один из их n-граммов символов, содержащих пробелы, также не будет отображаться в n-граммах, замеченных во время обучения.Если в gensim 3.7.1 и более ранних версиях вы вообще получили вектор, это будет связано с тем, что некоторые из n-грамм , а не , содержащих пробелы, были замечены в процессе обучения.(После публикации 3.7.1 вы всегда получите вектор, хотя он может быть составлен из случайных столкновений новых n-граммов слова запроса с n-граммами, изученными в процессе обучения, или просто из случайно инициализированных, но никогда не обученныхвекторы в хеш-таблице n-граммы модели.)
  • N-граммы изучаются с помощью искусственного префикса начала слова и суффикса конца слова, в частности символов < и >.И диапазон размера по умолчанию в n-граммах составляет от 4 до 6 символов.Таким образом, ваша строка 'AuM Wert' будет включать в себя n-граммы '<AuM', 'Wert' и 'ert>'.(Все остальные его n-граммы будут включать символ пробела, и, следовательно, не могут быть в наборе n-граммов, изученных во время обучения слов без пробелов.).Но обратите внимание, что более длинная фраза, в которой вы получите ошибку, будет не включать n-грамм 'ert>', потому что предыдущий конец токена был заменен пробелом.Таким образом, n-граммы более короткой фразы составляют , а не - правильное подмножество n-граммов более крупной фразы - и более крупная фраза может привести к ошибке, в отличие от более короткой.(И ваша более длинная фраза без пробела, которая не является ошибкой, также включает в себя несколько дополнительных n-граммов из 4-6 символов, которые могли содержаться в обучающих данных, которых нет в ошибочной фразе.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...