alterna ai
ALTERNA AI / ГЛАВА 18 · 02

18.2 Сравнение и выбор фрагментов

На предыдущей странице: сначала найдём части документа.

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

Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.

Query и chunks сравниваются в одном поисковом пространстве

Dense retriever кодирует query и documents в vectors и ранжирует similarity; lexical retriever использует термы и статистику коллекции. Cosine удаляет влияние нормы и сравнивает направление. Нулевой vector не имеет cosine similarity и должен дать явную ошибку или отдельную политику, а не молчаливый score0.

cos⁡(q,d)=qTd∥q∥2∥d∥2,rank⁡=argsort⁡d(−cos⁡(q,d)).\operatorname{cos}(q,d)=\frac{q^Td}{\|q\|_2\|d\|_2}, \qquad \operatorname{rank}=\operatorname{argsort}_{d}(-\operatorname{cos}(q,d)).

На небольшом наборе полный перебор точен. Approximate nearest-neighbour index меняет latency/recall trade-off и требует собственного evaluation. Metadata filters, access policy и freshness применяются как часть retrieval contract. F12.

Что показывает модель. Scatterplot лишь проекция: ranking считается в полном vector space. Inspector показывает raw query, filters, scores, tie-break и rejected candidates. Retrieval quality измеряют отдельно, например recall@k на query/relevant pairs, до оценки generator.

Граница применимости. Высокий cosine не означает истинность или entailment. Embedding model может плохо работать с новым доменом, языком или числами. Index знает только загруженную версию коллекции; отсутствие документа в top-k не доказывает отсутствие факта в источниках.

from math import sqrt
query_18b=[1.0,1.0]; docs_18b={'d1':[1.0,0.0],'d2':[1.0,1.0],'d3':[-1.0,0.0]}
def cosine_18b(a_18b,b_18b):
    return sum(x*y for x,y in zip(a_18b,b_18b))/sqrt(sum(x*x for x in a_18b)*sum(y*y for y in b_18b))
ranking_18b=sorted(docs_18b,key=lambda key_18b:(-cosine_18b(query_18b,docs_18b[key_18b]),key_18b))
assert ranking_18b==['d2','d1','d3']

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Источник остаётся внешним свидетельством и может быть устаревшим или ошибочным.

Что действительно увидела модель. Как этот вопрос продолжает полученный результат?

Python-примеры главы 18 Академическая база →