Сходство документов в производственной среде - PullRequest
0 голосов
/ 10 мая 2018

У нас есть n документов. После отправки пользователем нового документа наша цель - сообщить ему о возможном дублировании существующего документа (точно так же, как stackoverflow предполагает, что у вопросов уже может быть ответ).

В нашей системе новый документ загружается каждую минуту и ​​в основном по той же теме (где больше шансов на дублирование).

Наша текущая реализация включает в себя модель gensim doc2vec, обученную на документах (помеченных уникальными идентификаторами документов). Мы выводим вектор для нового документа и находим с ним большинство_схожих документов (идентификаторов). Причина выбора модели doc2vec заключается в том, что мы хотели воспользоваться семантикой для улучшения результатов. Насколько нам известно, он не поддерживает онлайн-обучение, поэтому нам, возможно, придется запланировать cron или что-то, что периодически обновляет модель. Но составление расписаний cron будет невыгодным, так как документы приходят в пакетном режиме. Пользователь может загружать дубликаты, пока модель еще не обучена новым данным. Также, учитывая огромное количество данных, время обучения будет выше.

Так что я хотел бы знать, как такие случаи обрабатываются в крупных компаниях. Есть ли лучшая альтернатива? или лучший алгоритм для такой проблемы?

1 Ответ

0 голосов
/ 10 мая 2018

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

В зависимости от того, насколько пространство документа меняется со временем, переподготовка может оказаться незначительной. (Одна хорошая модель, построенная на большой исторической записи, может пригодиться для неопределенного вывода новых векторов.)

Обратите внимание, что настройка вывода для использования большего числа steps (особенно для коротких документов) или более низкого начального значения alpha (больше похожего на значение по умолчанию для обучения 0,025) может дать лучшие результаты.

Если имеются словосочетания, существует также вычисление сходства документов в «Word Mover's Distance» (WMD), которое может быть лучше при выявлении близких дубликатов. Обратите внимание, однако, что это может быть довольно дорого, чтобы рассчитать - вы можете захотеть сделать это только против подмножества вероятных кандидатов, или вам придется добавить много параллельных процессоров, чтобы сделать это навалом. Есть еще одна новая метрика расстояния, называемая «сходство мягкого косинуса» (доступная в недавнем обзоре), которая находится где-то между простым косинусоподобием вектор-вектор и полным ОМУ по своей сложности, что, возможно, стоит попробовать.

В той степени, в которой словарь не расширился, вы можете загрузить старую модель Doc2Vec и продолжить ее до train() - и, исходя из уже работающей модели, вы сможете получить аналогичные результаты с меньшим количеством проходов. Но обратите внимание: в настоящее время он не поддерживает изучение каких-либо новых слов, и самая безопасная практика - переобучаться с использованием чередования всех известных примеров. (Если вы будете обучаться только на новых примерах, модель может потерять сбалансированное понимание старых документов, которые не представлены повторно.)

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

...