ALMA-7B模型resize_token_embeddings()函数相关技术咨询
关于ALMA-7B新增token词向量的初始化与替换方案
1. 新增token的词向量生成方式
resize_token_embeddings()扩展模型输入embedding层时,新增token的词向量是随机初始化的。具体逻辑沿用PyTorch nn.Embedding的默认规则:从均匀分布U(-sqrt(1/embedding_dim), sqrt(1/embedding_dim))中采样生成非零随机张量。
2. 是否为随机非零张量?
是的,新增词向量是非零的随机张量。全零初始化会导致训练时这些token的梯度无法有效传播,因此框架默认用随机初始化规避这个问题。
3. 能否用自有Word2Vec词向量替换?
完全可以,具体操作步骤如下:
先获取新增token的ID映射
用tokenizer.get_added_vocab()拿到新增token到对应ID的字典:added_vocab = tokenizer.get_added_vocab() # 假设word_chunks是你之前添加的词汇列表,每个词对应Word2Vec中的向量提取模型的输入embedding层
embedding_layer = model.get_input_embeddings()替换对应ID的词向量
假设你有字典word2vec_embeddings,键是token,值是匹配模型embedding维度的Word2Vec向量(比如ALMA-7B的embedding维度为4096):import torch for token, token_id in added_vocab.items(): # 先确认向量维度匹配 assert word2vec_embeddings[token].shape[0] == embedding_layer.embedding_dim # 将自有词向量赋值到embedding层权重中 embedding_layer.weight.data[token_id] = torch.tensor(word2vec_embeddings[token], dtype=torch.float32)可选:设置embedding层的训练状态
如果想保留自有词向量不被训练,冻结embedding层:embedding_layer.weight.requires_grad = False如果需要微调适配模型,保持默认的
requires_grad=True即可。
内容的提问来源于stack exchange,提问作者Kunj Joshi
相关产品推荐
相关产品推荐

