Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 15.02.2017
Сообщений: 3

Робот-собеседник на основе нейронной сети

15.02.2017, 13:24. Показов 3343. Ответов 21

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Я поставил перед собой задачу разработать «робота-собеседника», который мог бы общаться на какую-нибудь определённую тему.
Так как тема общения с роботом довольно обширна, диалог в целом я не оцениваю (привет товарищу Тьюрингу), рассматривается лишь адекватность ответа «собеседника» на реплику человека.
Далее будем называть вопросом предложение, поступающее на вход ИНС, и ответом предложение, полученное на её выходе.



Архитектура 1. Двухслойная нейронная сеть прямого распространения
с одним скрытым слоем


Так как нейронные сети работают только с числами, необходимо закодировать слова. Для простоты из рассмотрения исключены знаки препинания, с заглавной буквы пишутся только имена собственные.
Каждое слово кодируется двумя целыми числами, начиная с единицы (ноль отвечает за отсутствие слова)*— номером категории и номером слова в этой категории. Предполагалось в «категории» хранить слова, близкие по смыслу или типу (цвета, имена, например).

# Категория 1 Категория 2 Категория 3Категория 4
1ты хорошо плохо привет
2твой прекрасно ужасно здравствуй
3тебя замечательно отвратительно приветствую
4твои превосходно плохой приветик
5тебе хороший плохие здорова
6тобой хорошим   
7я хорошие   

Для нейронной сети данные нормализуются,
приводятся к диапазону https://www.cyberforum.ru/cgi-bin/latex.cgi?[0, 1]. Номер категории и слова — на максимальное значение https://www.cyberforum.ru/cgi-bin/latex.cgi?M номера категории или слова во всех категориях. Предложение переводится в вещественный вектор фиксированной длины, недостающие элементы заполняются нулями.

Каждое предложение (вопрос и ответ) может состоять максимум из десяти слов. Таким образом получается сеть с 20 входами и 20 выходами.

Необходимое число связей в сети для запоминания https://www.cyberforum.ru/cgi-bin/latex.cgi?N примеров рассчитывалось по формуле
https://www.cyberforum.ru/cgi-bin/latex.cgi?L_W=(m+n+1)(m+N)+m,
где где m — число входов, n — число выходов, N — число примеров.

Число связей в сети с одним скрытым слоем, состоящим из H нейронов https://www.cyberforum.ru/cgi-bin/latex.cgi?L_W=20H+20H=40H, тогда необходимое число связей для запоминания https://www.cyberforum.ru/cgi-bin/latex.cgi?N примеров будет https://www.cyberforum.ru/cgi-bin/latex.cgi?H(N)=\frac{41}{40}H+21.

Структура такой нейронной сети представлена на рисунке 1.

Реализована сеть в MATLAB, обучение — метод обратного распространения ошибки. Обучающая выборка содержит 32 предложения…
Большего и не потребовалось…
ИНС не могла запомнить более 15 предложений, что демонстрирует следующий график (рисунок 2). Ошибка вычисляется как модуль разности между текущим выходом НС и требуемым.

Пример диалога (все вопросы из обучающей выборки):
  • привет
  • здравствуй
  • сколько тебе лет
  • четыре месяца
  • ты хороший
  • *я не знаю, что сказать*
  • ты хороший робот
  • *я не знаю, что сказать*
  • дружба это хорошо
  • хорошо
  • пока
  • до встречи

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



Архитектура 2. Двухслойная нейронная сеть прямого распространения

Следующий способ закодировать слова для ИНС — one-hot-кодировка[4]. Суть её в следующем: пусть в словаре имеется https://www.cyberforum.ru/cgi-bin/latex.cgi?D слов, упорядоченных по алфавиту. Каждое слово такого словаря кодируется вектором длины https://www.cyberforum.ru/cgi-bin/latex.cgi?D, содержащим единицу на месте, соответствующем номеру слова в словаре и нули на других местах.

Для экспериментов был создан словарь из https://www.cyberforum.ru/cgi-bin/latex.cgi?D=468 слов и обучающий набор из 95 предложений. На вход НС подавалось шесть слов и ответ также рассматривался из шести слов.

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


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



Архитектура 3. Двухслойная нейронная сеть прямого распространения
с одним скрытым слоем и word2vec-кодировка


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

Для экспериментов по работе сети использовался словарь word2vec векторов длины 50, обученный на тренировочной базе нейронной сети.

На вход нейронной сети подаётся шесть слов (вектор длины 300) и предлагается получить ответ, также состоящий из шести слов. При обратном кодировании вектор предложения разделяется на шесть векторов слов, для каждого из которых в словаре ищется максимально возможное соответствие по косинусу угла между векторами https://www.cyberforum.ru/cgi-bin/latex.cgi?A и https://www.cyberforum.ru/cgi-bin/latex.cgi?B:

https://www.cyberforum.ru/cgi-bin/latex.cgi?cos[A, B]=\frac{\sum_{d=1}^{D}{(A_d B_d)}}{\sqrt{\sum_{d=1}^{D}{A_d^2}}\sqrt{\sum_{d=1}^{D}{B_d^2}}}

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

МНЕ МОЙ МЕНЯ Я МОЁ МОИХ
ТЫ ТЕБЯ ТЕБЕ ТВОИ ТВОЙ ТВОЁ ТОБОЙ
НЕ НЕТ НА У С И ДА ДО О ЧЁМ А ТОЖЕ ДАЖЕ ТОЛЬКО ЭТО
КТО ЧТО ТАКОЙ
РОДИЛСЯ РОЖДЕНИЯ
РОБОТ РОБОТАМ РОБОТЫ РОБОТОВ РОБОТАМИ

В результате такого представления отпадает необходимость запоминать множество синонимов, на которые можно давать одинаковый ответ (типа «привет», «здравствуйте», «приветствую»). Например, в обучающей выборке участвовала только «здравствуй — привет», остальные ответы получены из-за большой косинусной близости «здравствуй», «привет» и «приветствую».
  • здравствуй
  • ПРИВЕТ
  • привет
  • ПРИВЕТ
  • приветствую
  • ПРИВЕТ РОБОТЫ
  • ты умеешь говорить
  • У Я УМЕЮ ВЫБОРА ОТВЕТИЛ
  • как ты учишься
  • Я БЕСЕДА И ЗАПОМИНАЮ СЛОВА
  • ты хороший
  • СПАСИБО МОЁ ПОСТАРАЮСЬ БЫТЬ ЛУЧШЕ

Однако вместе с этим, из-за большой близости синонимов в ответе (беседа=беседую=беседовал=…, я=меня=моё=мне=…) они чаще всего путаются при незначительной переформулировке вопроса («Как ты учишься?» Вместо «Как ты учишься у человека?»).

Итог
Как видно, при попытке использовать ИНС для общения с человеком, у меня получилось «две блондинки»: одна не может запомнить больше 15 предложений, а вторая много знает, но ничего не понимает.

Судя по описаниям как на Хабрахабре, так и на других сайтах, с такой проблемой сталкиваются не все. Поэтому возникает вопрос: где собака зарыта? Какой подход нужно использовать для получения ИНС, способной запоминать и понимать хотя бы 100 – 200 фраз?

Прошу ваших советов и предложений.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2017, 13:24
Ответы с готовыми решениями:

Модель искусственной нейронной сети на основе метода опорных векторов
В общем, собрался создать модель искусственной нейронной сети на основе метода опорных векторов в среде Matlab. Решил протестировать для...

Нужна программа на основе нейронной сети для распознавания букв.
пожалуйста, помогите! нужна программа на основе нейронной сети для распознавания букв. на вход должны подаваться bmp-изображения. ...

Робот на основе Ардуино
Вопрос скорее по электронике, но все же. Решил написать прошивку для робота - и тут же сел в лужу. В стандартных скетчах сервопривод...

21
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
06.03.2017, 19:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от xeonz Посмотреть сообщение
Очень даже есть. Скажем абстракция "буква" от нескольких букв (а,б,в,...) никак не может существовать без букв а,б,в,...
Она является их следствием. Абстракция - это когда мы убираем часть информации/свойств об объектах, но часть у нас все равно остается. Мы не можем убрать всю, тогда а нас просто ничего не останется, ни объектов, ни абстракции.
А речь не о всей, а только о сенсорной. Всю сенсорную мы убрали. В понятии "буква" ее нет, поэтому никто не знает как "буква" произносится. У нее просто не осталось этого свойства после абстрагирования. Кроме того, порядок букв в алфавите никак не следует из сенсорных образов. Порядок букв - просто декларированная нами аксиома, никак не следующая из свойств реального мира.

Цитата Сообщение от xeonz Посмотреть сообщение
Не смог бы. Ему не из чего выводить/создавать аксиомы и выводы. Ну разве что из ощущения своих внутренних органов, но это все та же сенсорная информация.
А аксиомы и не выводят/создают из чего-то. Их просто декларируют и принимают как истинные.


Цитата Сообщение от xeonz Посмотреть сообщение
А аксиомы любые базируются не на сферическом коне в вакууме, а на каких то реальных образах. Речь не про экспермиенты. Чтобы даже создать аксиомы множеств или логики, вам потребуется привлечь образы из реального мира. Даже просто какая то банальная аксиома вида "нечто может существовать, а может не существовать" не может быть без образов вида "существует" и "не существует". Это именно сенсорные образы.
Никак не следует. И вообще не сенсорные. Мыслю - следовательно существую. (с)Декарт.

Цитата Сообщение от xeonz Посмотреть сообщение
Чтобы вести речь о тессеракте, нужно понимать или представлять что такое куб. Иначе вы просто даже определение не поймете.
Я могу дать исчерпывающее определение понятия тессеракт, просто приведя соответствующую формулу. И не дать определения куба.
0
19 / 19 / 14
Регистрация: 06.08.2009
Сообщений: 538
06.03.2017, 20:08
Цитата Сообщение от xeonz Посмотреть сообщение
Что значит зачем? Например чтобы сделать автоматического собеседника. Уже сейчас идет процесс частичной замены операторов кол-центра (которые не только с голосом работают, но и с чатами тоже) на автоматизированные системы, в том числе и голосовые.
Вы меня не поняли. Зачем этому учить именно нейросеть? Это как забивать гвозди микроскопом. Для анализа текствой информации существуют другие методы.

Добавлено через 4 минуты
Может все таки вам посмотреть в сторону компьютерной лингвистики?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2017, 20:08

Бот собеседник | Виртуальный собеседник
Ребят, подскажите как правильно сделать бота виртуального, а точнее выбор ответа. Я прикрепил пример своего такого бота. Он основан на IF...

Обучение нейронной сети - алгоритм обратного распространения ошибки(learning_tree)
struct SAcson { int l,c; // строка, столбец float x; // заряд }; struct SSinapc { int l,c; // строка, столбец }; ...

Обучение нейронной сети
Доброго времени суток, ув. форумчане! Даже не знаю, как объяснить. В общем есть, допустим, n входных зависимостей f(t) и n выходных z(t),...

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

Построение нейронной сети
Используя конструктор класса network с параметрами и операторы присваивания для полей и ячеек объектов этого класса, построить, вывести на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru