?

Log in

No account? Create an account

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

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

Entries by tag: unsupervised feature learning

Тетрадка Colaboratory с экспериментами для вариационными и обычными автоэнкодерами для предложений
kelijah
Рабочая тетрадка, которую я сейчас использую в Colaboratory для проверки различных архитектурных параметров двух генеративных текстовых моделей для чатбота:

1) простой сжимающий автоэнкодер на базе sequence2sequence архитектуры
2) вариационный автоэнкодер (немного переработан код отсюда https://github.com/twairball/keras_lstm_vae/blob/master/lstm_vae/vae.py)

Тетрадь доступна по ссылке: https://drive.google.com/file/d/1aWwJeve9yuH9RrrfO0gq5dpuPKxDw0cC/view?usp=sharing

В тетрадке для удобства работы сделана загрузка готовых датасетов из моего гуглодиска внутрь докер-контейнера. Эти два файла (vtexts.npz и word2vec.pkl) были подготовлены скриптом https://github.com/Koziev/pushkin/blob/master/prepare_vae_dataset.py, так что при необходимости можно взять другие  векторы слов вместо word2vec или тренироваться на другом наборе предложений.

Код для автоэнкодеров в нормальном виде лежит тут: https://github.com/Koziev/pushkin/blob/master/lstm_ae.py

Обучение выглядит примерно так (осторожно, большой скрин):
Read more...Collapse )

Enriching Word Vectors with Subword Information (aka fasttext)
kelijah
Приятно, что идея строить векторные представления для частей слов, воплощенная в этой программке https://github.com/Koziev/Word2Vec/blob/master/PyUtils/wordparts.py, была шагом в верном направлении, если внимательно посмотреть на статью "Enriching Word Vectors with Subword Information" от группы разрабов из FB.

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

Read more...Collapse )

Кластеризация предложений в векторном пространстве
kelijah
Если мы для каждого предложения умеем вычислять вектор фиксированной длины, то становится доступна и кластеризация. Именно кластеризация позволяет быстро проверить важную гипотезу,  что существует некоторое относительно небольшое количество предложений (словосочетаний, синтагм), описывающих некоторые типичные ситуации окружающей действительности и деятельности субъекта в этой действительности. Наличие таких текстовых архетипов позволит улучшить работу алгоритма семантического и синтаксического анализа текста, но об этом поговорим в отдельной главе.
Read more...Collapse )

Встраивание предложений в векторное пространство
kelijah
Для упаковки цепочки слов в вектор фиксированной длины годятся те же самые методы, которые я перечислял в главе про char-модели (http://kelijah.livejournal.com/194691.html). Заменив символы и их 1-hot коды на слова и их word2vector представления, мы можем использовать всё тот же автоэнкодер. Учитывая вариативность длин предложений, разумно сделать RNN модель на LSTM, хотя более простая и на порядки более быстрая feedforward модель тоже реализуема.
Текстовое описание модели, использование и питоновский код...Collapse )

Эффективное встраивание фрагментов слов в векторное пространство слов средствами gensim
kelijah
Чтобы определять w2v вектор несловарных термов, можно применять разные алгоритмы, включая описанный ранее регрессор char-векторов в w2v-вектор. Сейчас я опишу еще один способ, который может кому-то пригодится сам по себе, или даст повод посмотреть на интересную особенность библиотеки gensim.
Read more...Collapse )

Визуализация пространства встраиваний в char-rnn модели word2word. Интерполяция слов.
kelijah

(оглавление)

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


Как посмотреть на распределение векторов слов в этом пространстве?

Read more...Collapse )


Кластеризация составляющих - промежуточные результаты
kelijah
Берем из большого набора предложений фрагменты синтаксических деревьев - узел и все его потомки.
Для каждого фрагмента получаем средний вектор, складывая word2vector представления слов.
Кластеризуем получившийся набор векторов с помощью простого K-means, взяв cosine similarity в качестве метрики.

По задумке мы должны получить фреймы - типовые семантико-синтаксические модели.

Вот некоторые интересные кластеры:

Ватцап, ватсап и так далееCollapse )

Продаю что-то...Collapse )

Где-то...Collapse )

Сдам квартиру...Collapse )


Ищу работу (кальянщиком!)...Collapse )

Продам скотинку домашнюю...Collapse )



Вы там держитесь, и всего хорошего...Collapse )


о смывании водой...Collapse )

Больше перефразировок богу перефразировок: датасет для сиамской сети
kelijah
Появилась идея, как получать много, очень много негативных примеров перефразировок для siamese network. причем с минимумом ручной работы или модерации.

Для этого берем результаты обработки текстов моим синтаксическим парсером. Много мегабайтов текстов, и много гигабайтов результатов в XML.
Обрабатываем их в C# программе (исходнички на гитхабе), которая применяет некоторые трансформации к синтаксическому дереву и гарантированно получает либо изменение семантики, либо синтаксически некорректное предложение. Для пересклонения существительных и прилагательных я, как обычно, использую .NET обертку для API грамматического движка с русской словарной базой.

Например, перестановка позиции предлога:
Read more...Collapse )

Перестановка атрибутирующих прилагательных:
Read more...Collapse )

Перестанова существительных в паттерне родительного падежа:
Read more...Collapse )

Зачем нужны эти перефразировки?

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

Кроме того, эти перефразировки заставляют сетку работать чуть лучше, чем bag-of-words модель, так как набор слов во всех случаях идентичный или совпадает до лемм.

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

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

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

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

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