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

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

Модель с xgboost для Quora Question Pair competition преодолела отметку logloss=0.30 на паблике
kelijah
На Татуине продолжаются гонки на подах - соревнование моделей для поиска дубликатов вопросов.
После большого feature engineering'а полученный logloss на leaderboard для моей модели с xboost дал 0.29812.
То есть заветная планка в 0.30 наконец преодолена.
Уверен, что без каких-либо особых изменений эта модель способна выдать логлосс в районе 0.28.

Впрочем, и текущее достижение позволило ансамблю прыгнуть на полсотни мест вверх, войдя в первую сотню из 1800 участников:
Read more...Collapse )
Символьная сеточная модель улучшила свои показатели logloss на валидации примерно до ~0.40.
Аналогчиные результаты для word-based сетки.
Впереди новый смертоносный алгоритм random search для xboost и новая супер-мега-фича для входного набора.

LSI+xgboost в задаче Quora question pairs
kelijah
Сама задача тут https://www.kaggle.com/c/quora-question-pairs
TF-IDF для лемматизированных предложений, работает по словам и 2-граммам.
LSI для снижения размерности до 200 (использую gensim).

В качестве фич для xgboost также берется выдача с репрезентационного (предпоследнего) слоя двух сеточных моделей определения перефразировок - по символам и по токенам. Эти модели тренируются отдельно, дают качество намного хуже, но эксперимент показывает, что их данные могут поднять качество бустинга на пару сотых в логлоссе.

Далее xgboost с автоподбором числа итераций, кросс-валидацией на 9 фолдов.

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

Самое интересное в этой связке, что bagging xboost'ов в данной задаче стабильно дает log loss намного хуже (пессимистичнее), чем потом получается при сабмите на leaderboard. Разница существенная, например в данной попытке валидация дала 0.333765, то есть реальное качество сабмита оказалось на 0.04 лучше. Как-то я привык, что локальная оценка всегда оптимистичнее, чем получается в итоге.

Обновление парсера для Windows x86 и x64
kelijah

Русские модели морфологии и синтаксиса для парсера пересчитаны после обновлений в лексиконе и обучающем корпусе.

Русская словарная база (лексикон) тщательно вычищена, из нее убраны "плохие" словарные статьи, в основном для составных слов типа "робот-гитарист".

Сделана выверка части обучающего treebank, на котором тренируются вероятностные модели. В результате этого точность частеречной разметки на тестовом наборе достигла 99.1%, то есть ошибаемость упала ниже 1%.

Архивы с бинарниками парсера:

Win64 RU парсер 73 Мб

Win32 RU парсер 78 Мб

Первый опыт использования KenLM для оценки валидности предложения
kelijah
Програмный пакет для построения и использования языковых моделей KenLM лежит на гитхабе: https://github.com/kpu/kenlm
Read more...Collapse )

Неудачный эксперимент: генерация морфологических признаков слов через w2v и кластеризацию
kelijah
Сама идея простая. Делал её экспериментальную реализацию для для Парсера. Потом вторая попытка - для morphorueval2017. Особого эффекта добиться не удалось, но возможно в каком-то другом сценарии анализа текста она будет полезной.

Далее описываю реализацию для morphorueval.
Есть набор корпусов, предоставленных организаторами конкурса.
Мы берем из них только слова, генерируем текстовый файл в формате: одна строка - одно предложение. Слова разделены пробелами. Занимается этим простой скриптик generate_w2v_corpus.py.
Далее выполняется встраивание слов корпуса в векторное пространство через gensim - второй скриптик train_w2v.py.
Далее выполняется кластеризация слов с помощью K-Means - см. скрипт word_clusters.sklearn.py
Наконец, номера кластеров слов используем как отдельный категориальный признак в любом алгоритме.

Если посмотреть на содержимое кластеров, то обычно можно понять, какие морфологические признаки использованы для объединения:

Read more...Collapse )

Главная проблема - небольшой объем текстового корпуса, на котором обучается word2vec. Из-за этого некоторые кластеры получаются неконсистентными.

Исходник part-of-speech tagger на базе XGBoost
kelijah
Довел до конца эксперимент по реализации модели частеречной разметки на основе классификатора XGBoost.
Исходник (питон 2.x) лежит тут.

Выводы из эксперимента.

1. На таком числе классов (почти 300) xgboost обучается чертовски медленно. Фактически на корпусе ГИКРИЯ обучение шло три дня, полностью загружая 4 ядра i7. Нейросетка на Keras в таких же условиях обучается за полчаса. Обе модели при этом останавливаются по early stopping, то есть строятся максимально хорошие модели.

2. Построенная модель размечает текст немного хуже, чем нейросетка.

Декодер Витерби для нейросетки Part-Of-Speech tagger
kelijah
Пожалуй, это последний штрих к модели частеречной разметки Model1.

Странно, что я не сделал это раньше, так что пришлось в шесть утра освежать в памяти, что такое алгоритм Витерби и припаивать его поверх нейросетки (аналогично тому, как это делается в MEMM поверх maxent-классификатора).

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

Работа с моделями для частичной разметки и лемматизации (установка, обучение, разметка)
kelijah
Read more...Collapse )

Модель №21 для ML Boot Camp - непобедимый оверфиттинг
kelijah
Пока пытаюсь понять, как уменьшить переобучение в m21.py для решения задачи.

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

Пробую уменьшить максимальную глубину деревьев и поиграться другими параметрами xgboost.

Сеточные char-level модели морфологического анализа и лемматизации для MorphoRuEval 2017
kelijah

Далее будут кратко описаны три модели. Две модели для частичной разметки соответствуют последовательным экспериментам по выбору общей архитектуры. Условно они называются Model1 и Ensemble. Модель лемматизации общая, ансамбль для нее я не делал, хотя это безусловно возможно и даже желательно.


Исходные тексты можно найти на гитхабе: https://github.com/Koziev/MorphoRuEval2017

Read more...Collapse )
PS: Ансамбль будет описан отдельно.

?

Log in