Расшифровка SENNA Chunk, SRL и парсер вывода

Senna - это инструмент НЛП, построенный с использованием нейронных сетей, и он может делать:

  • POS-теги
  • Пометка NER
  • Пометка чанков
  • Маркировка меток семантической роли и
  • анализ

После загрузки предварительно скомпилированного пакета с http://ml.nec-labs.com/senna/download.html

Я управлял --help меню и посмотреть, какие есть варианты:

alvas@ubi:~/senna$ ./senna-linux64 --help
invalid argument: --help

SENNA Tagger (POS - CHK - NER - SRL)
(c) Ronan Collobert 2009

Usage: ./senna-linux64 [options]

 Takes sentence (one line per sentence) on stdin
 Outputs tags on stdout
 Typical usage: ./senna-linux64 [options] < inputfile.txt > outputfile.txt

Display options:
  -h             Display this help
  -verbose       Display model informations on stderr
  -notokentags   Do not output tokens
  -offsettags    Output start/end offset of each token
  -iobtags       Output IOB tags instead of IOBES
  -brackettags   Output 'bracket' tags instead of IOBES

Data options:
  -path <path>   Path to the SENNA data/ and hash/ directories [default: ./]

Input options:
  -usrtokens     Use user's tokens (space separated) instead of SENNA tokenizer

SRL options:
  -posvbs        Use POS verbs instead of SRL style verbs for SRL task
  -usrvbs <file> Use user's verbs (given in <file>) instead of SENNA verbs for SRL task

Tagging options:
  -pos           Output POS
  -chk           Output CHK
  -ner           Output NER
  -srl           Output SRL
  -psg           Output PSG

Интерфейс командной строки прост, и выходные данные для тегов POS и NER также легко интерпретируются.

Учитывая этот вклад:

alvas@ubi:~/senna$ cat test.in
Foo went to eat bar at the Foobar.

Это из стандартного набора тегов Penn Treebank:

alvas@ubi:~/senna$ ./senna-linux64 -pos < test.in
            Foo        NNP
           went        VBD
             to         TO
            eat         VB
            bar         NN
             at         IN
            the         DT
         Foobar        NNP
              .          .

И это БИО теги:

alvas@ubi:~/senna$ ./senna-linux64 -ner < test.in
            Foo      S-PER
           went          O
             to          O
            eat          O
            bar          O
             at          O
            the          O
         Foobar      S-LOC
              .          O

И для чанкинга это также своего рода набор тегов BIOE, к которому мы привыкли:

alvas@ubi:~/senna$ ./senna-linux64 -chk < test.in
            Foo       S-NP
           went       B-VP
             to       I-VP
            eat       E-VP
            bar       S-NP
             at       S-PP
            the       B-NP
         Foobar       E-NP
              .          O

Но что S- теги значат? Кажется, что он привязан только к токенам, которые являются единичными токенами, это правда?

Теги SRL немного странные, они представляют собой множественные аннотации на токен:

alvas@ubi:~/senna$ ./senna-linux64 -srl < test.in
            Foo               -       S-A1        S-A0
           went            went        S-V           O
             to               -   B-AM-PNC           O
            eat             eat   I-AM-PNC         S-V
            bar               -   I-AM-PNC        S-A1
             at               -   I-AM-PNC    B-AM-LOC
            the               -   I-AM-PNC    I-AM-LOC
         Foobar               -   E-AM-PNC    E-AM-LOC
              .               -          O           O

Похоже на "кортежные" выходные данные, которые мы получаем из семантических фреймов, но я не понимаю соглашений, например, что такое -AM-? что такое -PNC?

Что означает результат и как мы должны его интерпретировать?

И для вывода Parser:

alvas@ubi:~/senna$ ./senna-linux64 -psg < test.in
            Foo (S1(S(NP*)
           went (VP*
             to (S(VP*
            eat (VP*
            bar (ADVP*)
             at (PP*
            the (NP*
         Foobar *))))))
              . *))

Похоже, вывод разбора в скобках мы видим при разборе, но что делает * имею в виду?

1 ответ

Решение

SENNA использует формат CoNLL. Вы можете прочитать об этом здесь: http://universaldependencies.github.io/docs/format.html

Это довольно распространенное явление, и вокруг немало конвертеров.

Что касается префиксов, они означают: S-синглтонные выражения и B- начало I- промежуточный E-конец выражения из нескольких слов.

Затем есть выход семантической роли маркировки. Ищите больше информации о SRL, поскольку это становится немного более сложным. Обратите внимание, что есть два столбца, один для глагола идти и один для глагола есть. Обычно А0 является субъектом, а А1 - прямым объектом (опять же, упрощенно). AM - модификатор аргумента, а -LOC - местоположение (это могут быть другие наречия). Похоже, что PNC относится к суррогатной фразе, являющейся объектом глагола go. Не помню из головы. Примеры здесь verbs.colorado.edu/propbank/framesets-english/go-v.html Что касается дерева разбора, оно заключено в квадратные скобки, а также является общей нотацией, свободно навеянной Lisp. Символ * обозначает метку текущего токена. Я нашел это полезным: https://math.stackexchange.com/questions/588230/how-to-convert-parentheses-notation-for-trees-into-an-actual-tree-drawing

Другие вопросы по тегам