使用BertTokenizer出现单词自动拆分,属模型特性还是操作有误?
BERT分词自动拆分单词的原因说明
这种单词被自动拆分的情况是BERT模型的固有特性,你的操作没有错误。
核心原因:WordPiece分词机制
BERT采用WordPiece分词算法,核心逻辑是优先使用词表中存在的完整词,对不在词表中的词汇(未登录词),会拆分为词表已收录的子词片段:
- 小写的
only在bert-base-multilingual-cased的词表中,因此直接作为单个词元保留; - 全大写的
ONLY不在词表内,所以被拆分为ON、L、Y这些存在于词表的子词; stradivarius属于低频长词,词表未收录完整形式,因此被拆分为St、##radi、##vari、##us,其中##前缀表示该片段是子词的后续部分,用于和独立词区分。
关于完整单词嵌入向量的获取
如果需要得到完整单词的嵌入向量,常见处理方式:
- 对拆分后的所有子词向量进行平均、求和或取第一个子词的向量,聚合得到对应单词的嵌入;
- 这类子词分词是绝大多数预训练Transformer模型的标准设计,目的是解决未登录词问题,所以几乎没有不做拆分的BERT类模型。
内容的提问来源于stack exchange,提问作者MooNChilD Song
相关产品推荐
相关产品推荐

