Расшифровка 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