Gensim word2vec находит ближайшие слова по заданному слову

Как я могу найти N-ближайшие слова по заданному слову, используя реализацию gensim word2vec. Какой API для этого? Я имею в виду пропуск граммов здесь. Может я что-то пропустил, я читал все о поиске похожих слов, поиске лишнего и так далее...

В DL4j этот метод называется wordsNearest(String A, int n) which gives me the n-nearest words to A. Что эквивалентно этому в Gensim?


person Yavar    schedule 01.06.2015    source источник
comment
наиболее похожие   -  person Radim    schedule 02.06.2015
comment
Спасибо Радим. Приятно получить ответ от самого создателя. Ну, я имел в виду, что вход в модель — это wi, а выход может быть wi-1, wi-2, wi+1, wi+2. Таким образом, задача здесь состоит в том, чтобы предсказать контекст с учетом слова, т. е. модели Skip Gram, поэтому я просто хотел узнать, какой API может дать мне wi-1, wi-2, wi+1, wi+2 с учетом wi.   -  person Yavar    schedule 02.06.2015
comment
@Radim: я могу ошибаться. Например, учитывая слово землетрясение, most_similar даст мне шкалу Рихтера, тремор и т. д., однако мне нужно что-то вроде прогнозирования вероятности контекста, чтобы я мог получить контекст, например, Япония была эпицентром землетрясения, чтобы API мог дать мне wi-2 = Япония wi-1=была и wi+1=эпицентр. Теперь снова может быть несколько контекстов и я просто получу вероятности появления wi-1, wi-2 и т.д.   -  person Yavar    schedule 02.06.2015


Ответы (2)


Этот вопрос действительно старый, но в любом случае: я до сих пор не совсем уверен, как работают иерархический softmax и отрицательная выборка, но в принципе вы должны иметь возможность взять вектор из входной матрицы, умножить его на векторы в выходной матрице и выбрать наибольшее значение.

w1_vec = model[word] #Get the vector for the word you're interested in.
# Loop over the words in the output matrix and take dot products.
for idx, w2_vec in enumerate(model.syn1neg):
    print(idx, model.index2word[idx], np.exp(np.dot(w1_vec, w2_vec)))

Затем выберите самые высокие значения из вывода. Используйте syn1neg / syn1 в зависимости от отрицательной выборки / иерархического softmax. Я использовал эту технику на нескольких образцах текстов, и результаты были разумными.

person Community    schedule 06.05.2016

Если я правильно понял ваш вопрос, вы можете использовать most_similar< /а>:

model.most_similar(positive=['woman'])
person Kamil Sindi    schedule 02.12.2016