NLP. Основы. Техники. Саморазвитие. Часть 1
Привет! Меня зовут Иван Смуров, и я возглавляю группу исследований в области NLP в компании ABBYY. О том, чем занимается наша группа, можно почитать здесь. Недавно я читал лекцию про Natural Language Processing (NLP) в Школе глубокого обучения – это кружок при Физтех-школе прикладной математики и информатики МФТИ для старшеклассников, интересующихся программированием и математикой. Возможно, тезисы моей лекции кому-то пригодятся, поэтому поделюсь ими с Хабром.
Поскольку за один раз все объять не получится, разделим статью на две части. Сегодня я расскажу о том, как нейросети (или глубокое обучение) используются в NLP. Во второй части статьи мы сконцентрируемся на одной из самых распространенных задач NLP — задаче извлечения именованных сущностей (Named-entity recognition, NER) и разберем подробно архитектуры ее решений.

Что такое NLP?
Это широкий круг задач по обработке текстов на естественном языке (т. е. на языке, на котором говорят и пишут люди). Существует набор классических задач NLP, решение которых несет практическую пользу.
-
Первая и самая исторически важная задача – это машинный перевод. Ей занимаются очень давно, и есть огромный прогресс. Но задача получения полностью автоматического перевода высокого качества (FAHQMT) так и остается нерешенной. Это в каком-то смысле мотор NLP, одна из самых больших задач, которой можно заниматься.

Вторая задача — классификация текстов. Дан набор текстов, и задача – классифицировать эти тексты по категориям. Каким? Это вопрос к корпусу.
Первый и один из самых важных с практической точки зрения способов применения — классификация писем на спам и хам (не спам).
Другой классический вариант — многоклассовая классификация новостей по категориям (рубрикация) — внешняя политика, спорт, шапито и т. п. Или, допустим, вам приходят письма, и вы хотите отделить заказы из интернет-магазина от авиабилетов и броней отелей.
Третий классический вариант применения задачи текстовой классификации — сентиментный анализ. Например, классификация отзывов на положительные, отрицательные и нейтральные.


Поскольку возможных категорий, на которые можно делить тексты, можно придумать очень много, текстовая классификация является одной из самых популярных практических задач NLP.
Примерами других часто выделяемых отношений являются отношения купли/продажи (Purchase and Sale), владения (Ownership), факт рождения с атрибутами — датой, местом и т. д. (Birth) и некоторые другие.
Задача кажется не имеющей очевидного практического применения, но, тем не менее, она используется при структуризации неструктурированной информации. Кроме того, это важно в вопросно-ответных и диалоговых системах, в поисковиках — всегда, когда вам нужно анализировать вопрос и понимать, к какому типу он относится, а также, какие ограничения есть на ответ.

Две следующие задачи, возможно, самые хайповые. Это вопросно-ответные и диалоговые системы (чат-боты). Amazon Alexa, Алиса – это классические примеры диалоговых систем. Чтобы они нормально работали, должно быть решено много задач NLP. Например, текстовая классификация помогает определить, попадаем ли мы в один из сценариев goal-oriented чат-бота. Допустим, «вопрос о курсах валют». Relation extraction нужно для определения заполнителей шаблона сценария, а задача ведения диалога на общие темы (“болталки”) поможет нам в ситуации, когда мы не попали ни в один из сценариев.

Это безусловно не весь список задач NLP. Их десятки. По большому счету, все, что можно делать с текстом на естественном языке, можно отнести к задачам NLP, просто перечисленные темы на слуху, и у них есть наиболее очевидные практические применения.
Почему решать задачи NLP сложно?
Формулировки задач не очень сложные, однако сами задачи вовсе не являются простыми, потому что мы работаем с естественным языком. Явления полисемии (многозначные слова имеют общий исходный смысл) и омонимии (разные по смыслу слова произносятся и пишутся одинаково) характерны для любого естественного языка. И если носитель русского хорошо понимает, что в теплом приеме мало общего с боевым приемом, с одной стороны, и теплым пивом, с другой, автоматической системе приходится долго этому учиться. Почему «Press space bar to continue» лучше перевести скучным «Для продолжения нажмите пробел», чем «Бар космической прессы продолжит работу».
- Полисемия: остановка (процесс или здание), стол (организация или объект), дятел (птица или человек).
- Омонимия: ключ, лук, замок, печь.

Кстати, в этом году на конференции «Диалог» состоятся дорожки и по анафоре, и по гэппингу (виду эллиписа) для русского языка. Для обеих задач были собраны корпуса объемом, в несколько раз превышающим объемы существующих на данный момент корпусов (причем, для гэппинга объем корпуса на порядок превосходит объемы корпусов не только для русского, но и вообще для всех языков). Если вы хотите поучаствовать в соревнованиях на этих корпусах, жмите сюда (с регистрацией, но без смс).
Как решают задачи NLP
В отличие от обработки изображений, по NLP до сих пор можно встретить статьи, где описываются решения, использующие не нейросетки, а классические алгоритмы типа SVM или Xgboost, и показывающие результаты, не слишком сильно уступающие state-of-the-art решениям.
Тем не менее, несколько лет назад нейросети начали побеждать классические модели. Важно отметить, что для большинства задач решения на основе классических методов были уникальные, как правило, не похожие на решения других задач как по архитектуре, так и по тому, как происходит сбор и обработка признаков.
Однако нейросетевые архитектуры намного более общие. Архитектура самой сети, скорее всего, тоже отличается, но намного меньше, идет тенденция в сторону полной универсализации. Тем не менее, то, с какими признаками и как именно мы работаем, уже практически одинаково для большинства задач NLP. Отличаются только последние слои нейросеток. Таким образом, можно считать, что сформировался единый пайплайн NLP. Про то, как он устроен, мы сейчас расскажем подробнее.
Pipeline NLP
Этот способ работы с признаками, который более-менее одинаков для всех задач.
Когда речь идет о языке, основная единица, с которой мы работаем, это слово. Или более формально «токен». Мы используем этот термин, потому что не очень понятно, что такое 2128506 — это слово или нет? Ответ не очевиден. Токен обычно отделен от других токенов пробелами или знаками препинания. И как можно понять из сложностей, которые мы описали выше, очень важен контекст каждого токена. Есть разные подходы, но в 95% случаев таким контекстом, который рассматривается при работе модели, выступает предложение, включающее исходный токен.
Многие задачи вообще решаются на уровне предложения. Например, машинный перевод. Чаще всего, мы просто переводим одно предложение и никак не используем контекст более широкого уровня. Есть задачи, где это не так, например, диалоговые системы. Тут важно помнить, о чем систему спрашивали раньше, чтобы она могла ответить на вопросы. Тем не менее, предложение — тоже основная единица, с которой мы работаем.
Поэтому первые два шага пайплайна, которые выполняются практически для решения любых задач – это сегментация (деление текста на предложения) и токенизация (деление предложений на токены, то есть отдельные слова). Это делается несложными алгоритмами.
Дальше нужно вычислить признаки каждого токена. Как правило, это происходит в два этапа. Первый – вычислить контекстно-независимые признаки токена. Это набор признаков, которые никак не зависят от окружающих наш токен других слов. Обычные контекстно-независимые признаки – это:
- эмбеддинги
- символьные признаки
- дополнительные признаки, специальные для конкретной задачи или языка
Один из самых часто использующихся признаков — часть речи или POS-тег (part of speech). Такие признаки могут быть важны для решения многих задач, например задачи синтаксического парсинга. Для языков со сложной морфологией, типа русского языка, также важны морфологические признаки: например, в каком падеже стоит существительное, какой род у прилагательного. Из этого можно сделать разные выводы о структуре предложения. Также, морфология нужна для лемматизации (приведения слов к начальным формам), с помощью которой мы можем сократить размерность признакового пространства, и поэтому морфологический анализ активно используется для большинства задач NLP.
Когда мы решаем задачу, где важно взаимодействие между различными объектами (например, в задаче relation extraction или при создании вопросно-ответной системы), нам нужно многое знать про структуру предложения. Для этого нужен синтаксический разбор. В школе все делали разбор предложения на подлежащее, сказуемое, дополнение и др. Синтаксический разбор – это что-то в этом духе, но сложнее.
Еще одним примером дополнительного признака является позиция токена в тексте. Мы можем априори знать, что какая-то сущность чаще встречается в начале текста или наоборот в конце.
Все вместе – эмбеддинги, символьные и дополнительные признаки – формируют вектор признаков токена, который не зависит от контекста.
Контекстно-зависимые признаки
Контекстно-зависимые признаки токена — это набор признаков, который содержит информацию не только про сам токен, но и про его соседей. Есть разные способы вычислить эти признаки. В классических алгоритмах люди часто просто шли «окном»: брали несколько (например, три) токенов до исходного и несколько токенов после, а затем вычисляли все признаки в таком окне. Такой подход ненадежен, так как важная информация для анализа может находиться на расстоянии, превышающем окно, соответственно, мы можем что-то пропустить.
Поэтому сейчас все контекстно-зависимые признаки вычисляются на уровне предложения стандартным образом: с помощью двухсторонних рекуррентных нейросетей LSTM или GRU. Чтобы получить контекстно-зависимые признаки токена из контекстно-независимых, контекстно-независимые признаки всех токенов предложения подаются в Bidirectional RNN (одно- или несколько- слойный). Выход Bidirectional RNN в i-ый момент времени и является контекстно-зависимым признаком i-того токена, который содержит информацию как о предыдущих токенах (т.к. эта информация содержится в i-м значении прямого RNN), так и о последующих (т.к. эта информация содержится в соответствующем значении обратного RNN).
Дальше для каждой отдельной задачи мы делаем что-то свое, но первые несколько слоев — вплоть до Bidirectional RNN можно использовать для практически любых задач.
Такой способ получения признаков и называется пайплайном NLP.

Стоит отметить, что в последние 2 года исследователи активно пытаются усовершенствовать пайплайн NLP — как с точки зрения быстродействия (например, transformer — архитектура, основанная на self-attention, не содержит в себе RNN и поэтому способна быстрее обучаться и применяться), так и с точки зрения используемых признаков (сейчас активно используют признаки на основе предобученных языковых моделей, например ELMo, или используют первые слои предобученной языковой модели и дообучают их на имеющемся для задачи корпусе — ULMFit, BERT).
Словоформенные эмбеддинги
Давайте подробнее разберем, что же такое эмбеддинг. Грубо говоря, эмбеддинг — это сжатое представление о контексте слова. Почему важно знать контекст слова? Потому что мы верим в дистрибутивную гипотезу — что похожие по смыслу слова употребляются в сходных контекстах.
Давайте теперь попытаемся дать строгое определение эмбеддинга. Эмбеддинг – это отображение из дискретного вектора категориальных признаков в непрерывный вектор с заранее заданной размерностью.
Каноничный пример эмбеддинга – это эмбеддинг слова (словоформенный эмбеддинг).
Что обычно выступает в роли дискретного вектора признаков? Булев вектор, соответствующий всевозможным значениям какой-то категории (например, все возможные части речи или все возможные слова из какого-то ограниченного словаря).
Для словоформенных эмбеддингов такой категорией обычно выступает индекс слова в словаре. Допустим, есть словарь размерностью 100 тысяч. Соответственно, каждое слово имеет дискретный вектор признаков – булев вектор размерности 100 тысяч, где на одном месте (индексе данного слова в нашем словаре) стоит единичка, а на остальных – нули.
Почему мы хотим отображать наши дискретные вектора признаков в непрерывные заданной размерности? Потому что вектора размерностью 100 тысяч не очень удобно использовать для вычислений, а вот вектора целых чисел размерности 100, 200 или, например, 300, — намного удобнее.
В принципе, мы можем не пытаться накладывать никаких дополнительных ограничений на такое отображение. Но раз уж мы строим такое отображение, давайте попытаемся добиться, чтобы вектора похожих по смыслу слов также были в каком-то смысле близки. Это делается с помощью простой feed-forward нейросетки.
Обучение эмбеддингов
Как эмбеддинги обучаются? Мы пытаемся решить задачу восстановления слова по контексту (или наоборот, восстановления контекста по слову). В простейшем случае мы получаем на вход индекс в словаре предыдущего слова (булев вектор размерности словаря) и пытаемся определить индекс в словаре нашего слова. Делается это с помощью сетки с предельно простой архитектурой: два полносвязных слоя. Сначала идет полносвязный слой из булева вектора размерности словаря в скрытый слой размерности эмбеддинга (т.е. просто умножение булева вектора на матрицу нужной размерности). А потом наоборот, полносвязный слой с softmax из скрытого слоя размерности эмбеддинга в вектор размерности словаря. Благодаря функции активации softmax, мы получаем распределение вероятностей нашего слова и можем выбрать самый вероятный вариант.

Эмбеддингом i-го слова будет просто i-я строка в матрице перехода W.
В используемых на практике моделях архитектура сложнее, но ненамного. Главное отличие в том, что мы используем не один вектор из контекста для определения нашего слова, а несколько (например, все в окне размера 3). Несколько более популярным вариантом является ситуация, когда мы пытаемся предсказать не слово по контексту, а наоборот контекст по слову. Такой подход называется Skip-gram.
Давайте приведем пример применения задачи, которая решается во время обучения эмбеддингов (в варианте CBOW — предсказания слова по контексту). Например, пусть контекст токена состоит из 2 предыдущих слов. Если мы обучались на корпусе текстов про современную русскую литературу и контекст состоит из слов “поэт Марина”, то, скорее всего, самым вероятным следующим словом будет слово “Цветаева”.
Подчеркнем еще раз, эмбеддинги только обучаются на задаче предсказания слова по контексту (или наоборот контекста по слову), а применять их можно в любых ситуациях, когда нам нужно вычислить признак токена.
Какой бы вариант мы ни выбрали, архитектура эмбеддингов очень несложная, и их большой плюс в том, что их можно обучать на неразмеченных данных (действительно, мы используем только информацию о соседях нашего токена, а для их определения нужен только сам текст). Получившиеся эмбеддинги — усредненный контекст именно по такому корпусу.
Эмбеддинги словоформ, как правило, обучаются на максимально большом и доступном для обучения корпусе. Обычно это вся Википедия на языке, потому что ее всю можно выкачать, и любые другие корпуса, которые получится достать.
Похожие соображения используются и при предобучении для современных архитектур, упомянутых выше — ELMo, ULMFit, BERT. Они тоже используют при обучении неразмеченные данные, и поэтому обучаются на максимально большом доступном корпусе (хотя сами архитектуры, конечно, сложнее, чем у классических эмбеддингов).
Зачем нужны эмбеддинги?
Как уже было упомянуто, для использования эмбеддингов есть 2 основные причины.

- Во-первых, мы уменьшаем размерность пространства признаков, потому что с непрерывными векторами размерностью несколько сотен работать намного удобнее, чем с признаками-булевыми векторами размерностью 100 тысяч. Уменьшение размерности признакового пространства – это очень важно: оно сказывается на быстродействии, это удобнее для обучения, и поэтому алгоритмы обучаются лучше.
- Во-вторых, учет близости элементов в исходном пространстве. Слова похожи друг на друга по-разному. И разные координаты эмбеддингов способны ловить эту схожесть. Приведу простой грубый и набивший всем оскомину пример. Эмбеддинг вполне способен уловить, что король отличается от королевы примерно так же, как мужчина от женщины. Или наоборот, король отличается от мужчины, как королева от женщины. Точно так же схожи связи разных стран со своими столицами. Хорошо обученная модель на достаточно большом корпусе способна понять, что Москва отличается от России тем же, чем Вашингтон от США.
Но не нужно думать, что такая векторная арифметика работает надежно. В статье, где были введены эмбеддинги, были примеры, что Ангела относится к Меркель примерно так же, как Барак к Обаме, Николя к Саркози и Путин к Медведеву. Поэтому полагаться на эту арифметику не стоит, хотя это все равно важно, и компьютеру намного проще, когда он знает эту информацию, пусть она и содержит неточности.
В следующей части нашей статьи мы поговорим о задаче NER. Мы расскажем о том, что это за задача, зачем она нужна и какие подводные камни могут скрываться в ее решении. Мы расскажем подробно про то, как эту задачу решали с помощью классических методов, как ее стали решать с помощью нейросетей, и опишем современные архитектуры, созданные для ее решения.
- Блог компании Content AI
- Машинное обучение
- Natural Language Processing
Natural language processing что это

What is natural language processing?
Natural language processing (NLP) refers to the branch of computer science—and more specifically, the branch of artificial intelligence or AI—concerned with giving computers the ability to understand text and spoken words in much the same way human beings can.
NLP combines computational linguistics—rule-based modeling of human language—with statistical, machine learning, and deep learning models. Together, these technologies enable computers to process human language in the form of text or voice data and to ‘understand’ its full meaning, complete with the speaker or writer’s intent and sentiment.
NLP drives computer programs that translate text from one language to another, respond to spoken commands, and summarize large volumes of text rapidly—even in real time. There’s a good chance you’ve interacted with NLP in the form of voice-operated GPS systems, digital assistants, speech-to-text dictation software, customer service chatbots, and other consumer conveniences. But NLP also plays a growing role in enterprise solutions that help streamline business operations, increase employee productivity, and simplify mission-critical business processes.
Begin your journey to AI
Human language is filled with ambiguities that make it incredibly difficult to write software that accurately determines the intended meaning of text or voice data. Homonyms, homophones, sarcasm, idioms, metaphors, grammar and usage exceptions, variations in sentence structure—these just a few of the irregularities of human language that take humans years to learn, but that programmers must teach natural language-driven applications to recognize and understand accurately from the start, if those applications are going to be useful.
Several NLP tasks break down human text and voice data in ways that help the computer make sense of what it’s ingesting. Some of these tasks include the following:
- Speech recognition, also called speech-to-text, is the task of reliably converting voice data into text data. Speech recognition is required for any application that follows voice commands or answers spoken questions. What makes speech recognition especially challenging is the way people talk—quickly, slurring words together, with varying emphasis and intonation, in different accents, and often using incorrect grammar.
- Part of speech tagging, also called grammatical tagging, is the process of determining the part of speech of a particular word or piece of text based on its use and context. Part of speech identifies ‘make’ as a verb in ‘I can make a paper plane,’ and as a noun in ‘What make of car do you own?’
- Word sense disambiguation is the selection of the meaning of a word with multiple meanings through a process of semantic analysis that determine the word that makes the most sense in the given context. For example, word sense disambiguation helps distinguish the meaning of the verb ‘make’ in ‘make the grade’ (achieve) vs. ‘make a bet’ (place).
- Named entity recognition, or NEM, identifies words or phrases as useful entities. NEM identifies ‘Kentucky’ as a location or ‘Fred’ as a man’s name.
- Co-reference resolution is the task of identifying if and when two words refer to the same entity. The most common example is determining the person or object to which a certain pronoun refers (e.g., ‘she’ = ‘Mary’), but it can also involve identifying a metaphor or an idiom in the text (e.g., an instance in which ‘bear’ isn’t an animal but a large hairy person).
- Sentiment analysis attempts to extract subjective qualities—attitudes, emotions, sarcasm, confusion, suspicion—from text.
- Natural language generation is sometimes described as the opposite of speech recognition or speech-to-text; it’s the task of putting structured information into human language.
Now available: watsonx.ai
The all new enterprise studio that brings together traditional machine learning along with new generative AI capabilities powered by foundation models
NLP tools and approaches
Python and the Natural Language Toolkit (NLTK)
The Python programing language provides a wide range of tools and libraries for attacking specific NLP tasks. Many of these are found in the Natural Language Toolkit, or NLTK, an open source collection of libraries, programs, and education resources for building NLP programs.
The NLTK includes libraries for many of the NLP tasks listed above, plus libraries for subtasks, such as sentence parsing, word segmentation, stemming and lemmatization (methods of trimming words down to their roots), and tokenization (for breaking phrases, sentences, paragraphs and passages into tokens that help the computer better understand the text). It also includes libraries for implementing capabilities such as semantic reasoning, the ability to reach logical conclusions based on facts extracted from text.
Statistical NLP, machine learning, and deep learning
The earliest NLP applications were hand-coded, rules-based systems that could perform certain NLP tasks, but couldn’t easily scale to accommodate a seemingly endless stream of exceptions or the increasing volumes of text and voice data.
Enter statistical NLP, which combines computer algorithms with machine learning and deep learning models to automatically extract, classify, and label elements of text and voice data and then assign a statistical likelihood to each possible meaning of those elements. Today, deep learning models and learning techniques based on convolutional neural networks (CNNs) and recurrent neural networks (RNNs) enable NLP systems that ‘learn’ as they work and extract ever more accurate meaning from huge volumes of raw, unstructured, and unlabeled text and voice data sets.
For a deeper dive into the nuances between these technologies and their learning approaches, see “AI vs. Machine Learning vs. Deep Learning vs. Neural Networks: What’s the Difference?”
NLP use cases
Natural language processing is the driving force behind machine intelligence in many modern real-world applications. Here are a few examples:
- Spam detection: You may not think of spam detection as an NLP solution, but the best spam detection technologies use NLP’s text classification capabilities to scan emails for language that often indicates spam or phishing. These indicators can include overuse of financial terms, characteristic bad grammar, threatening language, inappropriate urgency, misspelled company names, and more. Spam detection is one of a handful of NLP problems that experts consider ‘mostly solved’ (although you may argue that this doesn’t match your email experience).
- Machine translation: Google Translate is an example of widely available NLP technology at work. Truly useful machine translation involves more than replacing words in one language with words of another. Effective translation has to capture accurately the meaning and tone of the input language and translate it to text with the same meaning and desired impact in the output language. Machine translation tools are making good progress in terms of accuracy. A great way to test any machine translation tool is to translate text to one language and then back to the original. An oft-cited classic example: Not long ago, translating “The spirit is willing but the flesh is weak” from English to Russian and back yielded “The vodka is good but the meat is rotten.” Today, the result is “The spirit desires, but the flesh is weak,” which isn’t perfect, but inspires much more confidence in the English-to-Russian translation.
- Virtual agents and chatbots:Virtual agents such as Apple’s Siri and Amazon’s Alexa use speech recognition to recognize patterns in voice commands and natural language generation to respond with appropriate action or helpful comments. Chatbots perform the same magic in response to typed text entries. The best of these also learn to recognize contextual clues about human requests and use them to provide even better responses or options over time. The next enhancement for these applications is question answering, the ability to respond to our questions—anticipated or not—with relevant and helpful answers in their own words.
- Social media sentiment analysis: NLP has become an essential business tool for uncovering hidden data insights from social media channels. Sentiment analysis can analyze language used in social media posts, responses, reviews, and more to extract attitudes and emotions in response to products, promotions, and events–information companies can use in product designs, advertising campaigns, and more.
- Text summarization: Text summarization uses NLP techniques to digest huge volumes of digital text and create summaries and synopses for indexes, research databases, or busy readers who don’t have time to read full text. The best text summarization applications use semantic reasoning and natural language generation (NLG) to add useful context and conclusions to summaries.
Related solutions
Watson natural language processing solutions
Accelerate the business value of artificial intelligence with a powerful and flexible portfolio of libraries, services and applications.
Explore natural language processing
Watson Natural Language Processing Library for Embed
Infuse powerful natural language AI into commercial applications with a containerized library designed to empower IBM partners with greater flexibility.
Explore Watson Natural Language Processing Library for Embed
Resources How-to Free, hands-on learning for generative AI technologies
Learn the fundamental concepts for AI and generative AI, including prompt engineering, large language models and the best open source projects.
Natural Language Processing with Watson
Learn about different NLP use cases in this NLP explainer.
Enhance your applications with IBM embeddable AI
Visit the IBM Developer’s website to access blogs, articles, newsletters and more. Become an IBM partner and infuse IBM Watson embeddable AI in your commercial solutions today. BM Watson NLP Library for Embed into your solutions.
Accelerate and scale innovation with IBM embeddable AI
IBM Digital Self-Serve Co-Create Experience (DSCE) helps data scientists, application developers and ML-Ops engineers discover and try IBM’s embeddable AI portfolio across IBM Watson Libraries, IBM Watson APIs and IBM AI Applications.
Watson understands the language of your business
Watch IBM Data & AI GM, Rob Thomas as he hosts NLP experts and clients, showcasing how NLP technologies are optimizing businesses across industries.
Advancing AI ethics beyond compliance
Ethical considerations for AI have never been more critical than they are today.
Putting more knowledge at the fingertips of non-English speakers
IBM has launched a new open-source toolkit, PrimeQA, to spur progress in multilingual question-answering systems to make it easier for anyone to quickly find information on the web.
Take the next step
Accelerate the business value of artificial intelligence with a powerful and flexible portfolio of libraries, services and applications. IBM has innovated in the AI space by pioneering NLP-driven tools and services that enable organizations to automate their complex business processes while gaining essential business insights.
Ваш путеводитель по миру NLP (обработке естественного языка)

Все, что мы выражаем письменно или устно, несет в себе огромное количество информации. Тема, которую мы выбираем, наш тон, подбор слов — все это добавляет некую информацию, которую можно интерпретировать, извлекая из нее определенный смысл. Теоретически мы можем понять и даже предсказать поведение человека, используя эту информацию.
Но есть одна проблема: один человек способен сгенерировать декларацию объемом в сотни или даже тысячи слов, состоящую из предложений самой разной сложности. Если вас интересуют большие масштабы и вам нужно анализировать несколько сотен, тысяч или даже миллионов людей или деклараций по какому-то конкретному региону, то в какой-то момент эта задача может стать совершенно неподъемной.
Данные, полученные из разговоров, деклараций или даже твитов, являются типичным примером неструктурированных данных. Неструктурированные данные не вписываются в традиционную структуру строк и столбцов реляционных баз данных и представляют собой подавляющее большинство данных, доступных в реальном мире. Они беспорядочны и трудны в обработке. Тем не менее, благодаря достижениям в таких дисциплинах, как машинное обучение, сегодня в этом направлении происходит революция. В настоящее время речь идет уже не о попытках интерпретировать текст или речь на основе ключевых слов (старомодный механический способ), а о понимании смысла этих слов (когнитивный способ). Современные наработки дают нам возможность определять фигуры речи, такие как, например, ирония, или даже проводить анализ тональности текста.
Обработка естественного языка или NLP (Natural Language Processing) — это область искусственного интеллекта, которая фокусируется на возможности машин читать, понимать и извлекать смысл из человеческих языков.
Это дисциплина, которая нацелена на разработку и применение современных подходов из data science к человеческому языку и находит свое практическое применение во все большем количестве различных отраслей. И действительно, сегодня NLP переживает настоящий бум. Мы должны быть благодарны за это значительным улучшениям в доступе к данным и увеличению вычислительной мощности, которые позволяют специалистам в этой области достигать вполне осязаемых результатов в таких областях, как здравоохранение, СМИ, финансы и управление кадрами, не говоря о великом множестве других применений.
Примеры использования NLP
Выражаясь простыми словами, NLP представляет собой группу техник автоматической обработки естественного человеческого языка в формате устной речи или текста. Не смотря на то, что эта концепция сама по себе уже невероятно интересна, реальная ценность этой технологии заключается в ее применении на практике.
NLP может помочь с целым рядом задач, и создается впечатление, что количество сфер его применения растет день ото дня. Вот несколько хороших примеров применения NLP на практике:
- NLP позволяет распознавать и прогнозировать заболевания на основе электронной медицинской документации и устной речи пациента. Сейчас проводятся многочисленные исследования, которые нацелены раскрыть потенциал этой технологии для разных состояний здоровья, которые варьируются от сердечно-сосудистых заболеваний до депрессии и даже шизофрении. Примером наработок в этой области может послужить Amazon Comprehend Medical — сервис, использующий NLP для извлечения данных о заболеваниях, лекарствах и результатах лечения из историй болезни, отчетов о клинических испытаниях и другой электронной медицинской документации.
- С помощью NLP коммерческие организации могут определять, что говорят клиенты об их услуге или продукте, идентифицируя и извлекая информацию из таких источников, как социальные сети. Такой анализ тональности постов может предоставить много полезной информации о выборе клиентов и факторах, влияющих на их решения.
- Изобретатель из IBM разработалкогнитивного помощника, работающего как персонализированная поисковая система, которая изучает все о вас, а затем напоминает вам имя, песню или что-либо еще, что вы не можете вспомнить, в тот момент, когда вам это нужно.
- Такие компании, как Yahoo и Google, фильтруют и классифицируют ваши электронные письма с помощью NLP. Они анализируют текст в электронных письмах, которые проходят через их серверы, благодаря чему они могут отфильтровывать спам до того, как он попадет в ваш почтовый ящик.
- Чтобы помочь в выявлении фейковых новостей, комманада NLP в Массачусетском Технологическом Институте разработала новую систему для оценки того, является ли источник достоверным или политически предвзятым, помогая определить, можно ли доверять конкретному источнику новостей.
- Alexa от Amazon и Siri от Apple являются яркими примерами интеллектуальных голосовых интерфейсов. Они используют NLP, чтобы реагировать на голосовые команды и выполнять на их основе целый ряд задач, например, находить конкретный магазин, сообщать нам прогноз погоды, предлагать лучший маршрут до офиса или включать свет дома.
- Понимание того, что происходит в мире и что сейчас обсуждают люди, может быть очень ценным для финансовых трейдеров. NLP используется для отслеживания новостей, отчетов, комментариев о возможных слияниях между компаниями — все это затем может быть скормлено алгоритму для биржевой торговли с целью максимизации прибыли. Как говорится: покупайте слухи, продавайте новости.
- NLP также используется на этапах поиска и отбора перспективных кадров, определения навыков потенциальных сотрудников, а также выявления потенциальных клиентов до того, как они проявят активность на рынке труда.
- Компания LegalMation разработала платформу для автоматизации рутинных судебных задач на основе технологии NLP IBM Watson, которая помогает юридическим отделам экономить время, сокращать расходы и сдвигать с этого свой стратегический фокус.
NLP особенно процветает в сфере здравоохранения. Эта технология помогает улучшить оказание медицинской помощи, диагностику заболеваний и снижает затраты. Особенно этому способствует то, что организации здравоохранения массово переходят на электронные способы учета медицинских документов. Тот факт, что клиническая документация может быть улучшена, означает и то, что пациенты могут быть лучше поняты и получат более качественное медицинское обслуживание. Одной из главных целей является оптимизация их опыта, и несколько серьезных организаций уже работают над этим.

Такие компании, как Winterlight Labs, значительно продвигают лечении болезни Альцгеймера, отслеживая когнитивные нарушения через устную речь, а также поддерживают клинические испытания и исследования для широкого спектра других заболеваний центральной нервной системы. Следуя аналогичному подходу, Стэнфордский университет разработал Woebot — бота-терапевта, предназначенного для помощи людям с тревогой и другими расстройствами.
Тем не менее, вокруг этой темы идут все еще идут серьезные споры. Пару лет назад Microsoft продемонстрировала, что, анализируя большие выборки поисковых запросов, они могли идентифицировать интернет-пользователей, страдающих раком поджелудочной железы, еще до того, как им был поставлен диагноз этого заболевания. Но как пользователи отреагируют на такой диагноз? И что произойдет, если ваш тест окажется ложноположительным? (то есть, что у вас может быть диагностировано заболевание, а в реальности у вас его нет). Это напоминает случай с Google Flu Trends, который в 2009 году был объявлен как способный предсказывать вспышки гриппа, но позже исчез из-за его низкой точности и несоответствия прогнозируемым показателям.
NLP может стать ключом к эффективной клинической поддержке в будущем, но перед тем, как это станет реальностью, предстоит решить еще не одну проблему.
Основы NLP (знанием которых вы сможете пощеголять перед вашими не сведущими в NLP друзьями)
Основные сложности с NLP, с которыми мы сталкиваемся в наши дни, связаны с тем фактом, что язык очень сложен. Процесс понимания и обработки языка чрезвычайно сложен, из-за чего для решения разных задач обычно используются разные методы, прежде чем все будет связано воедино. Для реализации этих техник широко используются такие языки программирования, как Python и R, но прежде чем нырять с головой в код (это будет темой следующей статьи), важно разобраться с концепциями, лежащими в их основе. Поэтому, в рамках знакомства с терминологическим словарем, сегодня мы с вами разберем некоторые из наиболее часто используемых NLP-алгоритмов:
“Мешок слов” (Bag of Words)
— это широко используемая модель, позволяющая подсчитывать все слова в фрагменте текста. По сути, он создает матрицу вхождений для предложения или целого документа, игнорируя грамматику и порядок слов. Эта частота появления или вхождения слов затем используются в качестве признаков для обучения классификатора.
В качестве простого примера я взял первое предложение из песни “Across the Universe” от The Beatles:
Words are flowing out like endless rain into a paper cup,
They slither while they pass, they slip away across the universe
Теперь давайте подсчитаем слова:

Этот подход имеет несколько недостатков, таких как отсутствие семантического значения и контекста, а также то, что игнорируемые в иных методах слова (например, “the” или “a”) добавляют нежелательный шум в анализ, и некоторые слова имеют не совсем адекватные веса (вес слова “universe” меньше веса слова “they”).
Один из подходов, нацеленных сгладить эту проблему, состоит в том, чтобы перемасштабировать частоту слов по частоте их появления во всех текстах (а не только в том, который мы в данный момент анализируем), чтобы веса часто встречающихся слов, таких как “the”, также часто встречаются и в других текстах, получали определенный штраф. Этот подход к подсчету весов, который улучшает мешок слов, называется “Частота терминов — обратная частота документа” (“Term Frequency — Inverse Document Frequency” или TFIDF). С помощью TFIDF слова, которые часто встречаются в тексте, “вознаграждаются” (например, слово “they” в нашем примере), но они также “штрафуются” на основе того, насколько часто они встречаются в других текстах, которые мы также учитываем в алгоритме. И наоборот, этот метод выделяет и “вознаграждает” уникальные или редкие, с учетом всех текстов, слова. Тем не менее, этот подход по-прежнему не имеет ни контекста, ни семантики.
Токенизация (Tokenization)
— это процесс сегментации текстового набора на слова и предложения. По сути, его задача заключается в разделении текста на части, называемые токенами, и отбрасывании определенных символов, например, знаков препинания. Следуя нашему примеру, результатом токенизации будет:

Довольно просто, не так ли? Что ж, хотя в этом случае, а также в таких языках, как английский, которые разделяют слова пробелом (так называемые сегментированные языки), этот процесс может показаться довольно простым. Но не все языки устроены одинаково, и если вдуматься, одних только пробелов недостаточно, чтобы выполнить правильную токенизацию даже для английского языка. Разбиение на пробелы может привести к тому, что то, что следует рассматривать как один токен, может быть разбито на два, как в случае с некоторыми именами собственными (например, Сан-Франциско или Нью-Йорк) или заимствованными иностранными фразами (например, laissez faire).
Токенизация также может удалить знаки препинания, упрощая путь к правильной сегментации слов, но также потенциально вызывая другие сложности. В случае точек, которые следуют за аббревиатурой (например, dr.), точка после этой аббревиатуры должна рассматриваться как часть того же токена и не удаляться.
Процесс токенизации может быть особенно проблематичным при работе с биомедицинскими текстами, которые содержат много дефисов, скобок и других знаков препинания.
Более подробный разбор токенизации вы можете найти в этой отличной статье.
Удаление шумовых слов (Stop Words Removal)
включает избавление от общеупотребительных артиклей, местоимений и предлогов, таких как “and”, “the” или “to” в английском языке. В этом процессе некоторые очень распространенные слова, которые очевидно не представляют большой ценности для целей NLP, фильтруются и исключаются из обрабатываемого текста. Таким образом удаляются широко распространенные и часто встречающиеся слова, которые не несут информации о тексте.
Шумовые слова (или стоп-слова) можно совершенно спокойно игнорировать, выполнив поиск на основе предварительно определенного списка ключевых слов, освободив место в базе данных и сократив время обработки.
Универсального списка шумовых слов не существует. Их список может быть взят из какой-либо другой работы или сформирован с нуля. Общепринятый подход заключается в том, чтобы начать с какого-либо базового списка игнорируемых шумовых слов и постепенно пополнять его по мере необходимости. Тем не менее, в последнее время складывается тенденция перехода от использования больших стандартных списков шумовых слов к полному отсутствию каких-либо подобных списков.
Дело в том, что удаление шумовых слов все-таки может исказить информацию и изменить контекст в конкретном предложении. Например, если мы проводим анализ тональности, мы можем полностью сбить наш алгоритм с правильного пути, если удалим, например, шумовое слово “not”. В этих условиях вы можете выбрать минимальный список игнорируемых слов и добавлять туда дополнительные слова (или наоборот удалять их оттуда) в зависимости от вашей конкретной цели.
Стемминг (Stemming)
— это процесс обрезания конца или начала слов с целью удаления аффиксов (лексических дополнений к корню слова).
Аффиксы, которые присоединяются к началу слова, называются префиксами (например, “astro” в слове “astrobiology”), а те, которые присоединяются к концу слова, называются суффиксами (например, “ful” в слове “helpful”).
Проблема в том, что аффиксы могут создавать или расширять новые формы одного и того же слова (так называемые формообразующие аффиксы) или даже сами создавать новые слова (так называемые словообразовательные аффиксы). В английском языке префиксы всегда являются словообразовательными (аффикс создает новое слово, как в примере с префиксом “eco” в слове “ecosystem”), а вот суффиксы могут быть словообразовательными (суффикс “ist” в слове “guitarist”) или формообразующими (аффикс образует новую форму слова, как в примере с суффиксом “er” в слове “faster”).
Так как нам определить разницу и отрезать то, что нужно?

Один из подходов состоит в том, чтобы брать в рассчет список распространенных аффиксов и правил (языки Python и R имеют различные библиотеки, содержащие аффиксы и методы) и выполнить формирование корней на их основе, но, конечно, этот подход имеет свои ограничения. Поскольку стеммеры используют алгоритмические подходы, результатом процесса стемминга может стать обрубок слова или даже изменение значения слова (и, как следствие, всего предложения). Чтобы компенсировать этот эффект, вы можете редактировать эти предопределенные методы, добавляя или удаляя аффиксы и правила, но вы должны помнить, что всегда есть риск улучшить показатели в одном месте, ухудшив их в другом. Всегда смотрите на картину в целом и отслеживайте показатели вашей модели.
Итак, если стемминг имеет серьезные ограничения, почему мы его используем? Прежде всего, его можно использовать для исправления орфографических ошибок в токенах. Стеммеры просты в использовании и работают очень быстро (они выполняют простые строковые операции), и если скорость и производительность имеют значение для вашей NLP-модели, то стеммеры, безусловно, являются хорошим выбором. Помните, мы используем их с целью улучшения нашей работы, а не в качестве упражнения по грамматике.
Лемматизация (Lemmatization)
призвана привести слово к его базовой форме и сгруппировать разные формы одного и того же слова. Например, глаголы в прошедшем времени заменяются на настоящее (например, “went” заменяется на “go”), а синонимы унифицируются (например, “best” заменяется на “good”), тем самым стандартизируя слова со значением, аналогичным их корню. Хотя лемматизация кажется тесно связанной с процессом стемминга, она использует другой подход для получения корневых форм слов.
Лемматизация преобразует слова в их словарную форму (известную как “лемма”), для чего требуются подробные словари, которые алгоритм может просматривать и связывать слова с соответствующими им леммами.
Например, слова “running”, “runs” и “ran” являются формами слова “run”, поэтому “run” — это лемма всех предыдущих слов.

Лемматизация также принимает во внимание контекст слова для решения других проблем, таких как устранение неоднозначности, что означает, что она может различать идентичные слова, которые имеют разные значения в зависимости от конкретного контекста. Вспомните такие слова, как “bat” (которое может соответствовать животному или металлической/деревянной бите, используемой в бейсболе) или “bank” (соответствующее финансовому учреждению или участку земли рядом с водоемом). Предоставляя параметр части речи слову (будь то существительное, глагол и т. д.), можно определить роль этого слова в предложении и устранить неоднозначность.
Как вы, возможно, уже поняли, лемматизация — гораздо более ресурсоемкая задача, чем стемминг. Поскольку для этого требуется больше знаний о структуре языка, чем для настройки стемпинга, она требует большей вычислительной мощности, чем настройка или адаптация алгоритма стемминга.
Тематическое моделирование (Topic Modeling)
– это метод выявления скрытых структур в наборах текстов или документов. По сути, он группирует тексты для обнаружения скрытых тем на основе их содержания, обрабатывая отдельные слова и присваивая им значения на основе их распределения. Этот метод основан на предположении, что каждый документ состоит из комбинации тем и что каждая тема (topic) состоит из набора слов, а это означает, что если мы сможем обнаружить эти скрытые темы, мы сможем раскрыть смысл наших текстов.
Из всего множества методов тематического моделирования Латентное/Скрытое размещение Дирихле (Latent Dirichlet Allocation или LDA), вероятно, является наиболее часто используемым. Этот относительно новый алгоритм (придуманный менее 20 лет назад) работает как метод обучения без учителя, который обнаруживает различные темы, лежащие в основе набора документов. В методах обучения без учителя, подобных этому, нет выходной переменной, которая бы направляла процесс обучения — данные исследуются алгоритмами для поиска закономерностей. Если быть более конкретным, LDA находит группы связанных слов следующим образом:
- Присваивая каждое слово случайной теме, где пользователь определяет количество тем, которые он хочет раскрыть. Вы не определяете сами темы (вы определяете только количество тем), и алгоритм сопоставляет все документы с темами таким образом, что слова в каждом документе в основном захватываются этими мнимыми темами.
- Алгоритм итеративно перебирает каждое слово и переназначает слово теме, принимая во внимание вероятность того, что это слово принадлежит именно этой теме, и вероятность того, что документ был создан по этой теме. Эти вероятности вычисляются многократно, до приемлемой сходимости алгоритма.
В отличие от других алгоритмов кластеризации, таких как метод K-средних, которые выполняют жесткую кластеризацию (где темы не пересекаются), LDA присваивает каждому документу комбинацию тем, что означает, что каждый документ может быть описан одной или несколькими темами (например, Документ 1 описывается 70% темы A, 20% темы B и 10% темы C) и отражают более реалистичные результаты.

Тематическое моделирование чрезвычайно полезно для классификации текстов, создания рекомендательных систем (например, чтобы рекомендовать вам книги на основе уже прочитанных вами) или даже для выявления трендов в онлайн-публикациях.
Что можно сказать о будущем NLP?
В настоящий момент NLP покоряет обнаружение нюансов в смысловых значениях языка, будь то отсутствие контекста, орфографические ошибки или диалектные различия.
В марте 2016 года Microsoft запустила Tay, чат-бота на основе искусственного интеллекта, в качестве эксперимента выпущенного на просторы Твиттера. Идея заключалась в том, что чем больше пользователей будет общаться с Tay’ем, тем умнее он будет становиться. Что ж, в результате через 16 часов Tay’а пришлось удалить из-за его расистских и оскорбительных комментариев:


Microsoft извлекла ценные уроки из собственного опыта и через несколько месяцев выпустила Zo, своего англоязычного чат-бота второго поколения, который должен был избежать ошибок предшественника. Zo использует комбинацию инновационных подходов для распознавания и генерации беседы. Другие компании занимаются разработкой ботов, которые могут запоминать детали, характерные для конкретного отдельного разговора.
Хотя будущее NLP выглядит чрезвычайно сложным и полным вызовов, эта дисциплина развивается очень быстрыми темпами (вероятно, как никогда раньше), и мы, вероятно, достигнем в ближайшие годы такого уровня развития, при котором еще более сложные приложения будут казаться вполне себе обычным делом.
- nlp
- nlp (natural language processing)
- machinelearning
NLP: что это такое и как она работает

Пишет про digital и машинное обучение для корпоративных блогов. Топ-автор в категории «Искусственный интеллект» на Medium. Kaggle-эксперт.
ChatGPT, GigaChat и подобные им программы могут удивить кого угодно — они не просто общаются с пользователем в чате, а могут подготовить ответ на письмо или даже сгенерировать изображение по нашему запросу. Как это стало возможным?
Их основа — NLP, или наука об обработке естественного языка, позволяющая компьютерам понимать и генерировать человеческую речь.
- Что такое NLP
- Какие задачи она решает
- Кто и как её использует
- Как работает NLP
- Какие проблемы у неё есть
- Где узнать про NLP больше
Что такое NLP
NLP (natural language processing), или обработка естественного языка, — это область искусственного интеллекта, задача которой — дать компьютерам возможность понимать и обрабатывать естественный язык. Это тот язык, который мы — люди — используем для общения между собой.
NLP как наука находится на стыке компьютерной лингвистики и технологии машинного обучения. С помощью обработки естественного языка компьютеры учатся вести беседы, отвечать на вопросы, переводить текст на разные языки или генерировать их с нуля. Машинам можно передать рутинные задачи, например попросить автоматически классифицировать заявки в службу поддержки по темам или языкам, на которых они написаны, отправляя их сразу к нужному специалисту.
Задачи NLP
С помощью NLP можно решить множество задач, связанных с обработкой естественного языка.
Распознавание речи. Компьютер может переводить голосовую речь в текст. Это требуется для любого приложения, которое выполняет голосовые команды или общается с человеком в чате. Например, так работают умные колонки с голосовым помощником Алисой.
Генерация естественного языка. Перевод структурированных, то есть табличных, данных, в текст на естественном языке. Можно сказать, что эта задача противоположна распознаванию речи.
Определение смысла слова. Компьютер может точно определить значение слова после семантического анализа предложения. Например, слово «замок» может иметь разные значения: «механическое устройство для запирания дверей» или «здание с фортификационными сооружениями». Задача NLP — определить, какой смысл имеет это слово в тексте.
Анализ эмоциональной окраски текста. Алгоритмы обработки естественного языка могут получать из текста его субъективные характеристики, например эмоции.
Определение перекрестных ссылок. Во время анализа текста он разбивается на токены — небольшие фрагменты, например отдельные слова. При дальнейшем анализе требуется сохранить и учесть их взаимосвязь.
Распознавание именованных сущностей. В текстах часто встречаются имена собственные: имя человека, название города, валюты и так далее. Задача NLP — правильно их выявить, чтобы корректно использовать при обработке текста и генерации ответа.
Кто и как использует NLP
NLP применяют в областях, где требуется обрабатывать и анализировать большие объёмы текстовой информации.
Маркетинг
Обработку естественного языка используют для анализа отзывов клиентов, чтобы понять, как улучшить продукт или услугу. С помощью парсинга можно собрать информацию о том, что говорят пользователи в социальных сетях. А затем провести семантический анализ, чтобы определить, насколько положительно отзываются о компании клиенты и какие проблемы есть у клиентов.
Чат-боты
На основе NLP работают многочисленные инструменты для генерации текстов, например ChatGPT от OpenAI, GigaChat от «Сбера» и YandexGPT от «Яндекса». Они отвечают на вопросы пользователей, генерируют тексты на разные темы и в разных форматах, составляют отчёты и так далее. Некоторые из них умеют рисовать изображения по текстовому запросу.


Инвестиции
Инвесторам важно знать, что происходит с компаниями, акции которых они купили или только собираются приобрести. NLP может помочь проанализировать данные о них: новости, финансовые отчёты и упоминания в соцсетях. После этого алгоритмы машинного обучения можно использовать для создания структурированного отчёта для финансистов и инвесторов.
Такой сервис готов запустить один из крупнейших банков мира JPMorgan Chase. Подробности разработки новой нейросети для инвесторов держатся в секрете, но уже известно её имя — IndexGPT.
Право и юриспруденция
NLP помогает анализировать законы, судебные решения и договоры или составлять их с нуля. Один из таких сервисов ― Law ChatGPT.
Он генерирует разные варианты юридических документов. Например, можно сделать короткое соглашение о неразглашении конфиденциальной информации на русском языке за несколько секунд.

Медицина
Технологии NLP используются для озвучки текста в программах и устройствах для людей с нарушениями речи.
Синтезировать речь умели и 15 лет назад, но тогда для этого комбинировали предзаписанные MP3-файлы и она звучала неестественно. С помощью NLP можно превращать текст в речь в реальном времени. А ещё для каждого пользователя можно сгенерировать оригинальный и уникальный голос на основе его собственного.
С помощью синтезатора речи общался с миром известный учёный Стивен Хокинг. Он вводил текст в программу при помощи единственной мышцы на щеке, которой ещё мог двигать. Программа подсказывала следующие фразы, ускоряя набор, и затем преобразовывала текст в речь.
Робототехника
Роботы, которые взаимодействуют с человеком, должны правильно воспринимать и выполнять его команды. Здесь не обойтись без NLP — речь необходимо сначала перевести в текстовый формат, а затем в понятные для машины инструкции.

Выбор способа представления данных
Подготовленные данные нужно представить машине так, чтобы она поняла, что от неё требуется.
Для этого можно составить терм-документную матрицу:
| d1 | d2 | d3 | d4 | d5 | |
|---|---|---|---|---|---|
| Корабль | 1 | 0 | 1 | 0 | 0 |
| Море | 0 | 1 | 0 | 0 | 0 |
| Путешествие | 1 | 1 | 0 | 0 | 1 |
Она представляет текст в виде матрицы, где первый столбец — это токен, а первая строка — номер анализируемого документа. В ячейках на пересечении строк и столбцов показано, как часто определённые слова встречаются в конкретном документе. С помощью таких матриц тексты классифицируют по темам.
Другой популярный способ представления данных ― векторное представление слов (word embedding). Благодаря ему можно отследить, как анализируемые токены связаны с другими токенами в предложении или тексте.
Этот способ представления данных используется в машинном переводе, поисковых системах и чат-ботах, поскольку модель NLP в этих задачах должна воспринимать не просто отдельные слова в тексте, но и то, как они связаны между собой.



Векторизация данных
На самом деле модели машинного обучения не умеют работать с текстовыми данными, а воспринимают только числа. Поэтому дата-сайентистам необходимо перевести токены в набор числовых значений.
Для этого существуют разные подходы. Два самых популярных — мешок слов и N-граммы. Мешок слов просто кодирует токены в цифры, учитывая их количество, но не учитывая контекст и конкретный порядок. При использовании N-грамм слова кодируются не по одному, а по два или три за раз. Благодаря этому сохраняется структура предложений и их контекст.
Применение алгоритмов машинного обучения
Заключительный этап работы в NLP — обучение модели на полученных данных с помощью специальных алгоритмов. Их можно написать с нуля или использовать готовые библиотеки, например NLTK, TextBlob и CoreNLP.
Для обработки естественного языка используют несколько основных алгоритмов:
- Наивный байесовский классификатор применяют для классификации текстов по тематикам на основе теории вероятностей. Например, так работают системы спам-фильтрации в электронной почте.
- Длинную цепь элементов краткосрочной памяти (LSTM, long short-term memory) используют для обработки последовательностей данных, чтобы учитывать общий контекст при обработке каждого слова. Такой подход применяют для генерации текстов.
- Нейронные сети, особенно рекуррентные нейронные сети (RNN) и трансформеры, участвуют в решении задач распознавания речи, машинного перевода и классификации текстов.
- Марковские модели применяют для анализа последовательностей слов и предсказания следующего слова в последовательности. Это полезно при переводе или генерации текста.

Выбор алгоритма зависит от типа и масштаба задач, которые стоят перед дата-сайентистом. Например, нейронные сети используют для анализа больших объёмов данных и построения больших языковых моделей. Последние могут не только понимать человеческую речь, но и генерировать её. Одной из самых известных больших языковых моделей является GPT-4 (Generative Pre-trained Transformer 4) от компании OpenAI, на базе которой построен ChatGPT.
Недостатки NLP
Несмотря на то что за последние годы инженерам удалось добиться больших успехов в NLP, предстоит решить ещё множество нетривиальных задач.
Компьютеры пока не понимают тонкостей значения слов, поэтому им сложно работать с омографами и омофонами: слова с разным смыслом могут иметь одинаковое написание и разное звучание или, наоборот, звучать одинаково, но написание будет различаться.

Пример проблемы с омонимами, когда написание слова совпадает, а значение различается. Компьютерам пока ещё трудно справляться с такими предложениями, как «Will, will Will will will Will Will’s will?» (пер. «Уилл, будет Уилл завещать Уиллу завещание Уилла?»). Google Translate, например, не может его правильно перевести.
К тому же понимать человеческую речь означает понимать эмоции. Одна из самых трудных для восприятия компьютером эмоций — сарказм. Модели NLP не всегда могут отличить серьёзный монолог от шутки.
Что почитать?
В этой статье мы рассмотрели только базовые принципы обработки естественного языка. Если вы хотите глубже погрузиться в тему NLP или даже написать собственную модель для распознавания текста, вот несколько ресурсов:
- «Обработка естественного языка в действии» Лейна Хобсона и других авторов.
- Natural Language Processing with Python Стивена Бёрда и других авторов.
- Курс «Нейронные сети и обработка текста» от Samsung Russia Open Education.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!