akutuzov / webvectors

Web-ify your word2vec: framework to serve distributional semantic models online
http://vectors.nlpl.eu/explore/embeddings/
GNU General Public License v3.0
197 stars 48 forks source link

Не находит похожие слова #21

Closed symbios-zi closed 6 years ago

symbios-zi commented 6 years ago

Здравствуйте, пытаюсь использовать ваши модели в связке gensim,

from gensim.models import KeyedVectors

w2v_fpath = "news_upos_cbow_600_2_2018.vec.gz"

w2v = KeyedVectors.load_word2vec_format(w2v_fpath, binary=False, unicode_errors='ignore')
w2v.init_sims(replace=True)

for word, score in w2v.most_similar(positive=["депутат"], topn=5):
    print(word, score)`

все достаточно просто, на на выходе я получаю ошибку

Traceback (most recent call last): File "/Users/avorontsov/projects/python/gensim/main.py", line 8, in <module> for word, score in w2v.most_similar(positive=["депутат"], topn=5): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gensim/models/keyedvectors.py", line 531, in most_similar mean.append(weight * self.word_vec(word, use_norm=True)) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gensim/models/keyedvectors.py", line 452, in word_vec raise KeyError("word '%s' not in vocabulary" % word) KeyError: "word 'депутат' not in vocabulary"

но если я меняю словарь на один из этих http://panchenko.me/data/dsl-backup/w2v-ru/

то начинает находить. Что я делаю неправильно?

akutuzov commented 6 years ago

Как указано в разделе о предобработке корпусов, в наших моделях слова снабжены частеречными тэгами. То есть, должно быть не "депутат", а "депутат_NOUN".

symbios-zi commented 6 years ago

@akutuzov спасибо большое, у меня получилось. Еще один вопрос, как можно подбирать синонимы учитывая падеж искомого слова? Пример: для слова "автомобилю" найти синонимы в том же падеже: "транспорту", "машине"?

как я понимал все слова в модели приведены в именительный падеж? И существует ли такая возможность в принципе?

symbios-zi commented 6 years ago

Решил что я могу анализировать слово, приводить его в нормальную форму, а потом обратно. Нашел для этого библиотеку pymorphy2

akutuzov commented 6 years ago

@symbios-zi Да, в моделях на RusVectores все слова лемматизированы, поэтому словоизменительных форм там быть не должно (разве что по ошибке). Это семантические, а не морфосинтаксические модели. Для того, чтобы привести лемму в ту или иную словообразовательную форму, есть много хороших библиотек.