Еще одна сеточная модель для char-based language modeling.
Для произвольной цепочки символов пытаемся определить, к какой части речи это слово относится.
Чтобы упростить задачу без ущерба для практического использования, введем несколько упрощений.
1. Слова в нижнем регистре.
2. Максимальная длина слова - 29 символов.
3. Определяем только принадлежность к классам глаголов, инфинитивов (отдельно от глаголов), деепричастий, прилагательных (и причастий) и наречий.
Массив данных выгружается запросом из
SQL русской словарной базы.
На питоне с использованием
Keras написана сеточная модель c двумя полносвязными слоями, без регуляризаций и т.д.
model = Sequential()
model.add( Dense( input_dim=max_word_len*bits_per_char, output_dim=256, activation='sigmoid' ) )
model.add( Dense( output_dim=dataset.nclass, activation='sigmoid' ) )
opt = keras.optimizers.Adagrad(lr=0.05, epsilon=1e-08)
model.compile( loss='mean_squared_error', optimizer=opt )
history = model.fit( X_train, y_train, validation_data=(X_test,y_test), batch_size=BATCH_SIZE, nb_epoch=N_EPOCH0 )
Входная цепочка символов разворачивается в длинный бинарный вектор длиной чуть менее 1000, каждый символ в котором представлен 1-hot вектором.
Достигаемая точность - около 3.3% неверных тегов принадлежности к части речи на слово для тестового набора, который сетка не видела. Уверен, что большинство ошибок приходится на наречия.
Кривая обучения невероятно красива и правильна: