Gensim most_simil () с векторами слов Fasttext возвращает бесполезные / бессмысленные слова - PullRequest
0 голосов
/ 26 апреля 2019

Я использую Gensim с векторами Fasttext Word для возврата похожих слов.

Это мой код:

import gensim

model = gensim.models.KeyedVectors.load_word2vec_format('cc.it.300.vec')

words = model.most_similar(positive=['sole'],topn=10)

print(words)

Это вернет:

[('sole.', 0.6860659122467041), ('sole.Ma', 0.6750558614730835), ('sole.Il', 0.6727924942970276), ('sole.E', 0.6680260896682739), ('sole.A', 0.6419174075126648), ('sole.È', 0.6401025652885437), ('splende', 0.6336565613746643), ('sole.La', 0.6049465537071228), ('sole.I', 0.5922051668167114), ('sole.Un', 0.5904430150985718)]

Проблема в том, что «sole» («солнце», на английском языке) возвращает серию слов с точкой (например, sole., Sole.Ma, ecc ...).В чем проблема?Почему большинство_подобных возвращает это бессмысленное слово?

РЕДАКТИРОВАТЬ

Я пытался с английское слово vector , и слово "солнце" возвращает это:

[('sunlight', 0.6970556974411011), ('sunshine', 0.6911839246749878), ('sun.', 0.6835992336273193), ('sun-', 0.6780728101730347), ('suns', 0.6730450391769409), ('moon', 0.6499731540679932), ('solar', 0.6437565088272095), ('rays', 0.6423950791358948), ('shade', 0.6366724371910095), ('sunrays', 0.6306195259094238)] 

Невозможно воспроизвести результаты, как relatedwords.org?

1 Ответ

1 голос
/ 27 апреля 2019

Возможно, главный вопрос заключается в следующем: почему модель Facebook FastText cc.it.300.vec содержит так много бессмысленных слов?(Я не заметил, что раньше - есть ли шанс, что вы скачали какую-то особенную модель, которая украсила слова дополнительной аналитической разметкой?)

Чтобы получить уникальные преимущества FastText - включая способность синтезировать правдоподобные(лучше, чем ничего) векторы для слов из словарного запаса - вы можете не захотеть использовать общий load_word2vec_format() для простого текста .vec файл, а скорее метод загрузки, специфичный для Facebook-FastText, для .bin файл.См .:

https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors

(я не уверен, что это поможет с этими результатами, но если вы решите использовать FastText, вам может быть интересно использовать его «полностью».)

Наконец, учитывая источник этого тренинга - общий текст из открытой сети, который может содержать множество опечаток / мусор - это могут быть легитимные словесные токены, по существу опечатки sole, которые появляютсядостаточно часто в обучающих данных, чтобы получить слова-векторы.(И поскольку они действительно являются опечатками-синонимами для «единственного», они не обязательно являются плохими результатами для всех целей, просто для вашей желаемой цели - видеть только слова «реального мира».)

Вы можете найтиполезно попытаться использовать аргумент restrict_vocab для most_similar(), чтобы получать результаты только от ведущей (наиболее частой) части всех известных слов-векторов.Например, чтобы получить результаты только из первых 50000 слов:

words = model.most_similar(positive=['sole'], topn=10, restrict_vocab=50000)

Выбор правильного значения для restrict_vocab может помочь на практике пропустить длинные слова "мусор", оставляя при этомреальные / общие похожие слова, которые вы ищете.

...