bert扩充或者缩小词表

在BERT模型中添加自己的词汇(pytorch版) - 知乎

输入

1. 扩充词表

替换bert词表中的【unused】

2. 缩小词表

因为要使用预训练的模型,词id不能变,词向量矩阵大小不变

要做的是将减少的那一部分词全部对应为unk,即可

输出

如果是mlm任务,输出也是bert的词表大小。

1. 扩充词表

(1) 不改变原来的id,直接将【unused】换成要补充汉字

(2) bert词表+新词重新排列,在词表中的,使用对应的分类参数初始化,不在的,随机初始化

added_tokens.json  怎么用

2. 缩小词表

这里可以随机挑选bert中的词,将对应的分类参数拷贝过来即可, 重新安排好

### 扩展 BERT 模型的词表大小 为了扩展 BERT 模型的词表大小,通常需要对分词器和模型本身进行一系列修改。以下是实现这一目标的关键方法和技术: #### 使用 SentencePiece 工具 SentencePiece 是一种流行的工具,用于生成子词级别的词汇表[^3]。它支持动态扩展词表的能力,允许将新的标记加入现有的词汇表中。通过重新训练 SentencePiece 模型并更新其配置文件,可以有效地增加 BERT 的词汇量。 #### 修改 WordPiece 分词器 如果继续使用传统的 WordPiece 方法,则可以通过以下方式扩展词表: - **重新训练分词器**:利用更大的语料库重新训练 WordPiece 模型,从而生成一个新的、更大规模的词汇表[^4]。 - **手动添加新词**:对于特定领域的新术语或专有名词,可以直接将其添加到现有词汇表中,并相应地调整嵌入层权重矩阵的维度[^2]。 #### 调整模型架构以适应扩大的词汇范围 当增加了词汇数量之后,还需要同步更改 Transformer 架构内的 Embedding 层参数设置。具体而言: 1. 更新 `Embedding` 层输入尺寸至匹配最新版扩大后的字典长度; 2. 初始化新增部分对应的随机初始值或者迁移自其他预训练好的向量表示作为起点; 下面给出一段 Python 示例代码展示如何操作这些改动过程: ```python from transformers import BertTokenizer, BertModel import torch.nn as nn # 加载原始BERT Tokenizer 和 Model tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') original_vocab_size = model.config.vocab_size # 添加新词到词表 (假设我们有列表 new_tokens) new_tokens = ['<new_token_1>', '<new_token_2>'] num_added_toks = tokenizer.add_tokens(new_tokens) # 扩展模型embedding layer 来容纳额外的tokens model.resize_token_embeddings(len(tokenizer)) print(f"Original vocab size: {original_vocab_size}") print(f"New vocab size after adding tokens: {len(tokenizer)}") # 验证新token已被正确加载 test_sentence = "<new_token_1> This is a test sentence with <new_token_2>" encoded_input = tokenizer(test_sentence, return_tensors='pt') output = model(**encoded_input) ``` 此脚本展示了怎样安全地引入外部未见过的词汇进入标准版本的BERT体系结构之中而不破坏原有功能特性的同时还能让网络学会理解那些之前从未见过的概念实体等等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旺旺棒棒冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值