栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

BertTokenizer如何添加token

Python 更新时间:发布时间: 百科书网 趣学号
BertTokenizer如何添加token

  在实际情况中,我们可能需要往预训练模型中添加 token。例如下面的例子:

tokenizer = BertTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext-large")
model = BertModel.from_pretrained("hfl/chinese-roberta-wwm-ext-large")

text = "c_1四处张望。"

print(text)
print(tokenizer.tokenize(text))

print(tokenizer.encode(text))
print(tokenizer.decode(tokenizer.encode(text)))

  输出为:

['c', '_', '1', '四', '处', '张', '望', '。']
[101, 145, 142, 122, 1724, 1905, 2476, 3307, 511, 102]
[CLS] c _ 1 四 处 张 望 。 [SEP]

  显然BertTokenizer在分词时将 c_1 理解成了三个字,而我们希望模型将其理解为1个字,此时需要向 tokenizer 中添加 token。
  我们先将要添加的 token 放入列表中,再使用 add_token 方法。需要注意的是,模型需要调用 resize_token_embeddings,预训练的 Embedding 不变,添加的 token 随机初始化进 Embedding 矩阵中。

characters=["c_1"]
tokenizer.add_tokens(characters)
model.resize_token_embeddings(len(tokenizer))

  此时再进行分词就没有问题了。

print(tokenizer.tokenize(text)) 
# ['c_1', '四', '处', '张', '望', '。']

print(tokenizer.decode(tokenizer.encode(text)))
# [CLS] c_1 四 处 张 望 。 [SEP]
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/273394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号