You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gensim 4.0.0替代intersect_word2vec_format的预训练词向量处理方法

Gensim 4.0 复刻旧版 intersect_word2vec_format 功能方案

你对旧版本intersect_word2vec_format方法的作用理解完全准确,Gensim 4.0之后没有保留该独立方法,我们可以通过KeyedVectors加载预训练向量后手动匹配赋值实现完全一致的效果,最简洁的实现方式如下:

from gensim.models import Word2Vec
from gensim.models import KeyedVectors

# 初始化模型、构建自定义词表,逻辑和旧版代码完全一致
word_vectors = Word2Vec(vector_size=word_vector_dim, min_count=1)
word_vectors.build_vocab(corpus_iterable)

# 加载GoogleNews预训练词向量
pretrained_kv = KeyedVectors.load_word2vec_format(
    pretrained_dir + 'GoogleNews-vectors-negative300.bin.gz',
    binary=True
)

# 匹配替换:预训练中存在的词用预训练向量,不存在的保留原有随机初始化值
for idx, word in enumerate(word_vectors.wv.index_to_key):
    if word in pretrained_kv:
        word_vectors.wv.vectors[idx] = pretrained_kv[word]

如果你的词表规模较大,想进一步提升执行效率,可以使用向量化操作替代循环,实现方式如下:

# 获取本地词表词在预训练向量中的索引,不存在的词返回-1
match_indexes = pretrained_kv.get_index(word_vectors.wv.index_to_key, default=-1)
# 过滤出存在匹配的词的掩码
valid_mask = match_indexes != -1
# 批量替换匹配成功的词的向量
word_vectors.wv.vectors[valid_mask] = pretrained_kv.vectors[match_indexes[valid_mask]]

以上两种实现的效果和旧版intersect_word2vec_format完全一致:

  • 仅覆盖本地词表中同时出现在预训练词表的词的向量
  • 本地词表中未出现在预训练集的词,维持原有随机初始化值不变
  • 预训练集里有但本地词表没有的词不会被加入当前模型,不影响原有训练逻辑

内容的提问来源于stack exchange,提问作者gammapoint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:24:03