BERT使用技巧汇总

理解Transformer模型与多GPU训练中的常见问题与解决方案

目录

问题:tokenizer.basic_tokenizer.tokenize()和tokenizer.wordpiece_tokenizer.tokenize()的区别是什么?

问题: tokenizer.encode()和tokenizer.convert_tokens_to_ids()的区别是什么?

问题:多GPU加载BERT进行计算时报错:StopIteration: Caught StopIteration in replica 0 on device 0. extended_attention_mask = extended_attention_mask.to(dtype=next(self.parameters()).dtype)  # fp16 compatibility StopIteration

问题:基于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIMasterStar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值