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

yasuokaさんのトモダチの日記みんなの日記も見てね。 みんなの日記の更新状況はTwitterの@sradjp_journalsでもチェックできます。

14111406 journal
中国

yasuokaの日記: 現代中国語係り受け解析ツールとしてのCamphr-Udify 3

日記 by yasuoka

私(安岡孝一)の昨日の日記に対し、Camphr-Udifyはjiebaをトークナイザとして現代中国語に対応している、という御連絡をいただいた。ただ、ja_mecab_udifyではなく、en_udifyの方を使う必要があるようだ。とりあえず、インストール。

$ pip3 install https://github.com/PKSHATechnology-Research/camphr_models/releases/download/0.5/en_udify-0.5.tar.gz
$ pip3 install jieba

インストールがうまくいったら、以前の日記で例にした「我把这本书看完了」を、係り受け解析してみよう。

$ python3
>>> from camphr.pipelines import load_udify
>>> zh=load_udify("zh",punct_chars=["。"])
>>> for r in ["我把这本书看完了","我把這本書看完了"]:
...   s=zh(r)
...   print("".join("\t".join([str(t.i+1),t.orth_,t.lemma_,t.pos_,t.tag_,"_",str(0 if t.head==t else t.head.i+1),t.dep_,"_","_" if t.whitespace_ else "SpaceAfter=No"])+"\n" for t in s))
...
1    我    我    PRON        _    5    nsubj    _    SpaceAfter=No
2    把    把    VERB        _    5    aux:caus    _    SpaceAfter=No
3    这    这    DET        _    4    det    _    SpaceAfter=No
4    本书    本书    NOUN        _    5    obj    _    SpaceAfter=No
5    看    看    VERB        _    0    root    _    SpaceAfter=No
6    完    完    VERB        _    5    mark    _    SpaceAfter=No
7    了    了    X        _    5    discourse    _    SpaceAfter=No

1    我    我    PRON        _    4    nsubj    _    SpaceAfter=No
2    把    把    VERB        _    4    aux:caus    _    SpaceAfter=No
3    這本書    這本書    DET        _    4    obj    _    SpaceAfter=No
4    看    看    VERB        _    0    root    _    SpaceAfter=No
5    完    完    VERB        _    4    mark    _    SpaceAfter=No
6    了    了    X        _    4    discourse    _    SpaceAfter=No

うーん、全体にうまくいってない。jiebaが簡化字用の形態素解析器なのに、Camphr-Udifyは繁體字用のUD_Chinese-GSD(それも旧版のUD2.3)を使っていて、そこのところのマッチングがうまくいってない気がする。簡化字用のUD_Chinese-GSDSimpを混ぜたいけど、Udifyの中をいじるのは大変かなぁ。

14111026 journal
人工知能

yasuokaの日記: 多言語係り受け解析ツールとしてのCamphr-Udify 2

日記 by yasuoka

PKSHA Technologyが自然言語処理ライブラリCamphrをリリースしたので、試しに使ってみることにした。CamphrはspaCy上の多言語ライブラリで、pip3とpython3があれば

$ pip3 install https://github.com/PKSHATechnology-Research/camphr_models/releases/download/0.5/ja_mecab_udify-0.5.tar.gz
$ pip3 install mecab-python3 --only-binary :all:

でインストールできる。中でもCamphr-Udifyは、ざっと見た感じでも日本語・英語・フランス語・ドイツ語・スペイン語・ポルトガル語・イタリア語・オランダ語・ギリシャ語・チェコ語・ロシア語などに対応していて、本気の多言語対応だったりする。とりあえず、日本語「笑顔で彼は座った」・英語「He sat down with smiling face」・ポルトガル語「Ele se sentou com um sorriso no rosto」を、一度に係り受け解析してみよう。

$ python3
>>> import spacy
>>> ud=spacy.load("ja_mecab_udify")
>>> for r in ["笑顔で彼は座った","He sat down with smiling face","Ele se sentou com um sorriso no rosto"]:
...   s=ud(r)
...   print("".join("\t".join([str(t.i+1),t.orth_,t.lemma_,t.pos_,t.tag_,"_",str(0 if t.head==t else t.head.i+1),t.dep_,"_","_" if t.whitespace_ else "SpaceAfter=No"])+"\n" for t in s))
...
1    笑顔    笑顔    NOUN    名詞,一般,*,*    _    5    obl    _    SpaceAfter=No
2    で    で    ADP    助詞,格助詞,一般,*    _    1    case    _    SpaceAfter=No
3    彼    彼    PRON    名詞,代名詞,一般,*    _    5    nsubj    _    SpaceAfter=No
4    は    は    ADP    助詞,係助詞,*,*    _    3    case    _    SpaceAfter=No
5    座っ    座る    VERB    動詞,自立,*,*    _    0    root    _    SpaceAfter=No
6    た    た    AUX    助動詞,*,*,*    _    5    aux    _    SpaceAfter=No

1    He    he    PRON    名詞,固有名詞,組織,*    _    2    nsubj    _    _
2    sat    sit    VERB    名詞,一般,*,*    _    0    root    _    _
3    down    down    ADV    名詞,一般,*,*    _    2    advmod    _    _
4    with    with    ADP    名詞,一般,*,*    _    6    case    _    _
5    smiling    smil    VERB    名詞,一般,*,*    _    6    amod    _    _
6    face    face    NOUN    名詞,固有名詞,組織,*    _    2    obl    _    SpaceAfter=No

1    Ele    _    PRON    名詞,固有名詞,組織,*    _    3    nsubj    _    _
2    se    _    PRON    名詞,一般,*,*    _    3    obj    _    _
3    sentou    sentar    VERB    名詞,一般,*,*    _    0    root    _    _
4    com    _    ADP    名詞,一般,*,*    _    6    case    _    _
5    um    _    DET    名詞,一般,*,*    _    6    det    _    _
6    sorriso    sorriso    NOUN    名詞,一般,*,*    _    3    nmod    _    _
7    no    _    ADP    名詞,一般,*,*    _    8    case    _    _
8    rosto    rosto    NOUN    名詞,固有名詞,組織,*    _    6    nmod    _    SpaceAfter=No

日本語「英語で彼は座った」については、係り受けも含め、完璧に読めている。英語はtag_品詞がおかしいものの、まずまず読めているようだ。ポルトガル語はtag_品詞がおかしい上に、sorrisoにnmodが刺さっていて、今一つのデキである。でも、私(安岡孝一)個人としては、古典中国語(漢文)や現代中国語もサポートしてほしいなぁ。

14110314 journal
アメリカ合衆国

yasuokaの日記: Universal DependenciesとStanford Typed Dependenciesと矢印の向き

日記 by yasuoka

今日発売の『数学セミナー』(Vol.59, No.3)を読んでいて、能地宏「文構造に内在する普遍」(pp.20-24)の図1が気になった。「He drunk expensive wine in Paris」という英文(drankではなくdrunk)の依存構造を扱っているのだが、矢印の向きがdrunk→in→Parisとなっているのだ。最新のUniversal Dependencies 2.5であれば、ここはdrunk→Paris→inとなるはずで、だとすると能地が扱っているのは、旧版のStanford Typed Dependenciesか何かということになる。とりあえず、UniDic2UDのenglish-ewtで「He drunk expensive wine in Paris」を解析してみよう。

$ echo He drunk expensive wine in Paris | unidic2ud -U english-ewt
# sent_id = 1
# text = He drunk expensive wine in Paris
1    He    he    PRON    PRP    Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs    2    nsubj    _    _
2    drunk    drink    VERB    VBP    Mood=Ind|Tense=Pres|VerbForm=Fin    0    root    _    _
3    expensive    expensive    ADJ    JJ    Degree=Pos    4    amod    _    _
4    wine    wine    NOUN    NN    Number=Sing    2    obj    _    _
5    in    in    ADP    IN    _    6    case    _    _
6    Paris    Paris    PROPN    NNP    Number=Sing    2    obl    _    SpaceAfter=No

SVGで可視化すると、こんな感じ。drunk→Paris→inとなっているのが分かる。ただ、能地としては「依存構造最小化仮説」に言及したいようなので、それならば、旧版のStanford Typed Dependenciesか、あるいは改良版のSurface-syntactic Universal Dependenciesの方が向いている気もする。さて、こういうヤヤコシイあたり、どうしたらいいかな。

14109114 journal
日記

yasuokaの日記: 人文科学における「科学の手順」とQWERTY配列

日記 by yasuoka

『キーボード配列 QWERTYの謎』(NTT出版、2008年3月)の読者から、山田俊弘の『論文を書くための科学の手順』(文一総合出版、2018年10月)を読んでみてほしい、との御連絡をいただいた。ざっと読んでみたのだが、7ページの

科学で採用されている論理の型は仮説演繹と呼ばれており、

  1. 研究対象とする現象を提案し、
  2. その現象を説明する仮説をつくり、
  3. 仮説をもとに実証可能な予言を導き、
  4. 実験や観察で予言の正しさを評価し、
  5. この評価をもとに仮説の真偽を検証する

というものである。

という点については、人文科学における「科学の手順」も含めて、まあ納得のいくところである。しかし、そうだとすると230~231ページの内容は、私(安岡孝一)には全く納得がいかなかった。

パソコンが登場する前にタイプライターという機械があった。私はぎりぎり、タイプライターが現役で働いているのを知る世代である。タイプライターでは、キーを打つとキーと物理的に直結しているアーム(細長い金属板)の先端に付いた活字が紙を叩きつけ、活字が印字されるしくみになっている。初期のタイプライターでは、隣り合うキーのアームが印字するときに絡み合ってしまう不具合が生じがちであった。このため、使用頻度の高いアルファベットはできるだけ隣同士にならないように配列される必要があった。さもないと、高い頻度でアームが絡み合って仕事にならない。こうして出来上がった配列がQWERTY配列である。文字の打ちやすさではなく、アームの絡まりにくさから考え出された配列がQWERTY配列だ。

「アーム」を有するフロントストライク式タイプライターが登場するのは、私の知る限り、1891年特許の「Daugherty Visible」が嚆矢だ。これに対し、現在のQWERTY配列は、1882年発売の「Remington Standard Type-Writer No.2」には採用されている。存在していない「アーム」のために、QWERTY配列が考案されたなんて、ナンセンスもいいところだ。

「実験や観察で予言の正しさを評価し」と山田俊弘が言うのなら、「私はぎりぎり、タイプライターが現役で働いているのを知る世代である」という山田の主張において、山田が観察したタイプライターは、1882年頃のアップストライク式タイプライターなのか。まず一次史料にあたるのは、人文科学における「科学の手順」の大前提なのだが、山田の言う「実験や観察」は、それを満たしているのか。ガセネタをばらまく暇があったら、ちゃんとそこから「科学の手順」を始めてほしい。

14107428 journal
人工知能

yasuokaの日記: UniDic2UDとGiNZAで読む「難儀な難儀は難儀する」

日記 by yasuoka

昨日の日記で示したUniDic品詞とUniversal Dependencies品詞の対応だが、かなり難儀なのが「名詞-普通名詞-サ変形状詞可能」だったりする。何せ「名詞」のくせにNOUNとは限らず、VERBだったりADJ(adjective)だったりするのだ。最新のUniDic2UD 1.9.1+現代話し言葉UniDicで、「難儀な難儀は難儀する」を解析してみよう。

$ echo 難儀な難儀は難儀する | unidic2ud -U spoken
# text = 難儀な難儀は難儀する
1       難儀    難儀    ADJ     名詞-普通名詞-サ変形状詞可能    _       3      acl      _       SpaceAfter=No|Translit=ナンギ
2       な      だ      AUX     助動詞  _       1       aux     _       SpaceAfter=No|Translit=ナ
3       難儀    難儀    NOUN    名詞-普通名詞-サ変形状詞可能    _       5      nsubj    _       SpaceAfter=No|Translit=ナンギ
4       は      は      ADP     助詞-係助詞     _       3       case    _      SpaceAfter=No|Translit=ハ
5       難儀    難儀    VERB    名詞-普通名詞-サ変形状詞可能    _       0      root     _       SpaceAfter=No|Translit=ナンギ
6       する    為る    AUX     動詞-非自立可能 _       5       aux     _      SpaceAfter=No|Translit=スル

SVGで可視化すると、こんな感じ。3つある「難儀」に対して、「難儀な」がADJ+AUX、「難儀は」がNOUN+ADP、「難儀する」がVERB+AUXになっている。「学校文法」では「難儀な」がいわゆる形容動詞の連体形で、「難儀する」がサ変動詞の終止形だと習うわけだが、これに対する国語研短単位とUniversal Dependencies品詞のミツドモエが、こういう難儀な結果を生んでいるわけだ。一方、GiNZA 3.1.1だと「難儀な難儀は難儀する」は、私(安岡孝一)の手元では以下のように解析された。

$ echo 難儀な難儀は難儀する | ginza
# text = 難儀な難儀は難儀する
1       難儀    難儀    ADJ     名詞-普通名詞-サ変形状詞可能    _       3      amod     _       BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
2       な      だ      AUX     助動詞  _       1       aux     _       BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
3       難儀    難儀    NOUN    名詞-普通名詞-サ変形状詞可能    _       6      nsubj    _       BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No|NP_B
4       は      は      ADP     助詞-係助詞     _       3       case    _      BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
5       難儀    難儀    ADJ     名詞-普通名詞-サ変形状詞可能    _       6      amod     _       BunsetuBILabel=B|BunsetuPositionType=CONT|SpaceAfter=No
6       する    為る    AUX     動詞-非自立可能 _       0       root    _      BunsetuBILabel=I|BunsetuPositionType=ROOT|SpaceAfter=No

「難儀する」をADJ+AUXと解析している点で、かなり特徴的である。GiNZAも難儀しているのだろう。よければ「pip3 install -U unidic2ud ginza」で最新版をインストールして、ぜひ比較してみてほしい。

14107080 journal
人工知能

yasuokaの日記: UniDic2UDにおける品詞間の対応

日記 by yasuoka

UniDic2UDの係り受け解析モデルを、これまでのjapanese-gsdに代えて、japanese-modernを元に作り直した。この作業に伴って、UniDic品詞とUniversal Dependencies品詞(UPOS)の対応を見直したので、忘れないうちに私(安岡孝一)の日記で公開しておくことにする。ただし、UniDic品詞とUPOSは1対1に対応しているわけではなく、たとえば「名詞-普通名詞-サ変可能」は、サ変動詞として使われている場合はVERB、そうでない場合はNOUNとなる。そのあたり、UniDic2UDは必ずしもうまく動作しきれていないのだが、まあ、少しずつ改良していこうと思う。

  • 名詞-普通名詞-一般 NOUN
  • 名詞-普通名詞-サ変可能 NOUN
  • 名詞-普通名詞-サ変可能 VERB
  • 名詞-普通名詞-サ変形状詞可能 NOUN
  • 名詞-普通名詞-サ変形状詞可能 VERB
  • 名詞-普通名詞-サ変形状詞可能 ADJ
  • 名詞-普通名詞-副詞可能 NOUN
  • 名詞-普通名詞-副詞可能 ADV
  • 名詞-普通名詞-形状詞可能 NOUN
  • 名詞-普通名詞-形状詞可能 ADJ
  • 名詞-普通名詞-助数詞可能 NOUN
  • 名詞-助動詞語幹 NOUN
  • 名詞-固有名詞-一般 PROPN
  • 名詞-固有名詞-人名-一般 PROPN
  • 名詞-固有名詞-人名-姓 PROPN
  • 名詞-固有名詞-人名-名 PROPN
  • 名詞-固有名詞-地名-一般 PROPN
  • 名詞-固有名詞-地名-国 PROPN
  • 名詞-数詞 NUM
  • 代名詞 PRON
  • 動詞-一般 VERB
  • 動詞-非自立可能 VERB
  • 動詞-非自立可能 AUX
  • 助動詞 AUX
  • 形容詞-一般 ADJ
  • 形容詞-非自立可能 ADJ
  • 形状詞-タリ ADJ
  • 形状詞-一般 ADJ
  • 形状詞-助動詞語幹 ADJ
  • 連体詞 DET
  • 副詞 ADV
  • 助詞-格助詞 ADP
  • 助詞-係助詞 ADP
  • 助詞-副助詞 ADP
  • 助詞-準体助詞 ADP
  • 助詞-終助詞 PART
  • 助詞-接続助詞 SCONJ
  • 助詞-接続助詞 CCONJ
  • 接続詞 CCONJ
  • 接頭辞 NOUN
  • 接尾辞-名詞的-一般 NOUN
  • 接尾辞-名詞的-サ変可能 NOUN
  • 接尾辞-名詞的-サ変可能 VERB
  • 接尾辞-名詞的-副詞可能 NOUN
  • 接尾辞-名詞的-助数詞 NOUN
  • 接尾辞-動詞的 PART
  • 接尾辞-形容詞的 PART
  • 接尾辞-形状詞的 PART
  • 感動詞-一般 INTJ
  • 感動詞-フィラー INTJ
  • 補助記号-句点 PUNCT
  • 補助記号-読点 PUNCT
  • 補助記号-括弧開 PUNCT
  • 補助記号-括弧閉 PUNCT
  • 補助記号-AA-一般 PUNCT
  • 補助記号-AA-顔文字 PUNCT
  • 補助記号-一般 PUNCT
  • 記号-文字 SYM
  • 記号-一般 SYM
  • 空白 SYM
14102828 journal
日本

yasuokaの日記: ginzameで読む「公立はこだて未来大学」 1

日記 by yasuoka

このツイートが気になったので、手元のginzame (GiNZA 3.1.1版)で「公立はこだて未来大学」を読んでみた。

$ echo 公立はこだて未来大学 | ginzame
公立    名詞,普通名詞,一般,*,*,*,公立,コウリツ,*
はこだて    名詞,固有名詞,地名,一般,*,*,はこだて,ハコダテ,*
未来    名詞,普通名詞,一般,*,*,*,未来,ミライ,*
大学    名詞,普通名詞,一般,*,*,*,大学,ダイガク,*
EOS

特に問題なさそうに見える。ついでなので、udcabocha (UniDic2UD 1.8.6版)も試してみよう。

$ echo 公立はこだて未来大学 | udcabocha -U gendai -f 1
* 0 -1D 3/3 0.000000
公立    名詞,普通名詞,一般,*,*,*,公立,コウリツ,*,NOUN    1<-compound-4
はこだて    名詞,固有名詞,地名,一般,*,*,ハコダテ,ハコダテ,*,PROPN    2<-compound-4
未来    名詞,普通名詞,一般,*,*,*,未来,ミライ,*,NOUN    3<-compound-4
大学    名詞,普通名詞,一般,*,*,*,大学,ダイガク,*,NOUN    4<-root
EOS

こちらも大丈夫そうだ。では、janome 0.3.10 (ipadic-2.7.0「令和」内蔵版)は、どうなるだろう。

$ echo 公立はこだて未来大学 | janome
公立    名詞,一般,*,*,*,*,公立,コウリツ,コーリツ
は    助詞,係助詞,*,*,*,*,は,ハ,ワ
こ    名詞,一般,*,*,*,*,こ,コ,コ
だ    助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
て    助詞,接続助詞,*,*,*,*,て,テ,テ
未来    名詞,一般,*,*,*,*,未来,ミライ,ミライ
大学    名詞,一般,*,*,*,*,大学,ダイガク,ダイガク

ふーむ、この結果を見る限り、問題はipadicにあるわけだ。それにしても、日本語の形態素解析では、13年も前のipadicを、いまだに使い続けなきゃいけない掟でもあるのかしら?

14099903 journal
Google

yasuokaの日記: Google ColaboratoryでUD-KundokuのSVGを表示するには

日記 by yasuoka

昨日の日記の続きだが、UD-KundokuをGoogle Colaboratoryで使う際も、SVGを表示するにはGoogle Drive経由が良さそうである。

!pip install udkundoku
import udkundoku
lzh=udkundoku.load()
s=lzh("不入虎穴不得虎子")
from google import colab
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from oauth2client.client import GoogleCredentials
from IPython.display import IFrame,display
colab.auth.authenticate_user()
g=GoogleAuth()
g.credentials=GoogleCredentials.get_application_default()
d=GoogleDrive(g)
for c in [s,udkundoku.reorder(s),udkundoku.translate(s)]:
  f=d.CreateFile({"title":"trial.svg","mimeType":"image/svg+xml"})
  f.SetContentString(c.to_svg())
  f.Upload()
  display(IFrame(src="https://drive.google.com/uc?id="+f.get("id"),width="100%",height="250"))
  f.Trash()

上のプログラムでは、「不入虎穴不得虎子」の古典中国語(漢文)Universal Dependencies、返り点による語順入れ替え、助詞と送り仮名の追加、の3段階でSVGを表示してみた。ただ、実行中にGoogle Driveへのアクセス許可を求められる点が、非常に面倒くさい。何か、いい方法ないかなぁ。

14099161 journal
Google

yasuokaの日記: Google ColaboratoryでUniDic2UDのSVGを表示するには

日記 by yasuoka

UniDic2UDをGoogle Colaboratoryで使っていたところ、係り受け解析結果をSVG表示できないという問題に出くわした。ざっと調べてみたところ、Google Colaboratoryが使っているIPython.displayのSVGモジュールが非力で、SVG内部のJavaScriptを処理しきれていないことがわかった。でも、SVGを表示したい場面はあるだろうと思い、私(安岡孝一)なりにアレコレ考えてみた結果、Google Drive経由でならブラウザ(Chromium系列)のSVGをキックできることに気づいたので、ざっとコーディングしてみた。

!pip install unidic2ud
import unidic2ud
qkana=unidic2ud.load("qkana")
s=qkana("其國を治めんと欲する者は先づ其家を齊ふ")
from google import colab
colab.auth.authenticate_user()
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from oauth2client.client import GoogleCredentials
g=GoogleAuth()
g.credentials=GoogleCredentials.get_application_default()
f=GoogleDrive(g).CreateFile({"title":"trial.svg","mimeType":"image/svg+xml"})
f.SetContentString(s.to_svg())
f.Upload()
from IPython.display import IFrame,display
display(IFrame(src="https://drive.google.com/uc?id="+f.get("id"),width="100%",height="500"))
f.Trash()

実行途中で、Google Driveへのアクセス許可が求められて、ブラウザの別ページから暗号のような文字列をコピペする必要があるが、それでもこれで何とか動くと思う。でも、こういうの、もうちょっと簡単にやる方法ないかなぁ。

14094037 journal
日本

yasuokaの日記: 「野」を字母とする変体仮名

日記 by yasuoka

とあるイキサツで、「野」を字母とする変体仮名を調べるハメになった。国立国会図書館で明治・大正期の図書をざっと探してみたところ、川崎斯文『變体假名手本』(若林春和堂、明治44年3月)と、木村剛石『新書道之研究』(二松堂書店、大正6年1月)に、「野」を字母とする変体仮名が掲載されているのを見つけた。この時点で、「野」を字母とする変体仮名を認める流派が、少なくとも仮名書道には存在していた、ということだろう。ただし、「野」を字母とする変体仮名は、文字情報基盤には収録されていない。さて、これからどうしようかな。

typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...