Как правило, вы стремитесь к векторизации документов (например, через Doc2Vec
), чтобы получить векторы, в которых сходства между векторами являются полезной непрерывной мерой подобия. (Чаще всего это косинусоподобие, но в некоторых случаях евклидово расстояние также стоит попробовать.)
Если векторы, выходящие из стадии Doc2Vec
, еще не демонстрируют это, первое, что нужно сделать, это отладить и оптимизировать этот процесс. Это может включать:
- перепроверяю все, включая вывод процесса в журнал, на наличие ошибок
- настройка предварительной обработки документов, чтобы, возможно, обеспечить сохранение существенных функций документа и исключить шум
- настройка
Doc2Vec
мета-параметров и режимов, чтобы гарантировать, что результирующие векторы чувствительны к видам сходства, которые важны для ваших конечных целей.
Было бы сложно сказать больше об улучшении этого шага без дополнительной информации о размере и характере ваших данных, Doc2Vec
вариантах / коде и конечных целях.
Как вы решаете, являются ли два документа "достаточно похожими" или нет? Сколько таких оценочных данных вам нужно, чтобы оценить различные модели Doc2Vec
повторяющимся, количественным способом. (Возможность такого автоматического подсчета очков позволит вам протестировать гораздо больше Doc2Vec
перестановок.) Существуют ли примеры пар документов, в которых простое косинусоподобие документа-документа работает хорошо или не работает?
Я вижу два красных флажка в слове, которое вы выбрали до сих пор:
- «не удалось достичь идеальных результатов» - получение «идеальных» результатов - нереальная цель. Вы хотите найти что-то близкое к уровню техники, учитывая ресурсы и терпимость к сложности вашего проекта
- «300 функций на документ» -
Doc2Vec
на самом деле не находит «300 функций», которые являются независимыми. Это единственный 300-мерный «плотный» «встроенный» вектор. Каждое направление - не только 300 осей - может иметь смысл. Таким образом, даже если определенные «направления» более значимы для ваших нужд, они вряд ли будут полностью коррелированы с осями точных размеров.
Возможно, классификатор по разности (v1 - v2)
или (v1 || v2)
может помочь уточнить решение "достаточно похожее или нет", но вам понадобится много обучающих данных и, возможно, очень сложный классификатор.