Релевантность поиска — это показатель того, насколько тесно документ связан с запросом. Релевантность может определяться самыми разными способами: от простой двоичной релевантности до алгоритма взвешенной релевантности, такого как TF-IDF , который присваивает документам оценку релевантности. Она определяет, насколько актуальным и полезным является документ для удовлетворения потребностей пользователя.
Оценка релевантности — это числовое значение, присвоенное документу, которое указывает, насколько релевантный документ соответствует данному запросу . Оценки релевантности используются для упорядочивания результатов в поисковой выдаче и могут рассчитываться с помощью широкого спектра различных моделей релевантности. Оценки релевантности отличаются от более элементарных моделей релевантности, таких как бинарная релевантность, которая просто определяет, является ли документ релевантным для запроса, без присвоения документу какой-либо оценки.
При поиске в поисковой системе пользователь вводит запрос, который может состоять из одного или нескольких ключевых слов или фраз. Задача поисковой системы – найти и предоставить наиболее релевантные документы, которые соответствуют запросу пользователя.
Релевантность — это одна из множества метрик, используемых в функции ранжирования, но одна из важнейших, зависящих от запроса, которые определяют, какие страницы входят в эталонный корпус.
Как поисковая система определяет релевантность
Поисковая система – представляет собой математическую среду, поэтому любая качественная характеристика должна быть определена с помощью количественного анализа. Это касается и расчёта релевантности как сложной многомерной метрики.
Любая поисковая система работает на модели векторного пространства. И запрос, и документы из списка поисковой выдачи представляются в виде векторов в многомерном пространстве. Векторы документов, наиболее близких к вектору запроса, рассматриваются как релевантные. Это чисто математическая операция, в которой мерой релевантности считается косинусное сходство.
Косинусное сходство измеряет косинус угла между двумя векторами в диапазоне от -1 до 1. -1 означает диаметральную противоположность. Ноль – отсутствие сходства. Результат 1 означает идентичность векторов.
На практике это означает, что с точки зрения поискового алгоритма значение имеют только количественные показатели, а не качественные. Иными словами, качественные метрики вторичны по отношению к количественным: экспертный статус автора, объём контента, дизайн оформления не определяют соответствие документа запросу.
Релевантность определяется функцией расстояния между эмбеддингами (вложениями). Для вычисления используются несколько способов:
Косинусное сходство
Евклидово расстояние
Скалярное произведение
С помощью сравнения эмбеддингов ключевых слов и эмбеддингов конкретных документов можно определить релевантность страниц заданным ключевым словам. Для этого можно сопоставлять анализируемый сайт или документ с некоторым эталонным сайтом или документом.
Этот же инструментарий используется для оценки релевантности ссылок: если связь между двумя документами низка, то и ссылка имеет малую ценность. Благодаря такому подходу можно автоматически определять страницы-доноры и страницы-реципиенты – вне зависимости от объёма сайта. На базе этого же подходя можно устанавливать постоянные перенаправления (301 редиректы) при переезде сайта на другой домен.
Пример вычисление косинусного сходства средствами Python
В этой программе используются косинусное подобие и модуль инструментария nltk. Для выполнения этой программы в вашей системе должен быть установлен nltk.
import nltk
# Вычисление сходства двух фраз
# с использованием косинусного сходства.
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
# X = input("Первая фраза: ").lower()
# Y = input("Вторая фраза: ").lower()
X ="Кошка прыгнула на пол"
Y ="Кошка лежит на ковре"
# tokenization
X_list = word_tokenize(X)
Y_list = word_tokenize(Y)
# sw contains the list of stopwords
sw = stopwords.words('russian')
l1 =[];l2 =[]
# remove stop words from the string
X_set = {w for w in X_list if not w in sw}
Y_set = {w for w in Y_list if not w in sw}
# form a set containing keywords of both strings
rvector = X_set.union(Y_set)
for w in rvector:
if w in X_set: l1.append(1) # create a vector
else: l1.append(0)
if w in Y_set: l2.append(1)
else: l2.append(0)
c = 0
# cosine formula
for i in range(len(rvector)):
c+= l1[i]*l2[i]
cosine = c / float((sum(l1)*sum(l2))**0.5)
print("Сходство: ", cosine)
Результат из примера: Сходство: 0.3333333333333333
Пример сопоставления посадочных страниц поисковому запросу
На базе косинусной близости можно выявить похожие страницы, соответствующие одному и тому же запросу в большей или меньшей степени. Для этого вычисляются эмбеддинги страниц и сопоставляются с эмбеддингами запросов. Это можно использовать для устранения проблем с каннибализацией запросов, семантическим дублированием, для определения схем внутренней перелинковки и т.п.