Press "Enter" to skip to content

【资料分析师自学笔记|概念+实作篇:自然语言处理入门 之 Word2Vec, Doc2Vec 比较】

【资料分析师自学笔记|概念+实作篇:自然语言处理入门 之 Word2Vec, Doc2Vec 比较】

 

本篇笔记 Python自然语言处理入门的常用方法 Word2Vec,及其延伸:Doc2Vec。尽可能表述他们之间的关联,并以Python实作比较不同方法分辨同样两个语句的效果。

 

Word2Vec是什幺?

 

顾名思义 Word to vector,通过神经网路训练, 将字词表示成空间中的向量,让我们可以用向量间的距离,来代表文本语意上的相似程度
。这种把字词向量化的概念即称为 “embedding”,目的是让机器理解人类用的词语,把符号数学化。

 

那怎幺做到”让语意相近的字词向量越靠近”?

 

Word2Vec主要由两种神经网络演算法构成:

图片来源: https://www.researchgate.net/figure/Architecture-of-Word2Vec-models-CBOW-and-Skip-Gram_fig3_328373466

1. CBOW (
Continuous Bag of Words) :根据上下文关係,预测当前词语出现的机率

利用所有input data(语料库)中,每个(经过断词后)的上下文词语组合,预测目标字词本身出现的机率有多少。图中的w是每个词的权重矩阵(训练完成后会就是该词的词向量),CBOW模型的目的是让当前字词(要被预测的对象)的出现机率越高越好。

 

譬如:[‘感冒’, ‘要’, ‘多’, ‘休息’], [‘生病’, ‘要’, ‘多’, ‘休息’]

 

假设语料库输入大多是跟生病休养相关的语句,此时模型就可以判断上下文关係,学习到 ‘感冒’ 和 ‘生病’ 的语意是相近的,最后算出的cos(余弦值)也会越大(空间中两向量越靠近)。

 

2. Skip-gram
:CBOW的相反, 根据当前词语预测上下文词语的机率

 

那Doc2Vec是…

 

模型能够判断单词间的语意相近程度了,那进一步我们想要知道,词语组合成的「段落」间的相近程度是如何。

 

我们有一个选择,可以将Word2Vec算出的词向量相加做平均处理,来代表这些词组成的一段段落的向量;但是这样就没有考虑到字词的先后顺序,以及上下文关係,而且段落长度可能相差非常多。

 

于是Word2Vec论文作者 Tomas Mikolov 再延伸提出了 Doc2Vec方法, 比起直接将字词相加,Doc2Vec考虑字词先后顺序后算出代表一语句段落的向量。

 

那如何做到让模型”参考到字词顺序及上下文关係”?

 

Doc2Vec跟Word2Vec有异曲同工之妙,这两种神经网络演算法其实跟Word2Vec很类似:

图片来源: https://link.springer.com/chapter/10.1007/978-3-319-66808-6_16

 

    1. PV-DM

 

    1. (Paragraph Vector – Distributed Memory)

 

    1. 跟CBOW很像,只是多了paragraph_id (会先映射成一paragraph vector)。训练过程中 paragraph_id跟词一样保持不变、参与每个词的训练,待每个词都被训练到以后,也会获得一个代表这段文档的向量(文档权重D)。

 

    1. PV-DBOW

 

    1. (Paragraph Vector – Distributed Bag-of-words)

 

    1. 跟Skip-gram很像,使用文档权重矩阵来预测每个词出现的机率。

 

 

同一个文档段落,用单词Word2Vec相加 v.s. Doc2Vec 的效果

 

参考资料:
1. 【演算法】word2vec与doc2vec模型:http://www.ipshop.xyz/9903.html
2. 一周论文 | Word2Vec 作者Tomas Mikolov 的三篇代表作:https://kknews.cc/zh-tw/news/69j4am.html
3. 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析:https://blog.csdn.net/mpk_no1/article/details/72458003

Be First to Comment

发表回复

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