Семантический поиск и квантование

Автор: Дмитрий Малыхин (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 результатов;
  • максимальную и среднюю ошибку;
  • прохождение содержательных шлюзов.