ЧатБот, виртуальный собеседник

Описание: Новости науки и техники. Всё то, о чём раньше Вы могли только мечтать. Магия современности.

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#13 dyvniy » Вт, 10 апреля 2018, 12:14:14

Русский чатбот на нейросети
https://habrahabr.ru/company/meanotek/blog/280268/
Спойлер
Русский нейросетевой чатбот
Разработка веб-сайтов,
Семантика,
Поисковые технологии,
Машинное обучение,
Блог компании MeanoTek
О чатботах, использующих нейронные сети я уже писал некоторое время назад. Сегодня я расскажу о том как я попробовал сделать полномасштабный русскоязычный вариант.



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



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

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

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

Почему нейронные сети?
Нельзя ли подойти к задаче более классическим методом? Загрузить набор ответов в БД и искать полнотекстовым индексом по предыдущей фразе? Ответ, так сделать можно, но результат получается не очень. Вот допустим:

Ч: привет!
К: грег, мария, это али…
Ч: как дела?
К: из соседнего номера поступила жалоба на шум, месье
Ч: как тебя зовут?
К: спасибо, спасибо.
Ч: сколько тебе лет?
К: ты живешь где-то рядом...?

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

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

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

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

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

Второй вариант отличается тем, что до “смешивания” контекста и ответа им дан “свой собственный” слой для формирования представления. Ну и дальше может быть несколько слоев обработки, на рисунке показано два.

Третий вариант кодирует последовательность разной длины с помощью рекуррентного LSTM кодировщика. Это много медленнее и обучается дольше. Но вроде как должно работать лучше.


Рис.1. Архитектура нейронных сетей

Результаты
По способности выбирать правильный ответ из нескольких предложенных вариантов (случайно взятых ответов), самый лучший результат показала модель номер 2, с пятью слоями для анализа данных по 700 нейронов в каждом (+1 слой репрезентации входных данных, тоже из 700 нейронов). Чтобы обучить такую глубокую сеть, пришлось использовать Хайвей (Highway) слои, которые позволяют информации проще распространятся от нижних слоев к верхним, также подождать несколько дней пока модель рассчитывалась на GPU. Модель номер 1 явно недообучилась, а номер 3 долго думала, и тоже не добрала до результатов модели номер 2 несколько процентов. Что напоминает нам о том, хотя самые простые модели не годятся для больших объемом данных, все же никогда не следует умножать сущности сверх необходимости.

Получившаяся система располагает базой в 30 миллионов пар реплик, а нейронная сеть имеет около 3 млн. обучаемых параметров.

Какие же диалоги можно в результате получить?

Ч: Привет
К: привет.
Ч: Как твои дела?
К: Не знаю.
Ч: Как тебя зовут?
К: меня зовут юнис.
Ч: Сколько тебе лет?
К: Пятнадцать.
Ч: Где ты живешь?
К: Дома.
Ч: ты учишься в школе?
К: Нет
Ч: а где ты учишься?
К: в бундесвере.
Ч: Ты любишь музыку?
К: да, я люблю музыку.
Ч: Какая музыка тебе нравится?
К: в основном я слушаю r&b, фанк.
Ч: Ты веришь в бога?
К: я и сейчас верю в бога, старина
Ч: что такое мораль?
К: два человека вместе — разве это не мораль?
Ч: какого цвета море?
К: цвета океана после шторма.


Достаточно хорошо, на мой взгляд. Вот еще пример:

Ч: Где живет бегемот?
К: Жил
Ч: а что, сейчас не живет?
К: Я не знаю.
Ч: тогда где он жил раньше?
К: у парка, на мэйпл стрит.
Ч: куда же он пропал?
К: куда он пропал?
Ч: я тебя спрашиваю, куда он пропал?
К: я не понимаю, почему я снова в больнице.
Ч: потому что ты болеешь
К: я просто хочу помогать людям.
Ч: Тогда скажи мне, где бегемот!
К: почему ты так сильно хочешь это знать?
Ч: просто ответь мне
К: ты хочешь, чтобы я помогла тебе попрощаться с родными?
Ч: Это угроза?
К: Наблюдение
Ч: Так где же все-таки бегемот?
К: он на гавайях, но радж управляет отсюда
Ч: Кто такой радж?
К: не встречалась с ним?
Ч: Нет, никогда
К: жили-были муж с женой, только муж каждую ночь исчезал.

Как можно поговорить с этим ботом в живую?

Выводы:
Получилось забавно. Но все же видно низкое качестве обучающих данных. Для развития модели было бы полезно собрать больше реальных диалогов. Тем не менее, результаты обнадеживают, поскольку для получения довольно разумных ответов не потребовалось создавать вручную никаких шаблонов и правил выбора ответов.
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#14 dyvniy » Вт, 10 апреля 2018, 14:30:46

Лена Чернышова, почитать
https://habrahabr.ru/post/251687/

ПБот
http://p-bot.ru/index.html
он же девочка
http://sexbot.tw1.su/
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#15 dyvniy » Пт, 17 января 2020, 12:10:07

Тут генерация голоса
https://xakep.ru/2019/10/03/real-time-voice-cloning/
Спойлер
Содержание статьи
Генерация голоса
Текст в речь
Звуки в речь
Речь в речь
Создание поддельного голоса
Принцип работы имитатора голоса
Тестирование метода
Выводы
Способов идентифицировать человека по голосу появляется все больше. И параллельно исследователи придумывают, как обойти эти механизмы — и для защиты собственной персональной информации, и для взлома защищенных таким образом систем. Я решил разобраться в самых последних достижениях ученых в этой сфере, чтобы рассказать обо всем тебе.

Генерация голоса
Голос человека — результат движения связок, языка, губ. В распоряжении компьютера только числа, изображающие записанную микрофоном волну. Как же компьютер создает звук, который мы можем услышать из динамиков или наушников?


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

С развитием программ-синтезаторов набор заранее записанных на микрофон фонем (букв) стал набором слогов, а затем и целых слов.

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


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

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


Речь в речь
Относительно новый подход полностью основан на нейронных сетях. Рекурсивная архитектура WaveNet, построенная исследователями из DeepMind, позволяет преобразовывать звук или текст в другой звук напрямую, без привлечения заранее записанных строительных блоков (научная статья).

Ключ к этой технологии — правильное использование рекурсивных нейронов Long Short-Term Memory, которые сохраняют свое состояние не только на уровне каждой отдельной клетки нейронной сети, но и на уровне всего слоя.

Схема работы WaveNet
Схема работы WaveNet
В целом эта архитектура работает с любым видом звуковой волны, вне зависимости от того, музыка это или голос человека.


INFO
На основе WaveNet есть несколько проектов.

A WaveNet for speech denoising — уничтожение шумов в записи голоса;
Tacotron 2 (статья в блоге Google) — генерация звука из мел-спектрограммы;
WaveNet Voice Enhancement — улучшение качества голоса в записи.
Для воссоздания речи такие системы используют генераторы звуковой нотации из текста и генераторы интонаций (ударения, паузы), чтобы создать натурально звучащий голос.

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


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

Продолжение доступно только участникам
Изображение

dyvniy M
Автор темы, Администратор
Администратор
Аватара
dyvniy M
Автор темы, Администратор
Администратор
Возраст: 41
Репутация: 1
Лояльность: 1
Сообщения: 3579
Зарегистрирован: Ср, 10 октября 2012
С нами: 11 лет 5 месяцев
Профессия: Программист
Откуда: Россия, Москва
ICQ Сайт Skype ВКонтакте

#16 dyvniy » Пт, 17 января 2020, 12:11:32

Пусть здесь будет статья про сжатие текста.
https://ru.stackoverflow.com/questions/598621/Лучшие-алгоритмы-сжатия-текста
Спойлер
С каждым годом алгоритмы сжатия совершенствуются, появляется что-то новое, или модификация существующих.

Вопрос:

Какие из ныне существующих, на 2016 год, алгоритмов сжатия текстовой информации дают лучший результат (естественно, без потерь)?

Дополнительно:

текст будет представлять себя наборы символов латиницы, кириллицы, знаков препинания - из ASCII (cp866 или win-1251), возможно еще псевдографика будет
те же наборы символов, но представленные в кодировке ru_RU.UTF-8
Пока на слуху, но это уже относительно давно, алгоритм PPMd, PPMz. Есть что-то более совершенное?

алгоритм сжатие
поделитьсяулучшить этот вопрос
задан 2 дек '16 в 10:37

Majestio
3,57711 золотой знак66 серебряных знаков3434 бронзовых знака
1
Нет, набор текстов неизвестен. Известен "более-менее" набор символов, который используется в тексте. В принципе, можно на первых этапах вычислить частотную таблицу символов - но это будет только "отправной точкой", и, имхо, не даст ощутимого выхлопа по сравнению с существующими алгоритмами.Нужно что-то кардинально новое. – Majestio 4 июл '17 в 19:10
2
Без словаря у вас не будет "лучшего" результата, это однозначно, так что лучше ищите способы его составить. – Merlin 5 июл '17 в 19:55
Допустим, у меня есть словарь, но как его сохранить? Перекладывать весь контент в словарь - можно, но встает вопрос о том как сжимать уже его. – bukkojot 6 июл '17 в 4:51
1
Посмотрите семейство паковщиков Paq8: dhost.info/paq8 – bukkojot 6 июл '17 в 13:33
1
Оставлю пока, чтобы было - mattmahoney.net/dc/text.html – Majestio 7 июл '17 в 6:40
показать ещё 6 комментариев
2 ответа
текущиепо дате публикацииголоса

8

Лучший ответ на этот вопрос - спросите на форуме encode.ru. Я лично не слежу за этим совсем уж пристально, поэтому навскидку: paq8px, emma, cmix (у каждого есть своя ветка на форуме). Кроме этого, препроцессинг - словарная замена (xml-wrt), трюки Grabowski. Имейте в виду, что тексты должны быть достаточно велики (ну хотя бы сотни килобайт) и скорость сжатия/распаковки может быть в районе нескольких кб/с, а многопоточность невозможна без ухудшения сжатия.

Собственно приведённая вами же ссылка http://mattmahoney.net/dc/text.html даёт достаточно исчерпывающий ответ на ваш вопрос. Все алгоритмы такого уровня получают ветки на форуме encode.ru и тестируются Маттом на тексте английской википедии.

Да, язык/кодировка (при условии что она 8-битная) имеют значение только для словарных препроцессоров - они обычно работают только с латиницей. Остальные алгоритмы хорошо работают с любыми языками.

Если же вам на самом деле нужно не максимальное сжатие, а оптимальное сочетание скорости и степени сжатия, то для текстов я предпочитаю bsc, тем более что это единственная библиотека сжатия общего назначения, способная использовать GPU.
советуют его http://libbsc.com/
а тут обсуждают https://forum.antichat.ru/threads/326311/
Изображение


Название раздела: Технокалипсис
Описание: Новости науки и техники. Всё то, о чём раньше Вы могли только мечтать. Магия современности.

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения
:) ;) :hihi: :P :hah: :haha: :angel: :( :st: :_( :cool: 8-| :beee: :ham: :rrr: :grr: :* :secret: :stupid: :music: Ещё смайлики…
   

Вернуться в «Технокалипсис»

Кто сейчас на форуме (по активности за 15 минут)

Сейчас этот раздел просматривают: 26 гостей
Боты: Google [Bot]