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

使用glove预训练embedding

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用glove预训练embedding

参考:link

1、获取glove预训练内容,并解压得到多份txt文件,不同文件包含的向量信息长度是不同的。

wget http://nlp.stanford.edu/data/glove.6B.zip
unzip glove.6B.zip

2、从50维的文件中读取单词表vocab和每个单词的预训练向量信息embeddings。

vocab,embeddings = [],[]
with open('glove.6B.50d.txt','rt') as fi:
    full_content = fi.read().strip().split('n')
for i in range(len(full_content)):
    i_word = full_content[i].split(' ')[0]
    i_embeddings = [float(val) for val in full_content[i].split(' ')[1:]]
    vocab.append(i_word)
    embeddings.append(i_embeddings)

3、将list转化为numpy形式

import numpy as np
vocab_npa = np.array(vocab)
embs_npa = np.array(embeddings)

4、向词汇表中添加特定的新词

#insert '' and '' tokens at start of vocab_npa.
vocab_npa = np.insert(vocab_npa, 0, '')
vocab_npa = np.insert(vocab_npa, 1, '')
print(vocab_npa[:10])

pad_emb_npa = np.zeros((1,embs_npa.shape[1]))   #embedding for '' token.
unk_emb_npa = np.mean(embs_npa,axis=0,keepdims=True)    #embedding for '' token.

#insert embeddings for pad and unk tokens at top of embs_npa.
embs_npa = np.vstack((pad_emb_npa,unk_emb_npa,embs_npa))
print(embs_npa.shape)

5、使用glove词汇表对dataset中的token进行编码。使用词汇表的向量信息初始化nn.embedding

# 1 对token编码
tokenid = np.where(vocab_npa==token)[0][0]
# 2 初始化模型embedding层参数
self.embed = nn.Embedding.from_pretrained(torch.from_numpy(embs_npa).float())

6、保存词汇表,以便以后使用

with open('vocab_npa.npy','wb') as f:
    np.save(f,vocab_npa)

with open('embs_npa.npy','wb') as f:
    np.save(f,embs_npa)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号