Какой язык лучше всего подходит для вашего чатбота?
Нет, речь идет не о том, хотите ли вы, чтобы ваш виртуальный агент понимал английский сленг, сослагательное наклонение в испанском языке или даже десятки способов сказать "я" на японском. На самом деле, язык программирования, на котором вы создаете своего бота, не менее важен, чем человеческий язык, который он понимает.
Но как отличить их друг от друга? Facebook, Slack и Telegram поддерживают самые популярные языки, а API-платформы, такие как Dialogflow, LUIS и wit.ai, предлагают SDK для большинства из них.
Конечно, всегда следует выбирать тот язык, с которым вам удобнее всего работать, но для тех, кто впервые окунает ногу в пруд программирования, вырисовывается явный победитель. Python - самый популярный язык программирования.
Почему Python, а не другие: обработка естественного языка
Благодаря своей универсальности Python, по сути, является швейцарским армейским ножом для кодинга. Он также является одним из самых простых языков для начинающих благодаря своему последовательному синтаксису и языку, зеркально отражающему человеческий.
Это означает, что когда Python только появился, он применялся в более разнообразных случаях, чем другие языки, такие как Ruby, который был ограничен веб-дизайном и разработкой. Тем временем Python получил распространение в научных вычислениях, что способствовало созданию широкого спектра библиотек с открытым исходным кодом, в которые были вложены годы исследований и разработок.
Что касается обработки естественного языка Natural Language Processing (NLP), прорадитель интеграции NLP был написан на Python. Первый выпуск Natural Language Toolkit (NLTK) состоялся в 2001 году - на пять лет раньше, чем его конкурент Stanford Library NLP на Java. Он служит широким ресурсом, который поможет вашему чатботу использовать лучшие функции NLP.
Stanford NLP и Apache Open NLP представляют собой интересную альтернативу для пользователей Java, поскольку оба могут адекватно поддерживать разработку чатботов либо с помощью инструментария, либо могут быть явно использованы при вызове через API. Но NLTK превосходит их благодаря дополнительной поддержке других языков, множеству версий и интерфейсов для других инструментов NLP и даже возможности установки некоторых пакетов Stanford NLP и сторонних проектов на Java.
Хотя критики утверждают, что неэффективность NLTK и крутая кривая обучения делают его больше академическим тематическим проектом, чем решением для чат-ботов, TextBlob решает эту проблему, используя его как трамплин для обеспечения более интуитивного интерфейса и более мягкой кривой обучения для пользователей.
Что может быть лучше, чем обратиться к достоверным данным, чтобы узнать, какой язык предпочитают эксперты?
Интересный конкурент NLTK и TextBlob появился в Python (и Cython) в виде spaCy. У него есть некоторые преимущества. В частности, он реализует один экземпляр, а не девять экземпляров библиотек, предлагаемых NLTK. Это является проблемой при выборе наиболее эффективной для вашего чатбота. Как видно здесь, spaCy также молниеносно справляется с токенизацией и синтаксическим анализом по сравнению с другими системами на других языках. Его главные недостатки - ограниченное сообщество поддержки и тот факт, что он доступен только на английском языке. Однако, если ваш чатбот предназначен для небольшой компании и не требует использования множества языков, он является отличным выбором.
NLTK подходит не только для довольно простых чат-ботов, но и для тех, кто ищет что-то более продвинутое. Отсюда перед вами откроется целый мир других библиотек Python, включая многие, специализирующиеся на машинном обучении.
Машинное обучение
Если говорить о машинном обучении, что может быть лучше, чем обратиться к достоверным данным, чтобы узнать, какой язык предпочитают эксперты? В ходе недавнего опроса более чем 2 000 специалистов по анализу данных и разработчиков машинного обучения более 57 процентов из них использовали Python, а 33 процента отдали ему предпочтение при разработке.
Почему так? Как и в случае с NLP, Python может похвастаться широким набором библиотек с открытым исходным кодом для чат-ботов, включая scikit-learn и TensorFlow. Scikit-learn - одна из самых продвинутых, в ней есть все алгоритмы машинного обучения для Python, в то время как TensorFlow более низкоуровневая - это LEGO-конструктор алгоритмов машинного обучения, если хотите, называйте так. Именно благодаря этой универсальности Python обладает всеми преимуществами.
Многие другие языки, позволяющие создавать чатботов, блекнут по сравнению с ним. PHP, например, мало что может предложить в плане машинного обучения и, в любом случае, это серверный скриптовый язык, больше подходящий для разработки веб-сайтов. C++ - один из самых быстрых языков, поддерживаемый такими библиотеками, как TensorFlow и Torch, но ему все же не хватает ресурсов Python.
Java и JavaScript обладают определенными возможностями, когда речь идет о машинном обучении. JavaScript содержит ряд библиотек, описанных здесь в демонстрационных целях, в то время как любители Java могут полагаться на такие пакеты ML, как Weka. По сравнению со своими конкурентами на базе Python, Weka испытывает трудности из-за отсутствия поддержки и статуса решения для машинного обучения, которое можно подключить и сразу работать. Это отлично подходит для небольших наборов данных и более простых анализов, но библиотеки Python гораздо практичнее.
В каких областях Python испытывает трудности?
Самый большой недостаток Python заключается в его документации, которая бледнеет по сравнению с другими известными языками, такими как PHP, Java и C++. Поиск ответов в Python сродни поиску конкретного отрывка в книге, которую вы никогда не читали. Кроме того, языку сильно не хватает полезных и простых примеров. Ясность также является проблемой, что невероятно важно при создании чат-бота, поскольку даже малейшая двусмысленность в одном из шагов может привести к неудаче.
Если для вас главное в создании чатбота - скорость, то Python также покажется вам недостаточно эффективным по сравнению с Java и C++. Однако вопрос в том, когда время выполнения кода действительно имеет значение? Более важным является опыт конечного пользователя, и выбор более быстрого, но ограниченного языка для создания чатботов, такого как C++, является самооправданием. По этой причине жертвовать временем разработки и масштабами ради бота, который может функционировать на несколько миллисекунд быстрее, не имеет смысла.
Обработка естественного языка с помощью Python
Давайте рассмотрим один из аспектов NLP, чтобы понять, насколько полезным может быть Python, когда речь идет о том, чтобы сделать ваш чатбот умным.
Анализ настроения в своей самой простой форме включает в себя определение того, хороший ли у пользователя опыт или нет. Если чатбот способен распознать это, он будет знать, когда предложить передать разговор человеческому агенту, какие продукты вызывают больший интерес у пользователей или какая вступительная фраза работает лучше всего.
Мы можем использовать анализ настроения, чтобы определить, является ли взаимодействие негативным или позитивным. Посмотрите, например, на это предложение:
"Блестяще, моя карта не работает".
Конечно, настроение здесь негативное, но боту будет трудно определить это, учитывая, что используется слово "блестяще". Как мы можем оснастить нашего бота надежным анализом настроения? Примечание: Примеры реальных функций, описанных ниже, можно найти здесь и здесь.
Хотя, возможно, гораздо проще использовать spaCy и TextBlob, понимание того, как работает NLTK, обеспечивает прочную основу для того, чтобы помочь понять концепцию анализа настроений. Используя NLTK, мы можем обучить бота распознавать настроения, сначала изучив набор данных, аннотированных вручную. Для этого мы берем три списка: один из положительных комментариев, другой - из отрицательных и тестовый список, содержащий смесь. Чем больше примеров в каждом списке, тем надежнее будет анализ настроения. Аннотированные вручную данные позволят проверить точность нашего классификатора.
Подобно выбору лучших шин для вашего гоночного автомобиля, язык, который вы выберете для своего чатбота, зависит от ряда условий.
После этого необходимо выделить наиболее значимые слова в каждом из предложений (в приведенном выше примере это "блестящий", "не" и "работает") и проранжировать их по частоте появления в данных. Для этого мы можем избавиться от любых слов, содержащих менее трех букв. После этого мы используем экстрактор признаков для создания словаря оставшихся релевантных слов, чтобы создать готовый обучающий набор, который передается классификатору.
Классификатор основан на классификаторе Наива Байеса, который может посмотреть на набор признаков комментария и вычислить вероятность определенного настроения, анализируя предварительную вероятность и частоту слов. Отсюда можно получить оценку вероятности того или иного настроения.
Хотя утверждение о том, что "язык - это всего лишь инструмент" для оснащения чатбота искусственным интеллектом, фактически верно, использование Python с его широким разнообразием библиотек и готовых алгоритмов означает, что это гораздо более простой вариант, чем другие языки.
Подобно выбору лучших шин для гоночного автомобиля, выбор языка для вашего чат-бота зависит от ряда условий. Какого типа бота вы хотите создать? С каким языком вам удобнее всего работать? Какой язык достаточно надежен, чтобы справиться с вашим конкретным проектом по мере его дальнейшего развития?
Но если вы начинаете с нуля и задаетесь вопросом, какой язык стоит изучить в первую очередь, чтобы придать вашему чатботу выразительности, то, следуя за толпой специалистов по науке о данных, вы можете начать программировать ботов с Python.