Как мне получить сходство между словом и документом в Генсиме?
Итак, я начал изучать gensim для word2vec и doc2vec, и это работает. Значения сходства на самом деле работают очень хорошо. Однако для эксперимента я хотел оптимизировать алгоритм поиска по ключевым словам, сравнивая одно слово и выясняя, насколько оно похоже на фрагмент текста.
Каков наилучший способ сделать это? Я подумал об усреднении векторов слов всех слов в тексте (возможно, сначала удалите слова заполнения и остановки) и сравнил их со словом поиска? Но это на самом деле просто интуиция, что будет лучшим способом сделать это?
1 ответ
Усреднение всех слов-векторов более длинного текста - один грубый, но несколько эффективный способ получить один вектор для полного текста. Результирующий вектор мог бы тогда быть с пользой сравним с отдельными словами-векторами.
Doc2Vec
режимы, которые обучают векторы слов в том же "пространстве", что и векторы документов - PV-DM (dm=1
) или PV-DBOW, если добавлено обучение слов (dm=0, dbow_words=1
) - можно рассмотреть. Векторы документов, наиболее близкие к одному слову-вектору, могут работать в ваших целях.
Другой метод для вычисления "близости" двух наборов слов-векторов - это "Расстояние для Word Mover" ("ОМП"). Вычислять это дороже, чем те методы, которые сводят текст к одному вектору, потому что в сущности рассматриваются многие возможные способы минимизации затрат для корреляции наборов векторов. Я не уверен, насколько хорошо это работает в вырожденном случае, когда один "текст" представляет собой просто одно слово (или очень короткую фразу), но это может стоить попробовать. (Метод wmd_distance()
в Генсим это предлагает.)
Я также видел упоминание о другом расчете, названном "Сходство мягкого косинуса", который может быть более эффективным, чем ОМУ, но предлагает аналогичные преимущества. Это также теперь доступно в Gensim; Также есть вводное руководство по ноутбуку Jupyter.