www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home
Занимательная история, выдающиеся люди, малоизвестные факты, находки, открытия, фальсификации. Присоединяйся!

Создание ботов, которые говорят как люди с обработкой естественного языка

Дата публикации Feb 24, 2019

Точный ответ на одну из самых раздражающих проблем Первого мира.

Мы все были там:

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

Поднося телефон к уху, вы слышите ужас,

"Держитесь пожалуйста. Все наши представители по обслуживанию клиентов сейчас заняты. Представитель скоро будет с вами.

* Кью искаженная музыка телефона *

10 мучительных минут проходят.

Тогда 20.

Потом 30.

Ты понял.

Дело в том,Сервис Клиентов

Теперь, почему я напоминаю вам об этомраздражающийпроблема?

Потому что мы не должны иметь дело с этим дерьмом.

Благодаря некоторым недавним достижениям вОбработка естественного языка, обслуживание клиентов и еще миллион вещей могут измениться навсегда.

Естественный Что?

Обработка естественного языка (NLP) - это область, в которой компьютеры понимают человеческий язык.

Вот как Siri понимает вас, когда вы хотите узнать прогноз погоды, как Google Translate переводит французский на английский, и как мы можем сократить время ожидания обслуживания клиентов до 0 секунд.

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

Это сила НЛП.

И мы на самом деле делаем некоторые успехи. Google недавно создал голосового помощника, который почти неотличим от человека. В этом видео вы можете увидеть, как он записывается на прическунастоящий салон.

Я подумал, что это очень круто, поэтому я решил использовать модель НЛП для создания своего собственного чат-бота.

Вот как я это сделал.

предварительная обработка

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

В этом случае данные (куча строк из фильмов) выглядят так:

b'L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!\n'
b'L1044 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ They do to!\n'
b'L985 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I hope so.\n'
b'L984 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ She okay?\n'
b"L925 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Let's go.\n"
b'L924 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ Wow\n'
b"L872 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Okay -- you're gonna need to learn how to lie.\n"
b'L871 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ No\n'
b'L870 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I\'m kidding. You know how sometimes you just become this "persona"? And you don\'t know how to quit?\n'
b'L869 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Like my fear of wearing pastels?\n'

Я быстро объясню, как я предварительно обработал данные, потому что это очень скучно, а не причина, по которой вы нажали эту статью (не стесняйтесь пропустить этот раздел).

Сначала мне пришлось удалить все ненужные символы, которые вы можете увидеть здесь (например, +++ $ +++). Затем я сгруппировал строки в пары и разговоры. Таким образом, алгоритм может понять отношение оператор-ответ между отдельными строками. Пары также были сгруппированы в разговоры на основе фильма, из которого они были взяты.

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

К счастью, это довольно легко. Все, что нам нужно сделать, это создать словарь Python (читай: индекс), где каждому слову присваивается соответствующий номер.

Так, например, если это наш словарь

Собака → 3

Это → 14

а → 52

Тогда предложение «Это собака» станет «14 52 3».

Теперь мы наконец готовы разработать и обучить нашу модель.

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

Все, что действительно делает чатбот, - это взять последовательность слов, попытаться понять ее и вывести последовательность слов.

Для этого типа задач мы можем использовать, ждать его,модель последовательность-последовательность (Seq2Seq)!

Модель Seq2Seq - Как это работает?

Как я уже говорил выше,модель Seq2Seq принимает во входной последовательности по одному компоненту за раз (в данном случае это слово) и выводит последовательность по одному компоненту за раз.

Ванильная модель Seq2Seq.

Используемая мной реализация Seq2Seq состоит из 3 основных частей, которые работают вместе для создания чат-бота:

Сеть кодировщиков → Механизм внимания → Сеть декодеров

Энкодер

Сеть кодировщика (RNN) проходит через входное предложение по одному слову за раз. Для каждого слова выводятся два вектора:выходной векторивектор скрытого состояния,

Вектор скрытого состояния передается следующему временному шагу (итерации) в качестве входных данных. Выходной вектор записывается. Эти два вектора содержат информацию о слове и его связи с другими словами в предложении.

Он также компилирует информацию, которую ловит, в вектор, называемый «контекст». Этот контекст затем декодируется сетью декодера для получения желаемого результата.

Двунаправленный RNN. Источник:https://colah.github.io/posts/2015-09-NN-Types-FP/

Кодер использует двунаправленную архитектуру GRU (Gated Recurrent Unit), которая представляет собой две RNN на основе GRU, «текущие» в противоположных направлениях. Один из RNN принимает предложение в обычном порядке, а другой принимает предложение в обратном порядке.

На каждом временном шаге кодированные выходы (A и A ’) суммируются (в y), что позволяет сети не только последовательно кодировать слова, но также кодировать отношения между словами в разных точках предложения.

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

Механизм внимания

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

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

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

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

Декодер

Декодер (также RNN) генерирует выходное предложение по одному слову за раз. Он берет векторы контекста кодера и его собственные скрытые состояния (те, которые он генерирует из предыдущих слов), и выводит из механизма внимания, и генерирует новое скрытое состояние и следующее слово в последовательности.

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

Собираем все вместе

Соедините эти три компонента вместе, и вы получите модель Seq2Seq, способную общаться.

Вот мой разговор с моим чат-ботом:

> Hello
Bot: hello . . . . .
> What is your name?
Bot: edward . . . . .
> Is your name really edward?
Bot: yes . . . . .
> Are you sure!
Bot: i m fine . . . . !
> Why do you think that?
Bot: i don t know . . .
> Can I help you?
Bot: i m not going to work . .
> Why not?
Bot: because you re a good experiment . .
> I'm an experiment!
Bot: you re a fool ! ! !
> I'm a fool!
Bot: i m sorry . ! ! !

Как видите, это не так уж и здорово. Его ответы на то, что я печатаювообщелогично, ноэто все еще далеко от совершенства.

Тем не менее, после некоторого обучения эта модель может легко использоваться для поддержки клиентов. Фактически исследователям Google удалось обучить модели Seq2Seq для оказания технической поддержки клиентам. Вы можете проверить бумагуВот,

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

Если вы думали, что Siri и Amazon Alexa - это круто, просто подождите, пока у вас не будет случайных, беспроблемных разговоров с вашим телевизором о спорте, и, что более важно, вы получите мгновенное обслуживание клиентов, когда оно сломается.

Takeaways

  • Обработка естественного языка - это область, позволяющая компьютерам понимать человеческий язык.
  • Обработка естественного языка делает возможными такие вещи, как Siri, Amazon Alexa и Google Translate.
  • Модель чат-бота Seq2Seq принимает предложение, обрабатывает его по одному слову за раз и выводит предложение по одному слову за раз.
  • Модель Seq2Seq состоит из трех частей: кодера, механизма внимания и декодера.

Если вам понравилась эта статья, не стесняйтесь связаться со мной поLinkedInи проверить мойперсональный сайтгде вы можете увидеть мои другие проекты и подписаться на мою рассылку! Благодарность!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map