tokenizer 的选择
有 BertTokenizerFast 和 BertTokenizer, BertTokenizerFast 更快,因为使用了 tokenizer 库。
因为 tokenizer 库基于 RUST 所以多线程更好。而 BertTokenizer 基于 python 的。
所以,我们使用 BertTokenizerFast
from transformers import BertTokenizerFast
tokenizer 带来的问题
如果是做分类等问题,那么,tokenizer 并不会带来什么问题。但是如果做 ner 这种 span 抽取,会带来问题,就是
WordPiceTokenizer 对句子的切分并非是一一对应的。那么,如果对应这个位置会是很繁琐的一个问题。
- 首先将 多余出来的部分用 padding index,
例如 going -> "go", "ing", 其中 "ing" 用 padding index 填充。在获取 span 的时候,忽略到 padding index 即可。 - 另外一种可能会变少比如: "6000" -> "600", "0", 那么种种情况怎么处理?
2.1 进行 tokenizer 的时候一个字一个字进行,那么,就保证一定增加不会减少
2.2 offset_mapping 来映射,变换前和变化后的 id. 理论上来说这个是通用的。