You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
5.7 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 105 | Word2Vec算法有哪些应用
周一我们分享了三个比较有代表意义的Word2Vec的扩展模型主要有两种思路从词的上下文入手重新定义上下文或者对完全不同的离散数据进行建模。
今天,我们来看一看**Word2Vec在自然语言处理领域的应用**。如果我们已经通过SG模型、CBOW模型或者其他的算法获得了词向量接下来我们可以把这些词向量用于什么样的任务中呢
## Word2Vec的简单应用
**最直接的也是最常见的Word2Vec应用就是去计算词与词之间的相似度**。当我们的数据还是原始的“词包”Bag of Word这时候是没法计算词与词之间的相似度的因为每个词都被表示为某个元素为1其余元素都为0 的离散向量。按照定义两个离散向量之间的相似度都是0。因此从词包出发我们无法直接计算词与词之间的相似度这是从定义上就被限制了的。
Word2Vec就是为了跨越这个障碍而被发明的这一点我们在前面就已经提到过了。所以当我们可以用Word2Vec的词向量来表示每一个单词的时候我们就可以用“**余弦相关度**”Cosine Similarity来对两个词向量进行计算。**余弦相关度其实就是计算两个向量的点积,然后再归一化**。如果针对已经归一化了的向量,我们就可以直接采用**点积**来表达两个向量的相关度。不管是余弦相关度还是点积,我们都假设计算结果的值越大,两个词越相关,反之则不相关。
既然我们可以计算两个词的相关度那么很多依赖相关度的任务就都能够轻松完成。比如我们希望把词进行聚类也就是说把相关的词都聚合在一起。通常的聚类算法都可以直接使用比如我们熟悉的“K均值”算法。这些算法的核心是计算两个数据点的距离就可以利用我们刚刚讲的余弦相关度来实现。
我们在谈Word2Vec扩展模型的时候曾经提到了一些扩展模型可以用于表达比词这个单位更大的文本单元比如段落和文档向量的获取。其实当时我们就提到了一种可以得到这些单元向量的简单方法那就是**直接利用Word2Vec来进行加权平均**。在获得了词向量之后,我们就可以用一个文档里所有词的加权平均,甚至是简单的叠加来达到表达文档的目的。这个时候,我们也就可以利用诸如余弦相关度来计算文档之间的相关度了。
另外一个随着Word2Vec的推出而大放异彩的应用则是“**词语的类比**”。Word2Vec的原作者们用类比来表达这种词向量能够完成一些与众不同的任务。词向量本质上就是一个连续空间的向量因此从数学上来说这种向量其实可以进行任何“合规”的运算比如加、减、乘、除。于是作者们就利用向量的加减关系来看能否得到有意义的结果而得到的结果令人吃惊。
比如如果我们把“国王”King这个单词的向量减去“男人”Man这个向量然后加上“女人”Woman这个向量得到的结果竟然和“王后”Queen这个向量非常相近。类似的结果还有“法国”France减去“巴黎”Paris加上“伦敦”London等于“英格兰”England等。对于传统的方法来说这样的行为是无法实现的。因此Word2Vec的流行也让这种词语的类比工作变得更加普遍起来。
## Word2Vec的其他使用
在自然语言处理中有一系列的任务之前都是依靠着“词包”这个输入来执行的。当我们有了Word2Vec之后这些任务都可以相对比较容易地用“词向量”来替代。
一类任务就是利用词来进行某种分类任务。比如,我们希望知道某些文档是属于什么类别,或者某些文档是不是有什么感情色彩,也就是通常所说的“基于监督学习的任务”。**词向量会成为很多文本监督学习任务的重要特性**。在诸多的实验结果中,得到的效果要么好于单独使用词包,要么在和词包一起使用的情况下要好于只使用词包。
在进行监督学习的任务中,词向量的重要性还体现于其**对深度学习架构的支持**。众所周知即便是最简单的深度学习架构比如多层感知器都需要输入的数据是连续的。如果我们直接面对离散的文本数据常常需要把这些离散的文本数据学习成为连续的向量其实就是在学习Word2Vec。经过了这一层的转换之后我们往往再利用多层的神经网络结果对这些信号进行处理。
在很多实践中人们发现,与其利用不同的任务来学习相应的词向量,还不如直接拿在别的地方学好的词向量当做输入,省却学习词向量这一个步骤,而结果其实往往会有效果上的提升。这种使用词向量的方法叫作“**提前训练**”Pre-trained的词向量。其实不仅仅是在简单的多层感知器中甚至是在RNN等更加复杂的深度架构中也都更加频繁地利用提前训练的词向量。
## 总结
今天我为你介绍了Word2Vec模型在各种实际任务中的应用。
一起来回顾下要点第一我们聊了Word2Vec这个模型的一些简单应用比如如何计算词与词之间的相关度以及如何进行词的类比计算第二我们讨论了如何利用词向量进行更加复杂的自然语言任务的处理。
最后给你留一个思考题Word2Vec和主题模型提供的向量是互补的还是可以相互替换的呢
欢迎你给我留言,和我一起讨论。