Оценка релевантности в 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 (Longest Common Subsequence) дает длину максимального точного совпадения между документом и запросом. Это означает, что мы пытаемся выяснить, есть ли у нас подпоследовательности входного запроса в наших документах. Максимальное значение 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 (Longest Common Contiguous Subsequence). 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 или Weighted Longest Common Contiguous Subsequence, может суммировать IDFs ключевых слов вместо простого подсчета. В отличие от LCS и LCCS, WLCCS принимает вещественные значения, так как IDFs выражаются как вещественные числа, и выходные данные зависят от самих данных (так как IDF является мерой относительно текущего индекса). WLCCS даст лучшие значения для подпоследовательностей, которые включают редкие слова, и может оценить документ выше, чем в противном случае, используя lcs или lccs, он бы оценивался ниже.

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

Самая ранняя позиция также может быть применена к подпоследовательностям. Представьте, что у нас есть несколько документов, которые дают нам подпоследовательности, совпадающие с запросом (частично или полностью), и мы хотим знать, для каких документов подпоследовательности появляются раньше в полях. Мы можем использовать min_best_span_pos для этого, который дает нам первое вхождение лучшей подпоследовательности (вычисленной как LCS) в поле.

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

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