在以下代码中,当我们把 add_special_tokens设置为True时,会添加[cls] [sep]等标签,有时一个符号会被token化为多个token, 此时我们很难将这些token和原文中的词对上。加入 return_offsets_mapping=True 参数将会在输出中多一个项: offset_mapping, 让我们了解token化后的token 位置和原文的关系,是不是很方便?
经常见到其它程序员自己写很多代码实现这个功能,事实上原始bert中就有实现,是不是很方便?
outputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True)
token_span=outputs["offset_mapping"]
import torch
from transformers import BertTokenizerFast
MODELNAME="bert-base-chinese"
tokenizer=BertTokenizerFast.from_pretrained(MODELNAME)
text = "中国人不打中国人,说好的,40%的人死于意外,对不对?"
tokens = tokenizer.tokenize(text,add_special_tokens=True)
outputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True) #add_special_tokens=True 添加 [cls] [sep]等标志
token_span=outputs["offset_mapping"]
print(tokens)
print(token_span)
print("hello")
'''
offset_mapping 记录的是tokenizer后的token与原来的关系
'''
输出结果:
offset-mapping中 [0,0] 表示不在原文中出现的内容。