2020-11-03

Word2Vec词向量预训练模型
1.首先简单介绍一下word2vec
Word2Vec是由Google的Mikolov等人提出的一个词向量计算模型。
输入:大量已分词的文本
输出:用一个稠密向量来表示每个词
词向量的重要意义在于将自然语言转换成了计算机能够理解的向量。相对于词袋模型、TF-IDF等模型,词向量能抓住词的上下文、语义,衡量词与词的相似性,在文本分类、情感分析等许多自然语言处理领域有重要作用。
说明:word2vec包含两个子模型即CBOW模型和skip-gram模型,CBOW模型是通过给定目标单词的上下文(前 c 个词以及后 c 个词)预测该目标单词是什么,skip-gram模型是通过给定目标词来预测目标词的上下文。
接下来介绍一下word2vec如何使用:
1.先看一下它的API

class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), max_final_vocab=None)

参数说明:

  1. sentences:我们要分析的语料,可以是一个列表,或者从文件中遍历读出(word2vec.LineSentence(filename) )。

2) size:词向量的维度,默认值是100。这个维度的取值一般与我们的语料的大小相关,如果是不大的语料,比如小于100M的文本语料,则使用默认值一般就可以了。如果是超大的语料,建议增大维度。

3) window:即词向量上下文最大距离,window越大,则和某一词较远的词也会产生上下文关系。默认值为5,在实际使用中,可以根据实际的需求来动态调整这个window的大小。

如果是小语料则这个值可以设的更小。对于一般的语料这个值推荐在[5;10]之间。

4) sg:即我们的word2vec两个模型的选择了。如果是0, 则是CBOW模型;是1则是Skip-Gram模型;默认是0即CBOW模型。

5) hs:即我们的word2vec两个解法的选择了。如果是0, 则是Negative Sampling;是1的话并且负采样个数negative大于0, 则是Hierarchical Softmax。默认是0即Negative Sampling。

6) negative:即使用Negative Sampling时负采样的个数,默认是5。推荐在[3,10]之间。这个参数在我们的算法原理篇中标记为neg。

7) cbow_mean:仅用于CBOW在做投影的时候,为0,则算法中的xw为上下文的词向量之和,为1则为上下文的词向量的平均值。在我们的原理篇中,是按照词向量的平均值来描述的。个人比较喜欢用平均值来表示xw,默认值也是1,不推荐修改默认值。

8) min_count:需要计算词向量的最小词频。这个值可以去掉一些很生僻的低频词,默认是5。如果是小语料,可以调低这个值。

9) iter:随机梯度下降法中迭代的最大次数,默认是5。对于大语料,可以增大这个值。

10) alpha:在随机梯度下降法中迭代的初始步长。算法原理篇中标记为η,默认是0.025。

11) min_alpha: 由于算法支持在迭代的过程中逐渐减小步长,min_alpha给出了最小的迭代步。

训练模型的代码如下:

import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
import numpy as np
import os
import jieba
import gensim
import gensim.models.word2vec as w2v
from sklearn.model_selection import train_test_split
dir="C:\\Users\\Mr Zhu\\Desktop\\data\\SST2\\data\\dev.txt"
text = []
file_to_read = open(dir, 'r') #以读的方式打开文件
lines = file_to_read.readlines()#读行
i=0
for line in lines:
    for word in line:
        text.append(word)
    i=i+1
print(i)#统计一共有多少行
print(len(text))#打印文本一共有多少个词
"""
以下是利用自己的语料库并且使用Word2Vec方法预训练词向量。

"""
sentences = w2v.LineSentence('C:\\Users\\Mr Zhu\\Desktop\\data\\SST2\\data\\dev.txt')
out_model = 'C:\\Users\\Mr Zhu\\Desktop\\out_model.txt'#输出文件,运行时自动生成,需要指定目录,这样可以找到。
out_Vector = 'C:\\Users\\Mr Zhu\\Desktop\\out_vector.txt'#输出文件,运行时自动生成,需要指定目录,这样可以找到。不用自己去建相应文件,我们只需要在这设定文件名及格式就可以。
model = w2v.Word2Vec(sentences, size=200, sg=1, iter=8) 
model.save(out_model)#保存模型
#model = w2v.Word2Vec.load(out_model)#加载模型
print(model)
model.wv.save_word2vec_format(out_Vector,binary=False)#是否保存为二进制的形式
print(out_Vector)

这是在桌面生成的两个文件,out_model.txt,out_vector.txt

以下out_vector.txt文件截图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201103171828794.png?x-oss-process=image/watermark,type_Zm在这里插入图片描述

以下out_model.txt文件截图

在这里插入图片描述

希望对NLP刚入门的朋友有所帮助!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值