bert中tokenization运行流程之我见.菜鸟,内容不一定对.
1. validate_case_matches_checkpoint(do_lower_case, init_checkpoint):
该方法用于验证checkpoint和config中的参数do_lower_case是否相匹配的方法.
2. convert_to_unicode(text)
该方法用于判断传入的text的文本类型.其中bytes类型,被解码为utf-8.
3. printable_text(text)
功能同上
4. load_vocab(vocab_file)
创建vocab字典.
5. convert_by_vocab(vocab, items)
用于转换tokens和ids
6. whitespace_tokenize(text)
将text按空格切分为list.相当于将文本按单词切分,形成一个装单词的list.
7. BasicTokenizer(object)
用于对文本进行第一步处理的类, 里面基本上都是预处理文本的方法.其中tokenize方法,返回的结果是经过处理的单词列表.
8. WordpieceTokenizer(object)
对单词进行切分的方法.如果单词长度超过200, 就标记为unk. 对单词切分时采用贪心算法.[和普通贪心算法可能不太一样] 切分单词的大致结果为示例: unaffable = [‘un’, ‘##aff’, ‘##able’] 这三个词都必须在vocab中才能被切成这样子.切分顺序是从后往前每次切1位,其中un是最先被加入list的单词.
这里大致意思是比如会把tokenization经过切分,变为[token,##ization],bert字典中也许并没有tokenization这个词.这么做的目的,不清楚…
9. FullTokenizer(object)
整套流程,把7. 8合并走一遍.
10. _is_whitespace(char)
判断是不是空格
11. _is_control(char)
判断是不是 control字符,不知道是什么…
12. _is_punctuation(char)
判断是不是标点符号.
tokenization的主要思路,就是相当于分词, 把一个输入的文本, 按7中步骤清洗,8中步骤分词, 然后,将text转换成了一个被分词后的list.用于接下来的步骤.