Лемматизация немецких глаголов с корпусом Tiger

Недавно я тренируюсь построить сервис для лемматизации немецких слов.

Я нашел очень хорошую статью здесь

После того, как я проделал все шаги, описанные в статье, мой сервис работает неплохо, но во время тестирования я заметил, что некоторые глаголы не могут быть преобразованы в инфинитивную форму.

Например. кочст -> кочен. Основная причина в том, что мой POS-теггер дает мне ADV для 'kochst', тогда как должен VVFIN или, по крайней мере, V ... поскольку это глагол.

Я также обнаружил, что исходный файл корпуса TIGER не содержит формы kochst, а содержит только kocht.

Я не знаком с форматом conll, но добавил одну дополнительную строку, которая показана ниже

50475_11    kochst  kochen  _   VVFIN   _   number=sg|person=2|tense=pres|mood=ind  _   0   _   --  _   _   _   _

и безуспешно переобучил теггер, см. листинг ниже

>>> import nltk
>>> corp = nltk.corpus.ConllCorpusReader('.', 'tiger_release_aug07.corrected.16012013.conll09',
...                                      ['ignore', 'words', 'ignore', 'ignore', 'pos'],
...                                      encoding='utf-8')
>>> 
>>> tagged_sents = corp.tagged_sents()
>>> 
>>> from ClassifierBasedGermanTagger.ClassifierBasedGermanTagger import ClassifierBasedGermanTagger
>>> tagger = ClassifierBasedGermanTagger(train=tagged_sents)
>>> tagger.tag(['kochst'])
[('kochst', u'ADV')]
>>> 
>>> 
>>> tagged_sents[-1]
[(u'kochst', u'VVFIN')]

Так что, возможно, я неправильно добавил запись kochst, или корпус TIGER не завершен (я обнаружил, что многих глаголов в форме от второго лица нет), или я просто чего-то здесь не понимаю, как обучить POS tagger возвращать глагол для спряженные глаголы.

'kochst' просто пример, я думаю, что многие другие глаголы не могут быть распознаны

>>> tagger.tag(['fahre'])
[('fahre', u'XY')]
>>> tagger.tag(['musst'])
[('musst', u'PPER')]

person andymur    schedule 10.03.2019    source источник


Ответы (1)


TIGER содержит только газетный текст, поэтому глаголов, не принадлежащих к третьему лицу, не так много. Статистическая модель не сможет многое узнать о едва заметных окончаниях глаголов.

Что может помочь:

  • Выберите лучший теггер. Тот, который вы упомянули, имеет несколько ограниченный набор функций, особенно с точки зрения префиксов и суффиксов. Я не знаком со всеми опциями в NLTK (могут быть и такие, которые одинаково хороши), но в качестве альтернативы я бы предложил попробовать сурка для тегирования, а также лемминга для лемматизации из http://cistern.cis.lmu.de, которые относительно быстрые и простые в использовании. Существует также множество новых подходов к тегам, которые могут быть немного лучше, но трудно сказать, как они сравниваются, потому что многие недавние оценки основаны на корпусе UD German, который, к сожалению, имеет аннотации относительно низкого качества.

  • Тегеры полагаются на контекст, поэтому, когда вы добавляете новые обучающие данные, это помогает добавлять целые предложения или, по крайней мере, целые фразы.

  • Даже большой корпус с ручными аннотациями не будет охватывать большое количество словоформ, поэтому лексические ресурсы очень полезны для лемматизации. Я бы посмотрел на Zmorge, морфологический анализатор, основанный на данных из немецкого викисловаря. Если ваша основная цель - лемматизация, я бы рекомендовал начать с чего-то вроде Zmorge и отступить от статистических моделей для неоднозначных или невидимых слов.

person aab    schedule 12.03.2019