Обнаружение сходства в строках

Если я что-то ищу в Новостях Google, я могу нажать кнопку "Подробно изучить" и получить одну и ту же новостную статью из нескольких источников. Какой тип алгоритма используется для сравнения текстовых статей и определения того, что он относится к одной и той же вещи? Я видел Вопрос здесь:

Есть ли алгоритм, который говорит о семантическом сходстве двух фраз?

Однако, используя методы, упомянутые там, я чувствую, что если бы были статьи, которые были похожи по природе, но касались разных историй, они были бы сгруппированы, используя методы, упомянутые там. Существует ли стандартный способ обнаружения строк, которые примерно одинаковы, и их группировки, при этом строки, которые просто похожи, разделены? Например. Если я буду искать "границу Соединенных Штатов", у меня могут появиться истории о проблемах на границе с США, но что помешает их объединению? Все, о чем я могу думать, - это дата публикации, но что, если многие истории были опубликованы очень близко друг к другу?

1 ответ

Решение

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

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

Простейшая языковая модель для униграмм (слов): P(word|d) = #occurances(w,d)/|d| (количество раз, когда слово появилось в документе, относительно общей длины документа). Методы сглаживания часто используются для предотвращения появления слов с нулевой вероятностью.

После того, как у вас есть модель языка, все, что вам нужно сделать, это сравнить две модели. Один из способов сделать это - косинусное сходство или сходство Дженсена-Шеннона.
Это дает вам абсолютную оценку сходства двух статей. Это можно сочетать со многими другими методами, например с предложением сравнить даты.

Другие вопросы по тегам