yasuokaの日記: 英語係り受け解析エンジンとしてのUDPipe・StanfordNLP・NLP-Cube
ゴールデンウィークの手始めに、UDPipeとStanfordNLPとNLP-Cubeで「He sat down with smiling face」という英文を解析してみた。この英文は、微妙に曖昧な部分があって、それが結果に表れてきたのだが、とりあえず現状を私(安岡孝一)の日記に記録しておくことにする。
まずはUDPipe。いつものようにLINDAT/CLARINのサーバAPIを使うことにしよう。
% python3
>>> import urllib.parse,urllib.request,json
>>> with urllib.request.urlopen("http://lindat.mff.cuni.cz/services/udpipe/api/process?model=en&tokenizer&tagger&parser&data="+urllib.parse.quote("He sat down with smiling face")) as r:
... q=r.read()
...
>>> print(json.loads(q)["result"])
# newdoc
# newpar
# sent_id = 1
# text = He sat down with smiling face
1 He he PRON PRP Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs 2 nsubj _ _
2 sat sit VERB VBD Mood=Ind|Tense=Past|VerbForm=Fin 0 root _ _
3 down down ADP RP _ 2 compound:prt _ _
4 with with SCONJ IN _ 5 mark _ _
5 smiling smile VERB VBG VerbForm=Ger 2 advcl _ _
6 face face NOUN NN Number=Sing 5 obj _ SpaceAfter=No
SVGで可視化すると、こんな感じ。sat─advcl→smilingが特徴的である。
次にStanfordNLP。インストールは済ませてあることにしよう。
% python3
>>> import stanfordnlp
>>> en=stanfordnlp.Pipeline(lang="en")
>>> s=en("He sat down with smiling face")
>>> print(s.conll_file.conll_as_string())
1 He he PRON PRP Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs 2 nsubj _ _
2 sat sit VERB VBD Mood=Ind|Tense=Past|VerbForm=Fin 0 root _ _
3 down down ADV RB _ 2 advmod _ _
4 with with ADP IN _ 6 case _ _
5 smiling smile VERB VBG VerbForm=Ger 6 amod _ _
6 face face NOUN NN Number=Sing 2 obl _ _
SVGで可視化すると、こんな感じ。smiling←amod─faceという、まあ普通の結果である。
そしてNLP-Cube。先日発表された英語モデル1.1を使うことにしよう。
% python3
>>> import cube.api,cube.io_utils.conll
>>> en=cube.api.Cube()
>>> en.load("en",1.1)
>>> d=cube.io_utils.conll.Dataset()
>>> d.sequences=en("He sat down with smiling face")
>>> d.write_stdout()
1 He he PRON PRP Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs 2 nsubj _ _
2 sat sit VERB VBD Mood=Ind|Tense=Past|VerbForm=Fin 0 root _ _
3 down down ADP RB _ 2 compound:prt _ _
4 with with ADP IN _ 6 case _ _
5 smiling smile VERB VBG VerbForm=Ger 6 compound _ _
6 face face NOUN NN Number=Sing 2 obl _ SpaceAfter=No
SVGで可視化すると、こんな感じ。smiling←compound─faceとなっているあたり、☺のバッジか何か付けてるのだろうか。
こういう感じで「He sat down with smiling face」という英文ひとつ取ってみても、かなり色々な解釈が有りうる。UDPipeとStanfordNLPの結果は、この場合、構文上の解釈は異なっているものの、意味するところはほぼ同じだと思われる。一方、StanfordNLPとNLP-Cubeは、構文上の解釈は似ているものの、意味するところは違う気がする。このあたりの曖昧性に際して、どうやって他の情報(たとえば前後の文章)から曖昧さを減らしていくか、それが自然言語処理の醍醐味なのだと思う。
英語係り受け解析エンジンとしてのUDPipe・StanfordNLP・NLP-Cube More ログイン