Нейросетевые модели для определения перефразировок вопросов (8)

Jul 04, 2017 10:49

[начало тут http://kelijah.livejournal.com/212124.html]

1.1 Простейший multilayer perceptron

Для начала попробуем развернуть список векторов символов предложения в один длинный вектор (очень длинный). Этот длинный вектор, точнее пара векторов для обоих вопросов, затем анализируется несколькими простыми полносвязными слоями. Получается незамысловатая feed forward сетка:



Будем использовать результаты этой сетки как грубую нижнюю оценку наших ожиданий для более продвинутых моделей.

Достаточно быстро выясняется, что это самая быстрая модель среди всех рассматриваемых. Ее даже можно обучать на CPU! Но это ее единственное достоинство, так как она самая неточная, и крайне склонна к переобучению. Последнее свойство отвечает на вопрос, зачем вообще нужны всякие сложные архитектуры, которые используются в других моделях.

У этой сетки есть еще одно любопытное свойство. Модель в ходе обучения отрабатывает только 5-8 эпох, а затем validation loss перестает улучшаться и после нескольких эпох срабатывает early stopping (см. https://keras.io/callbacks/). Остальные модели обучаются намного дольше - по 10-30 эпох. Выглядит кривая обучения примерно так:


Исходный текст модели - файл https://github.com/Koziev/QuoraQuestionPairs/blob/master/final_char_solver_0.py
Длительность обучения ~6 эпох, 10 минут
val_loss=0.3336
public_score=0.3868

Для сравнения аналогичная архитектура нейросети, но на уровне слов, достигает точности ~0.29 при валидации в ходе обучения и дает примерно 0.33 при сабмите. Файл этой модели - https://github.com/Koziev/QuoraQuestionPairs/blob/master/final_word_solver_0.py.

В качестве эксперимента я сделал feed forward модель с добавочными слоями, реализующими “внимание” (см. https://github.com/Koziev/QuoraQuestionPairs/blob/master/final_char_solver_0_attention.py). Но этот механизм не дает никакой прибавки в точность и сходимость модели.

нейросети, character language model, python, neuronet, machine learning

Previous post Next post
Up