パスワードを忘れた? アカウント作成
13901932 journal
人工知能

yasuokaの日記: 「令和」の係り受け解析エンジン(仮)としてのNLP-Cube

日記 by yasuoka

ゴールデンウィークも9日目なので、AdobeのNLP-Cube1.0.5向けの古典中国語(四書)モデルを試作してみた。出来たてのホヤホヤなので、あまりチューンアップ等していないのだが、python3とpip3があれば、以下の手順でインストールできる。

% pip3 install nlpcube
% python3
>>> from cube.io_utils.model_store import ModelStore
>>> ModelStore(cloud_path="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kyodokenkyu/2019-05-05/")._download_model("lzh",0.1)
>>> quit()

うまくlzh-0.1モデルがインストールできたら、「令和」の元ネタを係り受け解析してみよう。

% python3
>>> import cube.api,cube.io_utils.conll
>>> lzh=cube.api.Cube()
>>> lzh.load("lzh",0.1)
>>> d=cube.io_utils.conll.Dataset()
>>> d.sequences=lzh("天平二年正月十三日萃于帥老之宅申宴會也于時初春令月氣淑風和梅披鏡前之粉蘭薰珮後之香加以曙嶺移雲松掛羅而傾盖夕岫結霧鳥封縠而迷林庭舞新蝶空歸故鴈於是盖天促膝飛觴忘言一室之裏開衿煙霞之外淡然自放快然自足若非翰苑何以攄情詩紀落梅之篇古今夫何異矣宜賦園梅聊成短詠")
>>> d.write_stdout()
1    天    天    NOUN    n,名詞,制度,場    Case=Loc    2    nsubj    _    SpaceAfter=No
2    平    平    VERB    v,動詞,描写,形質    Degree=Pos    0    root    _    SpaceAfter=No
3    二    二    NUM    n,数詞,数字,*    _    4    nummod    _    SpaceAfter=No
4    年    年    NOUN    n,名詞,固定物,関係    Case=Tem    2    obj    _    SpaceAfter=No

1    正    正    VERB    v,動詞,描写,形質    Degree=Pos|VerbForm=Part    2    amod    _    SpaceAfter=No
2    月    月    NOUN    n,名詞,固定物,関係    Case=Tem    3    obl:tmod    _    SpaceAfter=No
3    十三    十三    NUM    n,数詞,数,*    _    0    root    _    SpaceAfter=No
4    日    日    NOUN    n,名詞,時,*    Case=Tem    5    obl:tmod    _    SpaceAfter=No
5    萃    萃    VERB    v,動詞,行為,動作    _    3    conj    _    SpaceAfter=No
6    于    于    ADP    v,前置詞,基盤,*    _    10    case    _    SpaceAfter=No
7    帥    帥    PROPN    n,名詞,固定物,建造物    _    10    nmod    _    SpaceAfter=No
8    老    老    NOUN    n,名詞,人,名    _    10    nmod    _    SpaceAfter=No
9    之    之    SCONJ    p,助詞,接続,属格    _    7    case    _    SpaceAfter=No
10    宅    宅    NOUN    v,動詞,行為,動作    _    5    obl:lmod    _    SpaceAfter=No
11    申    申    NOUN    v,動詞,行為,動作    _    5    obl:lmod    _    SpaceAfter=No
12    宴    宴    NOUN    v,動詞,行為,動作    _    5    obl:lmod    _    SpaceAfter=No
13    會    會    NOUN    v,動詞,行為,動作    _    10    conj    _    SpaceAfter=No
14    也    也    PART    p,助詞,句末,*    _    5    discourse:sp    _    SpaceAfter=No

1    于    于    VERB    v,前置詞,基盤,*    _    2    case    _    SpaceAfter=No
2    時    時    NOUN    n,名詞,固定物,関係    Case=Tem    3    obl:lmod    _    SpaceAfter=No
3    初    初    VERB    v,動詞,行為,動作    _    7    nmod    _    SpaceAfter=No
4    春    春    VERB    n,名詞,固定物,関係    Case=Tem    7    nmod    _    SpaceAfter=No
5    令    令    NOUN    n,名詞,数量,*    _    7    amod    _    SpaceAfter=No
6    月    月    NOUN    n,名詞,固定物,関係    Case=Tem    22    nmod    _    SpaceAfter=No
7    氣    氣    NOUN    n,名詞,描写,形質    _    23    nsubj    _    SpaceAfter=No
8    淑    淑    VERB    v,動詞,行為,動作    _    23    nsubj    _    SpaceAfter=No
9    風    風    VERB    v,動詞,行為,動作    _    23    nsubj    _    SpaceAfter=No
10    和    和    VERB    v,動詞,描写,形質    Degree=Pos|VerbForm=Part    23    nsubj    _    SpaceAfter=No
11    梅    梅    NOUN    v,動詞,行為,動作    _    25    nsubj    _    SpaceAfter=No
12    披    披    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
13    鏡    鏡    NOUN    v,動詞,行為,動作    _    20    compound    _    SpaceAfter=No
14    前    前    NOUN    n,名詞,固定物,関係    Case=Tem    34    nmod    _    SpaceAfter=No
15    之    之    SCONJ    p,助詞,接続,属格    _    14    case    _    SpaceAfter=No
16    粉    粉    NOUN    v,動詞,行為,動作    _    23    obj    _    SpaceAfter=No
17    蘭    蘭    NOUN    v,動詞,行為,動作    _    23    obj    _    SpaceAfter=No
18    薰    薰    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
19    珮    珮    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
20    後    後    NOUN    n,名詞,固定物,関係    Case=Tem    34    nmod    _    SpaceAfter=No
21    之    之    SCONJ    p,助詞,接続,属格    _    14    case    _    SpaceAfter=No
22    香    香    NOUN    v,動詞,行為,動作    _    23    obj    _    SpaceAfter=No
23    加    加    AUX    v,動詞,行為,得失    _    0    root    _    SpaceAfter=No
24    以    以    VERB    v,動詞,行為,動作    _    23    advcl    _    SpaceAfter=No
25    曙    曙    VERB    v,動詞,行為,動作    _    23    obj    _    SpaceAfter=No
26    嶺    嶺    VERB    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
27    移    移    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
28    雲    雲    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
29    松    松    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
30    掛    掛    NOUN    v,動詞,行為,動作    _    25    conj    _    SpaceAfter=No
31    羅    羅    NOUN    v,動詞,行為,動作    _    30    conj    _    SpaceAfter=No
32    而    而    CCONJ    p,助詞,接続,並列    _    33    cc    _    SpaceAfter=No
33    傾    傾    VERB    v,動詞,行為,動作    _    23    conj    _    SpaceAfter=No
34    盖    盖    VERB    v,動詞,行為,動作    _    33    obj    _    SpaceAfter=No
35    夕    夕    NOUN    v,動詞,行為,動作    _    34    conj    _    SpaceAfter=No
36    岫    岫    NOUN    v,動詞,行為,動作    _    34    conj    _    SpaceAfter=No
37    結    結    NOUN    v,動詞,行為,動作    _    34    conj    _    SpaceAfter=No
38    霧    霧    NOUN    v,動詞,描写,形質    _    34    conj    _    SpaceAfter=No
39    鳥    鳥    NOUN    n,名詞,主体,動物    _    33    obj    _    SpaceAfter=No

1    封    封    VERB    v,動詞,描写,態度    _    0    root    _    SpaceAfter=No
2    縠    縠    VERB    v,動詞,行為,動作    _    1    obj    _    SpaceAfter=No
3    而    而    CCONJ    p,助詞,接続,並列    _    4    cc    _    SpaceAfter=No
4    迷    迷    VERB    v,動詞,行為,動作    _    1    conj    _    SpaceAfter=No
5    林    林    VERB    v,動詞,行為,動作    _    4    obj    _    SpaceAfter=No
6    庭    庭    VERB    v,動詞,行為,動作    _    5    conj    _    SpaceAfter=No
7    舞    舞    VERB    v,動詞,行為,動作    _    5    conj    _    SpaceAfter=No
8    新    新    VERB    v,動詞,行為,動作    _    5    conj    _    SpaceAfter=No
9    蝶    蝶    VERB    v,動詞,行為,動作    _    8    conj    _    SpaceAfter=No
10    空    空    NOUN    v,動詞,行為,動作    _    11    nsubj    _    SpaceAfter=No
11    歸    歸    VERB    v,動詞,行為,移動    _    9    conj    _    SpaceAfter=No

1    故    故    ADV    v,副詞,判断,確定    _    2    advmod    _    SpaceAfter=No
2    鴈    鴈    VERB    v,動詞,行為,動作    _    0    root    _    SpaceAfter=No
3    於    於    ADP    v,前置詞,基盤,*    _    5    case    _    SpaceAfter=No
4    是    是    PRON    n,代名詞,指示,*    PronType=Dem    5    det    _    SpaceAfter=No
5    盖    盖    VERB    v,動詞,行為,動作    _    2    obl:lmod    _    SpaceAfter=No

1    天    天    NOUN    n,名詞,制度,場    Case=Loc    2    obl:tmod    _    SpaceAfter=No
2    促    促    NOUN    v,動詞,行為,動作    _    26    nsubj    _    SpaceAfter=No
3    膝    膝    NOUN    v,動詞,行為,動作    _    2    conj    _    SpaceAfter=No
4    飛    飛    NOUN    v,動詞,行為,動作    _    2    conj    _    SpaceAfter=No
5    觴    觴    NOUN    v,動詞,行為,動作    _    2    conj    _    SpaceAfter=No
6    忘    忘    VERB    v,動詞,行為,動作    _    2    parataxis    _    SpaceAfter=No
7    言    言    NOUN    n,名詞,可搬,伝達    _    21    nsubj    _    SpaceAfter=No
8    一    一    NUM    n,数詞,数字,*    _    9    nummod    _    SpaceAfter=No
9    室    室    NOUN    n,名詞,固定物,建造物    Case=Loc    17    nmod    _    SpaceAfter=No
10    之    之    SCONJ    p,助詞,接続,属格    _    9    case    _    SpaceAfter=No
11    裏    裏    NOUN    v,動詞,描写,形質    _    26    nsubj    _    SpaceAfter=No
12    開    開    NOUN    v,動詞,描写,形質    _    21    obj    _    SpaceAfter=No
13    衿    衿    NOUN    v,動詞,描写,形質    _    14    conj    _    SpaceAfter=No
14    煙    煙    NOUN    v,動詞,描写,形質    _    9    conj    _    SpaceAfter=No
15    霞    霞    NOUN    v,動詞,描写,形質    _    9    conj    _    SpaceAfter=No
16    之    之    SCONJ    p,助詞,接続,属格    _    9    case    _    SpaceAfter=No
17    外    外    NOUN    n,名詞,固定物,関係    Case=Loc    26    obj    _    SpaceAfter=No
18    淡    淡    NOUN    v,動詞,描写,形質    Degree=Pos    26    obj    _    SpaceAfter=No
19    然    然    PART    v,動詞,描写,態度    _    26    advmod    _    SpaceAfter=No
20    自    自    PRON    n,代名詞,人称,他    PronType=Prs|Reflex=Yes    26    obj    _    SpaceAfter=No
21    放    放    VERB    v,動詞,行為,動作    _    26    ccomp    _    SpaceAfter=No
22    快    快    VERB    v,動詞,描写,形質    Degree=Pos    28    obj    _    SpaceAfter=No
23    然    然    PART    v,動詞,描写,態度    _    26    advmod    _    SpaceAfter=No
24    自    自    PRON    v,前置詞,経由,*    _    26    obj    _    SpaceAfter=No
25    足    足    AUX    v,助動詞,可能,*    Mood=Pot    26    aux    _    SpaceAfter=No
26    若    若    VERB    v,動詞,行為,分類    Degree=Equ    0    root    _    SpaceAfter=No
27    非    非    ADV    v,副詞,否定,体言否定    Polarity=Neg    26    advmod    _    SpaceAfter=No
28    翰    翰    VERB    v,動詞,行為,動作    _    26    ccomp    _    SpaceAfter=No
29    苑    苑    NOUN    v,動詞,行為,動作    _    26    obj    _    SpaceAfter=No
30    何    何    PRON    n,代名詞,疑問,*    AdvType=Cau    26    obj    _    SpaceAfter=No
31    以    以    VERB    v,動詞,行為,動作    _    26    advcl    _    SpaceAfter=No
32    攄    攄    VERB    v,動詞,行為,動作    _    26    obj    _    SpaceAfter=No
33    情    情    VERB    v,動詞,行為,動作    _    26    obj    _    SpaceAfter=No

1    詩    詩    NOUN    n,名詞,主体,書物    _    2    nsubj    _    SpaceAfter=No
2    紀    紀    VERB    v,動詞,行為,動作    _    0    root    _    SpaceAfter=No
3    落    落    NOUN    v,動詞,行為,動作    _    2    obj    _    SpaceAfter=No
4    梅    梅    NOUN    v,動詞,行為,動作    _    3    conj    _    SpaceAfter=No
5    之    之    SCONJ    p,助詞,接続,属格    _    3    case    _    SpaceAfter=No
6    篇    篇    NOUN    n,名詞,可搬,伝達    _    2    obj    _    SpaceAfter=No
7    古    古    NOUN    n,名詞,固定物,関係    Case=Tem    6    obj    _    SpaceAfter=No

1    今    今    NOUN    n,名詞,時,*    Case=Tem    2    nmod    _    SpaceAfter=No
2    夫    夫    PART    n,名詞,人,人    _    4    nsubj    _    SpaceAfter=No
3    何    何    ADV    n,代名詞,疑問,*    AdvType=Cau    4    advmod    _    SpaceAfter=No
4    異    異    VERB    v,動詞,描写,形質    Degree=Pos    0    root    _    SpaceAfter=No
5    矣    矣    PART    p,助詞,句末,*    _    4    discourse:sp    _    SpaceAfter=No

1    宜    宜    AUX    v,動詞,行為,動作    Person=1|PronType=Prs    2    aux    _    SpaceAfter=No
2    賦    賦    VERB    v,動詞,描写,形質    _    0    root    _    SpaceAfter=No
3    園    園    VERB    v,動詞,行為,動作    _    2    obj    _    SpaceAfter=No
4    梅    梅    VERB    v,動詞,行為,動作    _    2    obj    _    SpaceAfter=No

1    聊    聊    VERB    v,動詞,描写,形質    _    2    nsubj    _    SpaceAfter=No
2    成    成    VERB    v,動詞,行為,生産    _    0    root    _    SpaceAfter=No
3    短    短    VERB    v,動詞,描写,量    Degree=Pos    2    obj    _    SpaceAfter=No

1    詠    詠    VERB    v,動詞,行為,動作    _    0    root    _    SpaceAfter=No

残念ながらNLP-Cubeも「文切り&単語切り」→「品詞付与」→「係り受け解析」という順序でモデル化されており、最初の「文切り」でしくじると、かなり絶望的な結果になる。ただ、NLP-Cubeのパイプラインは公開されている上に、言語モデルの作成ツールも一緒に付いてくる。頑張れば、もう少しチューンアップできそうな気がする。

とりあえず、このlzh-0.1モデルを作成するのに使ったシェルスクリプトを、以下に公開しておく。残念ながら、私(安岡孝一)の手元の非力なマシンでは、いくらdynetをメニーコアやGPU化しても、--patienceオプションを1より大きくするのすら、時間的に苦しかった。我こそはと思う方は、是非もっと高精度な古典中国語モデルを作成して、lzh-1.0モデルとして公開してほしい。

#! /bin/sh
TARGET=lzh-0.1
GITHUB=https://github.com/UniversalDependencies/UD_Classical_Chinese-Kyoto.git
BRANCH=dev
PIPELINE='tokenizer lemmatizer tagger parser'
OPTIONS='--autobatch --patience=1'
VECTOR=https://raw.githubusercontent.com/adobe/NLP-Cube/master/examples/wiki.dummy.vec
PYTHON=/usr/bin/python3.7
CUBEDIR=$HOME/.local/lib/python3.7/site-packages/cube
MODELDIR=$HOME/.nlpcube/models
if [ ! -d $CUBEDIR ]
then echo 'please "pip3 install nlpcube" or change CUBEDIR' >&2
     exit 1
fi
V=$MODELDIR/embeddings/`basename $VECTOR`
if [ ! -s $V ]
then mkdir -p $MODELDIR/embeddings
     wget $VECTOR -O $V
fi
if [ -d $MODELDIR/$TARGET ]
then echo $MODELDIR/$TARGET already exits >&2
     exit 1
fi
cd $MODELDIR
git clone -b $BRANCH $GITHUB
if mv `basename $GITHUB .git` $TARGET
then :
else echo Cannot get $GITHUB >&2
     exit 1
fi
cd $TARGET
OP="$OPTIONS --embeddings=$V"
for F in *.conllu
do T=`basename $F .conllu`.txt
   B=`expr $T : '.*-\([a-z]*\)\.txt$'`
   sed -n 's/^# text = //p' $F > $T
   OP="$OP --$B-file=$MODELDIR/$TARGET/$F --raw-$B-file=$MODELDIR/$TARGET/$T"
done
cd $CUBEDIR/..
for P in $PIPELINE
do $PYTHON cube/main.py train --train=$P --store=$MODELDIR/$TARGET/$P $OP
done
( echo '{'
  echo '  "embeddings_file_name": "'`basename $VECTOR`'",'
  echo '  "embeddings_remote_link": "'$VECTOR'",'
  L=`expr $TARGET : '\([a-z]*\)-'`
  echo '  "language_code": "'$L'",'
  date +'  "model_build_date": "%F",'
  echo '  "model_build_source": "'`basename $GITHUB .git`'",'
  echo '  "model_version": '`expr $TARGET : '[a-z]*-\([0-9.]*\)'`,
  case $L in
  lzh|zh|ja) echo '  "token_delimiter": ""' ;;
  *) echo '  "token_delimiter": " "' ;;
  esac
  echo '}'
) > $MODELDIR/$TARGET/metadata.json
exit 0

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

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...