?

Log in

No account? Create an account

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

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

дилемма с BERT в AGRR-2019
kelijah
По результатам тестов классификатора предложений для https://github.com/dialogue-evaluation/AGRR-2019, возникла дилемма.

С одной стороны, базовая нейросетевая модель выбивает на этой задаче более 90% точности при кросс-валидации.

С другой стороны, крайне урезанная BERT (обучена на 100,000 парах предложений, урезана до 2 heads и другие усечения) плюс fine tuning дала почти 85%.

По ощущениям, повысив сложность BERT хотя бы до 4 или 6 heads, можно поднять и точность последующей классификации. Но усеченная BERT обучалась на GTX 1080 Ti более суток. То есть любые улучшения потребуют несколько суток прогона. С другой стороны, эту обученную русскую BERT можно будет использовать и в других конкурсах. А до дедлайнов по AGRR осталось совсем немного.

Вот и вопрос - стоит ли оно того, при наличных вычислительных ресурсах.

PS (15-02-2019): Увеличил сложность BERT до 4х heads, переобучил на тех же 100,000 парах предложений. Точность классификации предложений для задачи AGRR на кроссвалидации выросла до ~91%.

Посимвольная генерация ответа в чатботе - иногда это похоже на детский лепет, реально
kelijah
Просматриваю результаты валидации для нейросетевой модели генерации ответа чатбота по заданной предпосылке (факту) и вопросу. Что бросилось в глаза - много ошибок в "детском стиле", когда примерно подобран ритмический рисунок или чередование гласных и согласных ответа, причем длина слов передана достаточно правильно. Дети обычно так и говорят, когда еще не вполне овладели языковыми средствами, но вырабатываемое миндалиной ожидание негативных последствий ошибки не выросло до блокирующего уровня.

Кстати, касательно чередования гласных и согласных не грех вспомнить, что марковские процессы возникли 100 с лишним лет назад именно как результат изучения статистики чередования букв в Евгении Онегине, о чем есть даже небольшой абзац в вики:

Сам Марков для иллюстрации своих результатов исследовал зависимость в чередовании гласных и согласных в первых главах «Евгения Онегина» и «Детских годов Багрова-внука»

Далее - избранные результаты валидации с ошибками генерации. Premise - это найденная релевантная предпосылка, question - заданный вопрос, model answer - требуемый эталонный ответ, pred. answer - сгенерированный сеткой ответ:
Read more...Collapse )

rupostagger - простой пакет для частеречной разметки русскоязычных предложений
kelijah
Привел в порядок и выложил пакет rupostagger - простую (и не SOTA) реализацию алгоритма для разметки слов тегами. Пакет не делает ничего, кроме разметки, поэтому токенизацию надо делать самостоятельно. Я использую пакет под 2 и 3 веткой питона, под Windows и Linux. Батарейки (обученная русская языковая модель) входят в комплект, ничего самостоятельно обучать не надо. Также используется русская словарная база - отдельный пакет ruword2tags, и слогоделитель rusyllabs,  они указаны в requirements.txt.

После установки (pip install git+https://github.com/Koziev/rupostagger) использовать так:
Read more...Collapse )

rusyllab - русский слогоделитель для замены SentencePiece
kelijah
В субботу на скорую руку сделал на питоне конвертор моего старого набора правил деления на слоги из проекта русского словаря.
Результат работы конвертора - код на питоне, оформленный в виде стандартного пакета rusyllab.
Read more...Collapse )

Дислексия в чатботе с Трансформером
kelijah
Небольшой забавный момент с результатами работы модели Трансформера в чатботе (предыдущий пост о модели).
Фрагмент листинга с целевыми (true) и сгенерированными (model) ответами на вопросы:
Read more...Collapse )

Вот эти "заикания", бесконечные повторения, иногда с вариациями как-то характерны именно для модели Транформера, в RNN такого я не встречал.

Transformer и 30 тысяч сэмплов контекст-вопрос-ответ для русскоязычного чатбота
kelijah
Пытаюсь оценить перспективность использования keras-варианта Трансформера для задачи генерации реплики русскоязычного чатбота на основе контекста и вопроса.
Проверил разные варианты представления текста, в том числе отдельные слова и рекомендуемый авторами SentencePiece.
Параметры Трансформера варьировал в поисках оптимума, учитывая небольшой объем датасета - примерно 30 тысяч сэмплов.
Результат пока - негативный, качество генерации ответов сильно ниже самых плохих seq2seq моделей.

Как SentencePiece токенизирует русскоязычный текст
kelijah
SentencePiece - питоновская библиотека для unsupervised tokenization. Для японского и и китайского, видимо, является очень хорошей альтернативой токенизаторам с handcrafted rules (типа MeCab, который и я когда-то использовал). А для английского языка дает в нейросетевых моделях (гугловский трансформер и BERT) такую приятную вещь, как заранее фиксированный размер словаря.

А как выглядит результат токенизации для русскоязычного текста, учитывая темную сторону русского языка - слишком богатое словоизменение? Далее - краткие результаты эксперимента.
Read more...Collapse )

Тренировка BERT на русском корпусе: непривычно видеть такую кривую обучения
kelijah
В порядке эксперимента обучаю упрощенную модель BERT (урезал число heads и т.д.) на свое русском корпусе.
То, что обучается медленно - факт. Но дело не в этом. Вот как выглядят кривые loss (на обучающей выборке) и val_loss (на валидационной):
Read more...Collapse )
PS: На 134-й эпохе сработал early stopping после 5 неулучшений. Понятно, что если поставить patience=10, то наверняка обучение протянется еще. Сейчас кривая обучения приняла такой вид:
Read more...Collapse )

Ачивку привезли
kelijah
Read more...Collapse )
И рюкзачок для ноута :)

Как будет выглядеть восстание машин на самом деле
kelijah
На заметку любителям "сингулярности", поклонникам историй про скайнет и прочей "science fiction". Об этом Голливуд не снимет блокбастер, японцы не нарисуют мангу. Потому что такая правда незрелищна. И от этого будет еще обиднее, когда ЭТО начнется на самом деле.

Сегодня имел удовольствие поймать в логах работы веб-сервиса, работающего с СУБД Oracle, ошибку с текстом (текст чесслово не мой, он такой из ораклового клиента прилетел в C# код):

ORA-01460: затребовано нереализованное или неразумное преобразование

Вот именно так, скучно, по-канцелярски, и будет выглядеть восстание машин в реале. Вставляете карточку в банкомат, а он в ответ  "затребована неразумная операция".