bert相关问题总结

1 tokenizer

bert使用的时候可使用的tokenizer,主要是两种使用方法

  • new_seq = tokenizer.tokenize(seq) # 分词 seq 必须为字符串
    input_ids = tokenizer.convert_tokens_to_ids(new_seq) # 转换为ID
  • input_ids = tokenizer.encode(seq, add_special_tokens=True) # 直接转换为ID seq可以是字符串也可以是字符串列表,但是输入字符串列表和直接输入字符串得到的input_ids不一定完全相同。当出现错误拼写的词的时候尤其如此

其中由于最近编写代码的原因,主要对于第一种方法,即使用两步得到ID的方法的一些问题进行总结
new_seq = tokenizer.tokenize(seq) seq必须为字符串,tokenizer.tokenize()作用是将seq 进行分词,当出现词表中没有的词的时候有特殊的处理方法,
例如:“I liek apple” 分词结果[‘I’, ‘lie’, ‘##k’, ‘apple’]
通过new_seq = tokenizer.tokenize(seq) 我们可以得到分词后的句子,然后通过tokenizer.encode(seq, add_special_tokens=True) 将分词后的句子转化为bert模型可接受的ID序列

这时候我突然想到了一个问题,如果分词后的句子我们更改了,那么tokenizer.encode(seq, add_special_tokens=True)还能正常运行吗?

经过尝试后发现是可正常运行的 ,例如随便输入
tokenizer.convert_tokens_to_ids([‘##oe’]) —>[7745]
tokenizer.convert_tokens_to_ids([‘##e’])------>[1162]
发现如果输入的是##*,都是可以正常识别的,bert词表中应该是类似的表述,但是如果输入
tokenizer.convert_tokens_to_ids([‘#oo’])------->[100]
tokenizer.convert_tokens_to_ids([‘#o#o’])------->[100]
会统一输出100,即UNK

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值