?

Log in

No account? Create an account

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

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

Previous Entry Share Next Entry
Condition random fields + word2vec + wordchar2vec для частеречной разметки без feature engineering'а
kelijah
Ингридиенты:
1) CRFSuite,  реализующий старый и добрый linear chain CRF
2) размеченный корпус для русского языка (например из Universal Dependencies)
3) набор векторов word2vec (я использую, как всегда, gensim, обучаемый на корпусе в ~150 Гб текстов разного характера, вплоть до блогов)
4) обученную модель wordchar2vec

Далее формируем обучающий корпус, используя компоненты векторов w2v и wc2v в качестве весов фич для CRF. Отрицательные и положительные значения компонентов бьем на отдельные фичи.

Обучаем и получаем при валидации точность около 95% на токен для русского языка.
Это при том, что тегами являются для значимых частей речи сочетания собственно части и речи и набора морфологических признаков. Никакого feature engineering'а, никаких сложных процедур выявления признаков слов. Для иллюстрации - фрагмент листинга с результатами валидации, видты эталонные метки (true=) и то, что выдает модель (pred=):

все                  true=PRON                                               pred=PRON
шло                  true=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Act pred=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Act
совсем               true=ADV                                                pred=ADV
не                   true=PART                                               pred=PART
так                  true=ADV                                                pred=ADV
,                    true=PUNCT                                              pred=PUNCT
как                  true=CONJ                                               pred=CONJ
хотелось             true=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid pred=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid
бы                   true=PART                                               pred=PART
.                    true=PUNCT                                              pred=PUNCT


электростанцию       true=NOUN|Case=Acc|Gender=Fem|Number=Sing               pred=NOUN|Case=Acc|Gender=Fem|Number=Sing
пустили              true=VERB|Mood=Ind|Number=Plur|Tense=Past|VerbForm=Fin|Voice=Act pred=VERB|Mood=Ind|Number=Plur|Tense=Past|VerbForm=Fin|Voice=Act
,                    true=PUNCT                                              pred=PUNCT
и                    true=CONJ                                               pred=CONJ
побережье            true=NOUN|Case=Nom|Gender=Neut|Number=Sing              pred=NOUN|Case=Loc|Gender=Neut|Number=Sing <-- ERROR
,                    true=PUNCT                                              pred=PUNCT
веками               true=NOUN|Case=Ins|Gender=Neut|Number=Plur              pred=NOUN|Case=Ins|Gender=Neut|Number=Plur
не                   true=PART                                               pred=PART
видевшее             true=ADJ|Case=Nom|Degree=Pos|Gender=Neut|Number=Sing    pred=ADJ|Case=Nom|Degree=Pos|Gender=Neut|Number=Sing
ничего               true=PRON                                               pred=PRON
подобного            true=ADJ|Case=Gen|Degree=Pos|Gender=Neut|Number=Sing    pred=ADJ|Case=Gen|Degree=Pos|Gender=Neut|Number=Sing
,                    true=PUNCT                                              pred=PUNCT
будто                true=PART                                               pred=CONJ <-- ERROR
переродилось         true=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid pred=VERB|Gender=Neut|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid
заново               true=ADV                                                pred=ADV
.                    true=PUNCT                                              pred=PUNCT



Исходник черновой реализации тренера: https://github.com/Koziev/chatbot/blob/master/PyModels/postagger/train_postagger.py