国語研長単位係り受け解析モデルgpt2-{small,medium,large}-japanese-ud-causalリリース

[6月23日の記事](https://qiita.com/KoichiYasuoka/items/292cf73ed83dc1216559)の続きだが、国語研長単位[UD-Japanese-GSDLUW](https://github.com/UniversalDependencies/UD_Japanese-GSDLUW)とGPT2ForTokenClassificationを使って、係り受け解析モデルgpt2-{[small](https://huggingface.co/KoichiYasuoka/gpt2-small-japanese-ud-causal),[medium](https://huggingface.co/KoichiYasuoka/gpt2-medium-japanese-ud-causal),[large](https://huggingface.co/KoichiYasuoka/gpt2-large-japanese-ud-causal)}-japanese-ud-causalを作ってみた。単方向モデルで係り受け解析というのは、正直なかなか手強かったのだが、何とか隣接確率行列を作り出すことに成功したようだ。ja_gsdluw-ud-test.conlluによるベンチマーク・プログラムは、Google Colaboratory (GPU版)だと、こんな感じ。

```
!pip install transformers
models=["KoichiYasuoka/gpt2-small-japanese-ud-causal","KoichiYasuoka/gpt2-medium-japanese-ud-causal","KoichiYasuoka/gpt2-large-japanese-ud-causal"]
import os,sys,subprocess
from transformers import pipeline
url="https://github.com/UniversalDependencies/UD_Japanese-GSDLUW"
d=os.path.basename(url)
!test -d {d} || git clone --depth=1 {url}
!for F in train dev test ; do cp {d}/*-$$F.conllu $$F.conllu ; done
url="https://universaldependencies.org/conll18/conll18_ud_eval.py"
c=os.path.basename(url)
!test -f {c} || curl -LO {url}
for mdl in models:
  nlp=pipeline("universal-dependencies",mdl,trust_remote_code=True,device=0)
  with open("test.conllu","r",encoding="utf-8") as r:
    s=r.read()
  with open("result-test.conllu","w",encoding="utf-8") as w:
    for t in s.split("\n"):
      if t.startswith("# text = "):
        w.write(nlp(t[9:]))
  print("\n***",mdl)
  print(subprocess.run([sys.executable,c,"--verbose","test.conllu","result-test.conllu"],capture_output=True,text=True).stdout)
```

私(安岡孝一)の手元では、以下の結果が出力された。

```
*** KoichiYasuoka/gpt2-small-japanese-ud-causal
Metric     | Precision |    Recall |  F1 Score | AligndAcc
-----------+-----------+-----------+-----------+-----------
Tokens     |     96.96 |     97.55 |     97.25 |
Sentences  |    100.00 |    100.00 |    100.00 |
Words      |     96.96 |     97.55 |     97.25 |
UPOS       |     94.49 |     95.06 |     94.78 |     97.45
XPOS       |      0.00 |      0.00 |      0.00 |      0.00
UFeats     |     96.90 |     97.49 |     97.19 |     99.94
AllTags    |      0.00 |      0.00 |      0.00 |      0.00
Lemmas     |      0.00 |      0.00 |      0.00 |      0.00
UAS        |     88.81 |     89.35 |     89.08 |     91.59
LAS        |     87.59 |     88.12 |     87.85 |     90.34
CLAS       |     80.60 |     81.46 |     81.03 |     84.20
MLAS       |     76.84 |     77.66 |     77.25 |     80.27
BLEX       |      0.00 |      0.00 |      0.00 |      0.00

*** KoichiYasuoka/gpt2-medium-japanese-ud-causal
Metric     | Precision |    Recall |  F1 Score | AligndAcc
-----------+-----------+-----------+-----------+-----------
Tokens     |     96.65 |     97.24 |     96.95 |
Sentences  |    100.00 |    100.00 |    100.00 |
Words      |     96.65 |     97.24 |     96.95 |
UPOS       |     94.26 |     94.83 |     94.55 |     97.52
XPOS       |      0.00 |      0.00 |      0.00 |      0.00
UFeats     |     96.62 |     97.20 |     96.91 |     99.96
AllTags    |      0.00 |      0.00 |      0.00 |      0.00
Lemmas     |      0.00 |      0.00 |      0.00 |      0.00
UAS        |     88.63 |     89.16 |     88.90 |     91.70
LAS        |     87.49 |     88.02 |     87.76 |     90.52
CLAS       |     80.51 |     81.73 |     81.11 |     84.99
MLAS       |     76.83 |     77.99 |     77.41 |     81.11
BLEX       |      0.00 |      0.00 |      0.00 |      0.00

*** KoichiYasuoka/gpt2-large-japanese-ud-causal
Metric     | Precision |    Recall |  F1 Score | AligndAcc
-----------+-----------+-----------+-----------+-----------
Tokens     |     96.07 |     96.65 |     96.36 |
Sentences  |    100.00 |    100.00 |    100.00 |
Words      |     96.07 |     96.65 |     96.36 |
UPOS       |     93.78 |     94.34 |     94.06 |     97.61
XPOS       |      0.00 |      0.00 |      0.00 |      0.00
UFeats     |     96.05 |     96.63 |     96.34 |     99.98
AllTags    |      0.00 |      0.00 |      0.00 |      0.00
Lemmas     |      0.00 |      0.00 |      0.00 |      0.00
UAS        |     87.86 |     88.39 |     88.12 |     91.45
LAS        |     86.65 |     87.17 |     86.91 |     90.19
CLAS       |     79.79 |     81.00 |     80.39 |     85.04
MLAS       |     76.07 |     77.22 |     76.64 |     81.07
BLEX       |      0.00 |      0.00 |      0.00 |      0.00
```

UPOS/LAS/MLASは、smallが94.78/87.85/77.25、mediumが94.55/87.76/77.41、largeが94.06/86.91/76.64となっていて、[2022年11月27日の日記](https://srad.jp/~yasuoka/journal/658348)と較べると、もう一息の結果だったりする。やっぱり係り受け解析は、GPT-2のような単方向モデルより、BERT・RoBERTa・DeBERTaのような双方向モデルの方が向いてるのかな。