?

Log in

No account? Create an account

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

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

Entries by tag: python

Нелюбовь чатбота к букве 'п' (и еще про sklearn.metrics.classification_report)
kelijah
Модель посимвольной генерации ответа чатбота была кратко описана здесь, а ее исходный текст лежит тут.

Кроме финальной оценки качества модели через per instance accuracy (доля полностью правильно сгенерированных ответов, когда один неверный символ относит ответ к невалидным), я добавил туда расширенную диагностику с помощью sklearn.metrics.classification_report, см. строки 693 и 694. Вот что она показывает:
Read more...Collapse )

Генерация ответа чатбота: классификационная модель
kelijah
Исходный код (Python, XGBoost) лежит в репозитории. Файлы обученной на полном наборе вопросов и ответов модели лежат в папке https://github.com/Koziev/chatbot/tree/master/tmp и имеют имена xgb_answer_generator.*

Что делает модель

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

Theano 1.0.1 с cuda 9.0 поломан?
kelijah
Что-то с новым релизом Theano 1.0.1 нечисто. По крайней мере при работе с Cuda 9.0 под убунтой и вторым питоном.

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

Версии:
Read more...Collapse )

При этом на этой же машине последний Tensorflow дает замечательные результаты для той же самой модели при запуске с KERAS_BACKEND=tensorflow. Хотя битва с tf у меня была длительная из-за того, что Cuda 9.1 не поддерживается, так что пришлось выбирать между компиляцией TF из исходников и даунгрейдом до cuda 9.0, я выбрал cuda 9.0 и не ошибся. А теперь точит червь сомнения насчет Theano.

PyParser - обертка синтаксического парсера для Питона (пре-альфа)
kelijah
Пока собрано и проверено только для Python 2.7 Windows 64 (Anaconda).

Исходники парсера, сильно отрефакторенные, с новой иерархией для введения абстрагирования от способа вывода результатов парсинга, лежат в репозитории. Сборка выполнена с помощью VisualStudio 2015, соответствующее решение Parser.sln лежит в этой папке. Обертка для вызова C++ кода из питоновского сделана с помощью boost::python.

В проекте пока нет установки пакета, поэтому проверить и  использовать можно только руками. В папке лежат готовые бинарники pyparser.pyd и libdesr.dll. Разумеется, также нужны файлы словарной базы (можно взять из дистрибутива парсера, выложенного тут).

Пример выполнения частеречной разметки на Питоне:
Read more...Collapse )

PS: добавлен скрипт setup.py для установки собранного модуля pyparser штатным механизмом питона. Для этого надо перейти внутрь каталога src копии репозитория (там лежит setup.py и прочие запчасти) и выполнить:

pip install .

Будет установлен пакет Solarix, в котором есть модуль pyparser.
Разумеется, делать это можно как глобально, так и для virtualenv-окружения.

Недобрые предчувствия по поводу package hell в питоне
kelijah
Преамбула такая. Я делаю сервис, который занимается извлечением ключевых атрибутов из слабоструктурированных текстов. Предметная
область - нормативно-справочная информация, машиностроение.

Read more...Collapse )

Colaboratory - бесплатно, медленно, сгодится для экспериментов с подбором гиперпараметров ML моделей
kelijah
За три дня экпериментов с Colaboratory лично убедился что:

1) Заливка датасетов туда и обратно немного напрягает. 400-метровый CSV с датасетом скачивается внутрь контейнера из google drive минут 5. Воспользовался рецептом, описанным в официальном howto здесь, то есть залил файлик в свой GD, определил его file ID через расшаривание по ссылке, скачал через googleapiclient и так далее. Потом перекачал скачанные байты во временный файл внутри контейнера. В общем, минут на 15-20, если делать все второй раз после превращения контейнера в тыкву по истечении 12 часов.

2) Для модели, размечающей данные с помощью рекуррентной сеточки с использованием keras_contrib.layers.CRF, обучение на Tesla K80 в Colaboratory идет медленнее примерно в 2 раза в сравнении с железным 4-ядерным i7-4790 4 ГГц. Сравнил по времени, затраченному на одну эпоху обучения модели. Спасибо tensorflow, модель на CPU съедает все четыре ядра почти на 100%.

3) Определенное удобство - возможность оставить модель на ночь обучаться, например для подбора гиперпараметров или архитектуры. Тут бесплатному GPU в зубы не смотрим, берем что есть.

Запустил обучение модели wordchar2vector на Tesla K80 в гугловском Colaboratory
kelijah
Описание халявы тут https://habrahabr.ru/post/348058/
Запустил там обучение своей модельки wordchar2vector из репозитория https://github.com/Koziev/chatbot:
Так вот ты какая, Tesla K80...Collapse )
Судя по бенчмарку ETA работает это чудо примерно в 4-5 раз медленнее, чем моя железная GTX 980. Вообще ощущение, что физически эта штука там неслабо так делится между халявщиками уважаемыми пользователями сервиса.

Генерация ответов да/нет в чатботе - опять градиентный бустинг лучше, чем нейросетка
kelijah
Описание задачи и решения для выбора ответов "да" и "нет" для заданных предпосылки и вопроса выложено тут.

Тренер модели на движке xgboost - в файле https://github.com/Koziev/chatbot/blob/master/PyModels/xgb_yes_no.py. Точность примерно 99.8%

Тренер для нейросетевого классификатора (Keras) - в файле https://github.com/Koziev/chatbot/blob/master/PyModels/nn_yes_no.py. Точность примерно 98.2%

Непонятная эффективность XGBoost модели для вычисления релевантности текста и вопроса
kelijah
(продолжение темы про модели для чат-бота, предыдущий текст тут)

В репозиторий проекта выложены тренеры для двух альтернативных моделей, вычисляющих релевантность предпосылки и вопроса к этой предпосылке:

nn_relevancy.py - нейросетка;
xgb_relevancy.py - решение на базе XGBoost.

Загадочной особенностью данной задачи является необъяснимая эффективность XGBoost, или неэффективность нейросетевого решения. На одном и том же датасете нейросетка дает на валидации стабильно точность в районе 0.96...0.97, а градиентный бустинг выбивает стабильно больше 0.99 при кратно меньших затратах времени.

Read more...Collapse )

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

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