Начались длинные майские праздники, за которые вполне можно было бы научиться чему-нибудь новому и классному. Например, написать на Python собственного чатбота, способного поддержать беседу. Этим мы и займёмся.
Идти будем маленькими шагами: сначала вспомним, как загружать данные в Python, затем научимся считать слова, постепенно подключим линейную алгебру и теорвер, и под конец сделаем из получившегося болтательного алгоритма бота для Телеграм. Поэтому подписывайтесь сюда или на t.me/matchast, и следите за постами!
Итак, начинаем. Наша задача - сделать алгоритм, который на любую фразу будет давать уместный ответ. Например, на "как дела?" отвечать "отлично, а у тебя?". Самый простой способ добиться этого - найти готовую базу вопросов и ответов. Например, взять субтитры из большого количества кинофильмов.
Я, впрочем, поступлю ещё более по-читерски, и возьму данные из соревнования Яндекс.Алгоритм - это те же диалоги из фильмов, для которых работники Толоки разметили хорошие и неплохие продолжения. В таблице даны три последних фразы и ответ на них (reply), но мы будем пользоваться только самой последней из них (context_0).
Имея такую базу диалогов, можно просто искать в ней каждую реплику пользователя, и выдавать готовый ответ на ней (если таких реплих много, выбирать случайно). С "как дела ?" такое отлично получилось, о чём свидетельствует приложенный скриншот. Это, если что, jupyter notebook на Python 3. Если вы хотите повторить такое сами, проще всего установить Анаконду (anaconda.com) - она включает Python и кучу полезных пакетов для него.
Проблема дословного поиска в том, что у него низкое покрытие. На фразу "как твои дела ?" в базе из 40 тысяч ответов точного совпадения не нашлось, хотя смысл у неё тот же самый. Поэтому в нескольких ближайших постах мы будем дополнять наш код, применяя разную математику, чтобы реализовать приближённый поиск. А вы пока можете почитать про библиотеку pandas (pandas.pydata.org/pandas-docs/stable/10min.html) и разобраться, что же делает каждая из 6 строк приведённого кода.
До скорого!
#матчасть #weirdmath #chatbot #python #pandas
Post #155
423