Работоспособная chars2vector модель для получения word2vector встраивания для любой цепочки символов

Jun 03, 2016 09:52

Продолжение темы http://kelijah.livejournal.com/185930.html

Проверена модифицированная модель chars2vector.
На входе - слова как цепочки символов.
Цепочка кодируется набором LSTM ячеек, на последнем символе получаем некий вектор.
Следующий слой учится отображать этот вектор на вектор из word2vector модели.
На keras модель описана так:

model = Sequential()

model.add( Masking(mask_value=0,input_shape=(max_word_len,bits_per_char)) )

model.add( RNN( RNN_VECTOR_SIZE, input_shape=(max_word_len, bits_per_char) ) )

model.add(Dense(wordvec_len))
model.add(Activation("tanh"))

Таким образом, для любой последовательности символов модель учится строить максимально близкий вектор word2vector. Если теперь брать слова, получать для них вектор через эту модель, и искать 10 самых близких по косинусу слов в word2vector, то получается такая интересная картина:

Word: кошка
девка ==> 0.98173658397
корова ==> 0.979753070025
девчонка ==> 0.979318570901
телега ==> 0.978716706956
гора ==> 0.978677921493
палка ==> 0.978012272063
рыбка ==> 0.977921670641
коза ==> 0.977812729089
кобыла ==> 0.977692763944
веревка ==> 0.977583233176
сумка ==> 0.97720324375

Word: кошку
девчонку ==> 0.980560115685
корову ==> 0.980085126761
штуку ==> 0.979641027843
игрушку ==> 0.979283974002
девку ==> 0.979218128065
бабу ==> 0.978844087705
горку ==> 0.978046263166
монетку ==> 0.977407108586
пушку ==> 0.977146251014
тачку ==> 0.976883655794
куклу ==> 0.9767133492

Word: кошкой
бабой ==> 0.972231082859
коровой ==> 0.966105330876
лошадью ==> 0.965655781552
девицей ==> 0.962967855721
куклой ==> 0.96199226518
курицей ==> 0.961599314819
сосной ==> 0.960857429893
газетой ==> 0.959350852056
кошкой ==> 0.958929029705
шляпой ==> 0.958550117491
дамой ==> 0.958443997648

Word: кошке
балке ==> 0.967184329373
речке ==> 0.96596149497
палатке ==> 0.964058406747
миске ==> 0.964042218948
куче ==> 0.963738538081
сене ==> 0.962208683377
яме ==> 0.961586282676
луже ==> 0.961581808809
коробочке ==> 0.961298503755
лавке ==> 0.961253375856
беседке ==> 0.960996186595

Word: кошек
цыган ==> 0.9798552318
пастухов ==> 0.978310250365
ягод ==> 0.976614656387
парней ==> 0.975282735774
хвостов ==> 0.975247010368
голов ==> 0.975141318572
орехов ==> 0.974822765023
яблок ==> 0.974604518599
фруктов ==> 0.974551159493
ворон ==> 0.974377523222
змей ==> 0.974361004315

Word: кошкам
бабам ==> 0.959307397311
отрядам ==> 0.958488623983
участкам ==> 0.954776138565
машинам ==> 0.949511808854
товарам ==> 0.949434315983
подразделениям ==> 0.948874981917
автомобилям ==> 0.948318223842
сетям ==> 0.948008684974
коням ==> 0.9478211798
мужикам ==> 0.947674354749
цветам ==> 0.947497643247

Word: кошкасто
открыто ==> 0.980809800958
страшно ==> 0.97982695978
холодно ==> 0.979585290769
опасно ==> 0.979570960904
мало ==> 0.978541427658
да__и ==> 0.978267841397
глупо ==> 0.978227771915
трудно ==> 0.978206285154
тихо ==> 0.978161831399
видно ==> 0.977533332122
хотя ==> 0.976851019682

Word: кошачиться
помолчать ==> 0.961220776293
расслабляться ==> 0.959202166857
замерзнуть ==> 0.958849645884
напрягаться ==> 0.958283588321
спешить ==> 0.958243275974
мучиться ==> 0.957347044578
шевелиться ==> 0.956464088207
поспать ==> 0.956018092725
поправиться ==> 0.95594694009
разойтись ==> 0.955937365024
голодать ==> 0.955788590551

Word: кошачусь
засну ==> 0.951927888577
встану ==> 0.945641501682
кричу ==> 0.944804814666
разберусь ==> 0.941936587586
сбегаю ==> 0.9416994287
помру ==> 0.940303378191
поднимусь ==> 0.940278477432
встанешь ==> 0.939812058019
посижу ==> 0.938986423164
сяду ==> 0.93855955878
спишь ==> 0.938280879942

Word: кошачила
выручила ==> 0.960187838609
заменила ==> 0.960107397685
догнала ==> 0.959417691742
погубила ==> 0.958620474387
отняла ==> 0.958239300004
тянула ==> 0.957643474096
перехватила ==> 0.957638362746
захватила ==> 0.957347986022
одолела ==> 0.956783028136
успокаивала ==> 0.955780929331
обманула ==> 0.955701970832

Word: кошачесобачий
объективный ==> 0.945630513818
печальный ==> 0.945542385664
естественный ==> 0.944752911347
скорбный ==> 0.944096343534
непонятный ==> 0.943935078152
удивительный ==> 0.943540299008
воинственный ==> 0.943433076925
религиозный ==> 0.943370558971
беспокойный ==> 0.943259955073
суровый ==> 0.943152912232
загадочный ==> 0.942915554132

Word: кошачеобразнее
откровеннее ==> 0.926958714248
серьезней ==> 0.926018458272
напряженнее ==> 0.922371010637
значительнее ==> 0.920421731989
реальнее ==> 0.916024163634
честнее ==> 0.91334655378
убедительнее ==> 0.913312814955
интересней ==> 0.912730282048
благороднее ==> 0.912394834635
скучнее ==> 0.91206009812
сдержаннее ==> 0.91058954684

Word: наикошачейший
действительный ==> 0.920866843936
идейный ==> 0.920485319416
лирический ==> 0.919080942766
редкостный ==> 0.916683222916
поразительный ==> 0.916572519994
законченный ==> 0.916347454301
зеркальный ==> 0.913156114634
ничтожный ==> 0.913073089904
безупречный ==> 0.912286104378
теперешний ==> 0.912126737928
кавказский ==> 0.91183549157

То есть, модель очень неплохо выявляет те грамматические свойства слов, которые прямо вытекают из морфем (точнее, окончаний и суффиксов, с префиксами сложнее). Корень ускользает от ее внимания. таким образом, задача получения векторов для несловарных элементов решена частично. Надо еще научиться учитывать корни, в том числе в составных словах типа "краноремонтный" и "котопес".

нейросети, vector space model, Морфологический анализ, deep learning, lstm, keras, rnn, vector model, рекуррентные сети, char-rnn, word2vec, морфология, word embedding

Previous post Next post
Up