パスワードを忘れた? アカウント作成

yasuokaさんのトモダチの日記みんなの日記も見てね。 あなたのタレコミがスラドを支えます。さぁ、タレこめ!

14956436 journal
人工知能

yasuokaの日記: GLA (Gaelic Linguistic Analyser)でスコットランド・ゲール語の係り受け解析

日記 by yasuoka

ネットサーフィンしていたところ、GLA (Gaelic Linguistic Analyser)というツールを見つけた。ざっと読んでみたところ、curl一発でスコットランド・ゲール語の品詞付与や係り受け解析がおこなえるらしい。とりあえず、「Innsidh na geòidh as t-fhoghar e.」という文を、係り受け解析してみよう。

$ curl https://klc.vdu.lt/sgtoolkit/parser -d 'Innsidh na geòidh as t-fhoghar e.'
# newpar id = 1
# sent_id = 1
# text = Innsidh na geòidh as t- fhoghar e .
1    Innsidh    innis    VERB    V-f    Tense=Fut|VerbForm=Fin    0    root    _    _
2    na    na    DET    Tdpm    Definite=Def|PronType=Art    3    det    _    _
3    geòidh    gèadh    NOUN    Ncpmn    Case=Nom|Gender=Masc|Number=Plur    1    nsubj    _    _
4    as    as    ADP    Spa-s    _    6    case    _    _
5    t-    t-    PART    Uo    _    6    case    _    _
6    fhoghar    fhoghar    NOUN    Ncsmd    Case=Dat|Gender=Masc|Number=Sing    3    obl    _    _
7    e    e    PRON    Pp3sm    Gender=Masc|Number=Sing|Person=3|PronType=Prs    1    obj    _    _
8    .    .    PUNCT    Fe    _    1    punct    _    _

SVGで可視化すると、こんな感じ。「geòidh」=obl⇒「fhoghar」については、私(安岡孝一)自身は納得がいかない(「Innsidh」=obl⇒「fhoghar」にすべきだと思う)が、それを除けば非常に良い。スコットランド・ゲール語の解析は、StanzaUDPipeもイマイチ精度が上がらないので、GLAを使っていくべきかな。

14951606 journal
Google

yasuokaの日記: LINGUAKITのガリシア=ポルトガル語係り受け解析をGoogle Colaboratoryで動かす

日記 by yasuoka

ネットサーフィンしていたところ、サンティアゴ・デ・コンポステーラ大学のGrupo de Gramática do Españolが製作したLINGUAKITという文法解析ツールを見つけた。ガリシア語・ポルトガル語・スペイン語・英語に加え、ガリシア=ポルトガル語(ガリシア語とポルトガル語の共通祖語)まで解析できるらしい。とりあえず、Google Colaboratory上で、LINGUAKITのガリシア=ポルトガル語係り受け解析を試してみよう。

!test -d Linguakit || git clone --depth=1 https://github.com/citiususc/Linguakit
!test -x /usr/local/bin/linguakit || ( cd Linguakit && echo yes | make deps && make install )
!echo Rogo vos eu que nunca lhi faledes sen mi, ai filha fremosa. | linguakit dep histgz -conll

「Rogo vos eu que nunca lhi faledes sen mi, ai filha fremosa.」を係り受け解析してみたところ、私(安岡孝一)の手元では、以下の結果が得られた。

1    Rogo    rogar    VERB    0    <gender:0|lemma:rogar|mode:I|nomin:no|number:S|person:1|pos:0|tense:P|token:Rogo|type:M|>    ROOT    ROOT:0
2    vos    vos    PRO    1    <case:D|gender:C|lemma:vos|number:P|person:2|politeness:0|pos:1|possessor:0|token:vos|type:P|>    DobjR    DobjR:1
3    eu    eu    PRO    1    <case:N|gender:C|lemma:eu|number:S|person:1|politeness:0|pos:2|possessor:0|token:eu|type:P|>    DobjR    DobjR:1
4    que    que    CONJ    7    <lemma:que|pos:3|token:que|type:S|>    SpecL    SpecL:7
5    nunca    nunca    ADV    7    <lemma:nunca|pos:4|token:nunca|type:G|>    AdjnL    AdjnL:7
6    lhi    lhi    NOUN    7    <gender:0|lemma:lhi|number:0|person:3|pos:5|token:lhi|type:C|>    SubjL    SubjL:7
7    faledes    falar    VERB    1    <adsubj:yes|gender:0|lemma:falar|mode:S|nomin:no|number:P|person:2|pos:6|tense:P|token:faledes|type:M|>    DobjR    DobjR:1
8    sen    sen    PRP    7    <lemma:sen|pos:7|token:sen|type:P|>    CircR    CircR:7
9    mi    mi    NOUN    8    <gender:M|lemma:mi|number:S|person:3|pos:8|token:mi|type:C|>    Term    Term:8
10    ,    ,    Fc    _    <lemma:,|pos:9|token:,|>    _    _
11    ai    ai    NOUN    0    <gender:M|lemma:ai|number:S|person:3|pos:10|token:ai|type:C|>    ROOT    ROOT:0
12    filha    filho    ADJ    13    <degree:0|function:0|gender:F|lemma:filho|number:S|pos:11|token:filha|type:Q|>    AdjnL    AdjnL:13
13    fremosa    fremosa    NOUN    11    <gender:0|lemma:fremosa|number:0|person:3|pos:12|token:fremosa|type:C|>    AdjnR    AdjnR:11
14    .    .    SENT    _    <lemma:.|pos:13|token:.|>    _

deplacy風に表示すると、以下のような感じ。

Rogo    VERB ═╗═╗═══════╗ ROOT
vos     PRO  <╝ ║       ║ DobjR
eu      PRO  <══╝       ║ DobjR
que     CONJ <════════╗ ║ SpecL
nunca   ADV  <══════╗ ║ ║ AdjnL
lhi     NOUN <════╗ ║ ║ ║ SubjL
faledes VERB ═══╗═╝═╝═╝<╝ DobjR
sen     PRP  ═╗<╝         CircR
mi      NOUN <╝           Term
,       Fc
ai      NOUN ═══╗         ROOT
filha   ADJ  <╗ ║         AdjnL
fremosa NOUN ═╝<╝         AdjnR
.       SENT

タグが独特で、かなり読みにくい。ただ、「eu」はどう考えても「rogo」(rogarの一人称単数直接法現在)の主語なので、「Rogo」=DobjR⇒「eu」ではなく、「Rogo」=SubjR⇒「eu」となるべきだ。一方、「lhi」は「faledes」の目的語(あるいは間接目的語)なので、「lhi」⇐DobjL=「faledes」となるべきだと思う。まあ、まだ「プロトタイプ」らしいので、ガリシア=ポルトガル語の係り受け解析に関しては、精度が十分じゃないのかな。

14947373 journal
人工知能

yasuokaの日記: 古典中国語(漢文)係り受け解析エンジンとしてのUDPipe 2

日記 by yasuoka

UDPipe 2がやっとリリース(仮)された、との連絡をいただいた。ただし、現時点でのリリースはLINDATのREST APIだけで、UDPipe 2のプログラム本体や各言語モデルは、まだ公開されていない。それでも、とりあえず「不入虎穴不得虎子」を係り受け解析してみよう。

$ python3
>>> def nlp(t):
...   import urllib.request,urllib.parse,json
...   with urllib.request.urlopen("https://lindat.mff.cuni.cz/services/udpipe/api/process?model=lzh&tokenizer&tagger&parser&data="+urllib.parse.quote(t)) as r:
...     return json.loads(r.read())["result"]
...
>>> doc=nlp("不入虎穴不得虎子")
>>> print(doc)
# generator = UDPipe 2, https://lindat.mff.cuni.cz/services/udpipe
# udpipe_model = classical_chinese-kyoto-ud-2.6-200830
# udpipe_model_licence = CC BY-NC-SA
# newdoc
# newpar
# sent_id = 1
# text = 不入
1    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    2    advmod    _    SpaceAfter=No
2    入    入    VERB    v,動詞,行為,移動    _    0    root    _    SpaceAfter=No

# sent_id = 2
# text = 虎穴
1    虎    虎    NOUN    n,名詞,主体,動物    _    0    root    _    SpaceAfter=No
2    穴    穴    NOUN    n,名詞,固定物,地形    Case=Loc    1    flat    _    SpaceAfter=No

# sent_id = 3
# text = 不得虎子
1    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    2    advmod    _    SpaceAfter=No
2    得    得    VERB    v,動詞,行為,得失    _    0    root    _    SpaceAfter=No
3    虎    虎    NOUN    n,名詞,主体,動物    _    4    nmod    _    SpaceAfter=No
4    子    子    NOUN    n,名詞,人,関係    _    2    obj    _    SpaceAfter=No

うーん、「不入」と「虎穴」を別の文だと判定してしまっていて、少し残念だ。文切り機能をOFFにしてみよう。

>>> def nlp(t):
...   import urllib.request,urllib.parse,json
...   with urllib.request.urlopen("https://lindat.mff.cuni.cz/services/udpipe/api/process?model=lzh&tokenizer=presegmented&tagger&parser&data="+urllib.parse.quote(t)) as r:
...     return json.loads(r.read())["result"]
...
>>> doc=nlp("不入虎穴不得虎子")
>>> print(doc)
# generator = UDPipe 2, https://lindat.mff.cuni.cz/services/udpipe
# udpipe_model = classical_chinese-kyoto-ud-2.6-200830
# udpipe_model_licence = CC BY-NC-SA
# newdoc
# newpar
# sent_id = 1
# text = 不入虎穴不得虎子
1    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    2    advmod    _    SpaceAfter=No
2    入    入    VERB    v,動詞,行為,移動    _    0    root    _    SpaceAfter=No
3    虎    虎    NOUN    n,名詞,主体,動物    _    4    nmod    _    SpaceAfter=No
4    穴    穴    NOUN    n,名詞,固定物,地形    Case=Loc    2    obj    _    SpaceAfter=No
5    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    6    advmod    _    SpaceAfter=No
6    得    得    VERB    v,動詞,行為,得失    _    2    parataxis    _    SpaceAfter=No
7    虎    虎    NOUN    n,名詞,主体,動物    _    8    nmod    _    SpaceAfter=No
8    子    子    NOUN    n,名詞,人,関係    _    6    obj    _    SpaceAfter=No

SVGで可視化すると、こんな感じ。「入」=parataxis⇒「得」も含め、係り受け解析は完璧だ。文切り機能を除けば、UDPipe 2の古典中国語(漢文)係り受け解析は、かなり性能が高いようだ。早く、プログラム本体や各言語モデルが、リリースされるといいな。

14642027 journal
人工知能

yasuokaの日記: Re: 変体漢文をUniDic品詞で表すことができるか

日記 by yasuoka

昨日の日記の続きだが、「汝者我見欺」をUniDic品詞のUniversal Dependenciesで表すことはできるだろうか。

1    汝    汝    PRON    代名詞    _    5    nsubj:pass    _    SpaceAfter=No
2    者    は    ADP    助詞-係助詞    _    1    case    _    SpaceAfter=No
3    我    我    PRON    代名詞    _    5    obl    _    SpaceAfter=No
4    見    れる    AUX    助動詞    _    5    aux    _    SpaceAfter=No
5    欺    欺く    VERB    動詞-一般    _    0    root    _    SpaceAfter=No

係り受け関係については、2018年2月14日の日記を踏襲した。UniDic品詞であれば、「者」を「助詞-係助詞」にできる点がうれしい。ふーむ、やはり変体漢文は、UniDic品詞の方が合うのかしら。

14616130 journal
人工知能

yasuokaの日記: 変体漢文をUniDic品詞で表すことができるか

日記 by yasuoka

昨日の日記の続きだが、変体漢文が中古日本語の一種だとして、UniDic品詞によるUniversal Dependenciesで表すことはできるだろうか。『吾妻鏡』の「二品以銀作猫被宛贈物」で、少し考えてみよう。

1    二品    二品    NOUN    名詞-普通名詞-一般    _    6    nsubj    _    SpaceAfter=No
2    以    持つ    VERB    動詞-一般    _    6    advcl    _    SpaceAfter=No
3    銀作    銀作    NOUN    名詞-普通名詞-一般    _    4    nmod    _    SpaceAfter=No
4    猫    猫    NOUN    名詞-普通名詞-一般    _    2    obj    _    SpaceAfter=No
5    被    られる    AUX    助動詞    _    6    aux    _    SpaceAfter=No
6    宛    当てる    VERB    動詞-一般    _    0    root    _    SpaceAfter=No
7    贈物    贈り物    NOUN    名詞-普通名詞-一般    _    6    obl    _    SpaceAfter=No

「二品」「銀作」「贈物」を1語とみなすべきかどうか、ちょっと悩んだのだが、そこさえ割り切れば、あとは、私(安岡孝一)個人としては、思いのほかスンナリ書けた。うーむ、変体漢文専用の品詞体系を作るより、UniDic品詞を借りた方がいいのかな。

14543558 journal
日本

yasuokaの日記: 変体漢文の言語コードはojpなのか

日記 by yasuoka

ISO 639-3の言語コードojp「Old Japanese」が、いったいどういう言語を対象としているのか、微妙に気になった。Multitreeのojpのページは、7~10世紀の日本語を想定しているらしいが、書写言語としてのojpがどういうものなのか、記述がない。

ojpの「Old Japanese」が、いわゆる「古文」だとして、さて、そこに変体漢文は含まれているのだろうか。こういうの、いったい誰に聞いたらいいんだろ?

14483513 journal
日本

yasuokaの日記: 全国1896市区町村のデジタル戸籍化が完了 115

日記 by yasuoka

御蔵島村の電算戸籍が本日(9月28日)無事に稼働した、との御連絡をいただいた。これで、全国1896市区町村のデジタル戸籍化が完了したことになる。私(安岡孝一)個人としても非常にうれしく、関係各位には感謝の意を申し上げる。

ただ、戸籍のデジタル化を完全に完了させるためには、各市区町村に1~2%ほど残っている改製不適合簿(いわゆる紙戸籍の事故簿)を、何とかデジタル化しないといけない。デジタル化できない理由の一つだった氏名の漢字については、まあまあ文字コード化の見通しがついてきたが、変体仮名については恐ろしく手ごわい。戸籍デジタルシステムの稼働に向け、もう少し私自身も頑張ってみようと思う。

14457303 journal
人工知能

yasuokaの日記: タイ語係り受け解析モジュールspaCy-Thai仮リリース

日記 by yasuoka

pythainlpUDPipespaCyを組み合わせて、タイ語の係り受け解析モジュールspaCy-Thaiを作ってみた。インストールは

$ pip3 install spacy_thai --user

一発でOKのはずだが、インストールにはg++が必要だ。また、Cygwinの場合は

$ pip3.7 install spacy_thai --no-build-isolation

としてほしい。インストールがうまくいったら、昨日の日記で示した「แผนกนี้กำลังเผชิญกับความท้าทายใหม่」を係り受け解析してみよう。

$ python3
>>> import spacy_thai
>>> nlp=spacy_thai.load()
>>> doc=nlp("แผนกนี้กำลังเผชิญกับความท้าทายใหม่")
>>> import deplacy
>>> deplacy.render(doc)
แผนก  NOUN ═╗<══════╗ nsubj
นี้     DET  <╝       ║ det
กำลัง  AUX  <══════╗ ║ aux
เผชิญ  VERB ═══╗═╗═╝═╝ ROOT
กับ    ADP  <╗ ║ ║     case
ความ  PART ═╝<╝ ║     obl
ท้าทาย VERB ═╗<══╝     xcomp
ใหม่   ADV  <╝         advmod

私(安岡孝一)の手元では上の結果になったのだが、うーむ、まだまだ解析が甘い。何とか「ความ」=acl⇒「ท้าทาย」になるよう、頑張ってチューニングしなきゃダメかな。

14432669 journal
人工知能

yasuokaの日記: 「ความท้าทาย」は1語なのか2語なのか3語なのか

日記 by yasuoka

私(安岡孝一)の6月20日の日記の読者から、thai-segmenterというタイ語の形態素解析器をお教えいただいた。

$ pip3 install thai-segmenter --user

で簡単にインストールできるので、試しに「แผนกนี้กำลังเผชิญกับความท้าทายใหม่」を解析してみることにした。

$ python3
>>> from thai_segmenter.tasks import tokenize_and_postag,get_segmenter
>>> nlp=lambda t:tokenize_and_postag(t,get_segmenter())
>>> doc=nlp("แผนกนี้กำลังเผชิญกับความท้าทายใหม่")
>>> print(doc.pos)
[('แผนก', 'NCMN'), ('นี้', 'DDAC'), ('กำลัง', 'XVBM'), ('เผชิญ', 'NCMN'), ('กับ', 'RPRE'), ('ความ', 'FIXN'), ('ท้า', 'NPRP'), ('ทาย', 'VACT'), ('ใหม่', 'ADVN')]

この結果を見る限り、「ความท้าทาย」を「ความ」「ท้า」「ทาย」の3語に分けて、「ความ」を名詞化接頭辞、「ท้า」を固有名詞、「ทาย」を動作動詞だとみなしているようだ。うーむ、さすがに3語に分けるのは無理な気がするので、この例に関してはpythainlpの方がいいかな。

14413812 journal
人工知能

yasuokaの日記: コプト語係り受け解析モジュールspaCy-Coptic仮リリース

日記 by yasuoka

昨日の日記で紹介したcoptic-nlpだが、spaCy-Copticというpython3モジュールとして仮リリースした。ただ、coptic-nlpは、JavaFomaが必要な上に、scikit-learnを旧版(0.23以前)に戻さねばならない、というヤヤコシサがあったので、とりあえずはWebAPIを使う仕掛けにしてみた。この結果、spaCy-Copticのインストールは簡単で

$ pip3 install spacy_coptic --user

一発でOKだ。ただ、Cygwinの場合は

$ pip3.7 install spacy_coptic --no-build-isolation

としてほしい。インストールがうまくいったら、昨日と同様「ⲙⲟⲟϣⲉ ϩⲱⲥ ϣⲏⲣⲉ ⲙ̄ⲡⲟⲩⲟⲉⲓⲛ」を係り受け解析してみよう。

$ python3
>>> import spacy_coptic
>>> nlp=spacy_coptic.load()
>>> doc=nlp("ⲙⲟⲟϣⲉ ϩⲱⲥ ϣⲏⲣⲉ ⲙ̄ⲡⲟⲩⲟⲉⲓⲛ")
>>> import deplacy
>>> deplacy.render(doc)
ⲙⲟⲟϣⲉ  VERB  ═════════╗ ROOT
ϩⲱⲥ    CCONJ <══════╗ ║ mark
ϣⲏⲣⲉ   NOUN  ═════╗═╝<╝ advcl
ⲙ̄      ADP   <══╗ ║     case
ⲡ      DET   <╗ ║ ║     det
ⲟⲩⲟⲉⲓⲛ NOUN  ═╝═╝<╝     nmod

ちゃんと解析できているようだ。フォントが等幅でなくて、表示が乱れる場合は

>>> deplacy.render(doc,WordRight=True)

も試してみてほしい。

typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...