НЛП с Google Cloud Natural Language API
Опубликовано: 2022-03-11Обработка естественного языка (NLP), представляющая собой сочетание машинного обучения и лингвистики, стала одним из наиболее активно изучаемых предметов в области искусственного интеллекта. За последние несколько лет было достигнуто много новых вех, самой новой из которых является модель OpenAI GPT-2, которая способна создавать реалистичные и связные статьи по любой теме из краткого ввода.
Этот интерес вызван многочисленными коммерческими приложениями, появившимися на рынке в последние годы. Мы разговариваем с нашими домашними помощниками, которые используют НЛП для расшифровки аудиоданных и понимания наших вопросов и команд. Все больше и больше компаний перекладывают большую часть усилий по общению с клиентами на автоматизированных чат-ботов. Онлайн-рынки используют его для выявления поддельных отзывов, медиакомпании полагаются на НЛП для написания новостных статей, рекрутинговые компании сопоставляют резюме с вакансиями, гиганты социальных сетей автоматически фильтруют разжигающий ненависть контент, а юридические фирмы используют НЛП для анализа контрактов.
Обучение и развертывание моделей машинного обучения для подобных задач в прошлом было сложным процессом, для которого требовалась команда экспертов и дорогостоящая инфраструктура. Но высокий спрос на такие приложения побудил крупных поставщиков разработать услуги, связанные с NLP, которые значительно снижают рабочую нагрузку и затраты на инфраструктуру. Средняя стоимость облачных услуг снижалась в течение многих лет, и ожидается, что эта тенденция сохранится.
Продукты, которые я представлю в этой статье, являются частью Google Cloud Services и называются «Google Natural Language API» и «Google AutoML Natural Language».
API естественного языка Google
Google Natural Language API — это простой в использовании интерфейс для набора мощных моделей НЛП, предварительно обученных Google для выполнения различных задач. Поскольку эти модели были обучены на чрезвычайно больших корпусах документов, их производительность обычно довольно высока, если они используются на наборах данных, которые не используют очень своеобразный язык.
Самым большим преимуществом использования этих предварительно обученных моделей через API является то, что набор обучающих данных не требуется. API позволяет пользователю немедленно начать делать прогнозы, что может быть очень полезно в ситуациях, когда доступно мало размеченных данных.
Natural Language API включает в себя пять различных сервисов:
- Синтаксический анализ
- Анализ настроений
- Анализ сущностей
- Анализ настроений сущностей
- Текстовая классификация
Синтаксический анализ
Для заданного текста синтаксический анализ Google вернет разбивку всех слов с богатым набором лингвистической информации для каждой лексемы. Информацию можно разделить на две части:
Часть речи: эта часть содержит информацию о морфологии каждого токена. Для каждого слова возвращается детальный анализ, содержащий его тип (существительное, глагол и т. д.), род, грамматический падеж, время, грамматическое наклонение, грамматический залог и многое другое.
Например, для входного предложения «Компьютер когда-то обыграл меня в шахматы, но в кикбоксинге ему было не ровня». (Эмо Филипс) анализ частей речи:
А | тег: ДЕТ |
'компьютер' | тэг: СУЩЕСТВИТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ СРЕДСТВО |
'однажды' | тег: реклама |
'бить' | тэг: ГЛАГОЛ настроение: УКАЗАТЕЛЬНОЕ время: ПРОШЛОЕ |
'меня' | тэг: PRON падеж: АККУЗАТИВ число: ЕДИНСТВЕННОЕ лицо: ПЕРВЫЙ |
в | тег: АДП |
шахматы | тэг: СУЩЕСТВИТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ СРЕДСТВО |
',' | тег: ПУНКТ |
'но' | тег: КОНЖ |
'Это' | тэг: PRON падеж: ИМЕНИТЕЛЬНЫЙ род: СРЕДНИЙ ФОРМАТ число: ЕДИНСТВЕННОЕ лицо: ТРЕТИЙ |
'было' | тэг: ГЛАГОЛ настроение: УКАЗАТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ лицо: ТРЕТЬЕ время: ПРОШЛОЕ |
'нет' | тег: ДЕТ |
'соответствовать' | тэг: СУЩЕСТВИТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ СРЕДСТВО |
'для' | тег: АДП |
'пинать' | тэг: СУЩЕСТВИТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ СРЕДСТВО |
'заниматься боксом' | тэг: СУЩЕСТВИТЕЛЬНОЕ число: ЕДИНСТВЕННОЕ СРЕДСТВО |
'.' | тег: ПУНКТ |
Деревья зависимостей: вторая часть возврата называется деревом зависимостей, которое описывает синтаксическую структуру каждого предложения. На следующей диаграмме известной цитаты Кеннеди показано такое дерево зависимостей. Для каждого слова стрелки указывают, какие слова изменяются им.
Широко используемые библиотеки Python nltk и spaCy содержат аналогичные функции. Качество анализа стабильно высокое во всех трех вариантах, но Google Natural Language API проще в использовании. Приведенный выше анализ можно получить с помощью очень небольшого количества строк кода (см. пример ниже). Однако, хотя spaCy и nltk имеют открытый исходный код и, следовательно, бесплатны, использование Google Natural Language API стоит денег после определенного количества бесплатных запросов (см. раздел о расходах).
Помимо английского, синтаксический анализ поддерживает десять дополнительных языков: китайский (упрощенный), китайский (традиционный), французский, немецкий, итальянский, японский, корейский, португальский, русский и испанский .
Анализ настроений
Служба синтаксического анализа в основном используется на ранних этапах конвейера для создания функций, которые позже используются в моделях машинного обучения. Наоборот, сервис анализа настроений можно использовать прямо из коробки.
Анализ настроений Google предоставит преобладающее эмоциональное мнение в предоставленном тексте. API возвращает два значения: «Оценка» описывает эмоциональную окраску текста от -1 (отрицательно) до +1 (положительно), где 0 означает нейтральность.
«Величина» измеряет силу эмоции.
Давайте рассмотрим несколько примеров:
Введите предложение | Результаты настроений | Интерпретация |
Поезд в Лондон отправляется в четыре часа. | Оценка: 0,0 Величина: 0,0 | Совершенно нейтральное высказывание, не содержащее вообще никаких эмоций. |
Этот пост в блоге хорош. | Оценка: 0,7 Величина: 0,7 | Настроение положительное, но выражено не очень сильно. |
Этот пост в блоге хорош. Это было очень полезно. Автор потрясающий. | Оценка: 0,7 Величина: 2,3 | Те же чувства, но выраженные гораздо сильнее. |
Этот пост в блоге очень хорош. Этот автор обычно ужасный писатель, но тут ему повезло. | Оценка: 0,0 Величина: 1,6 | Величина показывает нам, что в этом тексте выражены эмоции, но настроение показывает, что они смешанные и не являются явно положительными или отрицательными. |
Модель анализа настроений Google обучена на очень большом наборе данных. К сожалению, нет информации о его подробной структуре. Мне было любопытно узнать его реальную производительность, поэтому я протестировал его на части набора данных Large Movie Review, созданного учеными из Стэнфордского университета в 2011 году.
Я случайным образом выбрал 500 положительных и 500 отрицательных отзывов о фильмах из тестового набора и сравнил прогнозируемое настроение с фактическим значением отзыва. Матрица путаницы выглядела так:
Положительный настрой | Негативное настроение | |
Хороший обзор | 470 | 30 |
Плохой отзыв | 29 | 471 |
Как видно из таблицы, модель верна примерно в 94% случаев для хороших и плохих обзоров фильмов. Это неплохая производительность для готового решения без какой-либо тонкой настройки под данную задачу.
Примечание. Анализ тональности доступен для тех же языков, что и анализ синтаксиса, кроме русского.
Анализ сущностей
Анализ сущностей — это процесс обнаружения известных объектов, таких как общественные деятели или достопримечательности, из заданного текста. Обнаружение сущностей очень полезно для всех видов задач классификации и тематического моделирования.
Google Natural Language API предоставляет некоторую базовую информацию о каждом обнаруженном объекте и даже предоставляет ссылку на соответствующую статью в Википедии, если она существует. Кроме того, рассчитывается показатель значимости. Эта оценка для сущности предоставляет информацию о важности или центральной роли этой сущности для всего текста документа. Оценки ближе к 0 менее заметны, а оценки ближе к 1,0 очень заметны.
Когда мы отправляем запрос к API с таким примером предложения: «Роберт Де Ниро разговаривал с Мартином Скорсезе в Голливуде в канун Рождества в декабре 2011 года». Получаем следующий результат:
Обнаруженный объект | Дополнительная информация |
Роберт Де Ниро | тип: PERSON заметность: 0.5869118 wikipedia_url: https://en.wikipedia.org/wiki/Robert_De_Niro |
Голливуд | тип: МЕСТОПОЛОЖЕНИЕ значимость: 0.17918482 wikipedia_url: https://en.wikipedia.org/wiki/Hollywood |
Мартин Скорсезе | тип: МЕСТОПОЛОЖЕНИЕ значимость: 0.17712952 wikipedia_url: https://en.wikipedia.org/wiki/Martin_Scorsese |
канун Рождества | тип: PERSON заметность: 0.056773853 wikipedia_url: https://en.wikipedia.org/wiki/Christmas |
декабрь 2011 г. | тип: ДАТА Год: 2011 Месяц: 12 значимость: 0.0 wikipedia_url: - |
2011 | тип: ЧИСЛО значимость: 0.0 wikipedia_url: - |
Как видите, все объекты идентифицированы и классифицированы правильно, за исключением того, что 2011 появляется дважды. В дополнение к полю в выходных данных примера API анализа сущностей также будет обнаруживать организации, произведения искусства, потребительские товары, номера телефонов, адреса и цены.
Анализ настроений сущностей
Если существуют модели для обнаружения сущностей и анализа настроений, вполне естественно пойти дальше и объединить их для определения преобладающих эмоций по отношению к различным сущностям в тексте.
В то время как API анализа настроений находит все проявления эмоций в документе и объединяет их, Анализ настроений сущностей пытается найти зависимости между различными частями документа и идентифицированными сущностями, а затем приписывает эмоции в этих текстовых сегментах соответствующим сущностям.
Например, самоуверенный текст: «Автор — ужасный писатель. С другой стороны, читатель очень умен». приводит к результатам:
Сущность | настроение |
автор | Заметность: 0,8773350715637207 Тональность: величина: 1,899999976158142 оценка: -0,8999999761581421 |
читатель | Заметность: 0,08653714507818222 Тональность: величина: 0,8999999761581421 оценка: 0,8999999761581421 |
Пока анализ настроений сущностей работает только для английского, японского и испанского языков.
Текстовая классификация
Наконец, Google Natural language API поставляется с моделью классификации текста plug-and-play.
Модель обучена классифицировать входные документы по большому набору категорий. Категории имеют иерархическую структуру, например, категория «Хобби и отдых» имеет несколько подкатегорий, одной из которых будет «Хобби и отдых/прогулки на свежем воздухе» , которая сама имеет подкатегории, такие как «Хобби и отдых/прогулки на свежем воздухе/Рыбалка».
Это пример текста из рекламы камеры Nikon:
«Большая 24,2-мегапиксельная матрица формата DX фотокамеры D3500 позволяет делать фотографии с высокой детализацией и видеоролики в формате Full HD — даже при съемке в условиях слабого освещения. В сочетании с возможностями обработки вашего объектива NIKKOR вы можете начать создавать художественные портреты с плавным размытием фона. С легкостью."

API Google возвращает результат:
Категория | Уверенность |
Искусство и развлечения/Изобразительное искусство и дизайн/Фотографическое и цифровое искусство | 0,95 |
Хобби и отдых | 0,94 |
Компьютеры и электроника/Бытовая электроника/Фото- и фототехника | 0,85 |
Все три категории имеют смысл, хотя мы интуитивно оцениваем третью запись выше, чем вторую. Однако следует учитывать, что этот входной сегмент является лишь короткой частью полного документа с рекламой камеры, и производительность модели классификации улучшается с увеличением длины текста.
Попробовав его с большим количеством документов, я обнаружил, что результаты модели классификации имеют смысл в большинстве случаев. Тем не менее, как и все другие модели из Google Natural Language API, классификатор представляет собой решение черного ящика, которое не может быть изменено или даже настроено пользователем API. В частности, в случае классификации текста подавляющее большинство компаний будут иметь свои собственные текстовые категории, которые отличаются от категорий модели Google, и поэтому служба классификации текстов Natural Language API может быть неприменима для большинства пользователей.
Еще одно ограничение модели классификации заключается в том, что она работает только для текстов на английском языке.
Как использовать API естественного языка
Основным преимуществом Google Natural Language API является простота использования. Не требуется никаких навыков машинного обучения и почти никаких навыков программирования. На веб-сайте Google Cloud вы можете найти фрагменты кода для вызова API для многих языков.
Например, код Python для вызова API анализа тональности очень короткий:
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
Другие функции API вызываются аналогичным образом, просто заменяя client.analyze_sentiment
на соответствующую функцию.
Общая стоимость Google Natural Language API
Google взимает плату со своих пользователей за каждый запрос за все услуги API естественного языка. Это имеет то преимущество, что нет фиксированных затрат на какие-либо серверы развертывания. Недостатком является то, что он может стать дорогим для очень больших наборов данных.
В этой таблице приведены цены (за 1000 запросов) в зависимости от количества запросов в месяц:
Если документ содержит более 1000 символов, он считается несколькими запросами. Например, если вы хотите проанализировать тональность 10 000 документов по 1500 символов в каждом, с вас будет взиматься плата в размере 20 000 запросов. Поскольку первые 5000 бесплатны, общая стоимость составит 15 долларов. Анализ одного миллиона документов такого же размера будет стоить 1995 долларов.
Удобный, но негибкий
Google Natural Language API — очень удобный вариант для быстрых готовых решений. Требуется очень мало технических знаний и понимания базовых моделей машинного обучения.
Основным недостатком является его негибкость и отсутствие доступа к моделям. Модели нельзя настроить для конкретной задачи или набора данных.
В реальной среде для большинства задач, вероятно, потребуется более индивидуальное решение, чем могут предоставить стандартные функции API естественного языка.
Для этого сценария больше подходит Google AutoML Natural Language.
Естественный язык Google AutoML
Если API естественного языка недостаточно гибок для ваших бизнес-целей, AutoML Natural Language может быть подходящей службой. AutoML — это новая облачная служба Google (все еще находится в стадии бета-тестирования), которая позволяет пользователю создавать настраиваемые модели машинного обучения. В отличие от API естественного языка, модели AutoML будут обучаться на данных пользователя и, следовательно, подходят для конкретной задачи.
Пользовательские модели машинного обучения для классификации контента полезны, когда предопределенные категории, доступные в API естественного языка, слишком общие или неприменимы к вашему конкретному варианту использования или предметной области.
Служба AutoML требует от пользователя немного больше усилий, в основном потому, что вам нужно предоставить набор данных для обучения модели. Однако обучение и оценка моделей полностью автоматизированы, и знания машинного обучения не требуются. Весь процесс можно выполнить без написания кода с помощью консоли Google Cloud. Конечно, если вы хотите автоматизировать эти шаги, есть поддержка всех распространенных языков программирования.
Что можно сделать с помощью естественного языка Google AutoML?
Служба AutoML охватывает три варианта использования. Все эти варианты использования пока поддерживают только английский язык.
1. Классификация текста AutoML
В то время как текстовый классификатор Natural Language API является предварительно обученным и, следовательно, имеет фиксированный набор текстовых категорий, текстовая классификация AutoML создает настраиваемые модели машинного обучения с категориями, которые вы предоставляете в своем обучающем наборе данных.
2. Анализ тональности AutoML
Как мы видели, анализ настроений с помощью Natural Language API отлично работает в общих случаях использования, таких как обзоры фильмов. Поскольку модель настроений обучается на очень общем корпусе, производительность может ухудшиться для документов, в которых используется много предметно-ориентированного языка. В таких ситуациях анализ тональности AutoML позволяет обучить модель тональности, настроенную для вашего домена.
3. Извлечение объектов AutoML
Во многих бизнес-контекстах существуют объекты, специфичные для предметной области (юридические контракты, медицинские документы), которые API естественного языка не сможет идентифицировать. Если у вас есть набор данных, в котором объекты помечены, вы можете обучить средство извлечения сущностей настраиваемой модели с помощью AutoML. Если набор данных достаточно велик, обученная модель извлечения объектов также сможет обнаруживать ранее невидимые объекты.
Как использовать естественный язык AutoML
Использование трех AutoML — это четырехэтапный процесс, который очень похож для всех трех методологий:
Подготовка набора данных
Набор данных должен быть в определенном формате (CSV или JSON) и храниться в сегменте хранилища. Для моделей классификации и настроений наборы данных содержат только два столбца: текст и метку. Для модели извлечения сущностей набору данных требуется текст и расположение всех сущностей в тексте.Обучение модели
Обучение модели полностью автоматизировано. Если не указано иное, AutoML автоматически разделит обучающий набор на обучающий, тестовый и проверочный наборы. Это разделение также может определяться пользователем, но это единственный способ повлиять на обучение модели. Остальная часть обучения полностью автоматизирована по принципу «черного ящика».Оценка
Когда обучение будет завершено, AutoML отобразит оценки точности и отзыва, а также матрицу путаницы. К сожалению, нет абсолютно никакой информации о самой модели, что затрудняет выявление причин плохой работы моделей.Прогноз
Если вы удовлетворены производительностью модели, ее можно удобно развернуть с помощью пары щелчков мыши. Процесс развертывания занимает всего несколько минут.
Производительность модели AutoML
Процесс обучения идет довольно медленно, вероятно, из-за того, что лежащие в его основе модели очень большие. Я обучил небольшую тестовую классификационную задачу с 15 000 образцов и 10 категориями, и обучение заняло несколько часов. Реальный пример с гораздо большим набором данных занял у меня несколько дней.
Хотя Google не опубликовал никаких подробностей об используемых моделях, я предполагаю, что модель Google BERT используется с небольшими адаптациями для каждой задачи. Точная настройка больших моделей, таких как BERT, требует значительных вычислительных ресурсов, особенно когда выполняется большое количество перекрестных проверок.
Я протестировал модель классификации AutoML на реальном примере в сравнении с моделью, которую разработал сам и основан на BERT. Удивительно, но модель AutoML показала себя значительно хуже, чем моя собственная модель, при обучении на тех же данных. AutoML достиг точности 84%, в то время как моя модель достигла 89%.
Это означает, что, хотя использование AutoML может быть очень удобным, для задач, критичных к производительности, имеет смысл потратить время и разработать модель самостоятельно.
Цены на AutoML
Цена AutoML для прогнозов в размере 5 долларов США за 1000 текстовых записей значительно выше, чем у Natural Language API. Кроме того, за обучение модели AutoML взимает 3 доллара в час. Хотя вначале это незначительно, для случаев использования, требующих частого переобучения, это может составить значительную сумму, особенно потому, что обучение кажется довольно медленным.
Давайте используем тот же пример, что и для Natural Language API:
Вы хотите проанализировать тональность 10 000 документов, каждый из которых содержит 1500 символов, поэтому с вас будет взиматься плата за 20 000 запросов. Допустим, обучение модели занимает 20 часов, что стоит 48 долларов. Прогноз вам ничего не будет стоить, так как первые 30 000 запросов бесплатны. Для таких небольших наборов данных AutoML очень экономичен.
Однако, если ваш набор данных больше и вам нужно предсказать настроение одного миллиона человек того же размера, это будет стоить 9850 долларов, что довольно дорого. Для таких больших наборов данных имеет смысл разработать собственную модель и развернуть ее самостоятельно, не используя AutoML.
Google Natural Language API и AutoML Natural Language
Google AutoML Natural Language намного мощнее, чем Natural Language API, потому что он позволяет пользователю обучать модели, настроенные для его конкретного набора данных и предметной области.
Он так же прост в использовании и не требует знаний машинного обучения. Двумя недостатками являются более высокие затраты и необходимость предоставления высококачественного набора данных, необходимого для обучения моделей, которые работают хорошо.
Бета-версия AutoML на данный момент поддерживает только три задачи НЛП (классификация, анализ настроений, извлечение сущностей) и поддерживает только документы на английском языке. Когда эта услуга будет выпущена полностью, я ожидаю, что со временем будут добавлены другие языки и задачи НЛП.