Оценка релевантности в Manticore : часть II

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

Знание позиций слов в поле важно и может обеспечить лучшую релевантность. Позиции позволяют использовать широкий диапазон текстовых операторов, которые могут выполнять сопоставления либо по позиции слова относительно поля, либо путем вычисления расстояния между найденными ключевыми словами в пределах поля или по сравнению с вводимым запросом. Одним из самых часто используемых операторов, основанных на позициях, является оператор фразы - "A B". Сопоставления фраз являются ограничительными, так как они требуют, чтобы ключевые слова совпадали так, как указано в запросе. Это означает, что ключевые слова должны быть смежными и в том же порядке, что и в запросе.

Зная позицию слова, мы можем выполнять сопоставления, чтобы выяснить, есть ли поля, начинающиеся или заканчивающиеся на определенные слова, используя операторы начала (^) и конца($) операторы . Поиск в пределах поля также может быть ограничен, чтобы предоставить совпадение только в том случае, если слово найдено среди первых N слов поля. Это можно достичь, указав лимит после имени поля оператора - @myfield [10] word. Мы также можем убедиться, что наши вводимые слова находятся в определенном порядке, используя оператор порядка - word1 << word2 << word3, или если вводимые слова находятся в поле на заданном расстоянии, используя оператор близости: "word1 word2"~10.

Совпадение близости позволяет иметь не более N слов между совпадающими ключевыми словами в поле. Например, "A B C"~4 совпадает с "A D E B F C", но не совпадает с "A D E B F G C".

Для менее ограничительной близости можно использовать оператор NEAR. В отличие от оператора близости, который работает с набором ключевых слов, NEAR работает с двумя операндами, которые могут быть словами или другими подвыражениями. Например, мы можем сделать "A B" NEAR/2 C - совпадение действительно, если между фразой "A B" и словом C находится максимум 2 слова. Аналогично существует оператор NOTNEAR, который совпадает только тогда, когда между операндами (словами или подвыражениями) находится минимальное количество слов.

Несколько метрик релевантности используют позиции слов для вычисления расстояния между запросом и документом. LCS (Самая длинная общая подпоследовательность) дает длину максимального точного совпадения между документом и запросом. Это означает, что мы пытаемся выяснить, есть ли у нас подпоследовательности вводимого запроса в наших документах. Максимальное значение LCS равно количеству слов в запросе, если у нас есть точное его совпадение. Подпоследовательности будут давать меньшие значения LCS в зависимости от их длины, а наименьшее значение - 1 - это когда слова найдены, но не формируют никакой подпоследовательность больше 1 слова. Одно из того, что нужно учитывать, это то, что подпоследовательность не обязательно должна формироваться смежными совпавшими словами. Например, если у нас есть A B C на входе, а в документе мы находим A D C, эта подпоследовательность получит балл 2, потому что A и C найдены в порядке и на тех же позициях, что и в запросе:

mysql> SELECT *,WEIGHT() FROM testrt WHERE MATCH('hello world program') OPTION ranker=expr('top(lcs)');
+------+--------------------------+----------------------------+----------+
| id   | title                    | content                    | weight() |
+------+--------------------------+----------------------------+----------+
|    6 | hello world program      | just some content          |        3 |
|    4 | hello test program       | just some world content    |        2 |
|    5 | hello test world program | just some content          |        2 |
|    9 | hello world              | just program world content |        2 |
|    7 | hello test world         | just program some content  |        1 |
|    8 | test program hello       | just some world content    |        1 |
+------+--------------------------+----------------------------+----------+
6 rows in set (0.00 sec)

Документ 4 имеет LCS по заголовку со значением 2, потому что наш запрос - hello world program, а подпоследовательность - hello test program - даже если у нас есть слово, которого нет в списке совпадений, слова hello и program находятся на своих позициях (1 и 3) и между.

Документ 7 с hello test world, хотя он имеет 2 из слов (hello и world) в порядке, их позиция - 1 и 3, в то время как в запросе позиции - 1 и 2. Поскольку позиции не совпадают, мы не можем говорить о 2 совпавших словах, чтобы сформировать подпоследовательность.

Более ограничительная версия LCS - это LCCS (Самая длинная общая смежная подпоследовательность). LCCS оценивает только подпоследовательности, сформированные смежными словами. Чтобы проиллюстрировать разницу, давайте возьмем предыдущий пример, но теперь с lccs:

mysql> select *,weight() from testrt where match('hello world program') option ranker=expr('top(lccs)');
+------+--------------------------+----------------------------+----------+
| id   | title                    | content                    | weight() |
+------+--------------------------+----------------------------+----------+
|    6 | hello  world program     | just some content          |        3 |
|    5 | hello test world program | just some content          |        2 |
|    9 | hello world              | just program world content |        2 |
|    4 | hello test program       | just some world content    |        1 |
|    7 | hello test world         | just program some content  |        1 |
|    8 | test program hello       | just some world content    |        1 |
+------+--------------------------+----------------------------+----------+
6 rows in set (0.00 sec)

Теперь документ 4, который имел LCS=2, имеет LCCS=1, так как, хотя у него есть подпоследовательность и слова находятся на тех же позициях, слова не смежные.
Оба LCS и LCCS считают каждое ключевое слово как 1 в формуле, не учитывая никакой информации о важности (насколько редкое или общее) слова. Вариация LCCS под названием WLCCS или взвешенная наибольшая общая непрерывная подпоследовательность может суммировать IDF ключевых слов вместо простого подсчета. В отличие от LCS и LCCS, WLCCS принимает вещественные значения, так как IDF выражаются как вещественные числа, и вывод зависит от самих данных (так как IDF является мерой относительно текущего индекса). WLCCS даст лучшие значения подпоследовательностям, которые включают редкие слова, и может оценить документ выше, чем в случае, если бы использовались lcs или lccs, которые набрали бы меньший балл.

Мы ранее говорили об операторе, который может совпадать только когда ключевые слова начинаются с поля. Позиция первого вхождения также может быть использована в вычислении релевантности, так как это означает, что ключевое слово имеет большее значение для этого поля, если оно появляется раньше в поле или, что еще лучше, в начале него. min_hit_pos определяет позицию первого совпавшего ключевого слова. В выражениях рейтинга мы можем добавить проверку для min_hit_pos==1, чтобы проверить, происходит ли первое совпавшее ключевое слово в начале полей.

Установить Manticore Search

Установить Manticore Search