Все хорошие времена! Я студент, для задания я выбрал тему «Информационные нейронные сети» (INS). Задачи, где нужно работать с числами, решались довольно просто. И я решил усложнить систему, добавив текстовую обработку. Таким образом, я поставил перед собой задачу создать «собеседника-робота», который мог бы связаться по определенной теме.
Поскольку тема общения с ботом довольно широка, я не ценю диалог в целом (привет товарищу Тьюрингу), рассматривается только рассмотрение «ответа собеседника» на высказывание человека.
Слишком далеко, мы собираемся задать вопрос о предложении войти в INS и ответить на предложение, полученное в конце.
Поскольку нейронные сети работают только с числами, вам необходимо кодировать слова. Для упрощения знаки препинания исключены из оценки, только правильное наименование написано в верхнем регистре.
Каждое слово кодируется двумя целыми числами, от одного (ноль отвечает за отсутствие слова) - номер категории и номер слова в этой категории. Он предназначался для хранения слов, похожих на значение или тип (например, цвета, наименование) в «категории».
Таблица 1
| Категория 1 | { } Категория 2 | Категория 3 | Категория 4 |
1 2 3 4 5 6 7 | вы ваш вы ваш { } вы я отлично | отлично отлично фантастически отлично отлично отлично ужасный | страшный отвратительный плохой отвратительный привет | привет привет привет не болен |
Любое предложение (вопрос и ответ) может содержать не более 10 слов. Этот тип сети достигается с 20 входами и 20 выходами.
Число ссылок в сети для запоминания
N примеров рассчитывалось по формуле
m
- количество входов, n - количество выходов, N - количество примеров.
Количество сетевых подключений с одним скрытым слоем, состоящим из
нейронов
Структура обучающей сети показана на рисунке 1.
Сеть реализована в MATLAB, обучение - это способ распространения обратной ошибки. Студенческая коллекция содержит 32 предложения ...
Большой и не обязательный ...
INS не смог понять более 15 предложений, как показано на следующем графике (рисунок 2). Ошибка рассчитывается как модуль для разности между выходной мощностью NA и требуемой.
Пример диалога (все вопросы из образца):
привет
сколько тебе лет
ты хороший
|
ты хороший бото
дружба отличная
пока
|
Архитектура 2. Двухслойная нейронная сеть прямого распространения
Для тестов был создан словарь из слов $ inline $ D = 468 $ inline $ и обучающего набора из 95 предложений. По предложению Национального собрания было подано 6 слов, и ответ был также оценен из 6 слов.
Количество нейронов в покрытом слое было определено в зависимости от количества соединений, количества примеров, которые сеть может выучить без ошибок.
привет тебе
Человек должен быть отличным
что ты любишь
|
что тебе нравится
как ты
здорово быть хорошим
|
Архитектура 3. Двухслойная нейронная сеть прямого распространения
с одним скрытым слоем и кодировкой word2vecДля тестов работы сети мы использовали словарь word2vec для векторов длины $ inline $ D = 50 $ inline $, который обучался на базе обучения нейронной сети.
При входе в нейронную сеть доставляется 6 слов (вектор длиной 300), и предлагается получить ответ, также состоящий из 6 слов. В обратимом кодировании вектор фразы делится на 6 векторов слов, где некоторые словари ищут очень вероятное косинусное соответствие угла между векторами $ inline $ A $ inline $ и $ inline $ B $ inline $: { }
Но даже при такой реализации word2vec не устанавливает надлежащих связей между словами с точки зрения русского языка. Для разработки словарного запаса, в котором синонимы будут особенно близки, было сформировано учебное здание с сгруппированными синонимами, которое по смыслу сливалось друг с другом:
ДЛЯ МЕНЯ МЕНЯ, МЕНЯ, МОЯ, МОЯ, МОЯ , ВЫ СДЕЛАЛИ ДЛЯ ВАШИХ. } КТО ТАК
Лодка Ботов Боты Боты Ботов | В результате такого представления нет необходимости запоминать большое количество синонимов, которые могут получить аналогичный ответ (например, «привет», «привет», «добро пожаловать»). Например, только привет - привет участвовал в учебной сессии, другие ответы были получены из-за огромной косинусной близости к "привет", "привет" и "приветствие".
привет
| Я МОГУ ВЫБРАТЬ ОТВЕТ
| Но наряду с этим, из-за огромной близости синонимов в ответе (разговор = разговор = разговор = ..., я = я = мой = я = ...), они часто путаются, когда вопрос слегка перефразировано («Как ты учишься?» Вместо «Как ты учишься у человека?»).
Судя по описаниям как на Хабрахабре, так и на других сайтах, не все сталкиваются с этой проблемой. Поэтому возникает вопрос: где похоронена собака? Какой подход следует использовать, чтобы получить INS, который может запомнить и понять по крайней мере 100 - 200 предложений?