Идея о том, что дальновидность достигается благодаря опоре на плечи гигантов, отражает вечную истину научного прогресса. Каждый значимый прорыв опирается на множество предыдущих достижений, пока однажды все не начинает работать идеально. Это особенно заметно в текущей революции в обработке естественного языка (NLP), которую определяет архитектура трансформеров, лежащая в основе большинства современных систем генеративного ИИ.
«Если я видел дальше других, то потому, что стоял на плечах гигантов».
— Исаак Ньютон, письмо Роберту Гуку, 5 февраля 1675 года (по старому стилю; 1676 год по новому стилю)

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

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

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

Чтобы развить интуицию о работе модели 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). Этот априорный подход предотвращает нулевые вероятности для невиданных слов и балансирует доказательства, специфичные для документа, с фоновыми статистиками коллекции. Формула выглядит так:

Эта формула дает мешок слов униграммную модель для каждого документа в корпусе. Кстати, сегодня, с мощными языковыми моделями из Hugging Face, можно заменить эту формулировку, например, на вариант на базе BERT, используя эмбеддинги для оценки распределения P(w|d).
В подходе на базе BERT к P(w|d) мы можем получить эмбеддинг документа 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 logRM1 требует 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(w|d), стоит подумать, как нейронизировать члены P(d|q) в RM1. Первый подход — использовать готовую модель кросс- или dual-энкодера (например, BERT, дообученный на MS MARCO), чтобы эмбеддировать запрос и документ, вычислить сходство и нормализовать с помощью софтмакса:

С преобразованными в представления на базе нейронных сетей 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 = векторы значений (слова/признаки для смешивания). Софтмакс — нормализованное распределение по ключам.
Теперь вспомним RM1 (Лавренко и Крофт, 2001):

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


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

RM1 выразила мощную, но общую идею: релевантность можно понимать как взвешивание смесей содержимого на основе сходства с запросом.
Почти через два десятилетия тот же принцип возродился в механизме внимания трансформера — теперь на уровне токенов, а не документов. То, что начиналось как статистическая модель для расширения запросов в информационном поиске, эволюционировало в математическое ядро современных больших языковых моделей (LLM). Это напоминание, что прекрасные идеи в науке редко исчезают; они продвигаются во времени, переосмысленные и переинтерпретированные в новых контекстах.
Через письменное слово ученые переносят идеи через поколения — тихо связывая волны инноваций, — пока внезапно не происходит прорыв.
Иногда самые простые идеи обладают наибольшей силой. Кто мог представить, что «внимание» станет ключом к пониманию языка? И все же это так.
Выводы и итоговые размышления
В этой статье мы проследили одну ветвь огромного древа моделирования языка, раскрыв убедительную связь между развитием моделей релевантности в раннем информационном поиске и появлением трансформеров в современной NLP. RM1 — первая вариация в семействе моделей релевантности — во многих отношениях была прототипом трансформера для информационного поиска, предвосхищая механизм, который позже перестроил способ, которым машины понимают язык.
Мы даже реализовали нейронную вариацию модели релевантности с использованием современных энкодерных моделей, тем самым формально объединив прошлое (модель релевантности) и настоящее (архитектуру трансформера) в одной вероятностной модели!
В начале мы ссылались на образ Ньютона о стоянии на плечах гигантов. Завершим другой его рефлексией:
«Я не знаю, как я кажусь миру, но для себя я представляюсь лишь мальчиком, играющим на морском берегу, развлекающимся тем, что изредка нахожу более гладкий камешек или красивую ракушку, в то время как великий океан истины лежит передо мной все еще неисследованным». Ньютон, Исаак. Цитата из Дэвида Брюстера, «Мемуары о жизни, трудах и открытиях сэра Исаака Ньютона», том 2 (1855), с. 407.
Надеемся, вы согласны, что путь от RM1 к трансформерам — это именно такое открытие: тщательно отполированный камешек на берегу гораздо большего океана открытий в ИИ, которые еще предстоит сделать.