目录
问题:tokenizer.basic_tokenizer.tokenize()和tokenizer.wordpiece_tokenizer.tokenize()的区别是什么?
问题: tokenizer.encode()和tokenizer.convert_tokens_to_ids()的区别是什么?
问题:基于Huggingface进行训练时如何控制最大迭代次数Number of Iterations。
问题:调用traner.train训练时报错“TypeError: Object of type PosixPath is not JSON serializable”
问题:Pycharm无法调试,断点处一直显示evaluating…,无法读取数据,并且执行单步调试时,程序卡死。
问题:tokenizer.basic_tokenizer.tokenize()和tokenizer.wordpiece_tokenizer.tokenize()的区别是什么?
回答:basic_tokenizer是基本的分词,按照character进行分词,会剔除掉空格,而wordpiece_tokenizer认为用户已经分好词,并以空格分开,会对子词进一步拆分并添加“##”前缀符号。从下可以看到,basic_tokenzier会把[CLS]也及进行拆分,而wordpiece_tokenizer则完全以空格进行拆分。如果不想把[CLS]和[SEP]特殊字符拆分的话,可以直接使用tokenizer.tokenize()即可。(transformers==2.8.0)
word_seq = "[CLS] 上海是沿海城市 [SEP]"
basic_tokens = dataloader.tokenizer.basic_tokenizer.tokenize(word_seq)
print(basic_tokens)
>>> ['[', 'cls', ']', '上', '海', '是', '沿', '海', '城', '市', '[', 'sep', ']']
basic_tokens = dataloader.tokenizer.wordpiece_tokenizer.tokenize(word_seq)
print(basic_tokens)
>>> ['[CLS]', '上', '##海', '##是', '##沿', '##海', '##城', '##市', '[SEP]']
问题: tokenizer.encode()和tokenizer.convert_tokens_to_ids()的区别是什么?
回答:convert_tokens_to_ids是将分词后的token转化为id序列,而encode包含了分词和token转id过程,即encode是一个更全的过程,另外,encode默认使用basic的分词工具,以及会在句子前和尾部添加特殊字符[CLS]和[SEP],无需自己添加。从下可以看到,虽然encode直接使用tokenizer.tokenize()进行词拆分,会保留头尾特殊字符的完整性,但是自己也会额外添加特殊字符,[CLS]->101,[SEQ]->102.(transformers==2.8.0)
word_seq = "[CLS] 上海是沿海城市 [SEP]"
basic_tokens = dataloader.tokenizer.basic_tokenizer.tokenize(word_seq)
print(basic_tokens)
>>> ['[', 'cls', ']', '上', '海', '是', '沿', '海', '城', '市', '[', 'sep', ']']
print(dataloader
理解Transformer模型与多GPU训练中的常见问题与解决方案

最低0.47元/天 解锁文章
152

被折叠的 条评论
为什么被折叠?



