Введение

Вы когда-нибудь брали телефон и просили виртуального помощника (ВА) что-то сделать? Вы жили в УМНОМ доме, где люди могут приказать системе включить свет или приготовить для них кофе? Или даже вы видели, как Тони приказал Джарвису управлять? Но задумывались ли вы, как работают эти помощники? В этой серии блогов я расскажу о проекте, над которым я работал, где мы познакомимся с технологией, лежащей в основе этих интересных помощников.

Этот первый блог будет посвящен общей цели проекта и анализу данных, которые я использовал для обучения своей «маленькой» системы VA.

Цель

Предполагая, что VA уже может анализировать человеческий голос и переводить эти аудиозаписи в предложения, вся наша работа будет в основном сосредоточена на анализе человеческих команд.

Ясно, что мы не можем предсказать все, что могут сказать говорящие, и запрограммировать систему VA для выполнения запросов, основанных на каждом отдельном предложении. Все, что мы можем сделать, это то, что мы можем определить возможные задачи, которые может потребовать пользователь, и спроектировать нашу систему для распознавания и выполнения задач. Поэтому для нас важно внедрить в эти системы алгоритмы обработки естественного языка (NLP). Мы будем использовать НЛП, чтобы помочь нашим виртуальным помощникам понять намерение говорящего и всю важную информацию, связанную с намерением.

Например, если мы скомандуем виртуальному помощнику «Забронировать столик на шестерых в Intercontinental на этот воскресный вечер», мы будем ожидать окончательного прогноза от VA в таком виде:

{
    'intent': 'BookRestaurant',
    'slots': {
        'party_size_number' : 'six'
        'restaurant_name' : 'Intercontinental'
        'timeRange' : 'Sunday night'
    }
}

Данные

I. Предопределенные классы

В этом проекте мы будем использовать голосовую команду, подготовленную и опубликованную SNIPS.ai, французским стартапом, который был куплен в ноябре прошлого года производителем аудиоустройств Sonos. Мы используем предварительно обработанную версию этого набора данных с БИО-тегированием на уровне токенов, подготовленную Су Чжу.

Набор данных содержит 5 основных файлов: «train», «valid», «test», «vocab.intent» и «vocab.slot». Теперь давайте узнаем, что в нем есть.

В файле «vocab.intent» есть 7 предопределенных возможных намерений для нашей системы VA, включая AddToPlaylist, BookRestaurant, GetWeather, PlayMusic, RateBook, SearchCreativeWork и SearchScreeningEvent.

AddToPlaylist 
BookRestaurant 
GetWeather 
PlayMusic 
RateBook 
SearchCreativeWork 
SearchScreeningEvent

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

В соответствии с каждым намерением виртуальные машины также должны идентифицировать связанную информацию. Эту информацию можно найти с помощью процесса, называемого Распознавание именованных объектов (NER), который идентифицирует и классифицирует все объекты имен из текста по категориям, связанным с намерением, таким как имена людей, время и местоположение. Затем информация будет помечена в формате BIO (мы объясним это позже). Мы также определили некоторые возможные типы связанной информации, которая хранится внутри «vocab.slot».

B- album
B- artist
B- best_rating
B- city
B- condition_description
B- condition_temperature
B- country
B- cuision
...
I- album
I- artist
I- best_rating
...
O

Как мы видим, данные имеют формат BIO-меток, который распространен в NER.

  • B: начало чанка
  • I: внутри куска
  • O: вне чанка, что означает, что этот токен не относится ни к одному чанку.

Используя предыдущее предложение «Забронируйте столик на шестерых в Intercontinental на этот воскресный вечер», пометка BIO на уровне токена будет выглядеть так:

Book : O
a : O
table : O
for : O
two : B-party_size_number
at : O
Intercontinental : B-restaurant_name
for : O
this : O
Sunday : B-timeRange
night : I-timeRange

II. Тренировочные данные

Теперь давайте рассмотрим данные обучения в файле «train». Мы пишем функцию для анализа строк обучающих данных в формате JSON, чтобы получить каждый элемент команды, включая намерение, команду, длину команды, теги BIO уровня word_level, а затем сохранить результаты в pandas DataFrame.

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

     intent_labels        |   words
1.   AddToPlaylist        |   1842 
2.   BookRestaurant       |   1873
3.   GetWeather           |   1900
4.   PlayMusic            |   1900
5.   RateBook             |   1856
6.   SearchCreativeWork   |   1854
7.   SearchScreeningEvent |   1859

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

III. Валидация и данные испытаний

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

То же самое с обучающими данными, нам также необходимо создать pandas DataFrame как для проверки, так и для тестовых данных. Быстро взглянув на два DataFrame, мы также видим, что в обоих наборах существует точное равномерное распределение числа 100 предложений в 7 метках намерений.

Вывод

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

Надеюсь, вам понравится читать этот блог и скоро увидимся в следующем!

Тхань Тринь является студенческим послом в программе Inspirit AI Student Ambassadors. Inspirit AI — это довузовская программа повышения квалификации, которая знакомит любознательных старшеклассников со всего мира с ИИ через живые онлайн-классы. Узнайте больше на https://www.inspiritai.com/.