Подход Lucene к поиску нечеткой фразы со скорингом

Мое требование - получить оценку соответствия при поиске по нечеткой фразе. Пример

1) Входные данные - Привет, Сэм, как дела? Спасибо, Смит.

  • Проиндексированный документ - Сэм Смит (в документах всегда указываются имена лиц / организаций, а входными данными будут данные в виде произвольного текста)

В приведенном выше случае и Сэм, и Смит нашли в моих входных данных, но контекстуально оба являются разными людьми. Если бы мои входные данные были бы «Привет, Сэм, Смит», тогда я должен был бы получить соответствующий результат с более высоким баллом (также я ожидаю, что балл ОК для «Привет, Сэм Джон Смит» и так далее).

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

Точный подход,

1) Индексируйте документы как триграммы

2) Поиск входных данных с произвольным текстом с помощью индексов Tri-Gram

3) Соберите все совпадающие документы (пока еще будет много зашумленных данных)

4) Постобработка каждого совпадающего документа и определение положения каждого совпадающего триграммного токена во входных данных произвольного текста и вычисление баллов Левенштейна между возможным токеном (-ами) положения и всем документом.

например - Привет, Сэм, как твои дела? Спасибо, Смит.

Здесь моим совпадением документа будет «Сэм Смит», я хочу посмотреть на каждую три грамма индекса и совпадение его положения во входных данных произвольного текста, например

1) токен «sam» соответствует слову «Sam» 2-й позиции во входных данных

2) токен smi соответствует 8-му слову Smith во входных данных

Позже я напишу логику для вычисления оценки Левенштейна для токена 2, 8 с фактическим согласованным документом (это было бы очень мало, учитывая близость между позициями 2 и 8), но если позиция токенов была 2,3 (или 2,4), я дал бы хороший результат.

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


person Rushik    schedule 06.09.2013    source источник


Ответы (1)


Я делаю подобное нечеткое сопоставление фраз в Lucene с использованием токенизированных последовательностей. Расстояние между маркерами вычисляется с помощью Левенштейна или ЯроВинклера, а затем используется Смит-Ватерман для поиска наилучшего выравнивания последовательностей. Если бы мне пришлось адаптировать этот подход к вашему случаю, проблема была бы в том, что оценка выравнивания не позволяет (напрямую) поддерживать обмен токенами (замену смещенного токена). Единственное, что я мог бы сделать, - это снизить стоимость вставки токенов, которые появляются в источнике, по сравнению с теми, которые этого не делают.

Так что мне нравится подход n-грамм для получения оценок, менее чувствительных к нелокальному переупорядочению. Я предлагаю проверить BLEU, METEOR и ROUGE, которые являются стандартными n-граммовыми метриками для определения схожести предложений с различными подходами к работе с чувствительностью к порядку. Их можно использовать либо с n-граммами на уровне символов, как в вашем предложении, либо с n-граммами на уровне токенов, как это делаю я.

person Jim White    schedule 28.09.2013
comment
Хорошие указатели на блю, метеор и румяна, проверю и вернусь. - person Rushik; 03.10.2013