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

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

XGBoost + hyperopt модель в MLBootCamp V "Предсказание ССЗ"
kelijah
Страница конкурса http://mlbootcamp.ru/round/12/tasks/

Это классическая supervised learning бинарная классификация по небольшому датасету (70 тысяч сэмплов в обучающей выборке).
Особенность - искажения в данных, в том числе ошибки в важнейших признаках по артериальному давлению. Искажения в данных неприятны, так как простое исправление выбросов (пробовал "обнанить" выбросы и выправить их) только ухудшает результаты.

XGBoost по сырым данным, без чистки и без синтетических фич, с ручным подбором гиперпараметров, дал в итоге 0.5435 на лидерборде при сабмите.

Подбор гиперпараметров через hyperopt и эксперименты с чисткой данных и синтетическими фичами пока дали 0.5430 при сабмите. Забавный момент связан с обучением xgboost на Windows и Linux. Один и тот же скрипт на одинаковых данных дает на Windows стабильно более низкий validation logloss, чем на Linux. Железо разное, плюс на Linux модель бегает на GPU. Но разница настолько ощутима, что мешает сопоставлять результаты прогонов на этих двух платформ. При этом сабмит в целом сопоставим.

Предварительные пристрелки с LightGBM дали существенно более плохой результат. Хотя скорость обучения у этого бустера на этом датасете намного выше, чем у xgb, даже без GPU.

Сделал еще пристрелку с нейросеткой (Keras+Theano), но там тоже безрадостно.

Странная фича для определения перефразировки вопросов в каггле Quora Question Pairs
kelijah
Соревнование по определению похожести вопросов закончилось, теперь можно поизучать чужие решения. И пересмотреть еще раз некоторе нюансы в своем решении тоже.

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

Вот топ списка фич, выдаваемых xgboost и отсортированных в порядке убывания веса:

Веса фич...Collapse )

Выделенные болдом признаки kenlm_* представляют из себя оценки достоверности фрагментов фразы. Они вычисляются с помощью предварительно построенной языковой н-грамной модели KenLM. Вычисление делается вот так:

Фрагмент кода для вычисления kenlm фич...Collapse )

То есть берем начало вопроса из нескольких слов. Значения для начальных фрагментов длиной в 8, 16 и 32 слова вычисляются отдельно. Вычисляем оценку для первого вопроса, для второго, сохраняем их в датасете, а также добавляем разницу оценок. Учитывая логарифмический характер оценок, мы фактически определяем относительную оценку.

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

Но тем не менее xgboost в ходе построения деревьев на каком-то уровне делает вывод, что выгода от учета значения kenlm-фичи больше, чем, например учет похожести предложений на базе информации в WordNet (синонимия и так далее) - см. положение фичи wordnet_sim_0.

Сеточная модель для детектирования перефразировок leaderboard=>0.17264
kelijah
Потюнил параметры (величину дропаута, кол-во слоев), logloss на паблике упал на соточку до 0.17264.
Соточка - это оказывается целых 44 позиции вверх на данный момент:Read more...Collapse )

Новый скоринг сеточной модели на кагле Quora Question Pairs
kelijah
В дополнение к http://kelijah.livejournal.com/210688.html
На паблике log loss получился 0.1813, то есть немного хуже, чем у xgboost'а.

Когда фичи неожиданно провзаимодействовали с leaks на Quora Question Pair
kelijah
Соревнование по определению похожих вопросов (перефразировок) Quora Question Pair на Kaggle через 2 недели закончится. У меня в запасе осталась одна неиспытанная NLP фича. Но под нее надо писать прожку на C# из-за большого количества циклов, не сводимых к numpy-функционалу. Поэтому могу и не успеть.

А тут неожиданно очередной опубликованный leak провзаимодействовал с остальными моими фичами и в итоге модель на xbgoost с кучей фич от посимвольной похожести в разных видах до забавных NLP фич part-of-speech tagger+salient words или n-gram language model резко улучшилась. Текущий logloss на паблике упал до 0.16:
Read more...Collapse )
Забавно и немного поучительно.
Сейчас запустил новый расчет для гибридной сеточной модели (char-level + word-level + доп.фичи). Раньше эта сетка давала точность лучше, чем xgboost, посмотрим на результаты.

Немного улучшил скоринг моделей для Quora Question Pairs
kelijah
Продолжаю по каглю.
После добавления новых фич и тюнинга метапараметров xgboost имею:
1. deep learning модель word-based LSTM + ConvNet дает на leaderboard log_loss=0.25491
2. xgboost + lsi + тонна ркотворных фич дает на leaderboard log_loss=0.2660

Текущий скоринг моих моделей для кагля Quora Question Pairs
kelijah
На данный момент картина по каглю такая:

1. char-level LSTM + convnet (using Keras and Theano backend) дает logloss 0.3195 на leaderboard. В принципе, очень неплохой результат, если учесть, что на входе этой модели - только цепочки символов для двух проверяемых вопросов. Никакого feature engineering, никаких сторонних словарей и онтологий.

2. word-level + char-level LSTM + convnet (using Kerasand Theano backend) с подаваемыми на вход сетки дополнительными фичами дает на LB logloss 0.2734. Далеко от лидеров соревнования. Но сейчас обучается новая версия модели, посмотрим на результаты.

3. xgboost с целым ворохом различных фич дает на LB logloss=0.26976. Тоже есть куда улучшать. Проблема тут в том, что полный тренировочный датасет не влезает в память GPU NVidia GTX 980, поэтому проверку разных новых фич приходится делать на усеченном до 20-50 тысяч пар наборе. Соответственно, обучение финальной модели для сабмита на полном датасете запускаю на CPU, а это примерно в 5-10 раз медленнее.

В общем, пока что так:Read more...Collapse )

Модель с xgboost для Quora Question Pair преодолела отметку logloss=0.285 на leaderboard
kelijah
И опять logloss на CV заметно хуже, чем получается после сабмита результатов на leaderboard.
Честно говоря, в умелых руках этот градиентный бустер может дать logloss 0.19, так что надо копать дальше.
Пока что новый результат с xgboost позволил немного всплыть - на 140е место из 2500 участников:Read more...Collapse )
А lightgbm (я взял питоновский биндинг) оказался еще более капризен в тюнинге, чем xgboost, придется с ним тщательно разобраться.

End-to-end deep learning решение для кагля "Quora Question Pairs"
kelijah
Чистое решение на сетке (python, Keras с theano backend).
На входе - цепочка символов и цепочка токенов для каждого вопроса в паре.
Внутри - 4 LSTM сетки и 4 сверточные сетки, которые сходятся затем на 6-слойном ReLU-перцептроне.
Вычислительный граф получился достаточно развесистый. Early stopping срабатывает примерно на 40 эпохе, что на моей GTX 980 выливается в сутки расчетов самой сетки и затем 8 часов рассчета сабмита.
Лучшая точность val_loss (10% от предоставленных тренировочных данных) получилась 0.2478.
Сабмит на leaderboard дал 0.28724. Достаточно сильный оверфит.
В итоге:
Read more...Collapse )
Будем копать дальше.

char-level сетка на LSTM + сверточные слои на кагле Quora Question Pairs
kelijah
Deep learning модель, использующая только цепочки символов, без привлечения каких-то сторонних ресурсов типа словарей, без балансировки весов классов, дала сейчас 0.33739 на leaderboard.

Это очень далеко от лидеров, примерно 700-е место. По поводу того, какие результаты дают другие модели в умелых руках, можно глянуть еще тут https://www.kaggle.com/c/quora-question-pairs/discussion/32325, так как leaderboard в топе показывает скорее всего только ансамбли.

По опыту использования модифированной loss-функции на сетке можно пару сотых выиграть, если обучаться не на базовой logloss из Keras. Но это я попробую потом, если будет время. Модель обучается примерно сутки на GTX 980, плюс еще почти час на генерацию сабмита.

Эта модель стоит в стеке с xgboost и factorization machine, и предварительные эксперименты показывают очень неплохую добавку в качество без явного переобучения. Посмотрим, что получится с новой версией.

?

Log in