Как найти похожие слова с помощью FastText?

Я играю с FastText, https://pypi.python.org/pypi/fasttext , что очень похоже на Word2Vec. Поскольку это довольно новая библиотека с небольшим количеством встроенных функций, мне было интересно, как извлечь морфологически похожие слова.

Например: model.similar_word("dog") -> собаки. Но встроенной функции нет.

Если я наберу model["dog"]

Я получаю только вектор, который можно использовать для сравнения сходства косинусов. model.cosine_similarity(model["dog"], model["dogs"]]).

Должен ли я сделать какой-то цикл и выполнить cosine_similarity для всех возможных пар в тексте? На это нужно время...!!!


person Isbister    schedule 13.02.2017    source источник
comment
При запуске fasttext.skipgram('train.txt','model') создается файл .bin и .vec. Используйте эти сгенерированные файлы и следуйте процессу, указанному в принятом ответе.   -  person Prometheus    schedule 11.04.2019
comment
@Prometheus Есть идеи, как сделать что-то подобное на Java?   -  person Ali    schedule 12.11.2019
comment
Неа. Яву никогда не трогал. Однако, к вашему сведению, файлы .bin и .vec взаимно совместимы.   -  person Prometheus    schedule 12.11.2019


Ответы (5)


Используйте Gensim, загрузите обученный fastText файл .vec с моделями load.word2vec и используйте метод most_similiar() для поиска похожих слов!

person Snehal    schedule 15.02.2017
comment
Есть ли у них какой-либо API в fasttext, который позволяет вводить два слова, а затем возвращает их косинусное сходство? Скажите что-то вроде (автомобиль, транспортное средство), а затем вернете что-то вроде 0,8? - person kzs; 20.12.2018

Вы можете установить библиотеку pyfasttext для извлечения наиболее похожих или ближайших слов к определенному слову.

from pyfasttext import FastText
model = FastText('model.bin')
model.nearest_neighbors('dog', k=2000)

Или вы можете получить последнюю разрабатываемую версию fasttext, которую можно установить из репозитория github :

import fasttext
model = fasttext.load_model('model.bin')
model.get_nearest_neighbors('dog', k=100)
person Kalana Geesara    schedule 18.09.2019

Вы должны использовать gensim для загрузки model.vec, а затем получить похожие слова:

m = gensim.models.Word2Vec.load_word2vec_format('model.vec')
m.most_similar(...)
person far-zadeh    schedule 14.02.2017

Вы можете установить и импортировать библиотеку gensim, а затем использовать библиотеку gensim для извлечения наиболее похожих слов из загруженной модели. из FastText.

Использовать это:

import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('model.vec')
similar = model.most_similar(positive=['man'],topn=10)

А по параметру topn вы получаете 10 самых похожих слов.

person Md Rashad Al Hasan Rony    schedule 08.07.2018

Используйте генсим,

from gensim.models import FastText

model = FastText.load(PATH_TO_MODEL)
model.wv.most_similar(positive=['dog'])

Подробнее здесь

person ChiaChong Lau    schedule 03.01.2021