Семантический поиск и квантование
Автор: Дмитрий Малыхин (i@dmalyhin.ru).
Лексический поиск
Лексический поиск использует строковые поля произведения: название, авторство, серия, основная идея, описание, концепты и дескрипторы. Это отдельный механизм и он не должен маскироваться под семантический.
Семантический поиск
Пользовательский запрос кодируется в том же векторном пространстве, что и индекс произведений. Для произведения w итоговая оценка запроса вычисляется по четырём содержательным каналам:
score_query(q,w) =
0.40·cos(q, main_idea(w))
+ 0.25·cos(q, thesis(w))
+ 0.20·cos(q, subject(w))
+ 0.15·cos(q, description(w))
Содержательный шлюз запроса:
gate_query(q,w) = max(
cos(q, main_idea(w)),
cos(q, thesis(w)),
cos(q, subject(w))
)
Результат допускается только при одновременном прохождении порога итоговой оценки и порога содержательного шлюза. После этого применяются лимит результатов и стабильная сортировка.
«Похожие на произведение»
Выбранное произведение сравнивается с корпусом по заранее рассчитанному ролевому профилю. Может применяться исключение той же серии.
Квантование поискового индекса
Плотный нормализованный вектор E переводится в целочисленное представление:
Q(E_i) = clip(round(127·E_i), -127, 127)
Для каждого квантизованного вектора сохраняется его норма, а приближённый косинус вычисляется как:
cos_Q(a,b) = (Qa · Qb) / (||Qa|| · ||Qb||)
Квантование является транспортной оптимизацией публикуемого поискового представления и не меняет каноническое знание.
Проверка качества квантования
Контрольный набор должен сравнивать:
- косинус до и после квантования;
- порядок первых
kрезультатов; - максимальную и среднюю ошибку;
- прохождение содержательных шлюзов.