File size: 5,595 Bytes
e196f03 448fcde e196f03 448fcde 2599ad0 448fcde 2599ad0 448fcde ac74763 448fcde ac74763 448fcde 40bf145 448fcde 7c2ad93 448fcde |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
---
license: mit
language: ja
library_name: transformers
tags:
- pytorch
- deberta
- deberta-v2
- commonsenseqa
- commonsense_qa
- commonsense-qa
- CommonsenseQA
datasets:
- wikipedia
- cc100
- oscar
metrics:
- accuracy
---
# このモデルはdeberta-v2-base-japaneseをファインチューニングしてCommonsenseQA(選択式の質問)に用いれるようにしたものです。
このモデルはdeberta-v2-base-japaneseをyahoo japan/JGLUEのJCommonsenseQA( https://github.com/yahoojapan/JGLUE ) を用いてファインチューニングしたものです。
形態素解析のためにJumanを用いるバージョンです。
このモデルを利用する際はJumanをインストールしてください。
JUMANのインストール方法は( https://qiita.com/Helmet/items/b76ae8abc47186e24401 )を参考にしてください。
# This model is fine-tuned model for CommonsenseQA which is based on deberta-v2-base-japanese
This model is fine-tuned by using JGLUE/JCommonsenseQA dataset.
You could use this model for CommonsenseQA tasks.
You need to install Juman.
So, please check out this site ( https://qiita.com/Helmet/items/b76ae8abc47186e24401 ) to install Juman
# How to use 使い方
transformersおよびpytorch、knp、pyknp、Juman、textspanをインストールしてください。
以下のコードを実行することで、CommonsenseQAタスクを解かせることができます。 please execute this code.
```python
from transformers import AutoModelForMultipleChoice
import torch
import json
import numpy as np
# 初回はこちらを実行してください
#model=AutoModelForMultipleChoice.from_pretrained('Mizuiro-sakura/deberta-v2-base-juman-finetuned-commonsenseqa')
# 二回目以降はこちらを実行してください
# modelフォルダをダウンロードしたパスを入力してください。defaultだとC:\Users\[ユーザー名]\.cache\huggingface\hubにあります。
model=AutoModelForMultipleChoice.from_pretrained('C:\\Users\\.cache\\huggingface\\hub\\models--Mizuiro-sakura--deberta-v2-base-juman-finetuned-commonsenseqa')
from transformers import DebertaV2TokenizerFast
tkz=DebertaV2TokenizerFast.from_pretrained("Mizuiro-sakura/deberta-v2-base-juman-finetuned-commonsenseqa")
tkz.__class__.__name__="JumanppDebertaV2TokenizerFast"
tkz.init_kwargs["auto_map"]={"AutoTokenizer":[None,"tokenizer.JumanppDebertaV2TokenizerFast"]}
tkz.save_pretrained("Mizuiro-sakura/deberta-v2-base-juman-finetuned-commonsenseqa")
from transformers.models.bert_japanese.tokenization_bert_japanese import JumanppTokenizer
class JumanppPreTokenizer(JumanppTokenizer):
def jumanpp_split(self,i,normalized_string):
import textspan
t=str(normalized_string)
k=self.tokenize(t)
return [normalized_string[s:e] for c in textspan.get_original_spans(k,t) for s,e in c]
def pre_tokenize(self,pretok):
pretok.split(self.jumanpp_split)
class JumanppDebertaV2TokenizerFast(DebertaV2TokenizerFast):
def __init__(self,**kwargs):
from tokenizers.pre_tokenizers import PreTokenizer,Metaspace,Sequence
super().__init__(**kwargs)
self._tokenizer.pre_tokenizer=Sequence([PreTokenizer.custom(JumanppPreTokenizer()),Metaspace()])
def save_pretrained(self,save_directory,**kwargs):
import os
import shutil
from tokenizers.pre_tokenizers import PreTokenizer,Metaspace,Sequence
self._auto_map={"AutoTokenizer":[None,"tokenizer.JumanppDebertaV2TokenizerFast"]}
self._tokenizer.pre_tokenizer=Metaspace()
super().save_pretrained(save_directory,**kwargs)
self._tokenizer.pre_tokenizer=Sequence([PreTokenizer.custom(JumanppPreTokenizer()),Metaspace()])
shutil.copy(os.path.abspath(__file__),os.path.join(save_directory,"tokenizer.py"))
question ="主に子ども向けのもので、イラストのついた物語が書かれているものはどれ?"
choice1 = "世界"
choice2 = "写真集"
choice3 = "絵本"
choice4 = "論文"
choice5 = "図鑑"
x1=tkz([question,question,question,question,question],[choice1,choice2,choice3,choice4,choice5],
max_length=64, truncation=True, padding=True)
leng=len(x1['input_ids'][0])
leng2=len(x1['attention_mask'][0])
# モデルに入力するための前処理
X1 = np.empty(shape=(1, 5, leng))
X2 = np.empty(shape=(1, 5, leng))
X1[0, :, :] = x1['input_ids']
X2[0, :, :] = x1['attention_mask']
# モデルにトークンを入力し、最も確率が高い選択肢を抽出する
results = model(torch.tensor(X1).to(torch.int64),torch.tensor(X2).to(torch.int64))
print(torch.argmax(results.logits)+1)
```
# モデルの精度 accuracy of model
eval_accuracy = 86.51 (日本語baseモデルとしては最高の精度)
eval_loss = 0.5917
(参考 BERT : 72.0, XLM RoBERTa base : 68.7, LUKE : 80.0)
# deberta-v2-base-japaneseとは?
日本語Wikipedeia(3.2GB)および、cc100(85GB)、oscar(54GB)を用いて訓練されたモデルです。
京都大学黒橋研究室が公表されました。
# Model description
This is a Japanese DeBERTa V2 base model pre-trained on Japanese Wikipedia, the Japanese portion of CC-100, and the Japanese portion of OSCAR.
# Acknowledgments 謝辞
モデルを公開してくださった京都大学黒橋研究室には感謝いたします。
またコードを作成するにあたり、KoichiYasuokaさんの日記( https://srad.jp/~yasuoka/journal/659881/ )を参考にさせて頂きました。
深く感謝いたします。
I would like to thank Kurohashi Lab at Kyoto University.
And I would like to thank KoichiYasuoka.
|