yasuokaの日記: 「It values, instead, its good men.」のitsは、itとsに分かれるのか
StanfordNLPのen_ewtモデル0.2.0で、James Leggeの『大學』を係り受け解析していたところ、「It values, instead, its good men.」という文で、妙な結果が出ていることに気づいた。
% python3
>>> import stanfordnlp
>>> en=stanfordnlp.Pipeline(lang="en",treebank="en_ewt")
>>> s=en("It values, instead, its good men.")
>>> print(s.conll_file.conll_as_string())
1 It it PRON PRP Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs 2 nsubj _ _
2 values value VERB VBZ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 0 root _ _
3 , , PUNCT , _ 2 punct _ _
4 instead instead ADV RB _ 9 advmod _ _
5 , , PUNCT , _ 9 punct _ _
6 it it PRON PRP Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs 9 nsubj _ _
7 s be AUX VBZ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 9 cop _ _
8 good good ADJ JJ Degree=Pos 9 amod _ _
9 men man NOUN NNS Number=Plur 2 ccomp _ _
10 . . PUNCT . _ 2 punct _ _
「CoNLL-U SVG Editor」で可視化してみると、こんな感じ。「its」が「it」と「s」に分かれてしまっている。どうも「its」を「it's」と勘違いしていて、その結果、ワケの分からない解析結果になっているようだ。StanfordNLPの英語モデルには、en_gumモデル0.2.0もあるので、ちょっと比較してみよう。
% python3
>>> import stanfordnlp
>>> eng=stanfordnlp.Pipeline(lang="en",treebank="en_gum")
>>> s=eng("It values, instead, its good men.")
>>> print(s.conll_file.conll_as_string())
1 It it PRON PRP Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs 2 nsubj _ _
2 values value VERB VBZ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 0 root _ _
3 , , PUNCT , _ 8 punct _ _
4 instead instead ADV RB _ 8 advmod _ _
5 , , PUNCT , _ 4 punct _ _
6 its its PRON PRP$ Gender=Neut|Number=Sing|Person=3|Poss=Yes|PronType=Prs 8 nmod:poss _ _
7 good good ADJ JJ Degree=Pos 8 amod _ _
8 men man NOUN NNS Number=Plur 2 obj _ _
9 . . PUNCT . _ 2 punct _ _
「CoNLL-U SVG Editor」で可視化してみると、こんな感じ。まあまあイイ感じに解析できている。だとすると、StanfordNLPの問題というよりは、言語モデルen_ewtの方の問題なのだろうけど、さて、こういうの、どうしたらいいんだろ?
「It values, instead, its good men.」のitsは、itとsに分かれるのか More ログイン