KoichiYasuoka commited on
Commit
7685818
1 Parent(s): 9b0d219

initial release

Browse files
README.md ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ tags:
3
+ - "japanese"
4
+ - "question-answering"
5
+ - "dependency-parsing"
6
+ datasets:
7
+ - "universal_dependencies"
8
+ license: "cc-by-sa-4.0"
9
+ pipeline_tag: "question-answering"
10
+ widget:
11
+ - text: "国語"
12
+ context: "全学年にわたって小学校の国語の教科書に挿し絵が用いられている"
13
+ - text: "教科書"
14
+ context: "全学年にわたって小学校の国語の教科書に挿し絵が用いられている"
15
+ - text: "の"
16
+ context: "全学年にわたって小学校の国語[MASK]教科書に挿し絵が用いられている"
17
+ ---
18
+
19
+ # deberta-base-japanese-unidic-ud-head
20
+
21
+ ## Model Description
22
+
23
+ This is a DeBERTa(V2) model pretrained on 青空文庫 for dependency-parsing (head-detection on long-unit-words) as question-answering, derived from [deberta-base-japanese-unidic](https://huggingface.co/KoichiYasuoka/deberta-base-japanese-unidic) and [UD_Japanese-GSDLUW](https://github.com/UniversalDependencies/UD_Japanese-GSDLUW). Use [MASK] inside `context` to avoid ambiguity when specifying a multiple-used word as `question`.
24
+
25
+ ## How to Use
26
+
27
+ ```py
28
+ import torch
29
+ from transformers import AutoTokenizer,AutoModelForQuestionAnswering
30
+ tokenizer=AutoTokenizer.from_pretrained("KoichiYasuoka/deberta-base-japanese-unidic-ud-head")
31
+ model=AutoModelForQuestionAnswering.from_pretrained("KoichiYasuoka/deberta-base-japanese-unidic-ud-head")
32
+ question="国語"
33
+ context="全学年にわたって小学校の国語の教科書に挿し絵が用いられている"
34
+ inputs=tokenizer(question,context,return_tensors="pt")
35
+ outputs=model(**inputs)
36
+ start,end=torch.argmax(outputs.start_logits),torch.argmax(outputs.end_logits)
37
+ print(tokenizer.convert_ids_to_tokens(inputs["input_ids"][0,start:end+1]))
38
+ ```
39
+
40
+ or
41
+
42
+ ```py
43
+ from transformers import (AutoTokenizer,AutoModelForQuestionAnswering,
44
+ AutoModelForTokenClassification,AutoConfig,TokenClassificationPipeline)
45
+ class TaggerPipeline(TokenClassificationPipeline):
46
+ def __call__(self,text):
47
+ d=super().__call__(text)
48
+ if len(d)>0 and ("start" not in d[0] or d[0]["start"]==None):
49
+ import tokenizations
50
+ v=[x["word"] for x in d]
51
+ a2b,b2a=tokenizations.get_alignments(v,text)
52
+ for i,t in enumerate(a2b):
53
+ s,e=(0,0) if t==[] else (t[0],t[-1]+1)
54
+ if t==[] and v[i]==self.tokenizer.unk_token:
55
+ s=([[-1]]+[x for x in a2b[0:i] if x>[]])[-1][-1]+1
56
+ e=([x for x in a2b[i+1:] if x>[]]+[[len(text)]])[0][0]
57
+ d[i]["start"],d[i]["end"]=s,e
58
+ return d
59
+ class TransformersUD(object):
60
+ def __init__(self,bert):
61
+ import os
62
+ self.tokenizer=AutoTokenizer.from_pretrained(bert)
63
+ self.model=AutoModelForQuestionAnswering.from_pretrained(bert)
64
+ x=AutoModelForTokenClassification.from_pretrained
65
+ if os.path.isdir(bert):
66
+ d,t=x(os.path.join(bert,"deprel")),x(os.path.join(bert,"tagger"))
67
+ else:
68
+ from transformers.file_utils import hf_bucket_url
69
+ c=AutoConfig.from_pretrained(hf_bucket_url(bert,"deprel/config.json"))
70
+ d=x(hf_bucket_url(bert,"deprel/pytorch_model.bin"),config=c)
71
+ s=AutoConfig.from_pretrained(hf_bucket_url(bert,"tagger/config.json"))
72
+ t=x(hf_bucket_url(bert,"tagger/pytorch_model.bin"),config=s)
73
+ self.deprel=TaggerPipeline(model=d,tokenizer=self.tokenizer,
74
+ aggregation_strategy="simple")
75
+ self.tagger=TaggerPipeline(model=t,tokenizer=self.tokenizer)
76
+ def __call__(self,text):
77
+ import numpy,torch,ufal.chu_liu_edmonds
78
+ w=[(t["start"],t["end"],t["entity_group"]) for t in self.deprel(text)]
79
+ z,n={t["start"]:t["entity"].split("|") for t in self.tagger(text)},len(w)
80
+ r,m=[text[s:e] for s,e,p in w],numpy.full((n+1,n+1),numpy.nan)
81
+ v,c=self.tokenizer(r,add_special_tokens=False)["input_ids"],[]
82
+ for i,t in enumerate(v):
83
+ q=[self.tokenizer.cls_token_id]+t+[self.tokenizer.sep_token_id]
84
+ c.append([q]+v[0:i]+[[self.tokenizer.mask_token_id]]+v[i+1:]+[[q[-1]]])
85
+ b=[[len(sum(x[0:j+1],[])) for j in range(len(x))] for x in c]
86
+ d=self.model(input_ids=torch.tensor([sum(x,[]) for x in c]),
87
+ token_type_ids=torch.tensor([[0]*x[0]+[1]*(x[-1]-x[0]) for x in b]))
88
+ s,e=d.start_logits.tolist(),d.end_logits.tolist()
89
+ for i in range(n):
90
+ for j in range(n):
91
+ m[i+1,0 if i==j else j+1]=s[i][b[i][j]]+e[i][b[i][j+1]-1]
92
+ m[:,0]=numpy.where(m[:,0]==numpy.nanmax(m[:,0]),0,numpy.nan)
93
+ h=ufal.chu_liu_edmonds.chu_liu_edmonds(m)[0]
94
+ u="# text = "+text.replace("\n"," ")+"\n"
95
+ for i,(s,e,p) in enumerate(w,1):
96
+ p="root" if h[i]==0 else "dep" if p=="root" else p
97
+ u+="\t".join([str(i),r[i-1],"_",z[s][0][2:],"_","|".join(z[s][1:]),
98
+ str(h[i]),p,"_","_" if i<n and w[i][0]<e else "SpaceAfter=No"])+"\n"
99
+ return u+"\n"
100
+
101
+ nlp=TransformersUD("KoichiYasuoka/deberta-base-japanese-unidic-ud-head")
102
+ print(nlp("全学年にわたって小学校の国語の教科書に挿し絵が用いられている"))
103
+ ```
104
+
105
+ [fugashi](https://pypi.org/project/fugashi) [unidic-lite](https://pypi.org/project/unidic-lite) [pytokenizations](https://pypi.org/project/pytokenizations) and [ufal.chu-liu-edmonds](https://pypi.org/project/ufal.chu-liu-edmonds/) required.
config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "DebertaV2ForQuestionAnswering"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "bos_token_id": 0,
7
+ "eos_token_id": 2,
8
+ "hidden_act": "gelu",
9
+ "hidden_dropout_prob": 0.1,
10
+ "hidden_size": 768,
11
+ "initializer_range": 0.02,
12
+ "intermediate_size": 3072,
13
+ "layer_norm_eps": 1e-07,
14
+ "max_position_embeddings": 512,
15
+ "max_relative_positions": -1,
16
+ "model_type": "deberta-v2",
17
+ "num_attention_heads": 12,
18
+ "num_hidden_layers": 12,
19
+ "pad_token_id": 1,
20
+ "pooler_dropout": 0,
21
+ "pooler_hidden_act": "gelu",
22
+ "pooler_hidden_size": 768,
23
+ "pos_att_type": null,
24
+ "position_biased_input": true,
25
+ "relative_attention": false,
26
+ "tokenizer_class": "BertJapaneseTokenizer",
27
+ "torch_dtype": "float32",
28
+ "transformers_version": "4.19.4",
29
+ "type_vocab_size": 0,
30
+ "vocab_size": 32000
31
+ }
deprel/config.json ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "DebertaV2ForTokenClassification"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "bos_token_id": 0,
7
+ "eos_token_id": 2,
8
+ "hidden_act": "gelu",
9
+ "hidden_dropout_prob": 0.1,
10
+ "hidden_size": 768,
11
+ "id2label": {
12
+ "0": "B-acl",
13
+ "1": "B-advcl",
14
+ "2": "B-advmod",
15
+ "3": "B-amod",
16
+ "4": "B-aux",
17
+ "5": "B-case",
18
+ "6": "B-cc",
19
+ "7": "B-ccomp",
20
+ "8": "B-compound",
21
+ "9": "B-cop",
22
+ "10": "B-csubj",
23
+ "11": "B-dep",
24
+ "12": "B-det",
25
+ "13": "B-discourse",
26
+ "14": "B-dislocated",
27
+ "15": "B-fixed",
28
+ "16": "B-mark",
29
+ "17": "B-nmod",
30
+ "18": "B-nsubj",
31
+ "19": "B-nummod",
32
+ "20": "B-obj",
33
+ "21": "B-obl",
34
+ "22": "B-punct",
35
+ "23": "B-root",
36
+ "24": "I-acl",
37
+ "25": "I-advcl",
38
+ "26": "I-advmod",
39
+ "27": "I-amod",
40
+ "28": "I-aux",
41
+ "29": "I-case",
42
+ "30": "I-cc",
43
+ "31": "I-ccomp",
44
+ "32": "I-compound",
45
+ "33": "I-csubj",
46
+ "34": "I-dep",
47
+ "35": "I-discourse",
48
+ "36": "I-dislocated",
49
+ "37": "I-fixed",
50
+ "38": "I-mark",
51
+ "39": "I-nmod",
52
+ "40": "I-nsubj",
53
+ "41": "I-nummod",
54
+ "42": "I-obj",
55
+ "43": "I-obl",
56
+ "44": "I-punct",
57
+ "45": "I-root"
58
+ },
59
+ "initializer_range": 0.02,
60
+ "intermediate_size": 3072,
61
+ "label2id": {
62
+ "B-acl": 0,
63
+ "B-advcl": 1,
64
+ "B-advmod": 2,
65
+ "B-amod": 3,
66
+ "B-aux": 4,
67
+ "B-case": 5,
68
+ "B-cc": 6,
69
+ "B-ccomp": 7,
70
+ "B-compound": 8,
71
+ "B-cop": 9,
72
+ "B-csubj": 10,
73
+ "B-dep": 11,
74
+ "B-det": 12,
75
+ "B-discourse": 13,
76
+ "B-dislocated": 14,
77
+ "B-fixed": 15,
78
+ "B-mark": 16,
79
+ "B-nmod": 17,
80
+ "B-nsubj": 18,
81
+ "B-nummod": 19,
82
+ "B-obj": 20,
83
+ "B-obl": 21,
84
+ "B-punct": 22,
85
+ "B-root": 23,
86
+ "I-acl": 24,
87
+ "I-advcl": 25,
88
+ "I-advmod": 26,
89
+ "I-amod": 27,
90
+ "I-aux": 28,
91
+ "I-case": 29,
92
+ "I-cc": 30,
93
+ "I-ccomp": 31,
94
+ "I-compound": 32,
95
+ "I-csubj": 33,
96
+ "I-dep": 34,
97
+ "I-discourse": 35,
98
+ "I-dislocated": 36,
99
+ "I-fixed": 37,
100
+ "I-mark": 38,
101
+ "I-nmod": 39,
102
+ "I-nsubj": 40,
103
+ "I-nummod": 41,
104
+ "I-obj": 42,
105
+ "I-obl": 43,
106
+ "I-punct": 44,
107
+ "I-root": 45
108
+ },
109
+ "layer_norm_eps": 1e-07,
110
+ "max_position_embeddings": 512,
111
+ "max_relative_positions": -1,
112
+ "model_type": "deberta-v2",
113
+ "num_attention_heads": 12,
114
+ "num_hidden_layers": 12,
115
+ "pad_token_id": 1,
116
+ "pooler_dropout": 0,
117
+ "pooler_hidden_act": "gelu",
118
+ "pooler_hidden_size": 768,
119
+ "pos_att_type": null,
120
+ "position_biased_input": true,
121
+ "relative_attention": false,
122
+ "tokenizer_class": "BertJapaneseTokenizer",
123
+ "torch_dtype": "float32",
124
+ "transformers_version": "4.19.4",
125
+ "type_vocab_size": 0,
126
+ "vocab_size": 32000
127
+ }
deprel/pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:138e98db80c785bd43a3f297e4c8c901c41306165e8dddbe51e098b8aa6ae753
3
+ size 440313331
deprel/special_tokens_map.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]"}
deprel/tokenizer_config.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]", "do_lower_case": false, "do_word_tokenize": true, "do_subword_tokenize": true, "word_tokenizer_type": "mecab", "subword_tokenizer_type": "wordpiece", "never_split": ["[CLS]", "[PAD]", "[SEP]", "[UNK]", "[MASK]"], "mecab_kwargs": {"mecab_dic": "unidic_lite"}, "model_max_length": 512, "tokenizer_class": "BertJapaneseTokenizer"}
deprel/vocab.txt ADDED
The diff for this file is too large to render. See raw diff
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:51c011b6df11a8bdf6271b52daec0ab2715384ff3edb2c5aead065dbd0391693
3
+ size 440178035
special_tokens_map.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]"}
tagger/config.json ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "DebertaV2ForTokenClassification"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "bos_token_id": 0,
7
+ "eos_token_id": 2,
8
+ "hidden_act": "gelu",
9
+ "hidden_dropout_prob": 0.1,
10
+ "hidden_size": 768,
11
+ "id2label": {
12
+ "0": "B-ADJ|_",
13
+ "1": "B-ADP|_",
14
+ "2": "B-ADV|_",
15
+ "3": "B-AUX|Polarity=Neg",
16
+ "4": "B-AUX|_",
17
+ "5": "B-CCONJ|_",
18
+ "6": "B-DET|_",
19
+ "7": "B-INTJ|_",
20
+ "8": "B-NOUN|Polarity=Neg",
21
+ "9": "B-NOUN|_",
22
+ "10": "B-NUM|_",
23
+ "11": "B-PART|_",
24
+ "12": "B-PRON|_",
25
+ "13": "B-PROPN|_",
26
+ "14": "B-PUNCT|_",
27
+ "15": "B-SCONJ|_",
28
+ "16": "B-SYM|_",
29
+ "17": "B-VERB|_",
30
+ "18": "B-X|_",
31
+ "19": "I-ADJ|_",
32
+ "20": "I-ADP|_",
33
+ "21": "I-ADV|_",
34
+ "22": "I-AUX|Polarity=Neg",
35
+ "23": "I-AUX|_",
36
+ "24": "I-CCONJ|_",
37
+ "25": "I-INTJ|_",
38
+ "26": "I-NOUN|_",
39
+ "27": "I-NUM|_",
40
+ "28": "I-PART|_",
41
+ "29": "I-PRON|_",
42
+ "30": "I-PROPN|_",
43
+ "31": "I-PUNCT|_",
44
+ "32": "I-SCONJ|_",
45
+ "33": "I-SYM|_",
46
+ "34": "I-VERB|_",
47
+ "35": "I-X|_"
48
+ },
49
+ "initializer_range": 0.02,
50
+ "intermediate_size": 3072,
51
+ "label2id": {
52
+ "B-ADJ|_": 0,
53
+ "B-ADP|_": 1,
54
+ "B-ADV|_": 2,
55
+ "B-AUX|Polarity=Neg": 3,
56
+ "B-AUX|_": 4,
57
+ "B-CCONJ|_": 5,
58
+ "B-DET|_": 6,
59
+ "B-INTJ|_": 7,
60
+ "B-NOUN|Polarity=Neg": 8,
61
+ "B-NOUN|_": 9,
62
+ "B-NUM|_": 10,
63
+ "B-PART|_": 11,
64
+ "B-PRON|_": 12,
65
+ "B-PROPN|_": 13,
66
+ "B-PUNCT|_": 14,
67
+ "B-SCONJ|_": 15,
68
+ "B-SYM|_": 16,
69
+ "B-VERB|_": 17,
70
+ "B-X|_": 18,
71
+ "I-ADJ|_": 19,
72
+ "I-ADP|_": 20,
73
+ "I-ADV|_": 21,
74
+ "I-AUX|Polarity=Neg": 22,
75
+ "I-AUX|_": 23,
76
+ "I-CCONJ|_": 24,
77
+ "I-INTJ|_": 25,
78
+ "I-NOUN|_": 26,
79
+ "I-NUM|_": 27,
80
+ "I-PART|_": 28,
81
+ "I-PRON|_": 29,
82
+ "I-PROPN|_": 30,
83
+ "I-PUNCT|_": 31,
84
+ "I-SCONJ|_": 32,
85
+ "I-SYM|_": 33,
86
+ "I-VERB|_": 34,
87
+ "I-X|_": 35
88
+ },
89
+ "layer_norm_eps": 1e-07,
90
+ "max_position_embeddings": 512,
91
+ "max_relative_positions": -1,
92
+ "model_type": "deberta-v2",
93
+ "num_attention_heads": 12,
94
+ "num_hidden_layers": 12,
95
+ "pad_token_id": 1,
96
+ "pooler_dropout": 0,
97
+ "pooler_hidden_act": "gelu",
98
+ "pooler_hidden_size": 768,
99
+ "pos_att_type": null,
100
+ "position_biased_input": true,
101
+ "relative_attention": false,
102
+ "tokenizer_class": "BertJapaneseTokenizer",
103
+ "torch_dtype": "float32",
104
+ "transformers_version": "4.19.4",
105
+ "type_vocab_size": 0,
106
+ "vocab_size": 32000
107
+ }
tagger/pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:458bfa75f0bdc5c967c998221e40073a08761a4aaf424a5af3b332310e0eb620
3
+ size 440282611
tagger/special_tokens_map.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]"}
tagger/tokenizer_config.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]", "do_lower_case": false, "do_word_tokenize": true, "do_subword_tokenize": true, "word_tokenizer_type": "mecab", "subword_tokenizer_type": "wordpiece", "never_split": ["[CLS]", "[PAD]", "[SEP]", "[UNK]", "[MASK]"], "mecab_kwargs": {"mecab_dic": "unidic_lite"}, "model_max_length": 512, "tokenizer_class": "BertJapaneseTokenizer"}
tagger/vocab.txt ADDED
The diff for this file is too large to render. See raw diff
tokenizer_config.json ADDED
@@ -0,0 +1 @@
 
1
+ {"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]", "do_lower_case": false, "do_word_tokenize": true, "do_subword_tokenize": true, "word_tokenizer_type": "mecab", "subword_tokenizer_type": "wordpiece", "never_split": ["[CLS]", "[PAD]", "[SEP]", "[UNK]", "[MASK]"], "mecab_kwargs": {"mecab_dic": "unidic_lite"}, "model_max_length": 512, "tokenizer_class": "BertJapaneseTokenizer"}
vocab.txt ADDED
The diff for this file is too large to render. See raw diff