Transformer中的Tokenizer分词器使用学习
1.加载
tokenizer是进行语言处理的基础,transformer实现分词器的基类是
tokenizer = AutoTokenizer.from_pretrained(tokenizer_type)
后面可以通过from_pretrained函数中的retrained_model_name_or_path()方法,指定路径或者模型名称来加载对应的分词器。
文档给的实例
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') # Download vocabulary from S3 and cache.
tokenizer = AutoTokenizer.from_pretrained('./test/bert_saved_model/') # E.g. tokenizer was saved using `save_pretrained('./test/saved_model/')`
分别从Amazon的s3里直接下载以及从本地路径读取。
2.分词器的核心函数
2.1 tokenize
作为分词器,首先一定是进行分词操作。
from transformers.tokenization_bert import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") print("词典大小:",tokenizer.vocab_size) text = "hello world!I am Lisa." tokens = tokenizer.tokenize(text) print("分词结果:",tokens)
词典大小: 30522
分词结果: ['hello', 'world', '!', 'I', 'am', 'Lisa', '.']
这里使用了Bert的分词器,注意Bert会将不常用的词汇进行细分,比如fearless,经过分词会给出 'fear','##less'。使用双#号表示连续词汇的分词。
2.2 Encode
编码操作,实现了分词tokenize和词汇的编码convert_tokens_to_ids。首先将会对输入序列进行分词操作,之后将分词的结果进行编码,将词汇转换为词典中的id返回。
self.convert_tokens_to_ids(self.tokenize(text))
这里的结果是一个列表,包含多个id,如
[24,64,8636,414,125,23,982]
2.3 Decode
解码操作,实现了词汇的解码convert_ids_to_tokens和转换convert_tokens_to_string。首先会将给出的编码输入,如上面的id列表,转换成相应的分词结果,再转换成相应的输入序列。
self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))