Как передать пару векторов в классификатор, чтобы классифицировать похожие / не похожие - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь классифицировать пары векторов документов (Doc2Vec, 300 объектов на документ) как похожие / не похожие. Я пробовал дистанционные сообщения (косинус и т. Д.) С дополнительными функциями, такими как размер документа и т. Д., Но не достиг идеальных результатов, особенно потому, что я подозреваю, что только некоторые из функций имеют значение для моей проблемы.

Каков простой, но эффективный способ подачи двух векторов в классификатор (LogisticRegression, SVM и т. Д.)

  • Я уже протестировал вычитание одного вектора из другого и использую абсолютный результат в качестве вектора признаков: abs(vec1 -vec2), но это было хуже, чем ошибки расстояния
  • Я также попробовал объединение обоих векторов, также с худшими результатами. Я подозреваю, что удвоение измерения увеличит потребность в обучающих образцах, по крайней мере, для некоторых классификаторов?

Существует ли современный способ классификации сходств или отношений между векторами признаков? Или, если есть параллельные методы, какой из них выбрать для какой проблемы / классификатора?

1 Ответ

1 голос
/ 28 марта 2019

Как правило, вы стремитесь к векторизации документов (например, через Doc2Vec), чтобы получить векторы, в которых сходства между векторами являются полезной непрерывной мерой подобия. (Чаще всего это косинусоподобие, но в некоторых случаях евклидово расстояние также стоит попробовать.)

Если векторы, выходящие из стадии Doc2Vec, еще не демонстрируют это, первое, что нужно сделать, это отладить и оптимизировать этот процесс. Это может включать:

  • перепроверяю все, включая вывод процесса в журнал, на наличие ошибок
  • настройка предварительной обработки документов, чтобы, возможно, обеспечить сохранение существенных функций документа и исключить шум
  • настройка Doc2Vec мета-параметров и режимов, чтобы гарантировать, что результирующие векторы чувствительны к видам сходства, которые важны для ваших конечных целей.

Было бы сложно сказать больше об улучшении этого шага без дополнительной информации о размере и характере ваших данных, Doc2Vec вариантах / коде и конечных целях.

Как вы решаете, являются ли два документа "достаточно похожими" или нет? Сколько таких оценочных данных вам нужно, чтобы оценить различные модели Doc2Vec повторяющимся, количественным способом. (Возможность такого автоматического подсчета очков позволит вам протестировать гораздо больше Doc2Vec перестановок.) Существуют ли примеры пар документов, в которых простое косинусоподобие документа-документа работает хорошо или не работает?

Я вижу два красных флажка в слове, которое вы выбрали до сих пор:

  • «не удалось достичь идеальных результатов» - получение «идеальных» результатов - нереальная цель. Вы хотите найти что-то близкое к уровню техники, учитывая ресурсы и терпимость к сложности вашего проекта
  • «300 функций на документ» - Doc2Vec на самом деле не находит «300 функций», которые являются независимыми. Это единственный 300-мерный «плотный» «встроенный» вектор. Каждое направление - не только 300 осей - может иметь смысл. Таким образом, даже если определенные «направления» более значимы для ваших нужд, они вряд ли будут полностью коррелированы с осями точных размеров.

Возможно, классификатор по разности (v1 - v2) или (v1 || v2) может помочь уточнить решение "достаточно похожее или нет", но вам понадобится много обучающих данных и, возможно, очень сложный классификатор.

...