Получить наиболее частые контексты между двумя словами в word2vec - PullRequest
0 голосов
/ 10 июня 2018

Я уже построил свою собственную модель Skip-Gram, используя gensim word2vec.Я знаю, что могу получить оценку сходства между двумя словами, например model.wv.similarity('car', 'truck') -> 0.75.Теперь я хочу знать, почему они такие «похожи».

Поскольку Skip-Gram был обучен контекстным словам, я предполагаю, что есть способ получить наиболее частые контекстные слова, разделяемые между carи truck.Другой пример: если у меня есть следующие предложения, я хотел бы получить слово slow как «наиболее часто встречающийся контекст»:

  • the car is slow
  • the truck is slow
  • the car is red

Обратите внимание, что red не отображается с truck, поэтому его не следует возвращать как «наиболее частый контекст».

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

С помощью gensim вы можете получить N ближайших слов к данному вложению.Почему бы вам не попытаться получить средний вектор "car" и "truck" ([v (car) + v (truck)] / 2), а затем запросить модель на ближайшие слова этого среднего вектора?

0 голосов
/ 12 июня 2018

Модель gensim Word2Vec не хранит весь текст или статистику совпадений.Акт обучения, по сути, заставляет модель слишком маленькую, чтобы помнить все такие совместные события, чтобы все еще выполнять настолько хорошо, насколько это возможно при выполнении предсказаний соседних текстов.

Итак, нет прямого способа спросить его «учитывая N близких слов, какое слово наиболее распространено в контексте».Кроме того, целью обучения является создание векторов слов, которые оказываются полезными для других целей, а не для создания лучшего предиктора слов поблизости.Таким образом, внутренние предсказания модели Word2Vec редко доступны через интерфейсный метод - например, оригинальный код word2vec.c от Google не предоставил интерфейс для этого.

Существует новый экспериментальный метод predict_output_word() в gensim, который в некоторой степени имитирует предсказание модели по некоторому количеству контекстных слов.Однако он не совсем взвешивает контекстные слова так же, как во время обучения, и не работает во всех модельных режимах.Тем не менее, он может иметь полезные результаты, аналогичные вашей первоначальной цели, поэтому проверьте это:

https://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec.predict_output_word

(Если вам действительно нужен точный отчет о том, какие слова чаще всего встречаются в Wместа для N других слов в вашем корпусе, вам придется использовать другой код, отличный от Word2Vec, для создания необходимых таблиц поиска совпадений или повторно сканировать корпус для каждого запроса.)

...