yasuokaの日記: ポルトガル語と日本語の係り受け解析エンジンとしてのUDPipe
昨日のspaCyポルトガル語モデルがイマイチだったので、ゴールデンウィーク4日目はUDPipeを試してみることにした。LINDAT/CLARINのサーバAPIを使えば、UDPipeはインストール不要なので、ちょっとだけクラス定義してみよう。
% python3
>>> class UDPipe:
... def __init__(self,lang):
... self._url="http://lindat.mff.cuni.cz/services/udpipe/api/process?model="+lang+"&tokenizer&tagger&parser"
... def __call__(self,text):
... import urllib.parse,urllib.request,json
... with urllib.request.urlopen(self._url+"&data="+urllib.parse.quote(text)) as r:
... q=r.read()
... return(json.loads(q)["result"])
...
>>>
これで、UDPipeの全ての言語モデルが使えるはずだ。とりあえず、日本語モデルを使って「笑顔で彼は座った」を係り受け解析してみよう。
>>> ja=UDPipe("ja")
>>> s=ja("笑顔で彼は座った")
>>> print(s)
# newdoc
# newpar
# sent_id = 1
# text = 笑顔で彼は座った
1 笑顔 笑顔 NOUN NN _ 5 obl _ SpaceAfter=No
2 で で ADP PS _ 1 case _ SpaceAfter=No
3 彼 彼 PRON NP _ 5 nsubj _ SpaceAfter=No
4 は は ADP PK _ 3 case _ SpaceAfter=No
5 座っ 座る VERB VV _ 0 root _ SpaceAfter=No
6 た た AUX AV _ 5 aux _ SpaceAfter=No
SVGで可視化すると、こんな感じ。私(安岡孝一)の見る限り、変な部分は特に見当たらず、完璧に解析できていると思う。
次に、ポルトガル語モデルで「Ele se sentou com um sorriso no rosto」を係り受け解析してみよう。
>>> pt=UDPipe("pt")
>>> s=pt("Ele se sentou com um sorriso no rosto")
>>> print(s)
# newdoc
# newpar
# sent_id = 1
# text = Ele se sentou com um sorriso no rosto
1 Ele _ PRON PRON _ 3 nsubj _ _
2 se _ PRON PRON _ 3 obj _ _
3 sentou sentar VERB VERB _ 0 root _ _
4 com _ ADP ADP _ 6 case _ _
5 um _ DET DET _ 6 det _ _
6 sorriso sorriso NOUN NOUN _ 3 nmod _ _
7-8 no _ _ _ _ _ _ _ _
7 en en ADP ADP _ 9 case _ _
8 o o DET DET Definite=Def|Gender=Masc|Number=Sing|PronType=Art 9 det _ _
9 rosto rosto NOUN NOUN _ 6 nmod _ SpaceAfter=No
SVGで可視化すると、こんな感じ。「no」が、ちゃんとADP(前置詞)とDET(冠詞)に分かれていて、素晴らしい。惜しむらくは「sentou」─nmod→「sorriso」のリンクで、そこはnmodじゃなくoblのはずだ。そこを除けば、ほぼ完璧に解析できているのに、非常に惜しい。
こんな風にUniversal Dependenciesを用いれば、言語間の比較分析が、かなり容易になる。上の例に則して言えば、「彼」←nsubj─「座っ」という係り受けが、そのまま「Ele」←nsubj─「sentou」という係り受けに対応している。一方、「彼」─case→「は」という係り受けは、この例では日本語固有だし、「se」←obj─「sentou」という係り受けはポルトガル語固有だ。ただ、現在のAI自然言語処理の主流は、むしろend-to-endの翻訳にあって、こういう言語間の比較分析ってのは、あまり顧みられていない気がする。それとも、言語間の比較分析にAIを使うのは、すでに当たり前のことであって、研究する必要すらないのかしら?
ポルトガル語と日本語の係り受け解析エンジンとしてのUDPipe More ログイン