パスワードを忘れた? アカウント作成
13897686 journal
アメリカ合衆国

yasuokaの日記: 英語係り受け解析エンジンとしてのUDPipe・StanfordNLP・NLP-Cube

日記 by yasuoka

ゴールデンウィークの手始めに、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は、構文上の解釈は似ているものの、意味するところは違う気がする。このあたりの曖昧性に際して、どうやって他の情報(たとえば前後の文章)から曖昧さを減らしていくか、それが自然言語処理の醍醐味なのだと思う。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

アレゲはアレゲを呼ぶ -- ある傍観者

読み込み中...