こんにちにゃんです。
水色桜(みずいろさくら)です。
今回は現状日本語モデルで最大規模を誇る言語モデルdeberta-v2-base-japaneseをファインチューニングして、Question-Answeringタスクを解いてみようと思います。
作成したモデルはこちらのサイト(Hugging Face)で配布しています。
初心者でも簡単に使えるようにしているのでぜひ使ってみてください。
環境
torch 1.12.1
transformers 4.24.0
Python 3.9.13
sentencepiece 0.1.97
deberta-v2-base-japaneseとは?
日本語Wikipedeia(3.2GB)および、cc100(85GB)、oscar(54GB)を用いて訓練されたモデルです。京都大学黒橋研究室が公表されました。
データセット
今回はファインチューニングのためのデータとして運転ドメインQAデータセット(DDQA)を用いました。
このデータセットはウェブ上で公開されている運転ドメインのブログ記事を基に構築されており、述語項構造QAデータセット(PAS-QAデータセット)と文章読解QAデータセット(RC-QAデータセット)から構成されています。その中でも、RC-QAデータセットは文章の中から質問に対する答えを抽出する問題です。今回はSQuAD(質問に対する応答(該当部分の抜き出し))の学習を行いたいので、RC-QAデータセットを用いました。
作成したモデルの精度
'em'(厳密一致): 0.8038277511961722, 'f1': 0.8959389668095072
厳密一致およびf1値は両方とも比較的高い値となりました(同じデータセットを用いた際の参考:BERTの厳密一致:0.15)。
デモ
下記のコードを実行することでQAタスクを解くことができます。
こちらのサイト(Hugging Face)から.pthモデルをダウンロードする場合は、.pthファイルを任意のディレクトリに置いて、コメントアウトしてある方のコードを利用してください。
import torch
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
tokenizer = AutoTokenizer.from_pretrained('ku-nlp/deberta-v2-base-japanese')
#model=torch.load('C:\\[modelのあるディレクトリ]\\My_deberta_model_squad.pth') # 学習済みモデルの読み込み(.pthモデルをダウンロードした方はこちらを実行してください)
model=AutoModelForQuestionAnswering.from_pretrained('Mizuiro-sakura/deberta-v2-base-japanese-finetuned-QAe')
text={
'context':'私の名前はEIMIです。好きな食べ物は苺です。 趣味は皆さんと会話することです。',
'question' :'好きな食べ物は何ですか'
}
input_ids=tokenizer.encode(text['question'],text['context']) # tokenizerで形態素解析しつつコードに変換する
output= model(torch.tensor([input_ids])) # 学習済みモデルを用いて解析
prediction = tokenizer.decode(input_ids[torch.argmax(output.start_logits): torch.argmax(output.end_logits)]) # 答えに該当する部分を抜き取る
print(prediction)
苺
終わりに
今回はdeberta-v2-base-japaneseをファインチューニングしてQAタスクを解く方法について書いてきました。
このモデルは厳密一致が0.80と非常に高く、十分実用に足る性能だと感じました。
ぜひ皆さんも使ってみてください。
では、ばいにゃん~。
謝辞
モデルを公開してくださった、京都大学黒橋研究室には感謝いたします。