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.