Что такое Natural Language Processing?
Об эксперте: Мария Тихонова, Data Scientist в SberDevices, Преподаватель ВШЭ, куратор направления ИИ на RuCode 4.0.
Natural Language Processing, сокращенно NLP, переводится как автоматическая обработка тестов. Это часть Data Science, которая специализируется на работе с текстами. Так что любая задача, связанная с текстами, в которой используются методы машинного обучения, нейросети и data science, можно отнести к NLP. Это тот же машинный перевод, всевозможные «умные» чат-боты, детекция спама в почте и многие-многие другие.
Зачем нужно учить компьютеры понимать естественные языки?
Какие технологии на NLP мы используем в повседневной жизни и как они нам помогают?
Приложения NLP на сегодняшний день окружают нас повсюду, они так плотно вошли в нашу жизнь, что мы порой не замечаем их. Тот же поиск в Google или «Яндекс» — это ведь тоже NLP. Машинный перевод, всевозможные чат-боты и виртуальные ассистенты такие как Салют от «Сбера», Siri, Алиса, digital-реклама, безопасность и многое-многое другое — это тоже NLP.
Технологии NLP облегчают и упрощают нашу повседневную жизнь, и являются нашими «постоянными спутниками» в сети интернет.
Как работает NLP?
NLP — это огромная область и, конечно, в ней применяются самые разные методы. Начиналось все с простейших алгоритмов, основанных на правилах и словарях, которые по заданным синтаксическим и семантическим шаблонам искали в текстах определенные конструкции или слова, на основе которых алгоритм и давал ответ. А сегодня в этой области «правят» большие языковые модели, основанные на нейросетях. Языковая модель — это такая модель, которая для фрагмента текста (а в NLP текст чаще всего рассматривают как последовательность слов) умеет оценивать вероятность встретить такую последовательность слов в языке. Как следствие языковая модель умеет находить наиболее вероятное продолжение для текста. Неформально, вы можете представлять себе нейросетевую языковую модель, как большую нейросеть, которая умеет предсказывать наиболее вероятное продолжение текста и как следствие генерировать текст. Например, мы подаем на вход модели текст: «В день рождения я желаю тебе…», а она его продолжает: »... любви и удачи в учебе» или »...встретить любовь всей своей жизни и уехать с ней на необитаемый остров».
Но для того чтобы нейросеть могла генерировать продолжение текста, ее необходимо «обучить». Для этого через модель прогоняют гигантские объемы текстов (например, все тексты, которые удалось скачать из Рунета), написанных на естественном языке, и таким образом, основываясь на этих текстах, модель постепенно выучивает вероятности встретить одни слова рядом с другими, а значит и каким образом можно продолжить текст. То есть мы моделируем язык при помощи вероятности встретить одни слова рядом с другими. Кстати, процесс обучения очень долгий и может занять несколько недель с использованием сотен GPU (внешний графический процессор. — РБК Тренды). Этот процесс может занять несколько недель).
А затем, имея такую обученную языковую модель, которая уже знает язык, мы можем использовать ее для решения самых разных задач, связанных с текстами: саммаризация текста, парафраз, выявление эмоций собеседника, детекция спама в почте и так далее. Для этого мы дообучаем модель для конкретной задачи, а это уже сравнительно быстро и не так дорого.
Например, для задачи парафраза можно научить модель перефразировать текст:
Оригинал: «Куда отправиться на каникулах?» → Парафраз: «Куда поехать на каникулах?»
Оригинал: «Можешь назвать любимое мобильное приложение?» → Парафраз: «Какое твое самое любимое мобильное приложение?»
Такая модель парафраза может быть полезна рерайтерам, студентам или она может быть встроена в чат-бота, чтобы разнообразить его речь.
Какие сложности есть с русским языком?
NLP тесно связано с лингвистикой и при обучении моделей и решении тех или иных NLP-задач, безусловно, необходимо учитывать особенности того или иного языка. Например, в русском в отличие от английского свободный порядок слов и большое число словоформ. Это, безусловно, влияет на качество получившихся моделей и, возможно, даже на выбор алгоритмов. Например, для русского языка для нормализации слов обычно применяют лемматизацию, то есть приводят все слова из текста к их нормальной словарной форме. Так, для существительных это будет слово в мужском роде и именительном падеже (нейросетью → нейросеть, учеными → ученый, и так далее). А вот для английского неплохо работает такой метод как стемминг, при котором исходная словоформа обрезается до его основы (features → featur, accessible → access и тому подобные).
Помимо этого, на качество моделей оказывает количество данных для обучения (как правило, чем больше данных, тем лучше). Для разных языков количество текстов в открытом доступе разное. К счастью, русскоязычных текстов достаточно много, но все равно меньше чем для английского.
Какие есть сложности и ограничения
Во-первых, при обучении больших языковых моделей мы сталкиваемся со стандартными проблемами обучения больших нейросетей: это требует очень много мощностей, времени и ресурсов. Для этого нужны большие суперкомпьютеры и многие сотни GPU. Маленькие компании просто не могут позволить себе такое. К счастью, есть много моделей, в том числе русскоязычных, в открытом доступе. Например, большинство моделей, которые мы обучаем в SberDevices, доступны в библиотеке HuggingFace, одной из наиболее популярных библиотек в этой области.
Во-вторых, NLP, как я уже упоминала, очень сильно завязано на язык. Методы и алгоритмы, которые хорошо работают для английского, могут работать плохо и даже быть вообще неприменимы для других языков, например, для китайского.
Что ждет технологию в будущем
Сложно сказать, технологии ИИ и NLP в частности развиваются так стремительно, что сложно предсказать, что ждет нас через 5–10 лет. Пока тренд такой, что языковые модели «стремительно растут», число параметров в них растет с экспоненциальной скоростью. За счет этого они способны запоминать все больше информации о языке и решать все более и более интеллектуальные задачи.
Пример из практики. Задача на фестивале по искусственному интеллекту и алгоритмическому программированию RuCode:
В 2021 году задача трека была основана на всемирно известном сериале «Друзья». Участникам требовалось обучить модель, которая по реплике одного из главных героев сериала предсказывала, кому именно она принадлежит. Напомню, в «Друзьях» шесть главных персонажей, которые на протяжении сериала общаются, ссорятся, мирятся и попадают в комичные ситуации. Таким образом, задача представляла собой задачу классификации на шесть классов.
В качестве данных участникам были даны скрипты сериала «Друзья» с репликами главных героев. Датасет содержал диалоги из скриптов сериала «Друзья». При этом скрипты были переведены автопереводом с английского. Данные представлены в виде пар «вводная реплика — ответ одного из героев». Необходимо предсказать, кому из героев принадлежит ответ.
За время соревнования мы получили более 30 различных решений от участников. Приятно, что соревнование вызвало такой интерес среди участников RuCode, а в топ вошли действительно сильные решения.