?

Log in

No account? Create an account

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

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

Entries by tag: текущие планы

Чем ближе структура диалога к естественной, тем сложнее с ним работать
kelijah
Очень непросто оказалось ввести в чатбот некоторую проактивность, например (B - реплики бота, H - реплики человека):

B:> Добрый день
H:> Привет, как тебя зовут?
B:> кеша
B:> А как тебя зовут?
H:> Меня зовут Илья.
B:> Рад знакомству.

Read more...Collapse )

Решение бинарной классификационной задачи на C++ с помощью Apache.SINGA, tiny-dnn и OpenNN
kelijah
1. Выложил в репозиторий эксперимента cеточные модели для бинарной классификации на C++ в Apache.SINGA, OpenNN и tiny-dnn:

TinyDNN_Model.cpp - решатель на базе MLP, реализованного средствами библиотеки tiny-dnn (C++, проект для VS 2015)
alexnet.cc - решатель на базе нейросетки, реализованной средствами Apache.SINGA (C++, проект для VS 2015)
main.cpp - решатель на базе нейросетки, реализованной средствами OpenNN (C++, проект для VS 2015)

Постарался максимально подробно описать собственные впечатления от этих библиотек с позиции человека, впервые пытающегося применить их для решения реальной задачи: https://habrahabr.ru/post/335838/

2. Стартовал эксперимент по использованию sparse distributed representations слов на этой же задаче. Посмотрим, будет ли выигрыш в сравнении с базовыми w2v репрезентациями.

Планы для https://github.com/Koziev/WordRepresentations: Nervana NEON и CNTK
kelijah
Хочу попробовать добавить в зоопарк решателей задачи https://github.com/Koziev/WordRepresentations:

1) сеточную модель на базе библиотеки Nervana Neon (https://github.com/NervanaSystems/neon)
2) сеточную модель на базе CNTK (https://docs.microsoft.com/en-us/cognitive-toolkit/) - как минимум evaluation код на C#.
3) сеточную модель на базе tiny-dnn C++ (https://github.com/tiny-dnn/tiny-dnn)

Готовлю ансамбль к 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. Перефразировки.

Read more...Collapse )2. Полярность предложений в отзывах.

Read more...Collapse )

3. Появилась задумка "сеточного стеммера" для уменьшения энтропии текста. Научимся сводить слова к "базовым" корням, устраняя приставки, суффиксы и окончания.

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

Выдержка из результатов тестового прогона по моей базе оценок из отзывов:

перестановочная нормализация словосочетаний...Collapse )

Сейчас в базе 23990 уникальных словосочетаний по которым сделана оценка или обнаружен факт наличия/отсутствия какого-то аспекта. Общее количество оценок и фактов равно 9677415. Думаю, можно попытаться поучить RNN/LSTM модель нормализовать словосочетания по такому шаблону:

Нормализация словосочетаний...Collapse )

100% качества добиться, наверное, вряд ли получится из-за ограничений на объем памяти в сетке, но общие закономерности рекуррентная модель должна уловить. Например:

приведение к нейтральной форме:
анимация бедноватенькая ==> бедноватая анимация

приведение главного существительного к словарной форме и пересогласование зависимого прилагательного:
анимационные программы очень веселые ==> очень веселая анимационная программа

и так далее.

Текущие планы по POS Tagger'у и синтаксическому парсеру
kelijah
Самое главное: больше не будет 32-битных версий. Синтаксический парсер портирован под Windows на 64 бита и вроде чувствует себя в новом варианте неплохо. Раньше я уже портировал его на 64-битный linux. Так как ни одна из текущих задач не требует 32-битного варианта, не вижу смысла собирать соответствующие словарные базе и исполнимые файлы.

Пару недель парсер будет бегать на большой задаче, потом - релиз.

Из сопутствующих планов.

1. Попробовать обучить SyntaxNet на моем tree bank.

2. Реализовать новый парсер, концептуально больше похожий на shallow parser. Без определения типа связей, примерно как в Cabocha. Это может показаться странным, но опыт показывает, что тип связи (подлежащее-сказуемое, существительное-атрибут и т.д.) нужен не так часто. Гораздо важнее уметь определять вероятность связывания, особенно для предложных паттернов и всяких неоднозначных конструкций типа "я отдал книгу дочери".

Несколько нюансов по текущим делам
kelijah
1. Работать с real-valued continuous word vectors в моделях с RNN очень тяжело. Несколько разных моделей ведут себя похожим образом, попадая на какие-то плато. Практически в долину смерти оптимизаторов, где по склонам валяются скелеты умерших от истощения градиентных спускателей. Это приводит к очень плохой сходимости. Переход на хитрые оптимизаторы типа adagrad в целом не помогает. А использовать 1-hot vector представление очень не хочется из-за катастрофических проблем с размером лексикона и отсутствием композируемости для составных слов.

2. Генерация бинарных sparse distributed representations для слов - забавная штука. Но получение 2048-разрядных векторов для 1kk+ лексикона приводит к забавному эффекту на хосте с 32 Гб оперативки. В общем, убунта, ушедшая в свопирование на таком объеме, с очень большим трудом поддается снятию задачи-виновника, особенно если спарсификация - многопоточная и занимает хотя бы 4 из 8 ядер. Да и после снятия задачи около 5 минут система приходит в себя, очищая своп. В этот момент она очень похожа на кота, который занят вылизыванием и умыванием. Его можно ненадолго отвлечь, но предпочтение будет все равно отдано вылизыванию и умыванию. Так что жесткий ребут помогает тут лучше. Но вопрос о недостаточности 32 Гб для некоторых задач уже встал :(

Примерный план на ближайшее время
kelijah
1. Попробуем сделать sequence2sequence на уровне слов, возможно через w2v векторное представление слов. Аналогично для siamese network.

2. Для работы с несловарными токенами попобуем вернуть в строй мою модель получения векторов для частей слов (префикса, корня, аффикса). Хочу проверить, насколько качественно будет восстанавливаться вектор слова из векторов его частей.

3. Надо обдумать потенциальную пользу от модели, которая будет брать цепочки связанных предложений, типа:
Read more...Collapse )

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

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

В tree bank было добавлено несколько тысяч предложений и поправлены ошибки.

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

Так как пересчет выполняется под виндой, то игры с char-rnn модельками будут происходить реже, когда буду перегружаться в линух. Из планов в этой части:

1. Проверить еще одну задачу word2verb_aspect, то есть определение признака совершенный/несовершенный/не глагол для слов.

2. Начать эксперимент со сверточной сеткой для текста. Собственно, все char-rnn модельки были просто разминкой. Надо научиться стекировать автоэнкодеры и rnn по новой схеме (возможно, никто так еще не делал, хотя вряд ли, просто нет времени шерстить весь arxiv.org) для выявления инвариантов в тексте.