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

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

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

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

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

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

Постановка задачи

Модель должна определять, задан ли вопрос к заданному тексту, или нет. Например, пример релевантной пары:

T: 28-летний Алексей Орловецкий обвиняется в мошенничестве.
Q: В чем обвиняется Орловецкий?

Ответ в данной модели не рассматривается вообще, поэтому следующие варианты признаются релевантными (ответ приведен в качестве пояснения):

T: Тихонов остается в сборной до Олимпиады.
Q: Остается ли Тихонов в сборной?
A: Да

T: Начало матча сложилось для гостей неудачно.
Q: Удачным ли было начало матча для гостей?
A: Нет

Решение на XGBoost

Выбран максимально простой способ представления текста предпосылки и вопроса - через шинглы, то есть символьные N-граммы заданной длины, взятые из текста со смещением в 1 символ. Длина шинглов настраивается через переменную SHINGLE_LEN, и сейчас имеет значение 3.

В результате для одного предложения получается крайне разреженная матрица шириной около 10,000 столбцов, из которой только десяток или два заполнены. Далее делаем вот такую очевидную манипуляцию с векторами шинглов:


  ps = set(premise_shingles)
   qs = set(question_shingles)
   common_shingles = ps & qs
   notmatched_ps = ps - qs
   notmatched_qs = qs - ps


Получается разреженная матрица шириной примерно 30,000 столбцов. Именно она подается в качестве данных в XGBoost. Обычные вещи типа автоматического подбора количества шагов бустинга через early stopping в коде также есть.

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

?

Log in

No account? Create an account