Word2vec原理及其Python实现「建议收藏」

Word2vec原理及其Python实现「建议收藏」目录一、为什么需要WordEmbedding二、Word2vec原理1、CBOW模型2、Skip-gram模型三、行业上已有的预训练词向量四、用Python训练自己的Word2vec词向量一、为什么需要WordEmbedding在NLP(自然语言处理)里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以要处理NLP的问题,首先就要拿词语开刀…

大家好,又见面了,我是你们的朋友全栈君。

目录

一、为什么需要Word Embedding

二、Word2vec原理

1、CBOW模型

2、Skip-gram模型

三、行业上已有的预训练词向量

四、用Python训练自己的Word2vec词向量


一、为什么需要Word Embedding

在NLP(自然语言处理)里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以要处理 NLP 的问题,首先就要拿词语开刀

举个简单例子,判断一个词语的情感,是积极还是消极。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的情感类别,我们要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec ,就是词嵌入( word embedding) 的一种

也就是说,我们要怎么把一堆计算机不认识的词语表示成它认识的,从而继续为我们人类服务,达到人类的目的?这个途径就是词嵌入(word embedding):把人类理解的词语表示成在数学空间里的“词语”,这个数学空间里的“词语”能够帮助计算机去理解我们人类的语义,也就是说,知道哪些词的意思是相近的,等等,这体现在数学空间里的距离概率等的概念上。

以上我们理解了在NLP领域word embedding的理由和重要性。

二、Word2vec原理

  • Wordvec的目标是:将一个词表示成一个向量
  • Word2vec中两个重要模型是:CBOW和Skip-gram模型

1、CBOW模型

  • 如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』

注意:在Hidden layer(隐藏层神经元)上没有激活功能,所以有些文章上的图示中没有标示出hidden layer,而是直接就到输出层,或者是将hidden layer称作为投影层,为什么呢,因为这个所谓的隐层的激活函数其实是线性的,所以有的人就不叫它隐藏层了,我后面就称它为投影层吧后面的输出神经元使用softmax激活函数。

Word2vec原理及其Python实现「建议收藏」

上图中我们可以理解为C个输入单词的维度是V维(可以理解为词库中共有V个词,那么V维onehot向量就可以唯一的表示这个词语),当语料库中的单词数量很多的时候,V值会超级大。

上面我们说到CBOW模型是拿一个词语的上下文作为输入,来预测这个词语本身(中心词周围的多个词来预测这个中心词),那么对应到上图中,输入就是有x1k、xCk、…、xck这些上下文词语共C个,每一个的长度是V,输出就是 y 这个中心词1个,长度也是V。在这个网络中我们的目的不是跟一般的神经网络一样去预测标签,而是想要得到完美的参数:权重,X和这个权重相乘能够唯一的表示这个词语,同时需要提到一点的是,这个词向量的维度(与隐含层节点数一致)一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作。

Xin Rong 的论文《word2vec Parameter Learning Explained》中对Word2vec的理论完备由浅入深非常好懂,且直击要害,既有 high-level 的 intuition 的解释,也有细节的推导过程。

2、Skip-gram模型

如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』。分析与上面同理,论文里也有直观的说明。

Word2vec原理及其Python实现「建议收藏」

三、行业上已有的预训练词向量

腾讯AI实验室:该语料库为超过800万个中文单词和短语提供了200维矢量表示,即嵌入,这些单词和短语是在大规模高质量数据上预先训练的。这些向量捕获中文单词和短语的语义含义,可以广泛应用于许多下游中文处理任务(例如,命名实体识别和文本分类)以及进一步的研究中。

 

四、用Python训练自己的Word2vec词向量

python的第三方库gensim中有自带的Word2Vec函数来训练自己语料库的词向量,我的语料库数据存在sentence.txt文件中,每行为一句话,是经过分词和去停用词之后的数据,sg=1,是采用skip-gram来训练的意思。

from gensim.models.word2vec import Word2Vec

# 读取数据,用gensim中的word2vec训练词向量
file = open('sentence.txt')
sss=[]
while True:
    ss=file.readline().replace('\n','').rstrip()
    if ss=='':
        break
    s1=ss.split(" ")
    sss.append(s1)
file.close()
model = Word2Vec(size=200, workers=5,sg=1)  # 生成词向量为200维,考虑上下5个单词共10个单词,采用sg=1的方法也就是skip-gram
model.build_vocab(sss)
model.train(sss,total_examples = model.corpus_count,epochs = model.iter)
model.save('./data/gensim_w2v_sg0_model')            # 保存模型 
new_model = gensim.models.Word2Vec.load('w2v_model') # 调用模型
sim_words = new_model.most_similar(positive=['女人'])
for word,similarity in sim_words:
    print(word,similarity)                           # 输出’女人‘相近的词语和概率
print(model['女孩'])                                 # 输出’女孩‘的词向量

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145333.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月17日 下午4:40
下一篇 2022年5月17日 下午5:00


相关推荐

  • 关于python numpy.quantile()方法的理解以及分位数的理解

    关于python numpy.quantile()方法的理解以及分位数的理解近期在编写 python 代码的时候遇到了 python 的 numpy 包中的 quantitle 方法 产生了困惑 没有明白其得到的是什么 查阅之后发现 其实意思是分为数的意思 里面的参数 q 如果传入的是一个值就是求一个分位数 如果是一个 list 就是分别求不同的分位数 那么 如何通俗地理解分位数 直观来看 分位数就是用概率作为依据将一批数据分开的那个点 注意选取的是值而不是索引 这在 python 数据操作中着重注意一下一 数据分位数是数据分析中常用的一个统计量 经过抽样得到一个样本值 以考核分数为例

    2026年3月17日
    2
  • 使用StretchBlt函数导致位图失真的解决方案

    使用StretchBlt函数导致位图失真的解决方案vc 中位图伸缩函数 StretchBlt 在对图片进行缩放时会造成严重的图片失真 在了解解决方法前先巩固下 StretchBlt 的用法 StretchBlt 函数功能 函数从源矩形中复制一个位图到目标矩形 必要时按目前目标设备设置的模式进行图像的拉伸或压缩 函数原型 BOOLStretchB HDChdc intnXOriginD intnYOriginD

    2026年3月16日
    2
  • DeepSeek V3.1接入Claude Code教程

    DeepSeek V3.1接入Claude Code教程

    2026年3月16日
    2
  • 腾讯云 上传视频_云点播系统源码

    腾讯云 上传视频_云点播系统源码 web利用腾讯云点播上传视频到云服务器第一步导入<scriptsrc="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"></script>第二步在服务端设置秘钥,我用的是javaee编写一个Signature类 所需jar包http://download.csdn.net/down…

    2025年7月4日
    5
  • datagrip mac激活【2021免费激活】

    (datagrip mac激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html00OE5RWT28-eyJsa…

    2022年3月30日
    150
  • 最全哈夫曼树哈夫曼编码讲解,兄弟你值得拥有

    最全哈夫曼树哈夫曼编码讲解,兄弟你值得拥有目录 1 哈夫曼树的概念 nbsp nbsp nbsp nbsp nbsp nbsp 路径概念 nbsp nbsp nbsp nbsp nbsp nbsp 路径长度概念 nbsp nbsp nbsp nbsp nbsp nbsp 节点的带权路径长度 nbsp nbsp nbsp nbsp nbsp nbsp 树的带权路径长度 2 构建哈夫曼树的步骤 3 构建哈夫曼树的完整代码 4 哈夫曼编码 1 哈夫曼树的概念在正式

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号