luhua-rain/MRC_Competition_Dureader

分词问题

lldhliu opened this issue · 13 comments

你好,分词部分为什么没有使用例如:
text = '你好,明天'
token = ['你', '#好', ',', '明', '#天']
这种格式去转换成 input_ids 进行训练呢?

’#好‘ 在词表中是不存在的,‘##好’ 存在 。分词主要看个人吧,'##好' 与 ‘好’ 没啥区别,前者没有试过,你可以试试,然后分享一下

我试了下, 结果下降很多!不如您使用的直接按字切开的效果好,这是什么原因呢?

‘##好’ 你是如何得到的?可以试着将input_ids再转为字符,看看在转化过程中是否发生错误

把DuReader分词好的文档列表里的每个词用WordpieceTokenizer.tokenize切分就能得到了,只要转换成 '##好' 对应的 id, 再把 id 转换到 token 得到 ’##好‘ ,拼接输出时去除 ’##'

断点测试时,input_ids,start_position,end_position,都是准确的,再转为字符也是正确的

‘好’ 与 ‘##好‘ 是不一样的。就相当于 ’##ac‘ 与 ’ac‘ 是不一样的。wordpiece是英文的一种减少词表大小的方法,而中文分字的话就2万左右,比较少,不需要wordpiece。我认为最主要的原因是:’好‘ 与 ’##好‘是不一样的,’好‘是一个字,’##好‘是一个词

我以为加上 ’##‘,在 mask 时候 ’你‘ 和 ’##好‘ 会被一起 mask 呢?下游任务训练的时候没有随机 mask 了吗?我有点糊涂。。。

你说的mask是什么意思

就是bert里面讲的,在生成训练样本时,这些被分开的词缀会随机被mask

是的,但是这是对英文的,所以我重写了数据处理。不需要mask,一个字对应一个id

是不是下游任务训练时都不需要mask呢?mask 是谷歌在训练 bert 模型时候使用的方法吧?

不需要。你说的这个mask是bert的预训练任务之一:masked language model(MLM)。下游任务mask干嘛,除非你想微调语言模型。

好的, 明白了,谢谢您!可以加您微信吗?或者其他联系方式,方便向您请教?我的邮箱 ldh1151375085@163.com,方便的话您可以邮件告诉我下