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

pmjamesさんのトモダチの日記。 ログインするとコメント表示数や表示方法をカスタマイズできるのを知っていますか?

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)

も試してみてほしい。

14409660 journal
日記

Takahiro_Chouの日記: マーベル映画公開延期…… 3

日記 by Takahiro_Chou

マーベル『ブラック・ウィドウ』再延期で21年5月公開へ。『エターナルズ』も丸一年延期の21年11月

このシリーズが数ヶ月毎に映画館で公開され……そして、いわゆる「フェーズ4」が始まろうとした時に新型コロナが来た訳か……。
「何かが当り前になるまで10年近くかかるが、当り前だったものが当り前でなくなるまでは1〜2年で済む」なんて事にならなけりゃいいんだけど……。
とりあえず、一刻も早く、マ・ドンソクのギルガメッシュと、スパイダーマンの前作の「衝撃のラスト」の続きが観たい……。

ニューヨーク州とカルフォルニア州(≒アメリカで最も映画の興収がデカい州)で映画館再開の目処が立ってないみたいなんで仕方無いだろうけど……。
まぁ、同じディズニー系列とは言え、ディズニー本社とは違って、映画館で公開する気が有る分だけマシか……。

14404514 journal
Google

yasuokaの日記: coptic-nlpのコプト語係り受け解析をGoogle Colaboratoryで動かす

日記 by yasuoka

思うところあって、コプト語係り受け解析器coptic-nlpを、Google Colaboratoryで動かしてみた。

!apt install foma-bin
!test -d coptic-nlp || git clone --depth=1 https://github.com/CopticScriptorium/coptic-nlp
!test -f coptic-nlp/bin/foma/foma || ln -s /usr/bin/foma /usr/bin/flookup coptic-nlp/bin/foma
!echo Y | python coptic-nlp/coptic_nlp.py -penmult -
!echo ⲙⲟⲟϣⲉ ϩⲱⲥ ϣⲏⲣⲉ ⲙ̄ⲡⲟⲩⲟⲉⲓⲛ > tmpin.txt
!python coptic-nlp/coptic_nlp.py -penmult tmpin.txt

「ⲙⲟⲟϣⲉ ϩⲱⲥ ϣⲏⲣⲉ ⲙ̄ⲡⲟⲩⲟⲉⲓⲛ」という例文を係り受け解析してみたところ、私(安岡孝一)の手元では、以下のようになった。

<norm_group orig_group="ⲙⲟⲟϣⲉ" norm_group="ⲙⲟⲟϣⲉ">
<norm xml:id="u1" pos="V" lemma="ⲙⲟⲟϣⲉ" func="root" orig="ⲙⲟⲟϣⲉ" norm="ⲙⲟⲟϣⲉ">
ⲙⲟⲟϣⲉ
</norm>
</norm_group>
<norm_group orig_group="ϩⲱⲥ" norm_group="ϩⲱⲥ">
<norm xml:id="u2" pos="CONJ" lemma="ϩⲱⲥ" lang="Greek" func="mark" head="#u3" orig="ϩⲱⲥ" norm="ϩⲱⲥ">
ϩⲱⲥ
</norm>
</norm_group>
<norm_group orig_group="ϣⲏⲣⲉ" norm_group="ϣⲏⲣⲉ">
<norm xml:id="u3" pos="N" lemma="ϣⲏⲣⲉ" func="advcl" head="#u1" orig="ϣⲏⲣⲉ" norm="ϣⲏⲣⲉ">
ϣⲏⲣⲉ
</norm>
</norm_group>
<norm_group orig_group="ⲙ̄ⲡⲟⲩⲟⲉⲓⲛ" norm_group="ⲙⲡⲟⲩⲟⲉⲓⲛ">
<norm xml:id="u4" pos="PREP" lemma="ⲛ" func="case" head="#u6" orig="ⲙ̄" norm="ⲙ">
ⲙ̄
</norm>
<norm xml:id="u5" pos="ART" lemma="ⲡ" func="det" head="#u6" orig="ⲡ" norm="ⲡ">

</norm>
<norm xml:id="u6" pos="N" lemma="ⲟⲩⲟⲉⲓⲛ" func="nmod" head="#u3" orig="ⲟⲩⲟⲉⲓⲛ" norm="ⲟⲩⲟⲉⲓⲛ">
ⲟⲩⲟⲉⲓⲛ
</norm>
</norm_group>

うーむ、なかなかフォーマットが手ごわい。マニュアルによれば「--outmode conllu」というオプションもあるはずなのだが、係り受け解析では動作しないようだ。さて、どうしたらいいかな。

14401155 journal
日記

Takahiro_Chouの日記: まぁ、バカ小説のネタにはなるけど、現実では、そんな事は有るまいが…… 4

日記 by Takahiro_Chou

アメリカでのTikTokの事業承認問題に関して。
「コアなトランプ支持者と、コアなアンチ・トランプでは、主に使ってるアプリ/SNS/動画・画像投稿サービスに違いは有るか??」みたいな調査は有るんだろうか??

ただ、同じアンチ・トランプ/リベラルでも、齢の人はtwitterやFacebookを使ってて、若い人は、より新しいサービスやSNSを使う傾向が有る(ので、例えば、同じアメリカのリベラル派でも、若い人が主体のBLM関係のデモをいつやるかなどの情報が、齢の人にまで届かない)みたいな話が有るらしいしなぁ……。

と云う話をネタにした馬鹿小説を以前書いた事が有る。

14385457 journal
Google

yasuokaの日記: HebPipeのヘブライ語係り受け解析をGoogle Colaboratoryで動かす

日記 by yasuoka

Stanzaでヘブライ語の係り受け解析に挑戦していたのだが、文末にピリオドが無い場合に結果がおかしいというバグに捕まってしまった。すぐには直りそうにないので、他のツールを探してみたところ、HebPipeというヘブライ語係り受け解析器を見つけた。Google Colaboratoryでdeplacyに繋いでみよう。

!pip install -U hebpipe deplacy
!echo Y | python -c 'import hebpipe' -q -
def nlp(t):
  with open("tmpin.txt","w",encoding="utf-8") as f:
    print(t,file=f)
  !python -c 'import hebpipe' -q tmpin.txt > tmpout.txt
  with open("tmpout.txt","r",encoding="utf-8") as f:
    return f.read()
doc=nlp("על טעם וריח אין להתווכח")
import deplacy
deplacy.render(doc,WordRight=True)
deplacy.serve(doc,port=None,RtoL=True)

入力にテンポラリファイルを必要とするのが、ちょっと面倒だが、「על טעם וריח אין להתווכח」という例文に対し、私(安岡孝一)の手元では以下の結果が得られた。

  case   ╔════> ADP   על
   obl ╔>╚═╔═══ NOUN  טעם
    cc ║   ║ ╔> CCONJ ו
  conj ║   ╚>╚═ NOUN  ריח
  root ╚═════╔═ AUX   אין
 xcomp       ╚> VERB  להתווכח

1    על    על    ADP    ADP    _    2    case    _    _
2    טעם    טעם    NOUN    NOUN    Gender=Masc|Number=Sing    5    obl    _    (2-organization)
3-4    וריח    _    _    _    _    _    _    _    _
3    ו    ו    CCONJ    CCONJ    _    4    cc    _    _
4    ריח    ריח    NOUN    NOUN    Gender=Masc|Number=Sing    2    conj    _    (4-organization)
5    אין    אין    AUX    AUX    VerbType=Mod    0    root    _    _
6    להתווכח    התווכח    VERB    VERB    HebBinyan=HITPAEL|VerbForm=Inf    5    xcomp    _    _

SVGで右から左へ可視化すると、こんな感じ。 否定助動詞の「אין」にrootが刺さっているのは、ちょっといただけない気もするが、「ו」と「ריח」がちゃんとCCONJNOUNに分離されていてうれしい。ただ、このHebPipeは、pythonに加えJavaも必要とするし、しかも入力がファイルからしかできない構造になっていて、やや使いにくい。Stanzaを直してもらうのと、どちらがいいかな。

14373253 journal
アメリカ合衆国

Takahiro_Chouの日記: Notorious RBG死去

日記 by Takahiro_Chou

ギンズバーグ米最高裁判事死去 リベラル筆頭、後任焦点

アメリカの映画で、この人の写真が部屋に有る=その部屋の主はリベラル派かフェミニスト、と云う記号としても使われるような人物だったりする。
「女性差別的/性別による役割の違いを前提とした法律は時として男性も不幸にする」と云う事の実例となるような裁判で有名になり、アメリカでも2人目の女性の最高裁判事となる。
この人について詳しく知りたい方は、映画だと「ビリーブ 未来への大逆転」「RBG 最強の85才」なんかがオススメ。
R.I.P.

14340502 journal
人工知能

yasuokaの日記: バスク語係り受け解析モジュールspaCy-ixaKat仮リリース

日記 by yasuoka

一昨日昨日の日記で紹介したixaKatを、Universal Dependencies化してspaCyと繋ぎ、spaCy-ixaKatというPyPIモジュールとして仮リリースした。Javaとpython3-pipcurllibncursesw5が入ったLinuxなら

$ pip3 install spacy_ixakat --user

一発でインストールできる。ただし、インストール時に大量のダウンロードが起こるので、高速なネットワークの下でインストールしてほしい。インストールがうまくいったら、まずは「Euskaldun izatea lan extra bat izatea da.」を係り受け解析してみよう。

$ python3
>>> import spacy_ixakat
>>> nlp=spacy_ixakat.load()
>>> doc=nlp("Euskaldun izatea lan extra bat izatea da.")
>>> import deplacy
>>> deplacy.render(doc)
Euskaldun PROPN <╗           obl
izatea    VERB  ═╝<══════╗   csubj
lan       NOUN  ═╗═╗<╗   ║   obl
extra     NOUN  <╝ ║ ║   ║   nmod
bat       NUM   <══╝ ║   ║   nummod
izatea    VERB  ═════╝<╗ ║   ccomp
da        VERB  ═══════╝═╝═╗ ROOT
.         PUNCT <══════════╝ punct

とりあえず、うまくいっているようだ。ただ、今のところspaCy-ixaKatは、Linuxでしか動作しない。WSLでも大丈夫なのだが、さて、Cygwinどうしよう…。

14335014 journal
Google

yasuokaの日記: ixaKatのバスク語係り受けをUniversal Dependenciesに変換できるか

日記 by yasuoka

昨日の日記で紹介したixaKatだが、『Dependentzia Unibertsalen eredura egokitutako euskarazko zuhaitz-bankua』を横目に、Universal Dependenciesへの変換をGoogle Colaboratory上で考えてみた。

!test -d ixa-pipe-dep-eu || ( curl -L http://ixa2.si.ehu.es/ixakat/downloads/ixa-pipe-dep-eu-v2.0.0.tgz | tar xzf - )
!test -d dep-eu-resources-v2.0.0 || ( curl -L http://ixa2.si.ehu.es/ixakat/downloads/dep-eu-resources-v2.0.0.tgz | tar xzf - )
!test -d ixa-pipe-pos-eu || ( curl -L http://ixa2.si.ehu.es/eustagger/download/ixa-pipe-pos-eu-x86-64.tar.bz2 | tar xjf - )
!test -d ixa-pipes-1.1.1 || ( curl -L http://ixa2.si.ehu.es/ixa-pipes/models/ixa-pipes-1.1.1.tar.gz | tar xzf - )
!pip install deplacy
!echo Euskaldun izatea lan extra bat izatea da. | sh ixa-pipe-pos-eu/ixa-pipe-pos-eu.sh | java -jar ixa-pipe-dep-eu/ixa-pipe-dep-eu-2.0.0-exec.jar -b dep-eu-resources-v2.0.0 -c tmp.conll | sed -e '/<terms>/,/<\/terms>/d' -e '/<deps>/,/<\/deps>/d' | java -jar ixa-pipes-1.1.1/ixa-pipe-pos-1.5.1-exec.jar tag -m ixa-pipes-1.1.1/ud-morph-models-1.5.0/eu/eu-pos-perceptron-ud.bin -lm ixa-pipes-1.1.1/ud-morph-models-1.5.0/eu/eu-lemma-perceptron-ud.bin > tmp.xml
with open("tmp.xml","r",encoding="utf-8") as f:
  xml=f.read()
startchar=[]
endchar=[]
upos=[]
for s in xml.split("\n"):
  if s.find("<wf id=")>=0:
    i=s.index('offset="')
    j=int(s[i+8:s.index('"',i+8)])
    startchar.append(j)
    i=s.index('length="')
    endchar.append(j+int(s[i+8:s.index('"',i+8)]))
  if s.find("<term id=")>=0:
    i=s.index('morphofeat="')
    j=s[i+12:s.index('"',i+12)]
    if j=="CONJ":
      j="CCONJ"
    upos.append(j)
startchar.append(0)
with open("tmp.conll","r",encoding="utf-8") as f:
  conll=f.read()
p={"apocmod":"parataxis","apoxmod":"parataxis","aponcmod":"appos","auxmod":"aux","ccomp_obj":"ccomp","ccomp_subj":"csubj","entios":"flat","galdemod":"aux","gradmod":"advmod","haos":"compound","itj_out":"vocative","itjout":"vocative","lot":"conj","lot_at":"discourse","lotat":"discourse","menos":"mark","ncobj":"obj","ncsubj":"nsubj","nczobj":"iobj","postos":"nmod","prtmod":"aux","xcomp_obj":"ccomp","xcomp_subj":"csubj","xcomp_zobj":"advcl","xpred":"aux"}
u={"PUNCT":"punct","NUM":"nummod","DET":"det"}
doc=""
i=0
for s in conll.split("\n"):
  t=s.split("\t")
  if len(t)==10:
    t[3]=upos[i]
    t[9]="SpaceAfter=No" if endchar[i]==startchar[i+1] else "_"
    dep="dep:"+t[7]
    if t[6]=="0":
      dep="root"
    elif t[7] in p:
      dep=p[t[7]]
    elif upos[i] in u:
      dep=u[upos[i]]
    elif t[7] in {"cmod","xmod"}:
      dep="advcl" if upos[int(t[6])-int(t[0])+i] in {"VERB","AUX","ADJ","ADV"} else "acl"
    elif t[7]=="ncmod":
      dep="nmod"
      if upos[i]=="ADV":
        dep="advmod"
      elif upos[i]=="ADJ":
        dep="amod"
      elif upos[int(t[6])-int(t[0])+i] in {"VERB","AUX","ADJ","ADV"}:
        dep="obl"
    elif t[7]=="ncpred":
      dep="ccomp" if upos[i]=="VERB" else "obj"
    t[7]=dep
    i+=1
  doc+="\t".join(t)+"\n"
doc=doc.replace("\n\n\n","\n\n")
import deplacy
deplacy.render(doc)
deplacy.serve(doc,port=None)

かなり長くなってしまったが、「Euskaldun izatea lan extra bat izatea da.」の係り受け解析結果は、私(安岡孝一)の手元では以下のようになった。

Euskaldun PROPN <╗           obl
izatea    VERB  ═╝<══════╗   csubj
lan       NOUN  ═╗═╗<╗   ║   obl
extra     NOUN  <╝ ║ ║   ║   nmod
bat       NUM   <══╝ ║   ║   nummod
izatea    VERB  ═════╝<╗ ║   ccomp
da        VERB  ═══════╝═╝═╗ root
.         PUNCT <══════════╝ punct

1    Euskaldun    euskaldun    PROPN    ADJ    KAS=ZERO|CLUSTER=01010111|CLUSTERM=0101|ATZIZKIA=Null    2    obl    _    _
2    izatea    izan    VERB    ADI_SIN    KAS=ABS|ERL=KONPL|ADM=ADIZE|CLUSTER=0110100|CLUSTERM=0110|ATZIZKIA=Null    7    csubj    _    _
3    lan    lan    NOUN    IZE_ARR    KAS=ZERO|CLUSTER=1011110111010|CLUSTERM=1011|ATZIZKIA=Null    6    obl    _    _
4    extra    extra    NOUN    ADJ    KAS=ZERO|CLUSTER=01111110100|CLUSTERM=0111|ATZIZKIA=Null    3    nmod    _    _
5    bat    bat    NUM    DET_DZH    CLUSTER=1011010|CLUSTERM=1011|ATZIZKIA=Null    3    nummod    _    _
6    izatea    izate    VERB    IZE_ARR    KAS=ABS|NUM=S|CLUSTER=0110100|CLUSTERM=0110|ATZIZKIA=a    7    ccomp    _    _
7    da    izan    VERB    ADT    ASP=PNT|MDN=A1|DADUDIO=NOR|NOR=HURA|CLUSTER=0110100|CLUSTERM=0110|ATZIZKIA=Null    0    root    _    SpaceAfter=No
8    .    .    PUNCT    PUNT_PUNT    _    7    punct    _    _

SVGで見ると、こんな感じ。「da」をコピュラとみなすべきかどうかは、ちょっと悩んだのだが、「izatea」⇐csubj=「izatea」=cop⇒「da」という構造は読みにくいので、両方の「izatea」が「da」にぶらさがる構造にした。さて、他の例文でも、うまく動くかな?

14333323 journal
日記

Takahiro_Chouの日記: 菅直人元首相と菅義偉(そろそろ)首相がややこしい事に関して…… 10

日記 by Takahiro_Chou

「そう言や、『天神様』こと菅原道真の別名も『菅丞相』だったな」と言う関係が有るような無いような事を、ふと思い出す。
(菅直人が首相辞任した時に「これから菅丞相の祟りが起きるのか??」とか書いてたblogを見た覚えが有るんで……)

typodupeerror

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

読み込み中...