如何使用已训练好的预训练词向量

如果你有一个词表,怎么和别人的预训练向量里的词表统一

首先要明确,一个别人训练好的预训练词向量的文件应该是什么样的,分为词和向量两个部分。

下图中的预训练词向量来自于https://github.com/Embedding/Chinese-Word-Vectors

昨天就是词,向量则是其后跟着的数字(图中共300维),查找的时候是根据词来找到对应的向量(可以用python中的字典来存储)。

 于是会出现两种情况,一种是预训练里有的词我们没有,只需要在读入embedding文件时去掉就好,另一种是我们自己词表里有的预训练向量里没有,一般的做法是赋一个随机向量。

def load_word_embeddings(vocab, dim,embedded_vector_file):
    '''
    对于vocab中的每个词,都去查它的embedding vector
    :param vocab: 我们的词汇表:一个字典,键为词,值为id
    :param dim: embedding向量维数,上文中为300
    :param embedded_vector_file:embedding文件
    :return:embeddings:一个字典,键为词id,值为对应的embedding向量
    '''
    vectors = load_embed_vectors(embedded_vector_file, dim) #一个字典,键为字,值为对应的embedding
    vocab_size = len(vocab)
    embeddings = np.zeros((vocab_size + 1, dim), dtype='float32')
    # 遍历词表,看对应的预训练embedding里有没有,有的话就将对应的位置更新,没有就随机一个
    for word, code in vocab.items():
        if word in vectors:
            embeddings[code] = vectors[word]
        else:
            embeddings[code] = np.random.uniform(-0.25, 0.25, dim)

    return embeddings

如果有一个和别人的预训练向量统一的embedding,怎么插入

import torch.nn as nn
t=torch.tensor(load_word_embeddings(vocab,dim,embedding_file),dtype=torch.float32)
class AModel(nn.Module):
    def __init__(self,vocab_size,embedding_size):
        super(AModel, self).__init__()
        self.emb=nn.Embedding().from_pretrained(t)
    def forward(self,input):
        return self.emb(input)

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值