Alterna · учебный материал
18.2 Сравнение и выбор фрагментов
Вычислим близость вопроса и текстов, отсортируем оценки и покажем выбранные источники. Источник не гарантирует истинности.
Что в этом материале
- Query и chunks сравниваются в одном поисковом пространстве
Содержание и основные понятия
На предыдущей странице: сначала найдём части документа.
Вычислим близость вопроса и текстов, отсортируем оценки и покажем выбранные источники. Источник не гарантирует истинности.
Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Query и chunks сравниваются в одном поисковом пространстве
Dense retriever кодирует query и documents в vectors и ранжирует similarity; lexical retriever использует термы и статистику коллекции. Cosine удаляет влияние нормы и сравнивает направление. Нулевой vector не имеет cosine similarity и должен дать явную ошибку или отдельную политику, а не молчаливый score0.
cos
(
q
,
d
)
=
q
T
d
∥
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)).
cos
(
q
,
d
)
=
∥
q
∥
2
∥
d
∥
2
q
T
d
,
rank
=
argsort
d
(
−
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
Академическая база →