Embedding和Word2Vec用法

更新时间:2023-06-17 09:33:27 阅读: 评论:0

Embedding和Word2Vec⽤法Embedding
Embedding 层的输⼊是⼀个⼆维整数张量, 形状为(samples,quence_length),即(样本数,序列长度)较短的序列应该⽤ 0 填充,较长的序列应该被截断,保证输⼊的序列长度是相同的
Embedding 层输出是(samples,quence_length,embedding_dimensionality) 的三维浮点数张量。
⾸先,我们需要对⽂本进⾏分词处理,然后对分词结果进⾏序列化
再统⼀输⼊的序列长度,最后把统⼀长度的序列化结果输⼊到 Embedding 层中
整个过程可以⽤下⾯的图描述:
从样本的⾓度看,我们可以⽤下⾯的图描述这个过程:
gensim库提供了⼀个word2vec的实现,我们使⽤⼏个API就可以⽅便地完成word2vec
gensim实现Word2Vec
⽰意代码如下:
from torch import nn
dels import Word2Vec
# w2v模型位置
w2v_path = "model/del"
class Preprocess():
def __init__(lf,ntences,n_len,w2v_path=w2v_path):
lf.w2v_path = w2v_path
lf.n_len = n_len
lf.idx2word = []
lf.word2idx = {}
男人的眉毛
def get_w2v_model(lf):
# 把之前保存的w2v模型加载进来
def add_embedding(lf,word):
# 把word加进embedding  并赋值⼀个随机向量
vector = pty(bedding_dim) #return a tensor filled with uninitialed dada. shape is  (1*embedding_dim)    #从均匀分布U(a,b)中⽣成值,填充参数vector,默认a=0,b=1
lf.word2idx[word] = len(lf.word2idx)  #为word2idx字典填充后,word2idx长度会加1
lf.idx2word.append(word)
print("word:",word)
# torch.cat是将两个张量(tensor)拼接在⼀起按维数0拼接(竖着拼)
print("embedding_matrix.shape",lf.embedding_matrix.shape)
def make_embedding(lf,load=True):
print("get embedding..")
#加载embedding模型
if load:
print("加载word to vec模型")
<_w2v_model()
el:
rai NotImplementedError
壬寅纳音
# 制作⼀个word2idx的字典
# 制作⼀个idx2word的list
# 制作⼀个word2vector的list
for i,word in bedding.wv.key_to_index ):
print('get words #{}'.format(i+1), end='\r')
薄束核
# 例:lf.word2idx['李']=1
# lf.idx2word[1]='李'
澳洲护士# lf.vector[1]='李'
lf.word2idx[word]=len(lf.word2idx)
lf.idx2word.append(word)
# 将embedding_matrix转为tensor类型
# 将PAD和UNK加⼊embedding中
lf.add_embedding("<PAD>")
lf.add_embedding("<UNK>")
print("total words: {}".format(bedding_matrix)))
bedding_matrix
def pad_quence(lf,ntence):
# 将每个句⼦变成统⼀的长度防攻击
if len(ntence)>lf.n_len:
梦到捞鱼
ntence = ntence[:lf.n_len]  #截断
el:
el:
pad_len = lf.n_len-len(ntence)
for _ in range(pad_len):
卡内基口才训练
ntence.append(lf.word2idx["<PAD>"])
asrt len(ntence)==lf.n_len
return ntence
def ntence_word2idx(lf):7月21日
# 把句⼦⾥⾯的字转成对应的index
ntence_list = []
for i,n in s):
print('ntence count #{}'.format(i+1), end='\r')
ntence_idx = []
for word in n:
if(word in lf.word2idx.keys()):
ntence_idx.append(lf.word2idx[word])
el:
ntence_idx.append(lf.word2idx["<UNK>"])
# 把每个句⼦长度统⼀
ntence_idx = lf.pad_quence(ntence_idx)
ntence_list.append(ntence_idx)
return torch.LongTensor(ntence_list)
def labels_to_tensor(lf,y):
#把标签label也转为tensor
y = [int(label) for label in y]
return torch.LongTensor(y)
def train_word2vec(x):
# 训练word embedding
"""
Embedding 层的输⼊是⼀个⼆维整数张量,形状为(samples,quence_length),即(样本数,序列长度)
Embedding 层输出是(samples,quence_length,embedding_dimensionality) 的三维浮点数张量。
"""
model = word2vec.Word2Vec(x,vector_size=250,window=5,min_count=5,workers=12,epochs=10,sg=1) #iter is epochs  return model

本文发布于:2023-06-17 09:33:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1042302.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:长度   序列   模型   填充   转为   加载   分词
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图