Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

Модели релевантности как предтеча трансформеров в NLP

Статья прослеживает эволюцию моделирования языка от моделей релевантности Лавренко и Крофта в информационном поиске к архитектуре трансформеров в NLP. RM1 предвосхищает механизм внимания, взвешивая контекст на основе релевантности, что легло в основу современных генеративных ИИ-систем. Анализ включает математические параллели, кодовую реализацию и перспективы нейронных расширений.

20 ноября 2025 г.
18 мин
15

Идея о том, что дальновидность достигается благодаря опоре на плечи гигантов, отражает вечную истину научного прогресса. Каждый значимый прорыв опирается на множество предыдущих достижений, пока однажды все не начинает работать идеально. Это особенно заметно в текущей революции в обработке естественного языка (NLP), которую определяет архитектура трансформеров, лежащая в основе большинства современных систем генеративного ИИ.

«Если я видел дальше других, то потому, что стоял на плечах гигантов».

— Исаак Ньютон, письмо Роберту Гуку, 5 февраля 1675 года (по старому стилю; 1676 год по новому стилю)

Статуя сэра Исаака Ньютона в часовне Тринити-колледжа в Кембридже
Рисунок 1: Статуя сэра Исаака Ньютона, Часовня Тринити-колледжа, Кембридж (работа Луи-Франсуа Рубиляка, 1755 год). 📖 Источник: Изображение создано с помощью GPT5.

В этой статье мы выступаем в роли академического детектива, прослеживая развитие моделирования языка.

Модель языка представляет собой систему ИИ, обученную предсказывать и генерировать последовательности слов на основе шаблонов, извлеченных из больших наборов текстовых данных. Она присваивает вероятности последовательностям слов, что позволяет применять ее в задачах распознавания речи, машинного перевода и современных системах генеративного ИИ.

Как и любая научная революция, моделирование языка не появилось внезапно, а развивалось на основе богатого наследия. Здесь мы рассмотрим узкий аспект обширной литературы в этой области. Наше путешествие начнется с ключевой предшествующей технологии — моделей языка на основе релевантности Лавренко и Крофта, которые ознаменовали прорыв в производительности систем информационного поиска в начале 2000-х годов и продолжают влиять на соревнования TREC. Оттуда путь ведет к 2017 году, когда Google опубликовала фундаментальную работу «Внимание — это все, что вам нужно», представив архитектуру трансформеров, которая радикально изменила задачи последовательностного перевода.

Основная связь между этими подходами проста: мощная концепция внимания. Подобно тому, как модели релевантности Лавренко и Крофта оценивают вероятность совместного появления терминов с запросом, механизм внимания в трансформерах вычисляет сходство между запросом и всеми токенами в последовательности, взвешивая вклад каждого токена в контекстуальный смысл запроса.

В обоих случаях механизм внимания функционирует как мягкая вероятностная система взвешивания, обеспечивая этим техникам их базовую выразительную силу.

Оба подхода являются генеративными фреймворками для текста, отличаясь в основном масштабом: RM1 моделирует короткие запросы из документов, трансформеры — полные последовательности.

В последующих разделах мы разберем предысторию моделей релевантности и архитектуры трансформеров, подчеркнув их общие основы и прояснив параллели между ними.

Моделирование релевантности — введение в смесь RM1 Лавренко

Погрузимся в концептуальное сходство между фреймворком моделирования релевантности Лавренко и Крофта в информационном поиске и механизмом внимания трансформера. Эти идеи возникли в разных областях и эпохах, но обладают общим интеллектуальным происхождением. Мы сначала разберем основы моделей релевантности, а затем выделим ключевую связь с последующей архитектурой трансформеров.

Когда Виктор Лавренко и У. Брюс Крофт представили модель релевантности в начале 2000-х, они предложили изящную вероятностную формулировку для преодоления разрыва между запросами и документами. В основе этих моделей лежит простая мысль: предположим, существует скрытое «распределение релевантности» над терминами словаря, характеризующее документы, которые пользователь сочтет подходящими для своего запроса. Задача сводится к оценке этого распределения на основе наблюдаемых данных — запроса пользователя и коллекции документов.

Первая вариация модели релевантности — RM1 (в семействе было еще две модели, которые здесь не детализируются) — достигает этого напрямую, выводя распределение слов, вероятно появляющихся в релевантных документах при заданном запросе, по сути моделируя релевантность как латентную модель языка, стоящую «за» запросами и документами.

Формула оценки вероятности слова w в скрытом распределении релевантности при запросе q через маргинализацию по документам d
Модель RM1 релевантности оценивает вероятность слова w в скрытом распределении релевантности при запросе q. Это достигается маргинализацией по документам d, где вероятность термина P(w|d) взвешивается постериорной вероятностью документа при запросе P(d|q).

с постериорной вероятностью документа d при запросе q, определяемой как:

Формула постериорной вероятности документа d при запросе q с использованием правила Байеса
Постериорная вероятность документа d при запросе q. Она получается с помощью правила Байеса, где P(q|d) — это вероятность запроса под языковой моделью документа, а P(d) — априорная вероятность над документами.

Это классическая униграммная языковая модель с сглаживанием Дирахлетта, предложенная в оригинальной работе Лавренко и Крофта. Для оценки модели релевантности RM1 использует топ-документы из поиска как псевдорелевантную обратную связь (PRF) — предполагается, что наивысшие по баллам документы релевантны. Это избавляет от необходимости в дорогостоящих оценках релевантности, что является ключевым преимуществом формулировки Лавренко.

Геометрическая интерпретация RM1 в трехмерном симплексе вероятностей
Рисунок 2: Геометрическая интуиция RM1. Топ-ранжированные документы изображаются как мультинomialные распределения внутри трехмерного симплекса вероятностей. Гладкая контурная поверхность показывает их оцененную плотность под моделью релевантности. Звездочка соответствует латентному мультинomialному p(w|R), которое RM1 стремится восстановить. 📖 Источник: Изображение создано автором.

Чтобы развить интуицию о работе модели RM1, реализуем ее поэтапно на Python, используя простой тестовый корпус из трех «документов», определенных ниже, с запросом «cat».

import math
from collections import Counter, defaultdict
# -----------------------
# Step 1: Example corpus
# -----------------------
docs = {
    "d1": "the cat sat on the mat",
    "d2": "the dog barked at the cat",
    "d3": "dogs and cats are friends"
}
# Query
query = ["cat"]

Далее — для этой упрощенной ситуации информационного поиска — мы слегка предобработаем коллекцию документов, разделив их на токены, подсчитав частоты токенов в каждом документе и определив словарь:

# -----------------------
# Step 2: Preprocess
# -----------------------
# Tokenize and count
doc_tokens = {d: doc.split() for d, doc in docs.items()}
doc_lengths = {d: len(toks) for d, toks in doc_tokens.items()}
doc_term_counts = {d: Counter(toks) for d, toks in doc_tokens.items()}
# Vocabulary
vocab = set(w for toks in doc_tokens.values() for w in toks)

При выполнении этого кода мы получим следующий результат с четырьмя простыми структурами данных, содержащими информацию, необходимую для вычисления распределения релевантности RM1 для любого запроса.

doc_tokens = {
    'd1': ['the', 'cat', 'sat', 'on', 'the', 'mat'],
    'd2': ['the', 'dog', 'barked', 'at', 'the', 'cat'],
    'd3': ['dogs', 'and', 'cats', 'are', 'friends']
}
doc_lengths = {
    'd1': 6,
    'd2': 6,
    'd3': 5
}
doc_term_counts = {
    'd1': Counter({'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}),
    'd2': Counter({'the': 2, 'dog': 1, 'barked': 1, 'at': 1, 'cat': 1}),
    'd3': Counter({'dogs': 1, 'and': 1, 'cats': 1, 'are': 1, 'friends': 1})
}
vocab = {
    'the', 'cat', 'sat', 'on', 'mat', 'dog', 'barked', 'at', 'dogs', 'and', 'cats', 'are', 'friends'
}

Если взглянуть на уравнение RM1, определенное ранее, его можно разложить на ключевые вероятностные компоненты. P(w|d) определяет вероятностное распределение слов w в документе d. Обычно P(w|d) вычисляется с использованием сглаживания априорным распределением Дирахлетта (Zhai & Lafferty, 2001). Этот априорный подход предотвращает нулевые вероятности для невиданных слов и балансирует доказательства, специфичные для документа, с фоновыми статистиками коллекции. Формула выглядит так:

Формула сглаживания Дирахлетта для языковых моделей документов
Сглаживание априорным распределением Дирахлетта для языковых моделей документов. Оценка P(w|d) интерполирует между относительной частотой слова в документе и его фоновой вероятностью в коллекции, где параметр μ регулирует силу сглаживания.

Эта формула дает мешок слов униграммную модель для каждого документа в корпусе. Кстати, сегодня, с мощными языковыми моделями из Hugging Face, можно заменить эту формулировку, например, на вариант на базе BERT, используя эмбеддинги для оценки распределения P(w|d).

В подходе на базе BERT к P(w|d) мы можем получить эмбеддинг документа g(d) через среднее пулинг и эмбеддинг слова e(w), затем объединить их в следующей формуле:

Формула оценки P(w|d) на базе BERT с использованием эмбеддингов документа и слова
Уравнение для оценки P(w|d) в модели релевантности на базе BERT, использующей усредненные эмбеддинги документа g(d) и эмбеддинги слов e(w).

Здесь V обозначает обрезанный словарь (например, объединение терминов документов), а 𝜏 — параметр температуры. Это могло бы стать первым шагом к созданию нейронной модели релевантности (NRM), что остается неизученным и потенциально новаторским направлением в области информационного поиска.

Вернемся к исходной формулировке: этот априорный подход можно реализовать на Python как первую оценку P(w|d):

# -----------------------
# Step 3: P(w|d)
# -----------------------
def p_w_given_d(w, d, mu=2000):
    """
    Dirichlet-smoothed language model.
    """
    tf = doc_term_counts[d][w]
    doc_len = doc_lengths[d]
    # collection probability
    cf = sum(doc_term_counts[dd][w] for dd in docs)
    collection_len = sum(doc_lengths.values())
    p_wc = cf / collection_len
    return (tf + mu * p_wc) / (doc_len + mu)

Далее вычисляем вероятность запроса под моделью документа — P(q|d):

# -----------------------
# Step 4: P(q|d)
# -----------------------
def p_q_given_d(q, d):
    """
    Query likelihood under doc d.
    """
    score = 0.0
    for w in q:
        score += math.log(p_w_given_d(w, d))
    return math.exp(score)  # return likelihood, not log

RM1 требует P(d|q), поэтому мы инвертируем вероятность — P(q|d)с помощью правила Байеса:

def p_d_given_q(q):
    """
    Posterior distribution over documents given query q.
    """
    # Compute query likelihoods for all documents
    scores = {d: p_q_given_d(q, d) for d in docs}
    # Assume uniform prior P(d), so proportionality is just scores
    Z = sum(scores.values())  # normalization
    return {d: scores[d] / Z for d in docs}

Мы предполагаем, что априорная вероятность документа равномерна, поэтому она сокращается. Затем нормализуем по всем документам, чтобы постериоры суммировались до 1:

Нормализация постериорных вероятностей по документам
Нормализация постериорных вероятностей по документам. Каждая P(d|q) получается делением ненормализованного балла P(q|d)P(d) на сумму по всем документам, гарантируя, что постериоры образуют валидное вероятностное распределение, суммирующееся до 1.

Аналогично P(w|d), стоит подумать, как нейронизировать члены P(d|q) в RM1. Первый подход — использовать готовую модель кросс- или dual-энкодера (например, BERT, дообученный на MS MARCO), чтобы эмбеддировать запрос и документ, вычислить сходство и нормализовать с помощью софтмакса:

Распределение P(d|q) с использованием нейронной модели для оценки сходства
Распределение запрос-документ P(d|q), полученное оценкой каждого документа нейронной моделью (кросс-энкодер или dual-энкодер) и нормализацией по документам в наборе псевдорелевантной обратной связи (PRF).

С преобразованными в представления на базе нейронных сетей P(d|q) и P(w|d) мы можем объединить их для получения простой начальной версии нейронной модели RM1, которая вернет P(w|q).
Однако для этой статьи мы вернемся к классической формулировке RM1. Запустим (не-нейронный, стандартный RM1) код, чтобы увидеть результаты компонентов, которые мы обсудили. Напомним, наш тестовый корпус документов:

d1: "the cat sat on the mat"
d2: "the dog barked at the cat"
d3: "dogs and cats are friends"

При сглаживании Дирахлетта (с μ=2000) значения будут очень близки к коллекционной вероятности «cat», поскольку документы короткие. Для иллюстрации:

  • d1: «cat» появляется один раз в 6 словах → P(q|d1) примерно 0.16
  • d2: «cat» появляется один раз в 6 словах → P(q|d2) примерно 0.16
  • d3: «cat» не появляется → P(q|d3) примерно 0 (со сглаживанием — малое >0 значение)

Теперь нормализуем это распределение, чтобы получить постериорное:

{
    'P(d1|q)': 0.5002,
    'P(d2|q)': 0.4997,
    'P(d3|q)': 0.0001
}

В чем ключевое отличие между P(d|q) и P(q|d)?

P(q|d) показывает, насколько хорошо документ «объясняет» запрос. Если представить каждый документ как мини-языковую модель: насколько вероятно, что она сгенерирует слова запроса? Эта вероятность высока, если слова запроса естественны в распределении слов документа. Например, для запроса «cat» документ, упоминающий «cat», даст высокую вероятность; о «dogs and cats» — чуть ниже; о «Charles Dickens» — близко к нулю.

Напротив, вероятность P(d|q) кодирует, насколько стоит доверять документу при данном запросе. Это переворачивает перспективу с помощью правила Байеса: теперь мы спрашиваем, при запросе какая вероятность, что релевантный документ пользователя — это d?

Таким образом, вместо оценки объяснения запроса документом мы рассматриваем документы как конкурирующие гипотезы релевантности и нормализуем их в распределение по всей коллекции. Это дает ранжирующий балл, преобразованный в вероятностную массу — чем выше, тем вероятнее релевантность документа по сравнению с остальными.

Теперь у нас есть все компоненты для завершения реализации модели RM1 Лавренко:

# -----------------------
# Step 6: RM1: P(w|R,q)
# -----------------------
def rm1(q):
    pdq = p_d_given_q(q)
    pwRq = defaultdict(float)
    for w in vocab:
        for d in docs:
            pwRq[w] += p_w_given_d(w, d) * pdq[d]
    # normalize
    Z = sum(pwRq.values())
    for w in pwRq:
        pwRq[w] /= Z
    return dict(sorted(pwRq.items(), key=lambda x: -x[1]))
# -----------------------

Теперь видно, что RM1 определяет вероятностное распределение по словарю, указывающее, какие слова наиболее вероятны в документах, релевантных запросу. Это распределение можно использовать для расширения запроса добавлением высоко вероятных слов или для переранжирования документов измерением KL-расхождения между языковой моделью документа и моделью релевантности запроса.

Top terms from RM1 for query ['cat']
cat 0.1100
the 0.1050
dog 0.0800
sat 0.0750
mat 0.0750
barked 0.0700
on 0.0700
at 0.0680
dogs 0.0650
friends 0.0630

В нашем примере термин «cat» логично выходит на первое место, совпадая с запросом. Высокочастотные фоновые слова вроде «the» тоже сильны, хотя на практике их фильтруют как стоп-слова. Интереснее, что содержательные слова из документов с «cat» (например, sat, mat, dog, barked) повышаются. Это сила RM1: она вводит связанные термины, отсутствующие в запросе, без явных оценок релевантности или надзора. Слова, уникальные для d3 (например, friends, dogs, cats), получают малые, но ненулевые вероятности благодаря сглаживанию.

RM1 определяет модель релевантности, специфичную для запроса, — языковую модель, индуцированную запросом, которая оценивается усреднением по документам, вероятно релевантным для этого запроса.

Увидев, как RM1 строит языковую модель, специфичную для запроса, перераспределяя термины документов по их постериорной релевантности, трудно не заметить параллель с тем, что появилось гораздо позже в глубоком обучении: механизмом внимания в трансформерах.

В RM1 мы оцениваем новое распределение P(w|R, q) над словами, комбинируя языковые модели документов, взвешенные по вероятности релевантности каждого документа при запросе. Архитектура трансформера делает нечто похожее: для токена («запроса») вычисляется сходство со всеми другими токенами («ключами»), затем эти баллы используются для взвешивания их «значений». Это производит новое, чувствительное к контексту представление токена-запроса.

Модель RM1 Лавренко как «прототип» трансформера

Механизм внимания, введенный в архитектуре трансформера, предназначался для преодоления ключевого недостатка ранних моделей последовательностей, таких как LSTM и RNN: их ограниченной памяти. В то время как рекуррентные модели с трудом захватывали дальние зависимости, внимание позволило напрямую связывать любой токен в последовательности с любым другим, независимо от расстояния.

Забавно, что математика внимания очень похожа на то, что делала RM1 много лет назад. В RM1, как мы видели, строится распределение, специфичное для запроса, взвешивая документы; в трансформерах строится представление, специфичное для токена, взвешивая другие токены в последовательности. Принцип один — присваивать вероятностную массу наиболее релевантному контексту, — но применяется на уровне токенов, а не документов.

Если упростить трансформеры до сути, механизм внимания — это просто RM1 на уровне токенов.

Это может показаться смелым утверждением, поэтому нужно привести доказательства!

Сначала углубимся в механизм внимания, отсылая к отличным существующим вводным материалам для более полного разбора.

В слое внимания трансформера — масштабированном скалярном произведении — для вектора запроса q вычисляется сходство со всеми ключами k других токенов. Эти сходства нормализуются в веса через софтмакс. Наконец, эти веса используются для смешивания соответствующих значений v, создавая новое, осведомленное контекстом представление токена-запроса.

Масштабированное скалярное произведение внимания выглядит так:

Формула масштабированного скалярного произведения внимания с Q, K, V
Масштабированное скалярное произведение внимания: векторы запросов Q сопоставляются с векторами ключей K для получения весов внимания через софтмакс, которые затем используются для взвешенной комбинации векторов значений V. Этот механизм позволяет модели фокусироваться на наиболее релевантных элементах контекста для каждого запроса.

Здесь Q = вектор(ы) запроса, K = векторы ключей (документы в нашей аналогии), V = векторы значений (слова/признаки для смешивания). Софтмакс — нормализованное распределение по ключам.

Теперь вспомним RM1 (Лавренко и Крофт, 2001):

Формула RM1 как смесь распределений документов, взвешенных по релевантности запроса
RM1: смесь специфических для документов распределений, взвешенных по релевантности запроса

Веса внимания в масштабированном скалярном произведении параллельны распределению документ-запрос P(d|q) в RM1. Переформулировка внимания в форме на запрос делает связь явной:

Переформулировка внимания на уровне запроса
Формула внимания на запрос с весами α(i|q) для комбинации значений v
Формулировка масштабированного скалярного произведения внимания на запрос: каждый запрос обращается к документам (ключам), производя веса внимания α(i|q), которые используются для взвешенной комбинации значений v. Это напрямую параллельно RM1, где запрос индуцирует распределение по документам, используемое для смешивания их распределений слов.

Вектор значения — v — в внимании можно рассматривать как аналог P(w|d) в модели RM1, но вместо явного распределения слов v — это плотный семантический вектор, низкоранговый суррогат полного распределения. По сути, это содержимое, которое мы смешиваем после получения баллов релевантности для каждого документа.

Расширяя на всю архитектуру трансформера, много-головое внимание можно видеть как параллельный запуск нескольких моделей релевантности в стиле RM1 с разными проекциями.

Мы можем провести дополнительные параллели с более широкой архитектурой трансформера.

  • Надежная оценка вероятностей: Ранее мы отметили, что RM1 требует сглаживания (например, Дирахлетта) для сглаживания нулевых счетов и избежания переобучения на редких терминах. Аналогично трансформеры используют остаточные соединения и нормализацию слоев для стабилизации и предотвращения коллапса распределений внимания. Оба подхода обеспечивают надежность в оценке вероятностей при разреженных или шумных данных.
  • Псевдорелевантная обратная связь: RM1 проводит один раунд вероятностного расширения через псевдорелевантную обратную связь (PRF), ограничивая внимание топ-K извлеченными документами. Набор PRF функционирует как окно контекста внимания: запрос распределяет вероятностную массу по ограниченному набору документов, и слова перераспределяются соответственно. В трансформерах внимание ограничено локальной входной последовательностью. В отличие от RM1, трансформеры накапливают множество слоев внимания, каждый из которых перераспределяет и уточняет распределения токенов. Накопление глубокого внимания таким образом можно рассматривать как итеративную псевдорелевантную обратную связь — повторное пулинг по связанному контексту для построения более богатых представлений.

Аналогия между RM1 и трансформером суммирована в таблице ниже, где мы связываем компоненты и проводим параллели:

Таблица сопоставления компонентов RM1 и внимания трансформера
Таблица 1: Концептуальное сопоставление модели релевантности (RM1) и внимания трансформера. RM1 распределяет вероятностную массу по набору псевдорелевантной обратной связи (PRF) документов, в то время как внимание распределяет веса по окну контекста токенов. Оба дают смеси: слова из документов в RM1 и векторы значений из токенов в трансформерах. 📖 Источник: Таблица создана автором.

RM1 выразила мощную, но общую идею: релевантность можно понимать как взвешивание смесей содержимого на основе сходства с запросом.

Почти через два десятилетия тот же принцип возродился в механизме внимания трансформера — теперь на уровне токенов, а не документов. То, что начиналось как статистическая модель для расширения запросов в информационном поиске, эволюционировало в математическое ядро современных больших языковых моделей (LLM). Это напоминание, что прекрасные идеи в науке редко исчезают; они продвигаются во времени, переосмысленные и переинтерпретированные в новых контекстах.

Через письменное слово ученые переносят идеи через поколения — тихо связывая волны инноваций, — пока внезапно не происходит прорыв.

Иногда самые простые идеи обладают наибольшей силой. Кто мог представить, что «внимание» станет ключом к пониманию языка? И все же это так.

Выводы и итоговые размышления

В этой статье мы проследили одну ветвь огромного древа моделирования языка, раскрыв убедительную связь между развитием моделей релевантности в раннем информационном поиске и появлением трансформеров в современной NLP. RM1 — первая вариация в семействе моделей релевантности — во многих отношениях была прототипом трансформера для информационного поиска, предвосхищая механизм, который позже перестроил способ, которым машины понимают язык.

Мы даже реализовали нейронную вариацию модели релевантности с использованием современных энкодерных моделей, тем самым формально объединив прошлое (модель релевантности) и настоящее (архитектуру трансформера) в одной вероятностной модели!

В начале мы ссылались на образ Ньютона о стоянии на плечах гигантов. Завершим другой его рефлексией:

«Я не знаю, как я кажусь миру, но для себя я представляюсь лишь мальчиком, играющим на морском берегу, развлекающимся тем, что изредка нахожу более гладкий камешек или красивую ракушку, в то время как великий океан истины лежит передо мной все еще неисследованным». Ньютон, Исаак. Цитата из Дэвида Брюстера, «Мемуары о жизни, трудах и открытиях сэра Исаака Ньютона», том 2 (1855), с. 407.

Надеемся, вы согласны, что путь от RM1 к трансформерам — это именно такое открытие: тщательно отполированный камешек на берегу гораздо большего океана открытий в ИИ, которые еще предстоит сделать.