Руководство по началу работы с нуля для стартапов на ранней стадии

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

Хотите научиться прикладному искусственному интеллекту у ведущих специалистов Кремниевой долины или Нью-Йорка? Узнайте больше о программе Искусственный интеллект.

Клиентам нужна поддержка

У большинства компаний есть клиенты, а это означает, что большинство компаний получают огромное количество запросов на поддержку в очень широком диапазоне областей. Хотя ответы на некоторые из этих запросов являются основными кандидатами на автоматизацию, например, с помощью чат-бота («Какова ваша политика возврата?»), Ответы на другие не следует автоматизировать («Я чувствую себя плохо после начала приема этого лекарства. Что следует Я знаю? »), Но ответил эксперт-человек. Система, которая автоматически различает эти категории, сэкономит огромное количество времени, которое в настоящее время тратится на сортировку запросов канцелярским персоналом.

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

Но система, которую я построил для стартапа (см. Рисунок 1), идет еще дальше: во-первых, входящие вопросы идентифицируются как:

  1. «Клинические» по своей природе и, следовательно, нуждаются в том, чтобы на них отреагировал врач.
  2. Сложные «канцелярские» вопросы, требующие ответа от административного сотрудника.
  3. Простые «канцелярские» вопросы, на которые может ответить бот.

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

Проблема, которую я кратко описал, по существу сводится к двум проблемам классификации машинного обучения (ML) (рисунок 2). Первый классификатор должен решить, является ли входящий вопрос «клиническим», «сложным канцелярским» или «простым канцелярским», в то время как второй должен выбрать конкретный подкласс простых канцелярских вопросов.

Для второй задачи классификации я использую семь различных подклассов простых канцелярских вопросов, подробно описанных в таблице 1.

Доступные данные

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

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

Для простого канцелярского класса проблема нехватки данных была особенно острой: они смогли предоставить мне только один примерный вопрос для каждого из семи подклассов! И хотя каждый из этих примеров отражал общие способы постановки этих вопросов, они были далеко не единственными их лингвистическими формулировками.

Традиционное увеличение данных

Таким образом, требовалось больше данных. Первым побуждением к увеличению данных является поиск в Интернете общедоступных наборов данных. В клинической области я нашел базу данных Medscape, которая содержит большой кеш статей о медицинских состояниях. Кроме того, я нашел базу данных вопросов и ответов об обслуживании клиентов Amazon для различных категорий продуктов; Я включил категорию здоровья и красоты в клинический класс. Ни в одной из сфер канцелярской деятельности я не нашел общедоступных наборов данных, которые я считал подходящими.

Машинное обучение, знакомство с лингвистикой

Несмотря на то, что эти различные источники в целом делятся на три класса, ни один из них не попадает точно в целевую область, то есть вопросы / запросы информации / услуг (единственное исключение - небольшой набор сложных канцелярских взаимодействий, обеспечиваемых запускать). По этой причине и по той причине, что у меня действительно не было никаких данных для второй задачи классификации, я решил создать искусственные данные. В частности, я создал грамматику с конечным числом состояний (FSG) - разновидность порождающей грамматики, которая имеет верхнюю границу количества предложений или «состояний», которые она может генерировать. Я разработал этот конкретный FSG для создания вариантов каждого из 7 различных канцелярских вопросов, а также 2 типов общих клинических вопросов. В таблице 2 приведен пример вариантов вопросов, сгенерированных FSG для одного подкласса канцелярских работников.

Фактически, для этого конкретного вопроса FSG может сгенерировать более 1,5 миллионов вариантов! (Для каждого вопроса грамматика варьировалась по общему количеству возможных вариантов от более 1,5 миллиона до примерно 13000). Чтобы построить грамматику для каждого вопроса, я начал с создания шаблонов, которые отражали различные синтаксические структуры на уровне предложений (предложения с 1 по 3 выше демонстрируют не просто разные слова, а разные синтаксические структуры). Каждый слот в этих шаблонах может быть заполнен разными словами или разными шаблонами на уровне фраз (например, «по почте» или «в его доме»), которые сами будут включать дополнительные слоты для слов или шаблонов (например, «в его доме / квартира / офис »). Чтобы сгенерировать предложение, грамматика перебирает каждый слот в шаблоне, случайным образом выбирая возможный вариант из равномерного распределения. В таблице 3 показано, как сгенерированное предложение разбивается на шаблоны и слова.

Большая часть изменчивости в структурах предложений в пределах определенного клерикального класса происходит из больших списков: 1) различных заболеваний, 2) вариантов лечения и 3) ссылок на конкретных людей / родственников (например, «я», «врач», «Мой сын»), который я включил.

Главный риск при генерировании данных таким образом - это искусственное внесение предвзятости, которую классификатор позже уловит (например, если все вопросы в подклассе «Время доставки» содержат названия лекарств или семейные отношения и ничего другого подклассы делать). Поэтому я старался включить эти категории слов в как можно больше категорий вопросов, чтобы последующий классификатор не смог их искусственно зацепить. Создаваемые мной искусственные данные по-прежнему необъективны; но немного предвзятые данные лучше, чем ничего!

Использование сгенерированных данных

FSG использовался для генерации полных данных для категории делопроизводства; Я ограничил это 70 000 вопросами, по 10 000 на класс. Я решил использовать это число для каждого класса, чтобы одна неверная классификация оказывала влияние на точность 0,01%. Для клинического класса я придумал 70 000 предложений, используя FSG для генерации вариантов двух клинических вопросов, и я также включил предложения из других наборов клинических данных, описанных выше.

Что касается сложного канцелярского класса, я решил, что в конечном итоге доступные данные слишком малы, чтобы их можно было использовать для классификации, поэтому я не буду обсуждать их в оставшейся части этого сообщения в блоге. Однако я скажу, что этот класс в конечном итоге будет важен для запуска, поэтому я создал API для модуля Python, который управляет / предварительно обрабатывает наборы данных, поэтому в будущем для запуска будет легко добавлять дополнительные данные. каждому классу, когда они его собирают. Размеры доступных наборов данных, объем выборки из каждого и количество уникальных предложений, найденных в каждом, подробно описаны в таблице 4.

Моделирование

1) Клинический классификатор

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

Затем я добавил эти вложения слов в классификатор логистической регрессии. Используя разделение на тренировку / тест 80/20, я добился более 99% точности на тестовой выборке. Это довольно интересно, но тоже подозрительно высоко. Рассмотрим этот результат немного подробнее. Я построил график для первого и второго компонентов из уменьшения размерности t-SNE, которое вы можете увидеть на рисунке 3.

Как видим, кластеры четко обозначены. Таким образом, неудивительно, что эти кластеры можно почти идеально линейно разделить с помощью логистической регрессии.

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

Это явно неприемлемо с точки зрения обслуживания клиентов, поэтому один из способов смягчить это - увеличить порог вероятности, выше которого вопрос классифицируется как канцелярский. Увеличение этого порога с 0,5 до 0,98 привело к появлению матрицы путаницы, показанной ниже на рисунке 5. Как вы можете видеть, в то время как количество ложных срабатываний уменьшилось, количество ложноотрицательных результатов увеличилось, что также является субоптимальным - ложноотрицательные результаты соответствуют канцелярским вопросам, которые требуют ответа на акции. но направляются либо к врачам / медсестрам, либо к административному персоналу (если они были отнесены к категории «другие», что здесь не было). В целом точность теперь снизилась до 91%.

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

2) Канцелярский классификатор

Теперь я перехожу ко второй проблеме классификации, а именно к классификации канцелярских вопросов по 7 различным типам вопросов, которые будут связаны с общими ответами. Я использовал тот же набор из 70 000 канцелярских вопросов, что и раньше (по 10 000 на тип вопроса). Опять же, вложения на уровне предложений были введены в логистическую регрессию с разделением обучения / теста 80/20. И снова я добился более 99% точности классификации. График первого и второго компонентов t-SNE приведен на рисунке 6. Как и прежде, есть четко определенные кластеры, свидетельствующие о высокой точности классификации.

Проверка модели

Удивительный уровень точности 99% и тот факт, что кластеры t-SNE не полностью разделены, предполагает, что мы должны исследовать поведение классификации немного дальше. В частности, также можно изучить влияние отдельных слов в вопросе на классификацию этого конкретного вопроса. Для этого я использовал пакет LIME, построенный на Python (Ribeiro et al., 2016). LIME расшифровывается как Local-Interpretable Model Agnostic Explanations и предоставляет интерфейс для анализа и визуализации эффектов отдельных функций для любого классификатора машинного обучения.

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

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

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

В результате такого искажения данных предложение типа «Когда врач, рассматривающий мое дело, позвонит мне», на самом деле ошибочно классифицируется как принадлежащее к классу «Информация о докторе». Здесь виновником является вышеупомянутое «завещание», а также слово «проверять», поскольку многие предложения в классе «Информация о докторе» включают необязательные относительные предложения, такие как «кто просматривает мое дело». Точно так же фраза «Я хочу знать о записи врача» ошибочно классифицируется как член класса «Время проверки». Здесь виноват «примерно».

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

Выводы

Я хочу предложить то, что я только что изложил здесь, в качестве итеративного метода построения эффективных и надежных классификаторов, когда данных не хватает.

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

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

Хотите научиться прикладному искусственному интеллекту у ведущих специалистов Кремниевой долины или Нью-Йорка? Узнайте больше о программе Искусственный интеллект.