Языковые модели: предсказание слова
Автодополнение в телефоне и языковая модель решают одну и ту же задачу
Языковая модель это система, предсказывающая распределение вероятностей следующего токена, то есть следующего кусочка текста, по предыдущим: одному продолжению достаётся 0,2, другому 0,15, третьему 0,001. Подсчёт готовых цепочек слов связной речи не даёт: словарь в пятьдесят тысяч слов даёт больше ста триллионов возможных троек, и почти любая длинная цепочка не встречается в данных ни разу.
Миколов и соавторы, word2vec, 2013. Stanford CS324. Dive into Deep Learning, главы о последовательностях · 24 мин · обновлено 01.10.2026
После урока вы сможете
- Понимать, что языковая модель выдаёт распределение вероятностей следующего токена
- Объяснять, что такое токен и почему для русского текста их на слово больше
- Видеть, почему запоминание длинных цепочек слов не даёт связной речи
- Отличать иллюстрацию к идее эмбеддингов от строгого результата
Наберите в телефоне «сегодня очень» и посмотрите на подсказки над клавиатурой. Там появятся два-три слова, которых вы ещё не написали. Никто не писал правила «после „очень“ идёт „холодно“»: телефон посчитал, какие слова за какими шли в текстах, и показал самые частые.
Это языковая модель в самом простом виде, и вы пользуетесь ею каждый день. У неё ровно одна задача: по началу текста угадать, что идёт дальше. Ни понимания, ни желания помочь, ни ответа на вопрос в этой постановке нет. Есть продолжение текста.
Между подсказкой на клавиатуре и большой языковой моделью разница огромна по масштабу и почти незаметна по постановке задачи. Обе получают кусок текста и выдают то, что вероятнее всего идёт следующим. Весь этот урок про то, как из такой скромной задачи вырастает всё остальное.
Не одно слово, а распределение
Точную формулировку стоит выучить, она пригодится до конца курса. Языковая модель предсказывает распределение вероятностей следующего токена по предыдущим. Слово «токен» тут единственное незнакомое: это кусок текста, часто часть слова, и следующий раздел объясняет, зачем текст режут именно так. Выдаёт модель не одно слово, а число для каждого возможного продолжения: одному достаётся 0,2, другому 0,15, третьему 0,001.
Дальше из этого набора надо выбрать одно слово, и выбирают его случайно, с теми самыми вероятностями. Поэтому один и тот же запрос даёт разные ответы при повторе. Это не сбой и не признак живого характера, а просто способ выбора.
Насколько охотно берётся не самое вероятное продолжение, задаёт отдельная настройка под именем температура. При низкой модель всегда хватает самое частое слово и начинает ходить по кругу. При высокой она берёт редкие продолжения и рассыпается в бессмыслицу. В тренажёре к этому уроку ползунок температуры стоит покрутить в обе стороны.
Обратите внимание на то, чего в этой постановке нет. Нет вопроса «правда ли это», нет сверки с источником, нет ответа «не знаю». Распределение вероятностей существует всегда, даже когда продолжать нечем. Урок 13 покажет, чем это оборачивается. Запомните это пустое место в механизме: заполнять его приходится снаружи.
Токен не равен слову
Про токены обещано было сказать подробнее. Говорим. Модель работает не со словами и не с буквами, а с кусками текста посередине между тем и другим. Токен это кусок текста, часто часть слова: «непонятливый» может распасться на «не», «понят» и «ливый».
Зачем резать слова на части, видно из простого рассуждения. Список всех слов языка не закрыт: есть имена, опечатки, новые слова, числа, обрывки. Словарь же у модели конечен, и всё, чего в нём нет, она обработать не сможет вовсе. Встретив незнакомое слово целиком, модель не сумела бы сделать с ним ничего.
Куски решают эту беду. Из нескольких десятков тысяч кусочков собирается любое слово, включая то, которого модель никогда не видела. Частые слова при этом остаются целыми токенами, а редкие рассыпаются на части, и так в среднем короче.
Отсюда следствие, важное именно для русского читателя: для русского текста токенов на слово обычно больше, чем для английского. Причины две, и обе понятные. Русская морфология богаче: у одного корня десятки форм, и редкие формы приходится собирать из кусков. К тому же набор токенов подбирают по обучающему корпусу. Так называют собрание текстов, на котором учат модель. Язык, представленный в корпусе шире, получает более выгодную нарезку.
Практическое следствие тоже стоит знать заранее. Длину запроса и цену работы с моделью считают в токенах, а не в словах и не в знаках. Один и тот же смысл по-русски занимает больше токенов, а значит, обходится дороже и быстрее упирается в предел длины контекста.
Первая честная модель: просто счёт
Как вообще предсказать следующее слово, если правил нам никто не дал? Самый прямой способ придумали задолго до нейросетей: посчитать. Берём большой текст и смотрим, какое слово чаще всего идёт после «сегодня очень». Способ грубый, зато не требует ни формул, ни догадок о том, как устроен язык.
Так устроена n-грамная модель. Она хранит, сколько раз какая цепочка из n слов встретилась, и предсказывает следующее слово по n−1 предыдущим. При n = 2 модель помнит одно слово назад, при n = 3 запоминает два, и так далее.
Никакого обучения в привычном смысле здесь нет, есть таблица подсчётов. И это честная языковая модель: она выдаёт распределение вероятностей следующего слова, ровно как требует определение. Урок 3 упоминал, что машинный перевод в итоге поддался статистике, а не словарю с правилами. Подсчёт цепочек и есть простейший вид такой статистики.
У подхода есть достоинство, которого у его наследников уже не будет. Он полностью прозрачен: можно открыть таблицу и увидеть, откуда взялось предсказание. Ни про одну из моделей, о которых пойдёт речь дальше, так сказать не получится.
Тренажёр: от каши к зубрёжке
К этому уроку приложен тренажёр, и он не анимация: n-грамная модель обучается прямо в вашем браузере на коротком тексте про кота и дождь. Ползунок n меняет, сколько слов модель помнит. Потратьте на него несколько минут, прежде чем читать дальше.
Поставьте n = 1. Модель не помнит ничего и просто сыплет словами по их частоте в тексте. Получается словесная каша, и это не поломка, а честный результат: при нулевой памяти связность взять неоткуда. Связность, выходит, берётся не из самих слов, а из учёта того, что стояло перед ними.
Поставьте n = 2. Текст сразу становится похож на речь: слова цепляются друг за друга, фразы почти собираются. Одного слова памяти хватает, чтобы «на» тянуло за собой «окне», а за «шёл» появлялся «дождь». Заметьте, как мало для этого понадобилось.
Теперь поставьте n = 4, и здесь начинается самое интересное. Текст выглядит гладким и почти осмысленным, а тренажёр сообщает, что кусок взят из обучающего текста дословно. Модель ничего не обобщила: она пересказывает выученное.
Пройдите n от 1 до 4 и прочитайте каждый результат вслух. На слух разница заметнее, чем глазами. Потом вернитесь на n = 2 и подвигайте температуру: при 0,1 модель зациклится на самых частых сочетаниях, при 2,0 начнёт нести чепуху. Это тот же параметр, что стоит в настройках больших моделей, и работает он там ровно так же.
Почему длинные цепочки не спасают
Соблазн очевиден: если при n = 4 стало гладко, возьмём n = 10 и получим прекрасный текст. Не получим, и причина чисто арифметическая. Почти всякая цепочка из десяти слов не встречалась в обучающем тексте ни разу. Проверить это можно на любимой книге: десять слов подряд, повторившихся в ней дважды, вы будете искать долго.
Посчитаем на пальцах. Словарь в пятьдесят тысяч слов даёт два с половиной миллиарда возможных пар. Троек получается больше ста триллионов, а цепочек из четырёх слов набирается столько, что число уже не помещается в воображение.
Текстов на такое количество нет и не будет. Значит, для почти любой длинной цепочки у модели ровно два состояния. Либо она не видела эту цепочку никогда и предсказать ничего не может, либо видела ровно один раз, и тогда повторит продолжение дословно.
Вот и весь тупик n-грамм, и он же главный урок раздела. Увеличивая память, мы приближаемся не к пониманию текста, а к копированию. Между «модель знает язык» и «модель помнит корпус» разница огромная, и n-граммы всегда сваливаются во второе.
Зубрёжка против обобщения
Эта беда уже встречалась в курсе под другим именем. Модель нужна не для того, чтобы правильно отвечать на показанные примеры: ответы на них и так известны, для этого хватило бы таблицы. Модель нужна, чтобы справляться с тем, чего она не видела, а способность переносить выученное на новые случаи называется обобщением. Урок 6 разбирает это подробно и показывает, как зубрёжка маскируется под успех.
Здесь же важно одно наблюдение о самих n-граммах. Обобщать они не умеют в принципе, потому что для них все слова остаются просто разными значками. «Чай» и «кофе» для такой модели связаны ничуть не сильнее, чем «чай» и «шуруп». Всё выученное про одно слово для близкого по смыслу пропадает зря.
Отсюда видно, чего именно не хватает. Нужен способ представить слова так, чтобы похожие по употреблению оказались похожими и для модели. Тогда выученное про «налил чай» будет хоть немного помогать с «налил кофе».
Эмбеддинг: слово как набор чисел
Решение выглядит неожиданно, зато работает. Каждому слову сопоставляют вектор, то есть набор из нескольких сотен чисел. Слово перестаёт быть значком и становится точкой в пространстве, а такой вектор называют эмбеддингом слова. Сколько именно чисел брать, решают заранее, и это число одно на весь словарь.
Числа подбирают не вручную, а обучением, и правило подбора простое. Слово характеризуется тем, в каком окружении оно встречается. «Чай» и «кофе» окружены одними и теми же словами: наливают, остыл, чашка. Поэтому их векторы получаются близкими.
Самая известная работа здесь называется word2vec, Миколов и соавторы, 2013 год. Она показала, что такие векторы можно получать из обычных текстов дёшево и в огромных количествах. С тех пор приём используют повсюду, где нужно сравнивать слова по употреблению.
Главное, что даёт эмбеддинг, и есть то самое обобщение. Модель, видевшая «налил горячий чай», получает опору для «налил горячий кофе», даже если такой пары в текстах не было. Для n-граммы вторая фраза была бы пустым местом.
Знаменитая арифметика и что с ней не так
С эмбеддингами связан самый растиражированный факт всей области. Если из вектора слова «король» вычесть вектор «мужчина» и прибавить вектор «женщина», ближайшим окажется вектор слова «королева». Выглядит так, будто машина уловила смысл слов. Пример разошёлся по популярным статьям и презентациям и стал главным доводом в пользу того, что векторы поймали значение.
Как иллюстрация идеи это действительно хорошо. Направление в пространстве векторов соответствует чему-то осмысленному: разница между «королём» и «королевой» оказывается похожей на разницу между «мужчиной» и «женщиной». Именно так пример и стоит запоминать, как картинку, объясняющую, что значит «близкие векторы».
А теперь оговорка, без которой картинка превращается в обман. Последующие проверки показали, что результат чувствителен к настройкам. И, что важнее, исходную точку часто исключают из ответа вручную: «король» выбрасывают из списка кандидатов, иначе ближайшим оказывается он сам.
Статус этого утверждения в реестре курса обозначен как сильно ослаблено: как строгий результат оно не устояло. Как иллюстрация идеи оно осталось полезным и живёт в учебниках заслуженно. Разницу между двумя ролями одного и того же примера стоит запомнить: она пригодится в каждом следующем уроке.
Один и тот же пример может честно объяснять идею и при этом не выдерживать проверки как утверждение. Беда начинается, когда иллюстрацию пересказывают как доказательство: «векторы слов устроены так, что арифметика на смыслах работает». Проверка простая. Спросите, что именно измеряли, на каких настройках и что делали с исходным словом. Если ответ «показывали картинку в презентации», перед вами иллюстрация.
«Просто предсказывает следующее слово»
Фразу из заголовка произносят как приговор, и произносят часто. Буквально она верна: механизм именно таков, и весь этот урок был про него. Но в качестве аргумента она не работает, и разобрать это стоит внимательно. Ошибка здесь типовая, и встретится она в курсе ещё не раз.
Из «предсказывает токены» не следует ни «понимает», ни «не понимает». Это утверждение об устройстве, а вывод делается о свойстве, которое устройством не задаётся. Чтобы спор был содержательным, надо сначала договориться, что считать пониманием, а с этим за семьдесят лет никто не справился.
Есть и довод в другую сторону, и его тоже надо услышать. Чтобы хорошо предсказывать текст, полезно улавливать структуру того, о чём текст написан. Кто с кем связан, что за чем следует, какие утверждения совместимы. Всё это помогает угадывать следующее слово.
Курс не выносит здесь вердикта, и это не уклонение. Вопрос о понимании носит статус спор открыт, и ему целиком посвящён урок 20. Пока достаточно уметь отделять описание механизма от вывода о способностях.
Что дальше
Соберём урок в одну картину. Языковая модель предсказывает распределение вероятностей следующего токена, и ничего сверх этого в постановке задачи нет. n-граммы решают эту задачу честным подсчётом и упираются в стену: чем длиннее память, тем ближе результат к копированию корпуса.
Эмбеддинги дают первый настоящий выход, обобщение на уровне отдельных слов. Похожие по употреблению слова получают похожие векторы, и выученное про одно переносится на другое. Но обобщения на уровне слова мало: смысл слова в предложении зависит от того, какие слова стоят рядом.
Чего не хватает, теперь можно сформулировать точно. Нужен способ учитывать контекст, не запоминая его дословно, то есть решать, какие из предыдущих слов важны именно сейчас. Ответ предложили в 2017 году и назвали трансформером. Это урок 11.
Языковая модель на коленке
Настоящая n-грамная модель на встроенном тексте. При n = 1 бормочет, при n = 2 связна, при n = 4 начинает дословно пересказывать корпус, то есть переход от каши к зубрёжке в двух движениях ползунка.
Ключевые работы и результаты
| Миколов и соавторы, word2vec | 2013 | Способ получать векторные представления слов из обычных текстов дёшево и в больших количествах. Близкие по употреблению слова получают близкие векторы, отсюда и обобщение с одного слова на другое. |
| Stanford CS324 «Large Language Models» | 2022 | Открытый курс о больших языковых моделях, каркас этого модуля. Задача языковой модели формулируется там как предсказание распределения вероятностей следующего токена. |
Что подтвердилось, а что нет
Последующие проверки показали, что результат чувствителен к настройкам, а исходную точку часто исключают из ответа вручную: «король» убирают из списка кандидатов, иначе ближайшим оказывается он сам. Как иллюстрация идеи пример остаётся полезным и наглядно объясняет, что значит «близкие векторы». Как доказательство того, что арифметика работает на смыслах, он не устоял.
Словарь в пятьдесят тысяч слов даёт больше ста триллионов возможных троек, и почти любая длинная цепочка не встречается в данных ни разу. Модель либо не может предсказать ничего, либо видела цепочку однажды и повторяет продолжение дословно. Рост памяти ведёт не к пониманию текста, а к копированию корпуса, и это видно в тренажёре при n = 4.
Вход модели поделён не на слова, а на токены, и набор этих кусков подбирался по обучающему корпусу. Частое слово занимает один токен, редкое разваливается на несколько, а пробелы и знаки получают свои. Для русского текста токенов на слово обычно выходит больше, чем для английского. Отсюда и разница в длине контекста, и разница в цене одного и того же смысла. Считать, что модель оперирует словами, безобидно ровно до того места, где начинают считать длину и деньги.
Миколов и соавторы в 2013 году показали, что такие векторы получаются из обычных текстов дёшево и в больших количествах. Приём с тех пор используется всюду, где слова сравнивают по употреблению. Проверяется он не картинкой, а работой: модель, видевшая «налил горячий чай», получает опору для «налил горячий кофе», которой у счёта по цепочкам слов нет вовсе. Границу стоит держать твёрдо, потому что рядом лежит самый растиражированный пример области. Устояло утверждение об употреблении: близкое окружение даёт близкие векторы. Не устояло сильное его чтение, будто арифметика над векторами доказывает, что модель уловила смысл. Эта позиция стоит в реестре сильно ослабленной.
Термины
- языковая модельlanguage model
- Система, предсказывающая распределение вероятностей следующего токена по предыдущим. Ничего сверх этого в постановке задачи нет.
- токенtoken
- Кусок текста, на который модель делит вход: часто часть слова. Для русского текста токенов на слово обычно больше, чем для английского.
- n-граммаn-gram
- Цепочка из n подряд идущих слов или токенов. Модель на n-граммах предсказывает следующее слово по n−1 предыдущим, опираясь на подсчёт встреченных цепочек.
- корпусcorpus
- Собрание текстов, на котором обучают модель. Его состав решает, что модель вообще сможет предсказывать, и по нему же подбирают набор токенов.
- эмбеддингembedding
- Представление слова вектором из нескольких сотен чисел, при котором близкие по употреблению слова получают близкие векторы.
- контекстcontext
- Кусок текста, который модель учитывает, предсказывая следующий токен. Его длина ограничена, и всё, что осталось за границей, для предсказания не существует.
- температураtemperature
- Настройка выбора продолжения: насколько охотно модель берёт менее вероятный токен. При низкой ответы однообразны и зациклены, при высокой рассыпаются.
- машинное обучениеmachine learning
- Способ получить правило не написанием, а подбором: на вход подают данные и ответы, на выходе получают правило в виде набора чисел.
Практикум · Биграммная модель на кухонном столе
Языковая модель перестаёт быть загадкой ровно в тот момент, когда вы сами построите самую простую. Понадобится страница текста, карандаш и полчаса. Считать придётся руками, в этом и смысл.
- Возьмите страницу любого текста: газетную заметку, главу книги, собственное письмо. Выпишите её в одну строку и уберите знаки препинания, чтобы остались только слова.
- Выберите слово, которое встречается в тексте хотя бы пять раз. Обычно годятся «и», «на», «что», «был». Выпишите все слова, которые идут сразу после него, и посчитайте, сколько раз каждое.
- Переведите подсчёты в вероятности: разделите каждое число на общее количество вхождений. У вас получилось распределение вероятностей следующего слова, ровно то, что выдаёт языковая модель.
- Сгенерируйте текст. Начните с выбранного слова, бросьте кубик или монету, выберите продолжение по вашим вероятностям, потом постройте распределение для нового слова и повторите десять раз.
- Ответьте письменно на два вопроса. Первый: сколько шагов текст держался связным. Второй: что нужно добавить, чтобы стало лучше, больше памяти или что-то другое? Второй ответ и есть содержание уроков 11 и 12.
Вопросы для самопроверки
Что именно выдаёт языковая модель, получив начало текста?
- Распределение вероятностей следующего токена
- Единственное подходящее по смыслу слово, выбранное из словаря по правилам грамматики
- Проверенный по источникам ответ на заданный вопрос
- Ссылку на источник, откуда взято продолжение: модель хранит тексты и указывает нужный
Почему один и тот же смысл по-русски занимает больше токенов, чем по-английски?
- Русские слова длиннее английских по числу букв, а токен это всегда одно и то же число букв
- Морфология богаче, а набор токенов подбирают по обучающему корпусу
- Кириллицу модели обрабатывают медленнее латиницы, и на неё уходит больше шагов вычисления
- Русский текст содержит больше слов, чем английский перевод того же смысла
В тренажёре при n = 4 текст выглядит гладким. Почему это плохая новость?
- Модель стала слишком медленной
- При большом n модель перестаёт учитывать контекст: длинные цепочки обрезаются, и остаётся одно последнее слово
- Модель почти ничего не обобщила и пересказывает обучающий текст дословно
- Гладкость означает, что температура выставлена слишком низко, а при n = 4 она и не может быть другой
Что даёт представление слов векторами?
- Возможность хранить словарь в меньшем объёме: вектор занимает меньше места, чем само слово
- Гарантию, что модель не ошибётся в фактах: у верного и неверного утверждения векторы разные
- Точный перевод слова на другие языки: у слова и его перевода вектор совпадает
- Перенос выученного с одного слова на близкие по употреблению
Как курс относится к примеру «король − мужчина + женщина ≈ королева»?
- Как к доказательству того, что модель понимает смысл слов: арифметика на векторах доказывает, что внутри есть понятия
- Как к иллюстрации идеи: строгим результатом это не устояло
- Как к спорному примеру: одни считают его удачным, другие нет
- Как к точной формуле, работающей для любых пар слов: подставьте любую пару, и ближайшим окажется нужное слово
Ответы и разбор открываются в самопроверке урока: она считает результат и отмечает урок пройденным. Пройти самопроверку.
Что читать
- T. Mikolov et al., «Efficient Estimation of Word Representations in Vector Space», 2013: Работа, с которой эмбеддинги стали массовым инструментом. Первые страницы читаются без математики, дальше начинается техника.
- Тренажёр «Языковая модель на коленке» в этом уроке: Поставьте n = 4 и сравните начало сгенерированного текста с корпусом. Зубрёжку видно глазами, без всяких метрик и формул.