Основы обработки естественного языка на примере AWS Lex и Comprehend.

С помощью технологий и щепотки магии мы определяем цель каждого сообщения. Но чудо заключается в том, как мы обучаем модель, которая определяет намерение и понимает контекст. Технология машинного обучения быстро меняет то, как ваши клиенты решают свои проблемы, и становится дешевле!

Обработка естественного языка сейчас в моде. С скорым выпуском API GTP3 OpenAI машинное обучение и НЛП могут быстро стать гораздо более доступными для каждого стартапа.

Итак, мы хотим воспользоваться моментом, чтобы прояснить, как мы пришли к этому и что это означает для создателей продуктов, которые хотят интегрировать NLP и ML в свои текущие или будущие приложения. Спойлер — это проще, производительнее и доступнее, чем когда-либо!

Схема

Обработка естественного языка, также известная как НЛП, находится на стыке лингвистики, информатики и машинного обучения. НЛП решает проблемы взаимодействия между машинами и людьми с помощью наших родных человеческих языков.

История НЛП начинается с книги Алана Тьюринга Вычислительные машины и интеллект. В этой статье он спросил: Могут ли машины думать? Но термины машина и думать слишком расплывчаты и двусмысленны, чтобы дать точный ответ. Поэтому Тьюринг предложил ответить на альтернативный вопрос: Может ли цифровая машина победить в игре-симуляторе?

Программисты решали этот вопрос по-разному на протяжении многих лет, но их решения в целом делятся на два разных подхода:

  • «На основе правил» — где все правила парсинга и обработки текста создаются программистом вручную, что позволяет добиться высокой точности и обрабатывать аномалии в тексте. Но такой подход сильно усложняет архитектуру программы.
  • «Машинное обучение — позволяет проводить вероятностный анализ, но требует большого объема текстов для обучения.

Наиболее точные и оптимальные решения включают оба подхода одновременно.

Последней тенденцией в алгоритмах NLP являются двунаправленные кодировщики Google AI Language от Transformers, также известные как BERT. В нем представлены самые современные результаты в различных задачах НЛП, включая ответы на вопросы (SQuAD v1.1) и вывод на естественном языке (MNLI).

Но обо всем по порядку. Начнем с рекуррентных нейронных сетей.

Поскольку у каждого нейрона есть внутреннее состояние, эта модель может обрабатывать любую последовательность.

Главное преимущество этой модели в том, что она может обрабатывать последовательности и — в определенном смысле — учитывать контекст значения в строке. Основным недостатком этой модели является так называемая проблема исчезновения и взрыва градиента. При достаточно длинной последовательности градиент функции «исчезает».

В 1991 году какие-то умные ребята нашли способ уменьшить влияние этой проблемы — они предложили добавить в каждую ячейку элемент под названием Долговременная кратковременная память (LSTM).

Другая ячейка памяти позволяет нам дольше сохранять градиент (контекст) в памяти, но это не полное решение проблемы. Длина обрабатываемых последовательностей увеличилась не более чем на порядок — со 100 до 1000. Если вкратце, то мы получили дополнительные слои — Входные, Выходные и Забыть Гейты — которые помогают сохранить градиент функции.

В 2017 году было представлено новое поколение рекурсивной модели — Трансформер.

BERT использует сеть-трансформер для решения задачи преобразования последовательности или нейронного машинного перевода. Это задачи преобразования одной последовательности в другую — например, звуковой информации в текст (распознавание речи).

Принципиально архитектура повторяет идею RNN, но давайте подробнее рассмотрим, что именно там происходит. В качестве примера воспользуемся переводом с английского на французский:

Большая рыжая собака -› Le gros chien rouge

Он состоит из 2 частей — энкодера (слева) и декодера (справа).

Input Embedding и Output Embedding «отображают» слова на входе во встроенное пространство. Каждое слово имеет свои координаты, и в этом пространстве мы можем определить, насколько эти слова близки по значению, определив расстояние между ними.

Input Embedded получает N-е слово исходного предложения «big», а Output Embedded N-1 получает слово переведенного предложения «Le». После этого мы работаем только с векторами. Позиционное кодирование создает вектор, предоставляющий контекст на основе позиции слова в предложении.

Но понимания положения каждого слова недостаточно. Даже в таком простом предложении термины имеют разную степень важности.

Введите Multi-Head Attention. Цель этого блока — указать связь текущего слова с остальным предложением. Для каждого слова генерируется вектор значений — поэтому он называется многоголовым.

Этот блок расположен в энкодере и сравнивает значения слов, полученных в энкодере и декодере. Другими словами, он инкапсулирует взаимодействие между языками.

Другие элементы трансформера:

  • Masked Multi-Head Внимание: эта сеть присутствует только в кодировщике; необходимо замаскировать значения, которые мы еще не вычислили.
  • Feed Forward: применяет вектор внимания к предыдущим значениям и подготавливает данные для следующего блока декодера/кодировщика.
  • Добавить и нормализовать: нормализует данные.
  • Линейный: сравнивает значения вектора и слова — действие, обратное встраиванию.
  • Softmax: вычисляет распределение вероятностей и дает наиболее вероятный результат.

Итак, в итоге имеем Трансформер:

Теперь, когда мы понимаем, что такое трансформеры, будет легче понять «прорыв», сделанный инженерами Google.

Ранее анализ текста был однонаправленным. Теперь анализ является двунаправленным — или ненаправленным, поскольку предложение анализируется полностью.

Таким образом, модель BERT позволяет поисковой системе Google понимать запросы лучше, чем те, кто их создает.

Amazon Comprehend — это сервис обработки естественного языка, который извлекает ключевые фразы, места, имена, бренды, события и настроения из неструктурированного текста. Он основан на сложных моделях глубокого обучения, обученных AWS. Он использует не прямое значение слов, а их значение в контексте. Он устраняет большинство неудач в определении темы.

Основное преимущество Amazon Comprehend — расширяемость. Если ваш бизнес предоставляет услуги в определенной области, вы можете быстро расширить модель с помощью настраиваемых объектов и пользовательской классификации. Custom Entities позволяют находить термины/слова или, как говорят серьезные люди, «любую последовательность символов», которая вам нужна.

Например, решает задачи сортировки и распределения почты, статей, отзывов клиентов и любой информации на естественном языке. Чем больше данных вы предоставите, тем точнее их найдет Comprehend. Тематическое моделирование позволяет обучать модели только по содержимому этих документов.

Пользовательская классификация позволяет классифицировать наборы документов. Вы можете классифицировать письма с отзывами клиентов, отправлять положительные отзывы руководителю отдела, делать выводы на основе отрицательных и автоматически «отмечать их как прочитанные».

Amazon использует Latent Dirichlet Allocation (LDA) — генеративную вероятностную модель для коллекций дискретных данных, основанную на теореме Байеса. Например, большинство «нормальных» людей решат, что если в тексте есть «недифференцированное поднятие тяжестей», то это, скорее всего, статья о спорте. Но если в тексте есть имена Байеса или Дирихле, то, скорее всего, речь идет о тяжелом ML.

Если от этого у вас кружится голова, не волнуйтесь!

Чтобы интегрировать Comprehend в свой продукт, вам не нужно разбираться в «элементарных преобразованиях» теоремы Байеса.

Вам даже не нужны разработчики с глубокими знаниями в области машинного обучения. Вместо «однообразной тяжелой работы» вы можете сосредоточиться на функциях и быстрой доставке.

Интерфейс и документация Amazon позволяют нам создавать продукты на основе технологий машинного обучения с помощью команды веб-разработчиков и недели исследований.

В то время как Comprehend предназначен для текста, Amazon Lex обеспечивает широкие функциональные возможности и гибкость понимания естественного языка (NLU) и автоматического распознавания речи (ASR). AWS предоставляет не только API, но и графический интерфейс. Вам нужно передать образцы фраз; чем больше данных вы используете, тем точнее будет классификация.

Этот сервис позволяет создавать ботов для голосового и текстового общения. Основными элементами Amazon Lex являются типы Intent, Slot и Channel. Только с этими тремя объектами вы можете создать домашнюю Alexa (ну, почти).

Конечно, самые актуальные данные — это история общения с вашими клиентами. Lex позволяет вам обрабатывать ошибки и устанавливать подсказки с разъяснениями и фразу для завершения разговора, чтобы более приятно общаться с вашими клиентами.

Для каждого намерения можно указать набор слотов. Слот — это данные, которые клиент должен предоставить для выполнения намерения. Пользователь должен выбрать размер и начинку, если вы продаете пиццу. В противном случае они не смогут его заказать. Для каждого слота вы можете установить определенную подсказку.

Это добавляет интерактивности вашему приложению, и мы можем наконец-то избавить мир от статических многоэтапных форм.

Установка типа канала позволяет вам адаптировать поведение для каждого канала. Например, чтобы быть более кратким в чате на Twillio, Лекс может использовать короткие сленговые формы, такие как LOL, IDK и JFYI.

И последнее, но не менее важное — бизнес-логика. AWS Lex позволяет использовать хуки в формате функций AWS Lambda. Это немедленно и значительно увеличивает вашу способность настраивать и проверять поведение! Вы можете автоматизировать общение с клиентом и часть своего бизнеса.

Благодаря AWS Lex и Comprehend Machine Learning стали более демократичными!

Что это значит для предпринимателей? С падением финансовых порогов для технологий глубокого обучения качество услуг машинного обучения и количество успешных продуктов, интегрирующих машинное обучение, растут.

Теперь, чтобы изменить мир, не нужны богатые родители и диплом Гарварда — родителей из среднего класса более чем достаточно!

В Paralect мы ориентируемся на доставку продукта и время выхода на рынок с использованием передовых технологий. Такие сервисы, как AWS Lex и Comprehend, в сочетании с подходом без написания кода позволяют быстро запускать, расширять или итерировать приложения в рамках разумного бюджета.

Первоначально опубликовано на https://blog.paralect.com.