Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Ryo.Fのトモ近況 | スラド
[go: Go Back, main page]



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

Ryo.Fさんのトモダチの日記。 今週も投票をしましたか?

15033621 journal
人工知能

yasuokaの日記: UniDic2UD + COMBO-pytorchの日本語係り受け解析結果をspaCyで扱うためのpythonモジュールUniDic-COMBOを仮リリース

日記 by yasuoka

昨日の日記で作ったCOMBO-pytorchの日本語係り受け解析モデルを改良した上で、UniDic2UDspaCyに繋いでみた。アイデアとしては、私(安岡孝一)の『形態素解析部の付け替えによる近代日本語(旧字旧仮名)の係り受け解析』を応用したもので、UniDic-COMBOという名前で仮リリースすることにする。インストールは、Linuxならば

$ pip3 install git+https://github.com/KoichiYasuoka/UniDic-COMBO

一発で行けると思うが、元のCOMBO-pytorchがPyTorchだのAllenNLPだのTransformersだのJsonnetだのをインストールしまくるため、Linux以外の環境でのインストールは困難を極める。運よくインストールできたら、「產まれん子は君に似て黑き瞳子をや得ん」を近代文語UniDicで形態素解析して、さらにCOMBO-pytorchで係り受け解析してみよう。

$ python3
>>> import unidic_combo
>>> nlp=unidic_combo.load("kindai")
>>> doc=nlp("產まれん子は君に似て黑き瞳子をや得ん")
>>> import deplacy
>>> deplacy.render(doc,Japanese=True)
產ま VERB  ═╗═╗<╗       acl(連体修飾節)
れ   AUX   <╝ ║ ║       aux(動詞補助成分)
ん   AUX   <══╝ ║       aux(動詞補助成分)
子   NOUN  ═╗═══╝<════╗ nsubj(主語)
は   ADP   <╝         ║ case(格表示)
君   PRON  ═╗<╗       ║ obl(斜格補語)
に   ADP   <╝ ║       ║ case(格表示)
似   VERB  ═══╝═╗<══╗ ║ advcl(連用修飾節)
て   SCONJ <════╝   ║ ║ mark(標識)
黑き ADJ   <════╗   ║ ║ acl(連体修飾節)
瞳子 NOUN  ═╗═╗═╝<╗ ║ ║ obj(目的語)
を   PART  <╝ ║   ║ ║ ║ case(格表示)
や   ADP   <══╝   ║ ║ ║ case(格表示)
得   VERB  ═╗═════╝═╝═╝ ROOT(親)
ん   AUX   <╝           aux(動詞補助成分)

最初の起動では、言語モデルや辞書をダウンロードしてくるので、かなり時間がかかる。でも、一度ちゃんと動けば、近代文語や旧字旧仮名の係り受け解析が、高い精度で可能になるはずだ。spaCy-SynChaともども、ぜひ試してみてほしい。

15032732 journal
人工知能

yasuokaの日記: COMBO-pytorchの日本語係り受け解析モデルをGoogle Colaboratoryで作るには

日記 by yasuoka

11月18日の日記で紹介したCOMBO-pytorchだが、Google Colaboratory(GPU有り)とUD_Japanese-GSDとcl-tohoku/bert-base-japanese-whole-word-maskingを組み合わせて、日本語係り受け解析モデルを試作してみた。

!test -d UD_Japanese-GSD || git clone --depth=1 https://github.com/UniversalDependencies/UD_Japanese-GSD
!test -d combo || git clone --depth=1 https://github.com/ipipan/combo
!test -f config.template.jsonnet || ( ln -s combo/config.template.jsonnet . && cd combo && pip install . )
!pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
!pip install fugashi ipadic
from google.colab import drive
drive.mount("/content/drive")
!combo --mode train --cuda_device 0 --num_epochs 100 --pretrained_transformer_name cl-tohoku/bert-base-japanese-whole-word-masking --training_data_path UD_Japanese-GSD/ja_gsd-ud-train.conllu --validation_data_path UD_Japanese-GSD/ja_gsd-ud-dev.conllu
!cp `ls -1t /tmp/allennlp*/model.tar.gz | head -1` 'drive/My Drive/combo-japanese-bert.tar.gz'

私(安岡孝一)の手元ではLASが95%を超えていて、かなりいい具合になったので、Google Drive上でcombo-japanese-bert.tar.gzとして公開しておいた。ちゃんと品詞付与もおこなうが、LEMMA(見出し形)はイマイチなので、もう少しチューニングすべきかもしれない。よければ読者諸氏も、以下のような形で、試しに使ってみてほしい。

!pip install deplacy fugashi ipadic gdown COMBO@git+https://github.com/ipipan/combo
!test -f combo-japanese-bert.tar.gz || gdown --id 18BrXQZicS-VE3ji4sufNEN2bJn9L3rsi
import combo.predict,transformers
tokenizer=transformers.MecabTokenizer()
parser=combo.predict.SemanticMultitaskPredictor.from_pretrained("./combo-japanese-bert.tar.gz")
doc=parser([tokenizer.tokenize("国境の長いトンネルを抜けると雪国であった。")])[0]
import deplacy
deplacy.render(doc,Japanese=True)
deplacy.serve(doc,port=None)

15031661 journal
人工知能

yasuokaの日記: SuParの日本語係り受け解析モデルをGoogle Colaboratoryで作るには

日記 by yasuoka

昨日の日記で紹介したSuParだが、Google Colaboratory(GPU有り)とUD_Japanese-GSDとcl-tohoku/bert-base-japanese-whole-word-maskingを組み合わせて、biaffineの日本語係り受け解析モデルを試作してみた。

!test -d UD_Japanese-GSD || git clone --depth=1 https://github.com/UniversalDependencies/UD_Japanese-GSD
!pip install transformers fugashi ipadic supar@git+https://github.com/yzhangcs/parser
!pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
from google.colab import drive
drive.mount("/content/drive")
!python -m supar.cmds.biaffine_dependency train -b -d 0 -p 'drive/My Drive/ja_gsd_bert.supar' --epochs=1000 -f bert --bert cl-tohoku/bert-base-japanese-whole-word-masking --train UD_Japanese-GSD/ja_gsd-ud-train.conllu --dev UD_Japanese-GSD/ja_gsd-ud-dev.conllu --test UD_Japanese-GSD/ja_gsd-ud-test.conllu --embed=''

epochsを1000に設定したのだが、私(安岡孝一)の手元では、370回でSuParが飽和してしまった。LASは93%程度で、まあまあ使えるようなので、とりあえずGoogle Drive上で日本語係り受け解析モデルを公開しておく。よければ以下のような感じで、試しに使ってみてほしい。

!pip install transformers fugashi ipadic gdown deplacy supar@git+https://github.com/yzhangcs/parser
!pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
!test -f ja_gsd_bert.supar || gdown --id 1--mos-GuSdpmVbgAdEgnDvefEJH88lFz
from transformers import MecabTokenizer
from supar import Parser
tokenizer=MecabTokenizer()
parser=Parser.load("./ja_gsd_bert.supar")
doc=parser.predict(tokenizer.tokenize("国境の長いトンネルを抜けると雪国であった。"))
import deplacy
deplacy.render(doc.sentences[0],Japanese=True)
deplacy.serve(doc.sentences[0],port=None)

15029991 journal
アメリカ合衆国

yasuokaの日記: SuParの英語係り受け解析モデルをdeplacyに繫ぐには

日記 by yasuoka

SuParがpython 3.6に対応したので、Google Colaboratoryで動かしてみることにした。英語モデルのうち、性能が良さそうなのはbiaffine-dep-bert-enなので、これをdeplacyに繋いでみよう。

!pip install transformers deplacy supar@git+https://github.com/yzhangcs/parser
!pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
import nltk
nltk.download("punkt")
from supar import Parser
parser=Parser.load("biaffine-dep-bert-en")
doc=parser.predict(nltk.word_tokenize("I saw a horse yesterday which had no name."))
import deplacy
deplacy.render(doc.sentences[0])
deplacy.serve(doc.sentences[0],port=None)

「I saw a horse yesterday which had no name.」を係り受け解析してみたところ、私(安岡孝一)の手元では以下の結果になった。

I         <══════════════╗   nsubj
saw       ═══════════╗═╗═╝═╗ root
a         <════════╗ ║ ║   ║ det
horse     ═══════╗═╝<╝ ║   ║ dobj
yesterday <══════║═════╝   ║ tmod
which     <════╗ ║         ║ nsubj
had       ═══╗═╝<╝         ║ rcmod
no        <╗ ║             ║ det
name      ═╝<╝             ║ dobj
.         <════════════════╝ punct

1    I    _    _    _    _    2    nsubj    _    _
2    saw    _    _    _    _    0    root    _    _
3    a    _    _    _    _    4    det    _    _
4    horse    _    _    _    _    2    dobj    _    _
5    yesterday    _    _    _    _    2    tmod    _    _
6    which    _    _    _    _    7    nsubj    _    _
7    had    _    _    _    _    4    rcmod    _    _
8    no    _    _    _    _    9    det    _    _
9    name    _    _    _    _    7    dobj    _    _
10    .    _    _    _    _    2    punct    _    _

SVGで可視化すると、こんな感じ。品詞が全て「???」になっているのと、係り受けタグが古めかしいのだが、ちゃんと解析できているようだ。ただ、『Efficient Second-Order TreeCRF for Neural Dependency Parsing』を読む限りでは、biaffine-dep-bert-enよりcrf2o-dep-enを使うべきなのだろうが、さて、どうしようかな。

typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...