Сеточная модель для определения части речи слова по его символьному представлению

Nov 08, 2016 11:42

Еще одна сеточная модель для 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% неверных тегов принадлежности к части речи на слово для тестового набора, который сетка не видела. Уверен, что большинство ошибок приходится на наречия.

Кривая обучения невероятно красива и правильна:


нейросети, морфологический разбор текста, Морфологический анализ, pos tagger, part-of-speech tagging, keras, python, частеречная разметка

Previous post Next post
Up