?

Log in

No account? Create an account

Компьютерная лингвистика

Новостная лента www.solarix.ru

Entries by tag: рекуррентные сети

Три варианта рекуррентно-сверточных сетей в задаче определения длины ответа
kelijah
(предыдущий пост с описанием моделей чат-бота тут: https://kelijah.livejournal.com/232313.html)

Код для тренировки вспомогательной модели, которая определяет число слов ответа для заданной предпосылки и вопроса выложен тут https://github.com/Koziev/chatbot/blob/master/PyModels/nn_answer_length.py.
Read more...Collapse )

Autoencoders for word representations и ахитектура для встраивания доп. информации
kelijah
Для эксперимента WordRepresentations делаю последний вариант получения векторного представления слов с помощью автоэнкодеров.

Read more...Collapse )

Рефакторинг нейросетевого лемматизатора
kelijah
В репозитории https://github.com/Koziev/word2lemma выполнена генеральная перепланировка и уборка.

Read more...Collapse )

Готовлю ансамбль к MorphoRuEval 2017
kelijah
Соревнование: http://www.dialog-21.ru/evaluation/2017/morphorueval/

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

На данный момент в проработке и тестах:

1. Сеточная char-level LSTM модель для лемматизации с трансдьюсерами.
2. Сеточная char-level LSTM модель для частеречной разметки. Замечательная и красивая штука, но ансамбль круче.
3. Ансамбль из char-level LSTM + DecisionTree + MaxEnt + NLTK ClassifierBasedPOSTagger для частеречной разметки.

Если успею, то в ансамбль войдет сеточная word-level LSTM модель.

Неудачные эксперименты - использование CRF, RandomForest и GradientBoostingClassifier (последние два из sklearn).

Все модели, в том числе неудачные, будут выложены на github и подробно описаны в запланированных постах. Использую только python, keras, sklearn и NLTK, никаких сторонних непереносимых библиотек.

Рекуррентная и сверточная сетка для парсинга цепочки слов
kelijah
(Продолжение - см. часть 1 syntax_chars)

На уровне цепочки слов есть множество вариантов построения сеточной модели, которая будет выдавать матрицу связности слов. Кратко опишу результаты для двух экспериментальных моделей - syntax_w2v_rnn и syntax_ff.
Read more...Collapse )

Как бы нейросеть пытается передать смысл фразы своими словами ///забавный момент при обучении///
kelijah
Увидел в визуализации текущего состояния сетки, которая только-только начала обучаться.
Слева - исходная фраза, которую рекуррентная сетка упаковывает в вектор.
Справа - цепочка слов, которая сгенерирована второй рекуррентной сеткой из вектора фразы.

сначала поимка медведя ==> теперь енот сачком охотник

Работоспособная chars2vector модель для получения word2vector встраивания для любой цепочки символов
kelijah
Продолжение темы http://kelijah.livejournal.com/185930.html

Проверена модифицированная модель chars2vector.
На входе - слова как цепочки символов.
Цепочка кодируется набором LSTM ячеек, на последнем символе получаем некий вектор.
Следующий слой учится отображать этот вектор на вектор из word2vector модели.
На keras модель описана так:
Read more...Collapse )

Таким образом, для любой последовательности символов модель учится строить максимально близкий вектор word2vector. Если теперь брать слова, получать для них вектор через эту модель, и искать 10 самых близких по косинусу слов в word2vector, то получается такая интересная картина:
Read more...Collapse )

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

Модель phrase2vector с использованием binary sparse distributed vectors для представления слов
kelijah
Модель: sequence2sequence
Представление слов: binary sparse distributed vectors размерностью 2048 и средним числом единичных значение 54
Скрытый слой и разрядность phrase vector: 128 элементов
Обучающий набор: 90,000 перефразировок длиной 1...8 слов

Иногда проскакивают неплохие результаты кодирования-декодирования:
Read more...Collapse )

Пока главная проблема качества - декодер при восстановлении предложения из вектора фразы обычно подбирает максимум 2-3 слова,затем фактически выдает пустоту (векторы с очень маленькой длиной):
Read more...Collapse )

Модель "words to words" в качестве phrase2vector
kelijah
По сути, вещь примерно из тех времен, когда я еще ковырялся с 8080 и Z80, ну или с 286 в лучшем случае: http://science.slc.edu/~jmarshall/courses/2002/fall/cs152/lectures/RAAM/RAAM.html

Сейчас экстерьер другой, конечно. Использую LSTM для кодирования и декодирования, word2vector для представления слов. И лексикон не пара сотен слов, а все, что вошло в модель word2vector, без ограничений.

Задумка та же, что в моей модели chars2chars. Берем предложение и его перефразировку, сохраняющую смысл высказывания с какими-то второстепенными модификациями. Одно предложение прогоняем через LSTM-кодировщик, который на последнем шаге выдает вектор предложения. Затем второй LSTM-декодер пытается сгенерировать цепочку слов из этого вектора фразы. Автоэнкодер, повернутый по оси времени.

Смотрю на первый прогон модели:

пообедали мы ==> мы(0.8,0.4) погуляли(0.7,0.4) пообедали(0.8,0.3) пообедали(0.8,0.2) поели(0.7,0.09) вкусно(0.5,0.05) приготовленная(0.6,0.04) заготовленная(0.6,0.04) заготовленная(0.6,0.04) заготовленная(0.6,0.05) разорвавшаяся(0.6,0.05) пудовая(0.7,0.05)

Исходная фраза "пообедали мы". После символов ==> напечатан результат работы декодера. Так как декодер выдает векторы, для которых ищутся ближайшие слова в word2vector пространстве, то для контроля над процессом я печатаю в круглых скобочках еще два числа. Первое - это достоверность подбора слова для сгенерированного вектора (то, что gensim выдает из метода most_similar). Второе - длина вектора слова, чтобы видеть околонулевые векторы, представляющие фактически фоновый шум.

Интересно, как непрерывность w2v пространства отражается на результатах - декодер выдал кучу всего, связанного с процессом поглощения пищи.

PS: еще примеры восстановления фразы из ее вектора:
Read more...Collapse )

Получение вектора фразы через sequence2sequence модель (RNN+RNN): хорошее и плохое
kelijah
(Продолжаю тему http://kelijah.livejournal.com/185227.html)

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

Для модели проверяется косинус между векторами двух фраз.

Хорошие результаты:
Read more...Collapse )

Плохие результаты:
Read more...Collapse )