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

yasuokaの日記: roberta-base-thai-syllable-uposによるタイ語の係り受け解析

日記 by yasuoka

9月11日一昨日の日記の手法を合わせた上に、SuParの助けを借りて、タイ語の係り受け解析モデルを試作してみた。Google Colaboratoryで動かしてみよう。

!pip install transformers'>='4.7.0 supar'>='1.1.1 deplacy'>='2.0.1
from transformers import AutoModelForTokenClassification,AutoTokenizer,TokenClassificationPipeline
from transformers.file_utils import cached_path,hf_bucket_url
from supar import Parser
brt="KoichiYasuoka/roberta-base-thai-syllable-upos"
mdl=AutoModelForTokenClassification.from_pretrained(brt)
tkz=AutoTokenizer.from_pretrained(brt)
pos=TokenClassificationPipeline(model=mdl,tokenizer=tkz,aggregation_strategy="simple")
prs=Parser.load(cached_path(hf_bucket_url(brt,"supar.model")))
def nlp(s):
  d=pos(s)
  e=prs.predict([[t["word"] for t in d]])
  e.sentences[0].values[3]=tuple([t["entity_group"] for t in d])
  e.sentences[0].values[9]=tuple(["SpaceAfter=No" if t["end"]==u["start"] else "_" for t,u in zip(d,d[1:])]+["_"])
  return e
doc=nlp("หลายหัวดีกว่าหัวเดียว")
import deplacy
deplacy.render(doc,WordRight=True)
deplacy.serve(doc,port=None)

「หลายหัวดีกว่าหัวเดียว」を係り受け解析してみたところ、私(安岡孝一)の手元では以下の結果になった。

   det       ╔> DET  หลาย
advmod ╔════>╚═ NOUN หัว
  root ╚═╔═════ ADJ  ดี
  case   ║ ╔══> ADP  กว่า
   obl   ╚>╚═╔═ NOUN หัว
  amod       ╚> ADJ  เดียว

1    หลาย    _    DET    _    _    2    det    _    SpaceAfter=No
2    หัว    _    NOUN    _    _    3    advmod    _    SpaceAfter=No
3    ดี    _    ADJ    _    _    0    root    _    SpaceAfter=No
4    กว่า    _    ADP    _    _    5    case    _    SpaceAfter=No
5    หัว    _    NOUN    _    _    3    obl    _    SpaceAfter=No
6    เดียว    _    ADJ    _    _    5    amod    _    _

SVGで可視化すると、こんな感じ。「หัว」⇐advmod=「ดี」を除いて、まずまずの解析結果だ。ただ、このままだと、ちょっと使いにくいので、さて、どういう形でパッケージ化したらいいかな。

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

アレゲは一日にしてならず -- アレゲ見習い

読み込み中...