Views
No views yet
dict_path.1from typing import Optional
2
3from tokenizers import Tokenizer, NormalizedString, PreTokenizedString
4from tokenizers.processors import BertProcessing
5from tokenizers.pre_tokenizers import PreTokenizer
6from transformers import PreTrainedTokenizerFast
7
8from pyknp import Juman
9import mojimoji
10import textspan
11
12class JumanPreTokenizer:
13 def __init__(self):
14 self.juman = Juman("jumanpp", multithreading=True)
15
16 def tokenize(self, sequence: str) -> list[str]:
17 text = mojimoji.han_to_zen(sequence).rstrip()
18 try:
19 result = self.juman.analysis(text)
20 except:
21 traceback.print_exc()
22 text = ""
23 result = self.juman.analysis(text)
24 return [mrph.midasi for mrph in result.mrph_list()]
25
26 def custom_split(self, i: int, normalized_string: NormalizedString) -> list[NormalizedString]:
27 text = str(normalized_string)
28 tokens = self.tokenize(text)
29 tokens_spans = textspan.get_original_spans(tokens, text)
30 return [normalized_string[st:ed] for cahr_spans in tokens_spans for st,ed in cahr_spans]
31
32 def pre_tokenize(self, pretok: PreTokenizedString):
33 pretok.split(self.custom_split)
34
35# load a pre-tokenizer
36pre_tokenizer = JumanPreTokenizer()
37
38# load a tokenizer
39dict_path = /path/to/jumanpp_wordpiece.json
40tokenizer = Tokenizer.from_file(dict_path)
41tokenizer.post_processor = BertProcessing(
42 cls=("[CLS]", tokenizer.token_to_id('[CLS]')),
43 sep=("[SEP]", tokenizer.token_to_id('[SEP]'))
44)
45
46# convert to PreTrainedTokenizerFast
47tokenizer = PreTrainedTokenizerFast(
48 tokenizer_object=tokenizer,
49 unk_token='[UNK]',
50 cls_token='[CLS]',
51 sep_token='[SEP]',
52 pad_token='[PAD]',
53 mask_token='[MASK]'
54)
55
56# set a pre-tokenizer
57tokenizer._tokenizer.pre_tokenizer = PreTokenizer.custom(pre_tokenizer)1# Test
2test_str = "こんにちは。私は形態素解析器について研究をしています。"
3tokenizer.convert_ids_to_tokens(tokenizer(test_str).input_ids)
4# -> ['[CLS]','こ','##んに','##ち','##は','。','私','は','形態','素','解析','器','に','ついて','研究','を','して','い','ます','。','[SEP]']1from transformers import AutoModelForMaskedLM
2model = AutoModelForMaskedLM.from_pretrained("hitachi-nlp/bert-base_jumanpp-wordpiece")