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

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

Previous Entry Share Next Entry
Изменения в модели wordchar2vector (посимвольный рекуррентный автоэнкодер)
kelijah
Подробное описание модели: https://github.com/Koziev/chatbot/blob/master/PyModels/trainers/README.wordchar2vector.md
Исходники выложены в репо https://github.com/Koziev/chatbot, в частности код тренера и скрипт запуска обучения.

1. Посмотрев на исходники проекта ELMo (Tensorflow implementation of contextualized word representations from bi-directional language models)
в части архитектуры для сверточной части, я сделал для каждой группы сверточных элементов разное число фильтров. То есть вместо:

            nb_filters = 32

            for kernel_size in range(1, 4):
                conv_layer = Conv1D(filters=nb_filters,
                                    kernel_size=kernel_size,
                                    padding='valid',
                                    activation='relu',
                                    strides=1,
                                    name='shared_conv_{}'.format(kernel_size))(encoder)



теперь код выглядит так:

            for kernel_size, nb_filters in [(1, 16), (2, 32), (3, 64), (4, 128)]:
                conv_layer = Conv1D(filters=nb_filters,
                                    kernel_size=kernel_size,
                                    padding='valid',
                                    activation='relu',
                                    strides=1,
                                    name='shared_conv_{}'.format(kernel_size))(encoder)



Заодно добавлены символьные тетраграммы. Увеличение кол-ва фильтров по мере увеличения "размаха" свертки отражает тот простой факт, что разных 3-грамм больше, чем 2-грамм, и так далее.

2. Оптимизация скорости заменой LSTM на GRU. Во многих местах (см. например Skip-Thoughts Vectors) утверждается, что для NLP задач GRU дает сопоставимую точность при меньшем количестве свободных параметров. Пробные запуски тренировки wordchar2vector с опцией --arch 'gru(cnn)' в общем это подтверждают.

3. Сделана попытка (не очень эффективная) улучшить сходимость в случае выхода на плато. Когда срабатывает early stopping (по умолчанию 20 эпох без улучшения точности), уменьшаем batch_size в два раза и продолжаем обучение. По задумке меньший размер batch_size должен увеличить стохастичность усредненного градиента и помочь выйти из локального минимума. На практике эффект получился совсем мизерный.

?

Log in

No account? Create an account