Обработка естественного языка
Материал из MachineLearning.
| (1 промежуточная версия не показана) | |||
| Строка 1: | Строка 1: | ||
| - | {{well|Статья написана с использованием LLM '' | + | {{well|Статья написана с использованием LLM ''ChatGPT-5.5'' и проверена участником [[Участник:Artem Abdulmanov|Artem Abdulmanov]] 18:40, 17 июля 2026 (MSD) |
| - | Промпт приводится полностью в [[Обсуждение: | + | Промпт приводится полностью в [[Обсуждение:Обработка естественного языка]]}} |
| - | }} | + | |
{{TOCright}} | {{TOCright}} | ||
| - | = | + | == Введение == |
| - | '''Обработка естественного языка''' (Natural Language Processing, NLP) — | + | '''Обработка естественного языка''' (англ. ''Natural Language Processing, NLP'') — область [[искусственный интеллект|искусственного интеллекта]], [[машинное обучение|машинного обучения]] и компьютерной [[лингвистика|лингвистики]], изучающая методы автоматического анализа, понимания, преобразования и генерации текстов и речи на естественных языках. Центральная задача обработки естественного языка состоит в построении вычислительных моделей, которые способны сопоставлять языковую форму с её смыслом, контекстом, намерением автора и требуемым действием системы. |
| - | + | Формально текст часто рассматривается как последовательность дискретных единиц — [[токен|токенов]] <tex>x_{1:T}=(x_1,\ldots,x_T)</tex>, принадлежащих словарю <tex>\mathcal V</tex>. Модель с параметрами <tex>\theta</tex> должна оценивать распределения вида <tex>p_\theta(y\mid x_{1:T})</tex> для предсказания метки <tex>y</tex>, ответа, перевода, следующего токена или иной целевой структуры. В отличие от задач, где исходные признаки заданы численно, естественный язык дискретен, неоднозначен, контекстно зависим и содержит сложные явления: синонимию, омонимию, эллипсис, анафору, имплицитные знания и прагматику. | |
| - | + | К типичным задачам обработки естественного языка относятся [[классификация текста]], [[анализ тональности]], [[извлечение именованных сущностей]], [[синтаксический анализ]], [[семантический анализ]], [[машинный перевод]], [[автоматическое реферирование]], [[вопросно-ответная система|вопросно-ответные системы]], поиск по смыслу, [[диалоговый агент|диалоговые агенты]] и [[языковая модель|языковое моделирование]]. Современные системы обработки естественного языка опираются на [[искусственная нейронная сеть|искусственные нейронные сети]], [[Обучаемая векторизация данных|векторные представления]], [[Механизм внимания|механизм внимания]] и архитектуру [[Трансформер |трансформера]], что позволяет обучать модели на больших корпусах и переносить знания между задачами. | |
| - | + | == Мотивировка и историческая справка == | |
| - | + | Потребность в обработке естественного языка возникла одновременно с развитием вычислительной техники. Уже в 1950-х годах пионеры компьютерной лингвистики, включая [[Уоррен Уивер|Уоррена Уивера]] и [[Артур Самуэль|Артура Самуэля]], осознали, что компьютеры можно обучить обрабатывать и анализировать текст. В этот период доминировал символьный подход: использовались [[регулярные выражения]], конечные автоматы, словари, экспертные правила и формальные грамматики. [[Теория порождающих грамматик]] [[Ноам Хомский|Ноама Хомского]], предложенная в конце 1950-х годов, оказала огромное влияние на представления о синтаксисе и формальной структуре языка. | |
| - | Ранние системы | + | Ранние системы машинного перевода, разработанные в 1950-1960-х годах под эгидой программы [[ARPA]], использовали словари и морфосинтаксические правила. Однако первые попытки на автоматический перевод с русского на английский показали, что простой подход замены слов неэффективен. Проблема была признана столь сложной, что в 1966 году был выпущен отчёт [[ALPAC]] (Automatic Language Processing Advisory Committee), который значительно сокращает финансирование NLP на десятилетие. |
| - | + | В 1960-х–1980-х годах развивались методы синтаксического разбора, включая алгоритмы Кока–Янгера–Касами и Эрли, а также фреймворки типа семантических сетей и логических представлений. Система [[ELIZA]], разработанная Джозефом Вайценбаумом в 1960-х, демонстрировала, что даже поверхностные шаблоны и простая подстановка текста могут создавать иллюзию понимания и диалога, хотя она и не обладала настоящим семантическим пониманием. | |
| - | + | Символьные подходы были интерпретируемыми, но плохо масштабировались: для каждого языка, домена и жанра требовалось вручную описывать большое количество исключений и лингвистических правил. С ростом доступных текстовых корпусов и вычислительных ресурсов, начиная с 1980-х годов, в обработке естественного языка всё более прочно утверждался статистический подход. Появились [[скрытая марковская модель|скрытые марковские модели]] для [[морфологический анализ|морфологического анализа]] и [[разметка частей речи|разметки частей речи]], вероятностные контекстно-свободные грамматики, [[Байесовская сеть|байесовские сети]] и методы максимального правдоподобия. [[n-граммная модель|n-граммные языковые модели]] обеспечивали хорошее масштабирование на больших текстах, хотя и не могли моделировать дальние зависимости. | |
| - | + | Параллельно развивались информационно-поисковые методы: [[TF-IDF]], косинусное сходство документов, инвертированные индексы. Статистический машинный перевод на основе выравнивания фраз (phrase-based SMT) показал, что можно автоматически обучать модели перевода по двуязычным параллельным корпусам, хотя качество оставалось далеким от человеческого. | |
| - | + | Важный переход произошёл с открытием распределительной семантики. Идея «слово известно по его окружению» (дистрибютивная гипотеза, предложенная Харрисом в 1954 году, но широко применённая только спустя десятилетия) привела к методам [[латентно-семантический анализ|латентно-семантического анализа]] (LSA) и впоследствии к нейронным моделям [[Word2Vec]] (Мikolov et al., 2013), [[GloVe]] и [[fastText]]. В таких моделях слово <tex>w</tex> получает плотный вектор <tex>v_w\in\mathbb R^d</tex>, а семантическая близость измеряется геометрически. Word2Vec показал, что компактные [[векторное представление слова|векторные представления]] можно эффективно обучать на больших корпусах и использовать как признаки для широкого круга задач <ref>Mikolov T. et al., 2013</ref>. Это открыло эпоху глубокого обучения в обработке естественного языка. | |
| - | + | В 2010-е годы произошёл быстрый переход к глубоким последовательностным моделям. [[Рекуррентная нейронная сеть|Рекуррентные нейронные сети]], особенно [[LSTM]] и [[GRU]], позволили обрабатывать последовательности переменной длины и сохранять информацию на больших расстояниях благодаря механизму вентилей. Архитектура кодировщик-декодировщик (encoder-decoder), предложенная Сутскевером, Виецеля и Чо, позволила применять [[рекуррентная нейронная сеть|RNN]] к задачам трансформации последовательностей, таким как [[машинный перевод]]. | |
| - | + | Решающий прорыв произошёл введением [[Механизм внимания|механизма внимания]]. Бахданау и соавторы (2014) показали, что модель-декодер может селективно фокусироваться на разных частях входной последовательности на каждом шаге, резко улучшив качество машинного перевода. Однако [[рекуррентная нейронная сеть|RNN]]-подход остаётся процедурным: обработка последовательности требует последовательных шагов, что плохо параллелизуется на современном GPU-оборудовании. | |
| - | + | В 2017 году статья Vaswani et al. «Attention Is All You Need» представила архитектуру [[Трансформер |трансформера]], которая полностью заменила рекуррентность на механизм самовнимания и полносвязные слои. Трансформер обрабатывает всю последовательность параллельно, благодаря чему хорошо масштабируется на [[GPU]] и [[TPU]]. Это стало основой для почти всех современных успехов в обработке естественного языка <ref>Vaswani A. et al., 2017</ref>. | |
| - | + | После появления [[BERT]] (Devlin et al., 2019) и [[GPT]] (Radford et al., 2018) произошла парадигма-шифт к предобучению больших моделей на общих текстовых корпусах и последующему дообучению под конкретные задачи. [[BERT]] ввёл эффективную схему маскированного [[языковая модель|языкового моделирования]] для двунаправленного кодировщика <ref>Devlin J. et al., 2019</ref>, позволяя модели видеть как левый, так и правый контекст одновременно. Семейство [[GPT]] показало масштабируемость авторегрессионных декодеров и возможность решения задач по инструкции без классического обучения на размеченной выборке <ref>Brown T. B. et al., 2020</ref>. | |
| - | + | В 2020-х годах произошло экспоненциальное увеличение масштаба моделей: от [[BERT]] с 340 млн параметров к [[GPT-3]] с 175 млрд параметров, [[Chinchilla]], [[PaLM]] и [[GPT-4]]. Работа Hoffmann et al. показала оптимальный баланс между размером модели и количеством токенов обучающих данных. Одновременно развивались методы эффективной адаптации больших моделей под новые задачи без полного переобучения: [[LoRA]], [[QLoRA]], адаптеры, [[prompt engineering]] и few-shot learning. | |
| - | + | В современный период обработка естественного языка всё чаще объединяется с поиском ([[RAG]]), базами знаний, мультимодальными входами (текст + изображения в [[CLIP]], [[DALL-E]], [[GPT-4V]]), инструментальным выполнением действий и принципами конституционного обучения. Растут требования к безопасности, надёжности, интерпретируемости и соответствию правовым ограничениям, таким как защита персональных данных и борьба с дискриминацией в моделях. | |
| - | + | == Основные задачи обработки естественного языка == | |
| - | + | Обработка естественного языка охватывает широкий спектр задач, которые можно разделить на несколько категорий по уровню анализа и целям. | |
| - | + | ; Задачи уровня токенов и слов. | |
| - | * ''' | + | * '''[[Морфологический анализ]].''' Определение морфологических свойств слова: части речи, падежа, числа, времени, вида и т.д. Особенно важна для синтетических языков с богатой морфологией (русский, финский, турецкий), менее актуальна для аналитических языков (английский, китайский). |
| - | + | ||
| - | + | * '''[[Лемматизация]].''' Приведение слова к его базовой форме (лемме). Например, слова «читал», «читать», «читают» лемматизируются в «читать». Используется в информационном поиске и документировании. | |
| - | + | * '''[[Стемминг]].''' Приведение слова к его корню путём удаления суффиксов и префиксов. Проще лемматизации, но менее точно. Алгоритмы Porter Stemmer для английского языка широко распространены. | |
| - | + | * '''[[Разметка частей речи]].''' Присвоение каждому слову метки части речи (существительное, глагол, прилагательное, предлог и т.д.). Часто решается с помощью [[скрытая марковская модель|скрытых марковских моделей]], [[условное случайное поле|условных случайных полей]] или [[Трансформер|трансформеров]]. | |
| - | + | * '''[[Извлечение именованных сущностей]].''' Выделение и классификация именованных сущностей (названия людей, мест, организаций, продуктов). Часто решается как задача [[последовательное мечение|последовательного мечения]] (sequence labeling) с использованием BIO-схемы разметки. | |
| - | + | ; Задачи синтаксического анализа. | |
| - | + | ||
| - | + | * '''[[Синтаксический анализ]].''' Определение грамматической структуры предложения. Включает построение дерева зависимостей (dependency tree), где каждое слово связано со своим главным словом, или дерева составляющих (constituency tree), представляющего иерархическую структуру фраз. Решается с помощью алгоритмов типа перехода (transition-based) или графовых (graph-based) методов. | |
| - | + | * '''[[Разрешение анафоры]].''' Определение того, на какую сущность в тексте ссылается местоимение или дефинитный артикль. Например, в предложении «Мария встретила Джона, и он улыбнулся», нужно понять, что «он» относится к Джону. Решается с помощью методов графовых нейронных сетей и кандидатского ранжирования. | |
| - | + | ; Задачи семантического анализа. | |
| - | + | * '''[[Анализ тональности]]''' (sentiment analysis). Определение эмоционального подтекста текста: позитивное, негативное или нейтральное отношение. Может выполняться на уровне документа, предложения или аспекта (aspect-based sentiment analysis). Широко используется для анализа отзывов, комментариев в социальных сетях и репутационного мониторинга. | |
| - | + | * '''[[Классификация текста]]''' (text classification). Отнесение текста к одной или нескольким категориям. Примеры: классификация новостей по темам, фильтрация спама, определение языка документа, классификация по жанру. Решается с помощью [[логистическая регрессия|логистической регрессии]], [[метод опорных векторов|SVM]], [[случайный лес|случайных лесов]] и [[Трансформер |трансформеров]]. | |
| - | + | * '''[[Поиск по смыслу]]''' (semantic similarity). Определение семантической близости между двумя текстами. Используется в информационном поиске, дедупликации документов, рекомендательных системах. Решается с помощью обучения общих представлений через контрастные функции потерь. | |
| - | + | * '''[[Информационный поиск]]''' (information retrieval). Поиск релевантных документов в большой коллекции по запросу. Классические методы основаны на [[TF-IDF]] и косинусном сходстве; современные системы используют [[BERT]] и другие модели для семантического поиска. | |
| - | + | ; Задачи преобразования текста. | |
| - | + | * '''[[Машинный перевод]].''' Автоматический перевод текста с одного языка на другой. Исторически использовались статистические подходы (SMT), в настоящее время [[Трансформер |трансформеры]] и [[Механизм внимания|механизм внимания]] дают качество близкое к профессиональному. Стандартные метрики: [[BLEU]], [[METEOR]], [[chrF]]. | |
| - | + | * '''Автоматическое реферирование''' (automatic summarization). Создание сжатого пересказа текста, сохраняющего ключевую информацию. Может быть экстрактивным (выбор ключевых фраз из исходного текста) или абстрактивным (генерация нового текста). Метрики: [[ROUGE]], [[METEOR]]. | |
| - | + | * '''[[Исправление ошибок]].''' Автоматическое исправление орфографических и грамматических ошибок в тексте. Современные модели основаны на [[Трансформер |трансформерах]] и способны исправлять сложные ошибки в контексте. | |
| - | + | * '''Парафразирование''' (paraphrasing). Переформулировка текста с сохранением смысла. Используется в генерации вариантов текстов, увеличении обучающей выборки, улучшении разнообразия ответов в диалоговых системах. | |
| - | + | ; Задачи вопросно-ответного взаимодействия. | |
| - | + | * '''[[Вопросно-ответная система]]''' (question answering, QA). Поиск ответа на вопрос в текстовом контексте или ответ на базе знаний. Может быть открытого типа (нет готового контекста) или закрытого (ответ в документе). Наборы данных: SQuAD, Natural Questions, MS MARCO. | |
| - | + | * '''[[Информационное извлечение]]''' (information extraction). Выделение структурированной информации из неструктурированного текста. Может включать извлечение отношений между сущностями, событий, фактов, параметров (например, цены и рейтинги из описания товара). | |
| - | + | ; Задачи диалога и генерации. | |
| - | * ''' | + | * '''Диалоговые системы''' (dialogue systems). Системы, способные поддерживать диалог с пользователем. Включают task-oriented диалоговые системы (бронирование, поддержка клиентов) и open-domain чат-боты (общее общение). Современные системы основаны на больших языковых моделях. |
| - | + | ||
| - | + | ||
| - | + | * '''[[Языковая модель|Языковое моделирование]]''' (language modeling). Предсказание следующего токена по предыдущему контексту. Основа для генерации текста, автодополнения и многих других задач. Метрика: [[перплексия]]. | |
| - | + | * '''[[Текстогенерация]]''' (text generation). Генерация нового текста, отвечающего определённым критериям. Примеры: генерация описания изображения, генерация кода, творческое письмо. Решается с помощью [[Трансформер |декодеров трансформера]] и различных стратегий декодирования. | |
| - | + | ; Задачи многоязычного анализа. | |
| - | + | ||
| - | + | * '''[[Машинный перевод]]''' (уже упоминалась выше). | |
| - | + | ||
| - | + | * '''[[Определение языка]]''' (language identification). Автоматическое определение того, на каком языке написан текст. Обычно решается как многоклассовая классификация. | |
| - | + | ||
| - | + | * '''Кроссязычный перенос знаний''' (cross-lingual transfer). Использование моделей, обученных на одном языке, для задач на другом языке. Особенно важно для низкоресурсных языков. Мультиязычные модели типа [[multilingual BERT|mBERT]] и [[XLM-R]] обучаются на текстах многих языков одновременно. | |
| - | + | ||
| + | ; Задачи интеграции знаний. | ||
| + | |||
| + | * '''Связь с базами знаний.''' Связывание упомянутых в тексте сущностей с записями в структурированных базах знаний (например, Wikidata). Решается с помощью методов эмбеддирования сущностей и ранжирования кандидатов. | ||
| + | |||
| + | * '''[[RAG]]''' (retrieval-augmented generation). Объединение поиска документов с генерацией ответа. Модель сначала извлекает релевантные документы из большой коллекции, а затем генерирует ответ с учётом найденного контекста. | ||
| + | |||
| + | ; Многомодальные задачи. | ||
| + | |||
| + | * '''Визуальное вопросно-ответное взаимодействие''' (visual question answering, VQA). Ответ на вопросы о содержимом изображения. | ||
| + | |||
| + | * '''Описание изображения''' (image captioning). Автоматическое создание текстового описания изображения. | ||
| + | |||
| + | * '''Совместное обучение текста и изображений.''' Модели типа [[CLIP]], [[ALIGN]], которые учат совместное представление текста и изображений для поиска и классификации. | ||
| + | |||
| + | == Математический аппарат и Архитектура == | ||
| + | |||
| + | ; Представление текста и токенизация. | ||
| + | |||
| + | Пусть <tex>s</tex> — исходная строка, а <tex>\tau</tex> — [[Токенизация (NLP)|токенизатор]]. Токенизация отображает строку в последовательность индексов словаря: | ||
| + | |||
| + | ::<tex>\tau(s)=x_{1:T},\qquad x_t\in\mathcal V.</tex> | ||
| + | |||
| + | В классической постановке токеном может быть слово, символ или морфема. В современных [[Трансформер |трансформерах]] обычно применяются подсловные токенизаторы: [[Byte Pair Encoding]], [[WordPiece]] или [[SentencePiece]]. Они уменьшают проблему OOV, поскольку редкое слово раскладывается на более частые подсловные элементы. После токенизации индекс <tex>x_t</tex> кодируется one-hot-вектором <tex>e_{x_t}</tex>, который умножается на матрицу эмбеддингов <tex>E</tex>: | ||
| + | |||
| + | ::<tex>h_t^{(0)}=E^\top e_{x_t}+p_t,\qquad E\in\mathbb R^{|\mathcal V|\times d}.</tex> | ||
| + | |||
| + | Здесь <tex>h_t^{(0)}</tex> — начальное скрытое представление токена, <tex>d</tex> — размерность эмбеддинга, а <tex>p_t</tex> — позиционное представление, необходимое для учёта порядка токенов. | ||
| + | |||
| + | ; Мешок слов, TF-IDF и n-граммные модели. | ||
| + | |||
| + | Классическая модель мешка слов игнорирует порядок токенов и представляет документ как вектор частот. Для слова <tex>w</tex>, документа <tex>r</tex> и корпуса <tex>D</tex> вес [[TF-IDF]] обычно записывается как | ||
| + | |||
| + | ::<tex>\operatorname{tfidf}(w,r)=\operatorname{tf}(w,r)\log\frac{|D|}{1+\operatorname{df}(w)}.</tex> | ||
| + | |||
| + | Здесь <tex>\operatorname{tf}(w,r)</tex> — частота слова <tex>w</tex> в документе <tex>r</tex>, а <tex>\operatorname{df}(w)</tex> — число документов, содержащих это слово. Такой подход хорошо работает в [[информационный поиск|информационном поиске]] и [[линейный классификатор|линейной классификации]], но не моделирует дальние зависимости и смысловую многозначность. | ||
| + | |||
| + | В <tex>n</tex>-граммной [[языковая модель|языковой модели]] вероятность следующего токена приближается вероятностью, зависящей только от конечного контекста длины <tex>n-1</tex>: | ||
| + | |||
| + | ::<tex>p(x_t\mid x_{<t})\approx p(x_t\mid x_{t-n+1},\ldots,x_{t-1}).</tex> | ||
| + | |||
| + | При сглаживании Лапласа для истории <tex>h</tex>, следующего слова <tex>w</tex>, счётчика <tex>c(h,w)</tex> и параметра <tex>\alpha</tex> получается оценка | ||
| + | |||
| + | ::<tex>\hat p(w\mid h)=\frac{c(h,w)+\alpha}{c(h)+\alpha|\mathcal V|}.</tex> | ||
| + | |||
| + | Эти модели интерпретируемы и быстры, но страдают от разреженности: число возможных контекстов растёт экспоненциально с увеличением <tex>n</tex>. | ||
| + | |||
| + | ; Распределительная семантика и Word2Vec. | ||
| + | |||
| + | В распределительных моделях каждому слову соответствует плотный вектор. В задаче [[Skip-Gram]] с negative sampling модель максимизирует близость целевого слова <tex>w</tex> и контекстного слова <tex>c</tex>, одновременно отталкивая случайные отрицательные контексты <tex>\tilde c_j</tex>: | ||
| + | |||
| + | ::<tex>\mathcal L_{\mathrm{SGNS}}=-\log\sigma(u_w^\top v_c)-\sum_{j=1}^{m}\mathbb E_{\tilde c_j\sim P_n}\log\sigma(-u_w^\top v_{\tilde c_j}).</tex> | ||
| + | |||
| + | Здесь <tex>u_w</tex> и <tex>v_c</tex> — обучаемые [[вектор|векторы]], <tex>m</tex> — число отрицательных примеров, <tex>P_n</tex> — шумовое распределение, а <tex>\sigma</tex> — [[логистическая функция]]. Близость векторов часто измеряется косинусной мерой: | ||
| + | |||
| + | ::<tex>\operatorname{cos}(a,b)=\frac{a^\top b}{\|a\|_2\|b\|_2}.</tex> | ||
| + | |||
| + | Главное ограничение статических эмбеддингов состоит в том, что слово имеет один вектор независимо от контекста. Например, слово «ключ» в значениях «ключ от двери» и «ключ к задаче» требует разных представлений. Контекстные эмбеддинги, такие как [[ELMo]] и [[BERT]], решают эту проблему путём вычисления представления слова на основе окружающего контекста. | ||
| + | |||
| + | ; Последовательностные нейронные модели. | ||
| + | |||
| + | [[Рекуррентная нейронная сеть]] обрабатывает последовательность слева направо и обновляет скрытое состояние <tex>h_t</tex> по предыдущему состоянию <tex>h_{t-1}</tex> и текущему токену <tex>x_t</tex>: | ||
| + | |||
| + | ::<tex>h_t=\phi(W_x e_{x_t}+W_hh_{t-1}+b),\qquad \hat y=\operatorname{softmax}(W_oh_T+b_o).</tex> | ||
| + | |||
| + | Такие модели естественно подходят для последовательностей переменной длины, но плохо параллелизуются и испытывают трудности с дальними зависимостями. [[LSTM]] и [[GRU]] частично решают проблему затухающих [[градиент|градиентов]] с помощью вентилей, однако для очень длинных контекстов они уступают [[Трансформер |трансформерам]]. | ||
| + | |||
| + | ; Самовнимание и трансформер. | ||
| + | |||
| + | В [[Трансформер |трансформере]] входная матрица скрытых состояний <tex>H\in\mathbb R^{T\times d_{\mathrm{model}}}</tex> преобразуется в матрицы запросов <tex>Q</tex>, ключей <tex>K</tex> и значений <tex>V</tex>: | ||
| + | |||
| + | ::<tex>Q=HW_Q,\qquad K=HW_K,\qquad V=HW_V.</tex> | ||
| + | |||
| + | [[Механизм внимания|Механизм scaled dot-product attention]] вычисляет веса взаимодействия всех токенов друг с другом: | ||
| + | |||
| + | ::<tex>\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V.</tex> | ||
| + | |||
| + | Деление на <tex>\sqrt{d_k}</tex> стабилизирует масштаб скалярных произведений. В многоголовом внимании используется несколько независимых проекций, что позволяет разным головам моделировать разные типы зависимостей: | ||
| + | |||
| + | ::<tex>\operatorname{head}_i=\operatorname{Attention}(HW_i^Q,HW_i^K,HW_i^V),\qquad \operatorname{MHA}(H)=\operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_m)W^O.</tex> | ||
| + | |||
| + | Каждый блок [[Трансформер |трансформера]] также включает остаточные связи, нормализацию слоёв и позиционно-независимую полносвязную сеть: | ||
| + | |||
| + | ::<tex>\tilde H=\operatorname{LayerNorm}(H+\operatorname{MHA}(H)),\qquad H'=\operatorname{LayerNorm}(\tilde H+\operatorname{FFN}(\tilde H)).</tex> | ||
| + | |||
| + | ::<tex>\operatorname{FFN}(h)=\sigma(hW_1+b_1)W_2+b_2.</tex> | ||
| + | |||
| + | Для авторегрессионной генерации используется каузальная маска, запрещающая позиции <tex>i</tex> смотреть на будущие позиции <tex>j</tex>: | ||
| + | |||
| + | ::<tex>A_{ij}=-\infty\quad\text{при}\quad j>i.</tex> | ||
| + | |||
| + | Именно самовнимание делает [[Трансформер |трансформер]] универсальной архитектурой для кодировщиков, декодировщиков и кодировщик-декодировщик моделей. [[Кодировщик|Кодировщики]], такие как [[BERT]] и [[RoBERTa]], особенно полезны для понимания текста; [[Декодировщик|декодировщики]], такие как [[GPT]] и [[GPT-2]], — для генерации; модели типа [[T5]] и [[BART]] удобны для перевода, реферирования и преобразования текста в текст. | ||
| + | |||
| + | ; Функции потерь. | ||
| + | |||
| + | Для классификации с <tex>C</tex> классами обычно используется [[кросс-энтропия]]: | ||
| + | |||
| + | ::<tex>\mathcal L_{\mathrm{CE}}(\theta)=-\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C}y_{ic}\log \hat y_{ic}.</tex> | ||
| + | |||
| + | В авторегрессионном [[языковая модель|языковом моделировании]] модель предсказывает следующий токен по предыдущим: | ||
| + | |||
| + | ::<tex>\mathcal L_{\mathrm{CLM}}(\theta)=-\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t}).</tex> | ||
| + | |||
| + | В маскированном [[языковая модель|языковом моделировании]], применяемом в [[BERT]]-подобных кодировщиках, восстанавливаются токены из множества масок <tex>M</tex>: | ||
| + | |||
| + | ::<tex>\mathcal L_{\mathrm{MLM}}(\theta)=-\sum_{t\in M}\log p_\theta(x_t\mid x_{\setminus M}).</tex> | ||
| + | |||
| + | Для задач преобразования последовательности <tex>x_{1:T_x}</tex> в последовательность <tex>y_{1:T_y}</tex> используется условная отрицательная логарифмическая правдоподобность: | ||
| + | |||
| + | ::<tex>\mathcal L_{\mathrm{seq2seq}}(\theta)=-\sum_{t=1}^{T_y}\log p_\theta(y_t\mid y_{<t},x_{1:T_x}).</tex> | ||
| + | |||
| + | ; Метрики качества. | ||
| + | |||
| + | Для [[классификация|классификации]] применяются accuracy, macro-averaging, micro-averaging и <tex>F_1</tex>-мера: | ||
| + | |||
| + | ::<tex>F_1=2\frac{\operatorname{precision}\cdot\operatorname{recall}}{\operatorname{precision}+\operatorname{recall}}.</tex> | ||
| + | |||
| + | Для [[языковая модель|языкового моделирования]] стандартной метрикой является [[перплексия]]: | ||
| + | |||
| + | ::<tex>\operatorname{PPL}=\exp\left(-\frac{1}{T}\sum_{t=1}^{T}\log p_\theta(x_t\mid x_{<t})\right).</tex> | ||
| + | |||
| + | Чем ниже <tex>\operatorname{PPL}</tex>, тем выше средняя вероятность правильных токенов, хотя низкая перплексияне гарантирует фактическую полезность ответа. | ||
| + | |||
| + | Для [[машинный перевод|машинного перевода]] часто используется [[BLEU]] — геометрическое среднее модифицированных точностей по <tex>n</tex>-граммам с штрафом за слишком короткий перевод: | ||
| + | |||
| + | ::<tex>\operatorname{BLEU}=\operatorname{BP}\cdot\exp\left(\sum_{n=1}^{N}w_n\log p_n\right),\qquad \operatorname{BP}=\begin{cases}1,& l_{\mathrm{cand}}>l_{\mathrm{ref}},\\ \exp(1-l_{\mathrm{ref}}/l_{\mathrm{cand}}),& l_{\mathrm{cand}}\le l_{\mathrm{ref}}.\end{cases}</tex> | ||
| + | |||
| + | Для реферирования используется [[ROUGE]], измеряющая покрытие эталонных <tex>N</tex>-грамм: | ||
| + | |||
| + | ::<tex>\operatorname{ROUGE}\text{-}N=\frac{\sum_{s\in S_{\mathrm{ref}}}\sum_{g\in G_N(s)}\min(C_{\mathrm{cand}}(g),C_{\mathrm{ref}}(g))}{\sum_{s\in S_{\mathrm{ref}}}\sum_{g\in G_N(s)}C_{\mathrm{ref}}(g)}.</tex> | ||
| + | |||
| + | Для вопросно-ответных систем используются точные совпадения (exact match) и F1-мера, основанная на перекрытии токенов между предсказанным и эталонным ответом. Автоматические метрики удобны для массового сравнения моделей, но в задачах генерации их необходимо дополнять человеческой оценкой, проверкой фактической корректности, устойчивости и безопасности. | ||
| + | |||
| + | |||
| + | == Схема обучения и рекомендации == | ||
| + | |||
| + | Полный NLP-пайплайн обычно включает сбор данных, очистку, разбиение на выборки, токенизацию, обучение или адаптацию модели, валидацию, анализ ошибок, деплой и мониторинг. На каждом этапе возможны ошибки, которые существенно искажают итоговую оценку качества. | ||
| + | |||
| + | * '''Разбиение данных.''' Нельзя допускать утечку между train, validation и test. Для новостных, юридических и медицинских корпусов особенно опасны дубликаты, пересечения авторов, цитируемые фрагменты и временная утечка. Если будущие документы отличаются от прошлых, предпочтительно временное разбиение. | ||
| + | |||
| + | * '''Очистка и нормализация.''' Необходимо сохранять те элементы текста, которые несут сигнал для задачи. Например, пунктуация и регистр могут быть важны для [[анализ тональности|анализа тональности]], а удаление чисел может ухудшить [[информационное извлечение|извлечение фактов]]. | ||
| + | |||
| + | * '''Токенизация и OOV.''' Подсловные методы уменьшают число неизвестных токенов, но могут дробить редкие имена и термины на длинные цепочки. Для доменных задач полезны адаптация [[Токенизация (NLP)|токенизатора]], добавление специальных токенов и продолжение предобучения на доменном корпусе. | ||
| + | |||
| + | * '''Контекстное окно.''' Модель с максимальной длиной <tex>L</tex> не видит токены за пределами окна. Простая обрезка может удалить ключевой контекст. Для длинных документов применяются скользящие окна, иерархические модели, [[retrieval-augmented generation|retrieval-подходы]] и архитектуры с разреженным вниманием. | ||
| + | |||
| + | * '''Дисбаланс классов.''' В задачах [[классификация|классификации]] редкие классы требуют стратифицированного разбиения, взвешенной функции потерь, переоценки порога решения и анализа macro-метрик. | ||
| + | |||
| + | * '''Катастрофическое забывание.''' При агрессивном дообучении большая модель может потерять общие знания. Рекомендуются малая скорость обучения <tex>\eta</tex>, ранняя остановка, заморозка части слоёв, адаптеры, [[LoRA]] и регуляризация. | ||
| + | |||
| + | * '''Оценка генерации.''' Для реферирования, диалога и вопросно-ответных систем недостаточно [[BLEU]] или [[ROUGE]]. Нужно оценивать фактическую точность, полноту, токсичность, следование инструкции, устойчивость к подсказкам и воспроизводимость. | ||
| + | |||
| + | * '''Хранение и обслуживание моделей.''' Необходимо отслеживать версии моделей, их производительность на разных наборах данных, дрейф дистрибуции, скорость инференса и энергопотребление. Используются инструменты типа [[MLflow]], [[Weights & Biases]], [[DVC]] для версионирования и мониторинга. | ||
| + | |||
| + | Оптимизация [[Трансформер |трансформеров]] обычно выполняется вариантом [[Adam|AdamW]] с раздельным weight decay: | ||
| + | |||
| + | ::<tex>\theta_{t+1}=\theta_t-\eta\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}-\eta\lambda\theta_t.</tex> | ||
| + | |||
| + | Здесь <tex>\theta_t</tex> — параметры на шаге <tex>t</tex>, <tex>\hat m_t</tex> и <tex>\hat v_t</tex> — скорректированные оценки первого и второго моментов [[градиент|градиента]], <tex>\eta</tex> — скорость обучения, <tex>\epsilon</tex> — стабилизирующая константа, а <tex>\lambda</tex> — коэффициент weight decay. На практике важны [[scheduler]] с warmup, [[gradient clipping]] и смешанная точность (mixed precision). Ограничение нормы [[градиент|градиента]] <tex>g</tex> порогом <tex>\gamma</tex> можно записать так: | ||
| + | |||
| + | ::<tex>g\leftarrow g\cdot\min\left(1,\frac{\gamma}{\|g\|_2}\right).</tex> | ||
| + | |||
| + | Для адаптации больших моделей часто применяются методы [[PEFT]]. В [[LoRA]] вместо полного изменения матрицы <tex>W</tex> обучается низкоранговая поправка: | ||
| + | |||
| + | ::<tex>W'=W+\Delta W,\qquad \Delta W=\frac{\alpha}{r}BA,\qquad A\in\mathbb R^{r\times d_{\mathrm{in}}},\quad B\in\mathbb R^{d_{\mathrm{out}}\times r}.</tex> | ||
| + | |||
| + | Здесь <tex>r</tex> — ранг адаптации, а <tex>\alpha</tex> — масштабирующий коэффициент. [[LoRA]] резко уменьшает число обучаемых параметров, что особенно важно при дообучении больших языковых моделей на ограниченных GPU-ресурсах. | ||
| + | |||
| + | При генерации текста выбор следующего токена определяется распределением <tex>p_\theta(x_t\mid x_{<t})</tex>. Температурное масштабирование изменяет энтропию распределения: | ||
| + | |||
| + | ::<tex>p_i^{(\tau)}=\frac{\exp(z_i/\tau)}{\sum_j\exp(z_j/\tau)}.</tex> | ||
| + | |||
| + | Малая температура <tex>\tau</tex> делает ответы более детерминированными, большая — более разнообразными. Кроме greedy decoding и beam search используются sampling, top-<tex>k</tex> и nucleus sampling с порогом <tex>p</tex>. Для прикладных систем параметры декодирования следует подбирать не только по автоматическим метрикам, но и по требованиям к точности, стилю и безопасности. | ||
| + | |||
| + | == Современные подходы и State-of-the-Art (SOTA) == | ||
| + | |||
| + | Современное состояние обработки естественного языка определяется большими языковыми моделями (LLM), предобученными на огромных текстовых корпусах. Типичная [[LLM]] является декодерным [[Трансформер |трансформером]], обученным минимизировать авторегрессионную потерю <tex>\mathcal L_{\mathrm{CLM}}</tex>. С увеличением числа параметров, объёма данных и вычислений модели приобретают способность к few-shot и zero-shot обобщению, следованию инструкциям, программированию, рассуждению по цепочке (chain-of-thought) и использованию внешних инструментов. | ||
| + | |||
| + | Значимые работы последних лет включают: | ||
| + | |||
| + | * '''[[GPT]] и его семейство.''' [[GPT]] (Radford et al., 2018), [[GPT-2]], [[GPT-3]], [[GPT-3.5]], [[GPT-4]] представляют собой авторегрессионные модели, обученные в режиме next-token prediction. [[GPT-3]] с 175 млрд параметров продемонстрировал неожиданно сильные few-shot способности благодаря масштабу. [[GPT-4]] добавил мультимодальность и улучшения в рассуждении. | ||
| + | |||
| + | * '''[[BERT]] и энкодеры.''' [[BERT]] (Devlin et al., 2019), [[RoBERTa]], [[ELECTRA]] показали, что предобучение на маскированном языковом моделировании создаёт мощные двунаправленные кодировщики, полезные для классификации и таких задач, как [[извлечение именованных сущностей]]. Эти модели обычно имеют 100М-350М параметров и хорошо перепираются на GPU среднего размера. | ||
| + | |||
| + | * '''Семейство T5.''' [[T5]] (Raffel et al., 2020) показал, что единая архитектура трансформера типа «кодировщик-декодировщик» может решать широкий спектр NLP-задач, включая [[классификация текста|классификацию]], вопросно-ответное взаимодействие, реферирование и [[машинный перевод]]. Все задачи формулируются как преобразование текста в текст (text-to-text). | ||
| + | |||
| + | * '''Многоязычные модели.''' [[mBERT]] (multilingual BERT), [[XLM-R]], [[mT5]], [[mBART]] обучаются на текстах множества языков одновременно и демонстрируют сильный кроссязычный перенос, что особенно важно для низкоресурсных языков. | ||
| + | |||
| + | * '''Специализированные модели.''' Помимо универсальных моделей развиваются модели, обученные на специфических доменах и задачах: [[SciBERT]] для научных текстов, [[ClimateBERT]] для климатических документов, медицинские BERT, финансовые BERT, правовые модели типа [[LawBERT]]. | ||
| + | |||
| + | При этом SOTA в обработке естественного языка не сводится к максимальному числу параметров. Для [[классификация|классификации]] и [[извлечение именованных сущностей|извлечения сущностей]] компактный кодировщик на десятки миллионов параметров может быть быстрее, дешевле и стабильнее крупной генеративной модели. Например, модель порядка <tex>10^7</tex> параметров может быть достаточна для простого [[анализ тональности|анализа тональности]], тогда как модель порядка <tex>8\cdot10^7</tex> параметров обычно лучше переносит контекст и редкие формулировки, но требует больше памяти и времени инференса. Для сложных задач рассуждения, многошагового диалога и генерации кода преимущество получают модели с существенно большим масштабом и инструкционным дообучением. | ||
| + | |||
| + | Одно из центральных направлений — [[RAG|Retrieval-Augmented Generation (RAG)]]. В RAG входной запрос <tex>x</tex> сначала используется для поиска релевантных документов в коллекции <tex>\mathcal D</tex>: | ||
| + | |||
| + | ::<tex>\mathcal D_k(x)=\operatorname{TopK}_{d\in\mathcal D}\operatorname{sim}(q(x),e(d)).</tex> | ||
| + | |||
| + | Затем генератор строит ответ <tex>y</tex> с учётом найденного контекста: | ||
| + | |||
| + | ::<tex>p(y\mid x)\approx\sum_{d\in\mathcal D_k(x)}p_\eta(d\mid x)p_\theta(y\mid x,d).</tex> | ||
| + | |||
| + | [[RAG]] уменьшает число фактических ошибок, позволяет обновлять знания без полного переобучения модели и делает ответы проверяемыми через ссылки на источники. Однако качество RAG-системы зависит не только от генератора, но и от разбиения документов на фрагменты, эмбеддингов, индекса, ранжирования, дедупликации и защиты от нерелевантного контекста. | ||
| + | |||
| + | Актуальные бенчмарки включают: | ||
| + | |||
| + | * '''GLUE и SuperGLUE''' — наборы задач для оценки понимания языка, включающие классификацию текста, похожесть фраз, вывод на естественном языке. | ||
| + | * '''SQuAD и Natural Questions''' — для вопросно-ответных систем. | ||
| + | * '''WMT''' — для [[машинный перевод|машинного перевода]]. | ||
| + | * '''MMLU (Massive Multitask Language Understanding)''' — многопредметная проверка знаний, содержащая вопросы по 57 дисциплинам. | ||
| + | * '''Big-Bench и HELM (Holistic Evaluation of Language Models)''' — комплексная оценка LLM на множестве задач и свойств. | ||
| + | * '''XTREME и XNLI''' — для многоязычного переноса и перекрёстного языкового взаимодействия. | ||
| + | * '''Russian SuperGLUE, RuSentiment, RuCoLA, Taiga, Lenta, RuBQ''' — для русскоязычных задач. | ||
| + | |||
| + | При интерпретации результатов важно учитывать загрязнение тестов обучающими данными, различия в [[prompt engineering|промптах]], размер контекстного окна, стоимость инференса и дисперсию оценок. | ||
| + | |||
| + | В прикладном SOTA широко используются: | ||
| + | |||
| + | * '''Инструкционное дообучение''' (instruction tuning) — дообучение на примерах вида (инструкция, ввод, ожидаемый вывод) для повышения способности следовать указаниям. | ||
| + | * '''RLHF''' (Reinforcement Learning from Human Feedback) — обучение с подкреплением на основе человеческих предпочтений, используется в ChatGPT и других моделях. | ||
| + | * '''DPO''' (Direct Preference Optimization) — прямая оптимизация на предпочтениях без явного обучения модели вознаграждения. | ||
| + | * '''Конституционное обучение''' — использование набора конституционных принципов для улучшения качества и безопасности. | ||
| + | * '''[[QLoRA]]''' — квантизованная версия [[LoRA]], позволяющая дообучение больших моделей на более скромном оборудовании. | ||
| + | * '''Адаптеры''' — небольшие параметрические модули, вставляемые в слои больших моделей для адаптации под новые задачи. | ||
| + | * '''Дистилляция''' (distillation) — перенос знаний от большой модели к компактной, что уменьшает время инференса. | ||
| + | * '''Квантизация''' — представление весов моделей с меньшей точностью (int8, fp16) для ускорения и экономии памяти. | ||
| + | * '''Mixture of Experts (MoE)''' — архитектура, где разные эксперты обрабатывают разные части входа, позволяя масштабировать ёмкость без пропорционального роста вычислений. | ||
| + | * '''Длинноконтекстные трансформеры''' — архитектуры типа [[Longformer]], [[BigBird]], [[ALiBi]], которые эффективно обрабатывают тысячи или десятки тысяч токенов, критичны для обработки полных документов и кодовых файлов. | ||
| + | * '''Мультимодальные расширения''' — интеграция текста с изображениями ([[CLIP]], [[ALIGN]]), аудио ([[Whisper]]), видео. | ||
| + | |||
| + | Всё более важными становятся не только точность (accuracy) и [[перплексия]], но и надёжность, калибровка уверенности модели, устойчивость к adversarial-промптам, приватность данных, воспроизводимость результатов, соответствие правовым ограничениям (GDPR, защита авторского права), прозрачность работы моделей и минимизация экологических выбросов при обучении и инференсе. | ||
| + | |||
| + | == См. также == | ||
| + | |||
| + | * [[Машинное обучение]] | ||
| + | * [[Глубокое обучение]] | ||
| + | * [[Языковая модель]] | ||
| + | * [[Токенизация]] | ||
| + | * [[Векторное представление слова]] | ||
| + | * [[Рекуррентная нейронная сеть]] | ||
| + | * [[Машинный перевод]] | ||
| + | * [[Классификация текста]] | ||
| + | * [[Анализ тональности]] | ||
| + | * [[Извлечение именованных сущностей]] | ||
| + | * [[Синтаксический анализ]] | ||
| + | * [[Семантический анализ]] | ||
| + | * [[Информационный поиск]] | ||
| + | * [[Вопросно-ответная система]] | ||
| + | * [[Морфологический анализ]] | ||
| + | * [[Лемматизация]] | ||
| + | * [[Стемминг]] | ||
| + | * [[Информационное извлечение]] | ||
| + | * [[LoRA]] | ||
| + | * [[Prompt engineering]] | ||
| + | * [[BLEU]] | ||
| + | * [[ROUGE]] | ||
| + | * [[Перплексия]] | ||
| + | |||
| + | |||
| + | == Примечания == | ||
| + | <references /> | ||
| + | |||
| + | == Литература == | ||
| + | |||
| + | {{статья | автор = Mikolov T., Chen K., Corrado G., Dean J. | заглавие = Efficient Estimation of Word Representations in Vector Space | издание = arXiv | год = 2013 | страницы = 1-12 }} | ||
| + | |||
| + | {{статья | автор = Vaswani A., Shazeer N., Parmar N., Uszkoreit J., Jones L., Gomez A. N., Kaiser L., Polosukhin I. | заглавие = Attention Is All You Need | издание = Advances in Neural Information Processing Systems | год = 2017 | страницы = 5998-6008 }} | ||
| + | |||
| + | {{статья | автор = Devlin J., Chang M.-W., Lee K., Toutanova K. | заглавие = BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding | издание = Proceedings of NAACL-HLT | год = 2019 | страницы = 4171-4186 }} | ||
| + | |||
| + | {{статья | автор = Brown T. B., Mann B., Ryder N., Subbiah M., Kaplan J. et al. | заглавие = Language Models are Few-Shot Learners | издание = Advances in Neural Information Processing Systems | год = 2020 | страницы = 1877-1901 }} | ||
| + | |||
| + | {{книга | автор = Jurafsky D., Martin J. H. | заглавие = Speech and Language Processing | место = Stanford | издательство = Stanford University | год = 2024 }} | ||
| + | |||
| + | [[Категория:Машинное обучение]] | ||
| + | [[Категория:Искусственные нейронные сети]] | ||
| + | [[Категория:Обработка естественного языка]] | ||
Текущая версия
| | Статья написана с использованием LLM ChatGPT-5.5 и проверена участником Artem Abdulmanov 18:40, 17 июля 2026 (MSD)
Промпт приводится полностью в Обсуждение:Обработка естественного языка |
|
Введение
Обработка естественного языка (англ. Natural Language Processing, NLP) — область искусственного интеллекта, машинного обучения и компьютерной лингвистики, изучающая методы автоматического анализа, понимания, преобразования и генерации текстов и речи на естественных языках. Центральная задача обработки естественного языка состоит в построении вычислительных моделей, которые способны сопоставлять языковую форму с её смыслом, контекстом, намерением автора и требуемым действием системы.
Формально текст часто рассматривается как последовательность дискретных единиц — токенов , принадлежащих словарю
. Модель с параметрами
должна оценивать распределения вида
для предсказания метки
, ответа, перевода, следующего токена или иной целевой структуры. В отличие от задач, где исходные признаки заданы численно, естественный язык дискретен, неоднозначен, контекстно зависим и содержит сложные явления: синонимию, омонимию, эллипсис, анафору, имплицитные знания и прагматику.
К типичным задачам обработки естественного языка относятся классификация текста, анализ тональности, извлечение именованных сущностей, синтаксический анализ, семантический анализ, машинный перевод, автоматическое реферирование, вопросно-ответные системы, поиск по смыслу, диалоговые агенты и языковое моделирование. Современные системы обработки естественного языка опираются на искусственные нейронные сети, векторные представления, механизм внимания и архитектуру трансформера, что позволяет обучать модели на больших корпусах и переносить знания между задачами.
Мотивировка и историческая справка
Потребность в обработке естественного языка возникла одновременно с развитием вычислительной техники. Уже в 1950-х годах пионеры компьютерной лингвистики, включая Уоррена Уивера и Артура Самуэля, осознали, что компьютеры можно обучить обрабатывать и анализировать текст. В этот период доминировал символьный подход: использовались регулярные выражения, конечные автоматы, словари, экспертные правила и формальные грамматики. Теория порождающих грамматик Ноама Хомского, предложенная в конце 1950-х годов, оказала огромное влияние на представления о синтаксисе и формальной структуре языка.
Ранние системы машинного перевода, разработанные в 1950-1960-х годах под эгидой программы ARPA, использовали словари и морфосинтаксические правила. Однако первые попытки на автоматический перевод с русского на английский показали, что простой подход замены слов неэффективен. Проблема была признана столь сложной, что в 1966 году был выпущен отчёт ALPAC (Automatic Language Processing Advisory Committee), который значительно сокращает финансирование NLP на десятилетие.
В 1960-х–1980-х годах развивались методы синтаксического разбора, включая алгоритмы Кока–Янгера–Касами и Эрли, а также фреймворки типа семантических сетей и логических представлений. Система ELIZA, разработанная Джозефом Вайценбаумом в 1960-х, демонстрировала, что даже поверхностные шаблоны и простая подстановка текста могут создавать иллюзию понимания и диалога, хотя она и не обладала настоящим семантическим пониманием.
Символьные подходы были интерпретируемыми, но плохо масштабировались: для каждого языка, домена и жанра требовалось вручную описывать большое количество исключений и лингвистических правил. С ростом доступных текстовых корпусов и вычислительных ресурсов, начиная с 1980-х годов, в обработке естественного языка всё более прочно утверждался статистический подход. Появились скрытые марковские модели для морфологического анализа и разметки частей речи, вероятностные контекстно-свободные грамматики, байесовские сети и методы максимального правдоподобия. n-граммные языковые модели обеспечивали хорошее масштабирование на больших текстах, хотя и не могли моделировать дальние зависимости.
Параллельно развивались информационно-поисковые методы: TF-IDF, косинусное сходство документов, инвертированные индексы. Статистический машинный перевод на основе выравнивания фраз (phrase-based SMT) показал, что можно автоматически обучать модели перевода по двуязычным параллельным корпусам, хотя качество оставалось далеким от человеческого.
Важный переход произошёл с открытием распределительной семантики. Идея «слово известно по его окружению» (дистрибютивная гипотеза, предложенная Харрисом в 1954 году, но широко применённая только спустя десятилетия) привела к методам латентно-семантического анализа (LSA) и впоследствии к нейронным моделям Word2Vec (Мikolov et al., 2013), GloVe и fastText. В таких моделях слово получает плотный вектор
, а семантическая близость измеряется геометрически. Word2Vec показал, что компактные векторные представления можно эффективно обучать на больших корпусах и использовать как признаки для широкого круга задач [1]. Это открыло эпоху глубокого обучения в обработке естественного языка.
В 2010-е годы произошёл быстрый переход к глубоким последовательностным моделям. Рекуррентные нейронные сети, особенно LSTM и GRU, позволили обрабатывать последовательности переменной длины и сохранять информацию на больших расстояниях благодаря механизму вентилей. Архитектура кодировщик-декодировщик (encoder-decoder), предложенная Сутскевером, Виецеля и Чо, позволила применять RNN к задачам трансформации последовательностей, таким как машинный перевод.
Решающий прорыв произошёл введением механизма внимания. Бахданау и соавторы (2014) показали, что модель-декодер может селективно фокусироваться на разных частях входной последовательности на каждом шаге, резко улучшив качество машинного перевода. Однако RNN-подход остаётся процедурным: обработка последовательности требует последовательных шагов, что плохо параллелизуется на современном GPU-оборудовании.
В 2017 году статья Vaswani et al. «Attention Is All You Need» представила архитектуру трансформера, которая полностью заменила рекуррентность на механизм самовнимания и полносвязные слои. Трансформер обрабатывает всю последовательность параллельно, благодаря чему хорошо масштабируется на GPU и TPU. Это стало основой для почти всех современных успехов в обработке естественного языка [1].
После появления BERT (Devlin et al., 2019) и GPT (Radford et al., 2018) произошла парадигма-шифт к предобучению больших моделей на общих текстовых корпусах и последующему дообучению под конкретные задачи. BERT ввёл эффективную схему маскированного языкового моделирования для двунаправленного кодировщика [1], позволяя модели видеть как левый, так и правый контекст одновременно. Семейство GPT показало масштабируемость авторегрессионных декодеров и возможность решения задач по инструкции без классического обучения на размеченной выборке [1].
В 2020-х годах произошло экспоненциальное увеличение масштаба моделей: от BERT с 340 млн параметров к GPT-3 с 175 млрд параметров, Chinchilla, PaLM и GPT-4. Работа Hoffmann et al. показала оптимальный баланс между размером модели и количеством токенов обучающих данных. Одновременно развивались методы эффективной адаптации больших моделей под новые задачи без полного переобучения: LoRA, QLoRA, адаптеры, prompt engineering и few-shot learning.
В современный период обработка естественного языка всё чаще объединяется с поиском (RAG), базами знаний, мультимодальными входами (текст + изображения в CLIP, DALL-E, GPT-4V), инструментальным выполнением действий и принципами конституционного обучения. Растут требования к безопасности, надёжности, интерпретируемости и соответствию правовым ограничениям, таким как защита персональных данных и борьба с дискриминацией в моделях.
Основные задачи обработки естественного языка
Обработка естественного языка охватывает широкий спектр задач, которые можно разделить на несколько категорий по уровню анализа и целям.
- Задачи уровня токенов и слов.
- Морфологический анализ. Определение морфологических свойств слова: части речи, падежа, числа, времени, вида и т.д. Особенно важна для синтетических языков с богатой морфологией (русский, финский, турецкий), менее актуальна для аналитических языков (английский, китайский).
- Лемматизация. Приведение слова к его базовой форме (лемме). Например, слова «читал», «читать», «читают» лемматизируются в «читать». Используется в информационном поиске и документировании.
- Стемминг. Приведение слова к его корню путём удаления суффиксов и префиксов. Проще лемматизации, но менее точно. Алгоритмы Porter Stemmer для английского языка широко распространены.
- Разметка частей речи. Присвоение каждому слову метки части речи (существительное, глагол, прилагательное, предлог и т.д.). Часто решается с помощью скрытых марковских моделей, условных случайных полей или трансформеров.
- Извлечение именованных сущностей. Выделение и классификация именованных сущностей (названия людей, мест, организаций, продуктов). Часто решается как задача последовательного мечения (sequence labeling) с использованием BIO-схемы разметки.
- Задачи синтаксического анализа.
- Синтаксический анализ. Определение грамматической структуры предложения. Включает построение дерева зависимостей (dependency tree), где каждое слово связано со своим главным словом, или дерева составляющих (constituency tree), представляющего иерархическую структуру фраз. Решается с помощью алгоритмов типа перехода (transition-based) или графовых (graph-based) методов.
- Разрешение анафоры. Определение того, на какую сущность в тексте ссылается местоимение или дефинитный артикль. Например, в предложении «Мария встретила Джона, и он улыбнулся», нужно понять, что «он» относится к Джону. Решается с помощью методов графовых нейронных сетей и кандидатского ранжирования.
- Задачи семантического анализа.
- Анализ тональности (sentiment analysis). Определение эмоционального подтекста текста: позитивное, негативное или нейтральное отношение. Может выполняться на уровне документа, предложения или аспекта (aspect-based sentiment analysis). Широко используется для анализа отзывов, комментариев в социальных сетях и репутационного мониторинга.
- Классификация текста (text classification). Отнесение текста к одной или нескольким категориям. Примеры: классификация новостей по темам, фильтрация спама, определение языка документа, классификация по жанру. Решается с помощью логистической регрессии, SVM, случайных лесов и трансформеров.
- Поиск по смыслу (semantic similarity). Определение семантической близости между двумя текстами. Используется в информационном поиске, дедупликации документов, рекомендательных системах. Решается с помощью обучения общих представлений через контрастные функции потерь.
- Информационный поиск (information retrieval). Поиск релевантных документов в большой коллекции по запросу. Классические методы основаны на TF-IDF и косинусном сходстве; современные системы используют BERT и другие модели для семантического поиска.
- Задачи преобразования текста.
- Машинный перевод. Автоматический перевод текста с одного языка на другой. Исторически использовались статистические подходы (SMT), в настоящее время трансформеры и механизм внимания дают качество близкое к профессиональному. Стандартные метрики: BLEU, METEOR, chrF.
- Автоматическое реферирование (automatic summarization). Создание сжатого пересказа текста, сохраняющего ключевую информацию. Может быть экстрактивным (выбор ключевых фраз из исходного текста) или абстрактивным (генерация нового текста). Метрики: ROUGE, METEOR.
- Исправление ошибок. Автоматическое исправление орфографических и грамматических ошибок в тексте. Современные модели основаны на трансформерах и способны исправлять сложные ошибки в контексте.
- Парафразирование (paraphrasing). Переформулировка текста с сохранением смысла. Используется в генерации вариантов текстов, увеличении обучающей выборки, улучшении разнообразия ответов в диалоговых системах.
- Задачи вопросно-ответного взаимодействия.
- Вопросно-ответная система (question answering, QA). Поиск ответа на вопрос в текстовом контексте или ответ на базе знаний. Может быть открытого типа (нет готового контекста) или закрытого (ответ в документе). Наборы данных: SQuAD, Natural Questions, MS MARCO.
- Информационное извлечение (information extraction). Выделение структурированной информации из неструктурированного текста. Может включать извлечение отношений между сущностями, событий, фактов, параметров (например, цены и рейтинги из описания товара).
- Задачи диалога и генерации.
- Диалоговые системы (dialogue systems). Системы, способные поддерживать диалог с пользователем. Включают task-oriented диалоговые системы (бронирование, поддержка клиентов) и open-domain чат-боты (общее общение). Современные системы основаны на больших языковых моделях.
- Языковое моделирование (language modeling). Предсказание следующего токена по предыдущему контексту. Основа для генерации текста, автодополнения и многих других задач. Метрика: перплексия.
- Текстогенерация (text generation). Генерация нового текста, отвечающего определённым критериям. Примеры: генерация описания изображения, генерация кода, творческое письмо. Решается с помощью декодеров трансформера и различных стратегий декодирования.
- Задачи многоязычного анализа.
- Машинный перевод (уже упоминалась выше).
- Определение языка (language identification). Автоматическое определение того, на каком языке написан текст. Обычно решается как многоклассовая классификация.
- Кроссязычный перенос знаний (cross-lingual transfer). Использование моделей, обученных на одном языке, для задач на другом языке. Особенно важно для низкоресурсных языков. Мультиязычные модели типа mBERT и XLM-R обучаются на текстах многих языков одновременно.
- Задачи интеграции знаний.
- Связь с базами знаний. Связывание упомянутых в тексте сущностей с записями в структурированных базах знаний (например, Wikidata). Решается с помощью методов эмбеддирования сущностей и ранжирования кандидатов.
- RAG (retrieval-augmented generation). Объединение поиска документов с генерацией ответа. Модель сначала извлекает релевантные документы из большой коллекции, а затем генерирует ответ с учётом найденного контекста.
- Многомодальные задачи.
- Визуальное вопросно-ответное взаимодействие (visual question answering, VQA). Ответ на вопросы о содержимом изображения.
- Описание изображения (image captioning). Автоматическое создание текстового описания изображения.
- Совместное обучение текста и изображений. Модели типа CLIP, ALIGN, которые учат совместное представление текста и изображений для поиска и классификации.
Математический аппарат и Архитектура
- Представление текста и токенизация.
Пусть — исходная строка, а
— токенизатор. Токенизация отображает строку в последовательность индексов словаря:
В классической постановке токеном может быть слово, символ или морфема. В современных трансформерах обычно применяются подсловные токенизаторы: Byte Pair Encoding, WordPiece или SentencePiece. Они уменьшают проблему OOV, поскольку редкое слово раскладывается на более частые подсловные элементы. После токенизации индекс кодируется one-hot-вектором
, который умножается на матрицу эмбеддингов
:
Здесь — начальное скрытое представление токена,
— размерность эмбеддинга, а
— позиционное представление, необходимое для учёта порядка токенов.
- Мешок слов, TF-IDF и n-граммные модели.
Классическая модель мешка слов игнорирует порядок токенов и представляет документ как вектор частот. Для слова , документа
и корпуса
вес TF-IDF обычно записывается как
Здесь — частота слова
в документе
, а
— число документов, содержащих это слово. Такой подход хорошо работает в информационном поиске и линейной классификации, но не моделирует дальние зависимости и смысловую многозначность.
В -граммной языковой модели вероятность следующего токена приближается вероятностью, зависящей только от конечного контекста длины
:
При сглаживании Лапласа для истории , следующего слова
, счётчика
и параметра
получается оценка
Эти модели интерпретируемы и быстры, но страдают от разреженности: число возможных контекстов растёт экспоненциально с увеличением .
- Распределительная семантика и Word2Vec.
В распределительных моделях каждому слову соответствует плотный вектор. В задаче Skip-Gram с negative sampling модель максимизирует близость целевого слова и контекстного слова
, одновременно отталкивая случайные отрицательные контексты
:
Здесь и
— обучаемые векторы,
— число отрицательных примеров,
— шумовое распределение, а
— логистическая функция. Близость векторов часто измеряется косинусной мерой:
Главное ограничение статических эмбеддингов состоит в том, что слово имеет один вектор независимо от контекста. Например, слово «ключ» в значениях «ключ от двери» и «ключ к задаче» требует разных представлений. Контекстные эмбеддинги, такие как ELMo и BERT, решают эту проблему путём вычисления представления слова на основе окружающего контекста.
- Последовательностные нейронные модели.
Рекуррентная нейронная сеть обрабатывает последовательность слева направо и обновляет скрытое состояние по предыдущему состоянию
и текущему токену
:
Такие модели естественно подходят для последовательностей переменной длины, но плохо параллелизуются и испытывают трудности с дальними зависимостями. LSTM и GRU частично решают проблему затухающих градиентов с помощью вентилей, однако для очень длинных контекстов они уступают трансформерам.
- Самовнимание и трансформер.
В трансформере входная матрица скрытых состояний преобразуется в матрицы запросов
, ключей
и значений
:
Механизм scaled dot-product attention вычисляет веса взаимодействия всех токенов друг с другом:
Деление на стабилизирует масштаб скалярных произведений. В многоголовом внимании используется несколько независимых проекций, что позволяет разным головам моделировать разные типы зависимостей:
Каждый блок трансформера также включает остаточные связи, нормализацию слоёв и позиционно-независимую полносвязную сеть:
Для авторегрессионной генерации используется каузальная маска, запрещающая позиции смотреть на будущие позиции
:
Именно самовнимание делает трансформер универсальной архитектурой для кодировщиков, декодировщиков и кодировщик-декодировщик моделей. Кодировщики, такие как BERT и RoBERTa, особенно полезны для понимания текста; декодировщики, такие как GPT и GPT-2, — для генерации; модели типа T5 и BART удобны для перевода, реферирования и преобразования текста в текст.
- Функции потерь.
Для классификации с классами обычно используется кросс-энтропия:
В авторегрессионном языковом моделировании модель предсказывает следующий токен по предыдущим:
В маскированном языковом моделировании, применяемом в BERT-подобных кодировщиках, восстанавливаются токены из множества масок :
Для задач преобразования последовательности в последовательность
используется условная отрицательная логарифмическая правдоподобность:
- Метрики качества.
Для классификации применяются accuracy, macro-averaging, micro-averaging и -мера:
Для языкового моделирования стандартной метрикой является перплексия:
Чем ниже , тем выше средняя вероятность правильных токенов, хотя низкая перплексияне гарантирует фактическую полезность ответа.
Для машинного перевода часто используется BLEU — геометрическое среднее модифицированных точностей по -граммам с штрафом за слишком короткий перевод:
Для реферирования используется ROUGE, измеряющая покрытие эталонных -грамм:
Для вопросно-ответных систем используются точные совпадения (exact match) и F1-мера, основанная на перекрытии токенов между предсказанным и эталонным ответом. Автоматические метрики удобны для массового сравнения моделей, но в задачах генерации их необходимо дополнять человеческой оценкой, проверкой фактической корректности, устойчивости и безопасности.
Схема обучения и рекомендации
Полный NLP-пайплайн обычно включает сбор данных, очистку, разбиение на выборки, токенизацию, обучение или адаптацию модели, валидацию, анализ ошибок, деплой и мониторинг. На каждом этапе возможны ошибки, которые существенно искажают итоговую оценку качества.
- Разбиение данных. Нельзя допускать утечку между train, validation и test. Для новостных, юридических и медицинских корпусов особенно опасны дубликаты, пересечения авторов, цитируемые фрагменты и временная утечка. Если будущие документы отличаются от прошлых, предпочтительно временное разбиение.
- Очистка и нормализация. Необходимо сохранять те элементы текста, которые несут сигнал для задачи. Например, пунктуация и регистр могут быть важны для анализа тональности, а удаление чисел может ухудшить извлечение фактов.
- Токенизация и OOV. Подсловные методы уменьшают число неизвестных токенов, но могут дробить редкие имена и термины на длинные цепочки. Для доменных задач полезны адаптация токенизатора, добавление специальных токенов и продолжение предобучения на доменном корпусе.
- Контекстное окно. Модель с максимальной длиной
не видит токены за пределами окна. Простая обрезка может удалить ключевой контекст. Для длинных документов применяются скользящие окна, иерархические модели, retrieval-подходы и архитектуры с разреженным вниманием.
- Дисбаланс классов. В задачах классификации редкие классы требуют стратифицированного разбиения, взвешенной функции потерь, переоценки порога решения и анализа macro-метрик.
- Катастрофическое забывание. При агрессивном дообучении большая модель может потерять общие знания. Рекомендуются малая скорость обучения
, ранняя остановка, заморозка части слоёв, адаптеры, LoRA и регуляризация.
- Оценка генерации. Для реферирования, диалога и вопросно-ответных систем недостаточно BLEU или ROUGE. Нужно оценивать фактическую точность, полноту, токсичность, следование инструкции, устойчивость к подсказкам и воспроизводимость.
- Хранение и обслуживание моделей. Необходимо отслеживать версии моделей, их производительность на разных наборах данных, дрейф дистрибуции, скорость инференса и энергопотребление. Используются инструменты типа MLflow, Weights & Biases, DVC для версионирования и мониторинга.
Оптимизация трансформеров обычно выполняется вариантом AdamW с раздельным weight decay:
Здесь — параметры на шаге
,
и
— скорректированные оценки первого и второго моментов градиента,
— скорость обучения,
— стабилизирующая константа, а
— коэффициент weight decay. На практике важны scheduler с warmup, gradient clipping и смешанная точность (mixed precision). Ограничение нормы градиента
порогом
можно записать так:
Для адаптации больших моделей часто применяются методы PEFT. В LoRA вместо полного изменения матрицы обучается низкоранговая поправка:
Здесь — ранг адаптации, а
— масштабирующий коэффициент. LoRA резко уменьшает число обучаемых параметров, что особенно важно при дообучении больших языковых моделей на ограниченных GPU-ресурсах.
При генерации текста выбор следующего токена определяется распределением . Температурное масштабирование изменяет энтропию распределения:
Малая температура делает ответы более детерминированными, большая — более разнообразными. Кроме greedy decoding и beam search используются sampling, top-
и nucleus sampling с порогом
. Для прикладных систем параметры декодирования следует подбирать не только по автоматическим метрикам, но и по требованиям к точности, стилю и безопасности.
Современные подходы и State-of-the-Art (SOTA)
Современное состояние обработки естественного языка определяется большими языковыми моделями (LLM), предобученными на огромных текстовых корпусах. Типичная LLM является декодерным трансформером, обученным минимизировать авторегрессионную потерю . С увеличением числа параметров, объёма данных и вычислений модели приобретают способность к few-shot и zero-shot обобщению, следованию инструкциям, программированию, рассуждению по цепочке (chain-of-thought) и использованию внешних инструментов.
Значимые работы последних лет включают:
- GPT и его семейство. GPT (Radford et al., 2018), GPT-2, GPT-3, GPT-3.5, GPT-4 представляют собой авторегрессионные модели, обученные в режиме next-token prediction. GPT-3 с 175 млрд параметров продемонстрировал неожиданно сильные few-shot способности благодаря масштабу. GPT-4 добавил мультимодальность и улучшения в рассуждении.
- BERT и энкодеры. BERT (Devlin et al., 2019), RoBERTa, ELECTRA показали, что предобучение на маскированном языковом моделировании создаёт мощные двунаправленные кодировщики, полезные для классификации и таких задач, как извлечение именованных сущностей. Эти модели обычно имеют 100М-350М параметров и хорошо перепираются на GPU среднего размера.
- Семейство T5. T5 (Raffel et al., 2020) показал, что единая архитектура трансформера типа «кодировщик-декодировщик» может решать широкий спектр NLP-задач, включая классификацию, вопросно-ответное взаимодействие, реферирование и машинный перевод. Все задачи формулируются как преобразование текста в текст (text-to-text).
- Многоязычные модели. mBERT (multilingual BERT), XLM-R, mT5, mBART обучаются на текстах множества языков одновременно и демонстрируют сильный кроссязычный перенос, что особенно важно для низкоресурсных языков.
- Специализированные модели. Помимо универсальных моделей развиваются модели, обученные на специфических доменах и задачах: SciBERT для научных текстов, ClimateBERT для климатических документов, медицинские BERT, финансовые BERT, правовые модели типа LawBERT.
При этом SOTA в обработке естественного языка не сводится к максимальному числу параметров. Для классификации и извлечения сущностей компактный кодировщик на десятки миллионов параметров может быть быстрее, дешевле и стабильнее крупной генеративной модели. Например, модель порядка параметров может быть достаточна для простого анализа тональности, тогда как модель порядка
параметров обычно лучше переносит контекст и редкие формулировки, но требует больше памяти и времени инференса. Для сложных задач рассуждения, многошагового диалога и генерации кода преимущество получают модели с существенно большим масштабом и инструкционным дообучением.
Одно из центральных направлений — Retrieval-Augmented Generation (RAG). В RAG входной запрос сначала используется для поиска релевантных документов в коллекции
:
Затем генератор строит ответ с учётом найденного контекста:
RAG уменьшает число фактических ошибок, позволяет обновлять знания без полного переобучения модели и делает ответы проверяемыми через ссылки на источники. Однако качество RAG-системы зависит не только от генератора, но и от разбиения документов на фрагменты, эмбеддингов, индекса, ранжирования, дедупликации и защиты от нерелевантного контекста.
Актуальные бенчмарки включают:
- GLUE и SuperGLUE — наборы задач для оценки понимания языка, включающие классификацию текста, похожесть фраз, вывод на естественном языке.
- SQuAD и Natural Questions — для вопросно-ответных систем.
- WMT — для машинного перевода.
- MMLU (Massive Multitask Language Understanding) — многопредметная проверка знаний, содержащая вопросы по 57 дисциплинам.
- Big-Bench и HELM (Holistic Evaluation of Language Models) — комплексная оценка LLM на множестве задач и свойств.
- XTREME и XNLI — для многоязычного переноса и перекрёстного языкового взаимодействия.
- Russian SuperGLUE, RuSentiment, RuCoLA, Taiga, Lenta, RuBQ — для русскоязычных задач.
При интерпретации результатов важно учитывать загрязнение тестов обучающими данными, различия в промптах, размер контекстного окна, стоимость инференса и дисперсию оценок.
В прикладном SOTA широко используются:
- Инструкционное дообучение (instruction tuning) — дообучение на примерах вида (инструкция, ввод, ожидаемый вывод) для повышения способности следовать указаниям.
- RLHF (Reinforcement Learning from Human Feedback) — обучение с подкреплением на основе человеческих предпочтений, используется в ChatGPT и других моделях.
- DPO (Direct Preference Optimization) — прямая оптимизация на предпочтениях без явного обучения модели вознаграждения.
- Конституционное обучение — использование набора конституционных принципов для улучшения качества и безопасности.
- QLoRA — квантизованная версия LoRA, позволяющая дообучение больших моделей на более скромном оборудовании.
- Адаптеры — небольшие параметрические модули, вставляемые в слои больших моделей для адаптации под новые задачи.
- Дистилляция (distillation) — перенос знаний от большой модели к компактной, что уменьшает время инференса.
- Квантизация — представление весов моделей с меньшей точностью (int8, fp16) для ускорения и экономии памяти.
- Mixture of Experts (MoE) — архитектура, где разные эксперты обрабатывают разные части входа, позволяя масштабировать ёмкость без пропорционального роста вычислений.
- Длинноконтекстные трансформеры — архитектуры типа Longformer, BigBird, ALiBi, которые эффективно обрабатывают тысячи или десятки тысяч токенов, критичны для обработки полных документов и кодовых файлов.
- Мультимодальные расширения — интеграция текста с изображениями (CLIP, ALIGN), аудио (Whisper), видео.
Всё более важными становятся не только точность (accuracy) и перплексия, но и надёжность, калибровка уверенности модели, устойчивость к adversarial-промптам, приватность данных, воспроизводимость результатов, соответствие правовым ограничениям (GDPR, защита авторского права), прозрачность работы моделей и минимизация экологических выбросов при обучении и инференсе.
См. также
- Машинное обучение
- Глубокое обучение
- Языковая модель
- Токенизация
- Векторное представление слова
- Рекуррентная нейронная сеть
- Машинный перевод
- Классификация текста
- Анализ тональности
- Извлечение именованных сущностей
- Синтаксический анализ
- Семантический анализ
- Информационный поиск
- Вопросно-ответная система
- Морфологический анализ
- Лемматизация
- Стемминг
- Информационное извлечение
- LoRA
- Prompt engineering
- BLEU
- ROUGE
- Перплексия
Примечания
Литература
Mikolov T., Chen K., Corrado G., Dean J. Efficient Estimation of Word Representations in Vector Space // arXiv. — 2013. — С. 1-12.
Vaswani A., Shazeer N., Parmar N., Uszkoreit J., Jones L., Gomez A. N., Kaiser L., Polosukhin I. Attention Is All You Need // Advances in Neural Information Processing Systems. — 2017. — С. 5998-6008.
Devlin J., Chang M.-W., Lee K., Toutanova K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding // Proceedings of NAACL-HLT. — 2019. — С. 4171-4186.
Brown T. B., Mann B., Ryder N., Subbiah M., Kaplan J. et al. Language Models are Few-Shot Learners // Advances in Neural Information Processing Systems. — 2020. — С. 1877-1901.
Jurafsky D., Martin J. H. Speech and Language Processing. — Stanford: Stanford University, 2024.

