原文作者:Ritesh Sinha
原文地址:https://dzone.com/articles/applying-nlp-to-decode-an-indian-classical-movie-s
译者微博:@从流域到海域
译者博客:blog.csdn.net/solo95
这篇文章的目标是运用自然语言处理来理解印度经典电影“ 肖莱”中的各种人物之间的关系 。使用的文本取自Sholay的维基页面,只采用前三个段落用于更好地理解文章内容。本文的重点是方法而不是准确性,所以使用了较小的数据集。对NLP领域中各种方法的准确性感兴趣的读者可以看看这篇文章。
(Word embedding全部译为单词嵌入, 这篇文章多处出现words,有时指单词,有时指文字,请读者注意,译者注。)
近年来,在向量空间中表示单词的各种方法已经出现,已被证明在捕捉句法(语法结构)和语义(含义)细节方面是极其有效的。单词嵌入是辅助NLP相关任务的技术之一。
在构成输入表示时,单词和短语嵌入已经被证明可以显著提高NLP的性能。
根据Wikipedia的这篇文章:
单词嵌入 是自然语言处理(NLP)中的一组语言建模和特征学习技术的总称,它把来自单词表的词或词组被映射到实数的向量上。
发现单词向量在解释关系方面表现相当好。从以下图像可以清楚看出。
这是一个有用的单词向量功能,他们能够解释如下关系:
vector(King) - vector(Queen) = vector(Man) - vector(Woman)
其中一个著名的方法是Mikolov等人的Word2Vec,它已经取得了很好的成功。这是由Google的研究人员完成的。
另外还有一个叫做GloVe (全局向量)的著名方法 ,由Jeffrey Pennington,Richard Socher和Christopher D. Manning在斯坦福大学开发,在某些情况下表现更好。
上述两种模式都遵循这个方法:一个词被保存它的公司(company)所知晓。
注:还有其他的方法,这些方法已经被广泛的使用,并且对NLP的发展做出了贡献,这里不进行讨论。
单词向量表示法是非常有用的,有助于一些机器学习任务。我把其中一些列在下面。
在这种情况下,GloVe方法被用于分析从维基百科页面(其前三个段落)中获取的文本。然后,将对由GloVe算法形成的向量进行主成分分析,然后在带有Wiki文本中的各种短语的二维图上显示。
所用的代码是在Rtudio环境中由R语言编写。
单词嵌入是通过使用text2vecand的 tm
包来完成的 。可视化使用 ggplot2
完成, 将会在一个二维空间中表示。
对文本进行修剪以删除数量少于三个的单词。这是为了保持可视化看起来整洁。
文字窗口保持在5。
矢量的大小保持在20。
该模型通过调用 glove = GlobalVectors$new
进行训练,它在text2vec包中可用。
以下是通过上述技术学习到的(针对出现在语料库中的一些单词)的各种向量的例子。
注意:由于空间不足,所有矢量都不显示。
学习过矢量之后,应用主成分分析,并在具有两个主成分的二维图上绘制出各个单词,因为难于以两维以上的方式进行可视化。由此产生的关系由下图描述。
一些有趣的观察发现:
我们看到,在一个小的数据集上,全局向量在理解一些关系方面表现得相当好。在矢量表示的帮助下,单词可以表示为数值矢量,并且可以用作一些更复杂的机器学习任务的构建块。
上面的分析的源代码和解释可以在这里找到。