原始数据集中的标记化与 BERT 对输入进行标记化的方式不同。在 BERT 中,频率较低的词被拆分为子词单元。您可以轻松找出原始数据集中标记的字符偏移量。
在较新版本的 Transformers 中,标记器可以选择 return_offsets_mapping。如果设置为True,则返回字符偏移量(元组(char_start, char_end))。如果您在原始文本中有字符偏移,您可以将它们与分词器的输出进行映射。
from transformers import BertTokenizerFast
tok = BertTokenizerFast.from_pretrained("bert-base-cased")
tok("I am a tokenizer.", return_offsets_mapping=True)
输出:
{'input_ids': [101, 146, 1821, 170, 22559, 17260, 119, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1],
'offset_mapping': [(0, 0), (0, 1), (2, 4), (5, 6), (7, 12), (12, 16), (16, 17), (0, 0)]}
(0, 0) 跨度对应于技术令牌,在 BERT 的情况下为 [CLS] 和 [SEP]。
当您同时使用原始标记化和 BERT 标记化获得偏移量时,您可以找出重新标记化字符串中的索引。