点击上方“AI遇见机器学习”,选择“星标”公众号

原创干货,第一时间送达

一、余弦测量相似度

为了定义两个目标词v和w之间的相似度,我们需要一个度量来取两个这样的向量并给出向量相似度的度量。到目前为止,最常见的相似性度量是向量之间夹角的余弦值。与NLP中使用的大多数向量相似性度量方法一样,余弦也是基于线性代数中的点积算子,也称为内积:


我们将看到,向量之间的相似性度量大多基于点积。点积是一种相似性度量,因为当两个向量在相同的维度上有较大的值时,点积的值往往较高。或者,在不同维度上有0的向量正交向量的点积为0,表示它们之间的强烈差异。然而,作为相似性度量,这个原始的点积有一个问题:它偏爱长向量。向量长度定义为:


向量越长,点积越大,每个维度的值都越大。更频繁的单词有更长的向量,因为它们往往与更多的单词同时出现,并且每个单词都有更高的共现值。因此,对于频繁出现的单词,原始点积会更高。但这是个问题;我们想要一个相似性度量,它告诉我们两个单词有多相似,而不考虑它们的频率。修改点积使向量长度标准化的最简单方法是用点积除以两个向量的长度。这个标准化的点积等于两个向量夹角的余弦,从向量 07404e68-c52c-eb11-8da9-e4434bdf6706.svg 与向量 07404e68-c52c-eb11-8da9-e4434bdf6706.svg 的点积的定义出发:


因此,两个向量 0d404e68-c52c-eb11-8da9-e4434bdf6706.svg 和 10404e68-c52c-eb11-8da9-e4434bdf6706.svg 之间的余弦相似度度量可以计算为:


对于某些应用程序,我们通过将每个向量除以其长度对其进行预标准化,从而创建一个长度为1的单位向量。因此,我们可以计算一个单位向量从 07404e68-c52c-eb11-8da9-e4434bdf6706.svg 除以 13404e68-c52c-eb11-8da9-e4434bdf6706.svg 。对于单位向量,点积等于cos。余弦值的范围从指向同一方向的向量的1,到正交向量的0,到指向相反方向的向量的-1。但是原始频率值是非负的,所以这些向量的余弦从0到1。让我们看看余弦如何计算单词apricot或者digital在含义上更接近information,,只使用以下简化表中的原始计数:


这个模型决定information,更接近digital而不是apricot,这个结果似乎是合理的。图6.7显示了可视化结果

余弦相似度的图形演示,显示三个单词的向量(apricot, digital, and information)在二维空间中定义的单词个数和数据量大且在邻域内。注意digital与information之间的夹角小于apricot与information之间的夹角。当两个向量越相似时,余弦值越大,但角度越小;当两个向量夹角最小(0)时,余弦值最大(1)

二、TF-IDF:向量中的权重项

图6.5中的共生矩阵(co-occurrence matrix)用两个单词共现的原始频率表示每个单元。 然而,事实证明,简单的频率不是单词之间关联的最佳衡量标准。 一个问题是原始频率非常偏斜并且不具有很强的辨别力。 如果我们想知道“apricot”和“pineapple”共享什么上下文,而不是“digital”和“information”,,我们就不会从像the, it, or they这样的词语中得到良好的歧义,这些词语经常与各种各样的单词一起出现,并且不能提供任何特定单词的信息。 我们在图6.3中也看到了莎士比亚语料库; “good”一词的维度在戏剧之间并不是很有区别; good只是一个常用词,并且在每个剧中都有大致相同的高频。

这有点自相矛盾。经常出现在附近的单词(可能糖经常出现在杏体附近)比只出现一两次的单词更重要。然而,过于频繁、无处不在的词,比如“or”并不重要。我们如何平衡这两个相互冲突的约束条件?tf-idf算法(这里是连字符,不是负号)是两项的乘积,每一项都包含这两种直觉中的一种:

1.第一个是术语频率(Luhn,1957):文档中单词的频率。 通常我们希望稍微降低原始频率,因为在文档中出现100次的单词不会使该单词与文档含义相关的可能性高100倍。 因此,我们通常使用频率的 19404e68-c52c-eb11-8da9-e4434bdf6706.svg ,从而得出以下频率权重一词的定义:


因此,在文档中出现10次的项的tf= 2,100次的tf= 3,1000次的tf=4,以此类推。

2.第二个因素用于对只出现在少数几个文档中的单词给予更高的权重。限于少数文件的术语对于区分这些文件与集合的其他文件是有用的,在整个集合中频繁出现的术语没有那么有用。一个术语t的文档频率 1d404e68-c52c-eb11-8da9-e4434bdf6706.svg 就是它所包含的文档数量。相反,术语的收集频率是该词在任何文档的整个收集中出现的总次数。在莎士比亚的37部戏剧集中,考虑Romeo and action这两个词。这两个词的收集频率相同,都是113次(它们在所有的戏剧中都出现了113次),但是文档频率非常不同,因为Romeo 只出现在一个戏剧中。如果我们的目标是找到关于romantic tribulations of Romeo的文献,那么Romeo这个词应该有很高的权重:


我们通过逆文档频率(inverse document frequency)或idf项权重来赋予这些更具辨别力的单词如Romeo的重要性。idf是使用分数 25404e68-c52c-eb11-8da9-e4434bdf6706.svg 定义的,其中N是集合中文档的总数,1d404e68-c52c-eb11-8da9-e4434bdf6706.svg 是第t项(词t)出现的文档数量(也就是包含该词的文档数量)。一个术语出现的文档越少,这个权重就越大。1的最小权重分配给所有文档中出现的术语。文档的意义通常很清楚:在莎士比亚作品中,我们用戏剧;当处理像Wikipedia这样的百科全书文章集合时,文档是Wikipedia页面;在处理报纸文章时,文档是一篇文章。有时候,您的语料库可能没有适当的文档划分,为了计算idf,您可能需要自己将语料库分解为文档。由于许多集合中有大量文档,因此通常使用log函数对该度量进行压缩。由此得到逆文档频率(idf)的定义:


这里为了避免分母为0,通常要加1

以下是莎士比亚语料库中一些单词的idf值,从仅在一部戏剧中出现的信息量非常大的单词,如Romeo,到在几部戏剧中出现的单词,如salad or Falstaff,以及那些像fool或者常见的常见词汇。 因为它们出现在good or sweet的所有37个剧中,所以完全没有歧义性:


文档d, 2c404e68-c52c-eb11-8da9-e4434bdf6706.svg 中词t的值的tf-idf加权因此将术语频率与idf组合:


图6.8将tf-idf权重应用于图6.2中的莎士比亚term-document矩阵。注意,与单词good对应的维度的tf-idf值现在都变为0;由于这个词出现在每个文档中,tf-idf算法导致它在任何戏剧比较中被忽略。同样地,37个剧中36个出现的fool这个词的权重要低得多。

tf-idf加权是目前信息检索中对共现矩阵进行加权的主要方法,在自然语言处理的许多其他方面也发挥着重要作用。

一个tf-idf加权术语文档矩阵,用于莎士比亚四部戏剧中的四个单词,使用图6.2中的计数。注意,idf权重消除了普遍存在的单词good的重要性,并极大地降低了几乎普遍存在的单词fool的影响。

三、tf-idf向量模型的应用

综上所述,我们目前描述的向量语义模型将目标单词表示为与词汇表中所有单词对应的维数(长度|V|,词汇量为20,000到50,000)的向量,这个向量也是稀疏的(大多数值为零)。每个维度的值是目标词与相邻上下文词共同出现的频率,由tf-idf加权。该模型通过对两个单词x和y的tf-idf向量求余弦来计算它们之间的相似性;高余弦,高相似性。这整个模型有时简称tf-idf模型,在加权函数之后。tf-idf模型的一个常见用途是计算单词相似性,这是一种有用的工具,用于查找单词释义、跟踪单词含义的变化或自动发现不同语料库中的单词含义。例如,我们可以通过计算w和其他V—1单词之间的余弦值,排序,并查看前10个单词,找到与任何目标单词w最相似的10个单词。

tf-idf向量模型也可用于判断两个文档是否相似。我们用文档中所有单词的向量表示文档,并计算所有这些向量的质心。质心是均值的多维形式;一组向量的质心是一个单个向量,它与集合中每个向量的距离的平方和最小,给定k个词向量 2f404e68-c52c-eb11-8da9-e4434bdf6706.svg ,质心文档向量d为:


给定两个文档,我们可以计算它们的文档向量d1和d2,并通过cos(d1;d2)估计两个文档之间的相似度,文档相似性对各种应用程序都很有用;信息检索,剽窃检测,新闻推荐系统,甚至数字人文学科的任务,如比较不同版本的文本,看看彼此相似。

另一种表示词向量的算法是word2vec和glove等

四、Visualizing Embeddings

可视化嵌入是帮助理解、应用和改进这些单词含义模型的重要目标。但是我们怎样才能把一个100维的向量形象化呢?将单词w嵌入到一个空间中,最简单的方法是列出与单词w最相似的单词,并根据它们的余弦值对单词中的所有单词进行排序。例如,使用Glove嵌入与“蛙”最接近的7个单词是:青蛙、蟾蜍、litoria、细趾蟾科、rana、蜥蜴和eleutherodactylus,另一种可视化方法是使用聚类算法来显示嵌入空间中哪些单词与其他单词相似的层次表示。右边的例子使用了一些名词嵌入向量的层次聚类作为可视化方法。然而,最常见的可视化方法可能是将一个单词的100个维度投射到2个维度中。图6.1显示了一个这样的可视化,使用的投影方法称为t- SNE


来源:知乎,浪大大链接:https://zhuanlan.zhihu.com/p/60411472

推荐阅读

干货|学术论文怎么写

资源|NLP书籍及课程推荐(附资料下载)

干货|全面理解N-Gram语言模型

资源|《Machine Learning for OpenCV》书籍推荐

欢迎关注我们,看通俗干货

word2vec相似度计算_干货|文本相似度计算相关推荐

  1. 结巴分词关键词相似度_中文文本相似度计算工具集

    [磐创AI导读]:前两篇文章中我们介绍了一些机器学习不错的项目合集和深度学习入门资源合集,本篇文章将对中文文本相似度计算工具做一次汇总.喜欢我们文章的小伙伴,欢迎大家点击上方蓝字关注我们的公众号:磐创 ...

  2. 短文本相似度在线计算_短文本相似度在线比较_短文本相似度在线查询_自然语言处理_百度AI开放平台

    短文本相似度计算服务能够提供不同短文本之间相似度的计算,输出的相似度是一个介于0到1之间的实数值,越大则相似度越高.相似度数值建议在一组数据中进行整体比对选用,输出数值越大,则代表语义相似程度相对越高 ...

  3. 软件工程java向量相似度计算_向量的相似度计算常用方法9个

    <向量的相似度计算常用方法9个>由会员分享,可在线阅读,更多相关<向量的相似度计算常用方法9个(5页珍藏版)>请在人人文库网上搜索. 1.向量的相似度计算常用方法相似度的计算简 ...

  4. jaccard相似度_Jaccard与cosine文本相似度的异同

    工作过程中,常常其他业务的同学问到:某两个词的相似度是多少?某两个句子的相似度是多少?某两个文档之间的相似度是多少?在本文中,我们讨论一下jaccard与cosine在文本相似度上的差异,以及他们适用 ...

  5. python 文本相似度_python实现的文本相似度算法(余弦定理)

    只对汉字进行相似度分析,以单个字为向量,然后每个字在章节中出现的次数,便是以此字向量的值.现在我们假设: 章节1中出现的字为:Z1c1,Z1c2,Z1c3,Z1c4--Z1cn:它们在章节中的个数为: ...

  6. 婴幼儿体重在线计算机,【婴儿体重计算器在线计算_婴儿体重计算器在线计算专题】- 天鹅到家...

    婴儿体重计算器在线计算-热门问答 Q:在线等答复,婴儿出生体重的最佳标准是多少? 你好,新生儿体重一般在6.3-6.7斤是.超重的胎儿首先面临的问题是难产,我们国家来说出生体重超过4250g,就建议剖 ...

  7. excel 等额本息还款每期本息计算_零基础入门融资租赁计算(第三讲)——设计租金方案...

    导语:本期我们将讲解如何设计融资租赁租金方案,以及设计的步骤和核心本质.通过本章的学习你将了解如何设计最基本的租金方案和计算该方案下的IRR. 1 融资租赁IRR计算的逻辑框架和黄金原则: (1)宏观 ...

  8. word2vec相似度计算_文档相似度助力搜索引擎

    几种简单相似度算法: 1.简单共有词判断 假设现有文本A和B,将A.B经过分词.去停用词之后形成集合A={a1,a2,...,an}和集合B={b1,b2,...,bn}.用NUM(A∩B)表示集合A ...

  9. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

最新文章

  1. [Webpack 2] Intro to the Production Webpack Course
  2. 使用页面元素属性做状态判断的隐患
  3. ubuntu 安装OpenBLAS
  4. 再厉害的魔术也比不上真正的redux
  5. 思科cisco路由器动态路由协议配置方法
  6. python 连续等于
  7. 30岁的你,目标工资是多少?
  8. Github部署+Hexo搭建免费博客 next主题美化
  9. word2vec理论与实践
  10. WCF中的服务契约(Continued)
  11. android pad刷机,小白必看,安卓平板电脑刷机教程之一键刷机
  12. Android 实现图片闪烁效果
  13. latex制作幻灯片模板
  14. Pollard rho 算法求解离散对数问题
  15. C#+ArcEgine开发(2)添加shp和lyr文件
  16. Python100例——第五章----不定方程的解
  17. 考研最卷的专业,我们替你查到了!
  18. 用Python写简历
  19. js中的设计模式之中介者模式
  20. 初中使用计算机教学反思,谈初中信息技术教学反思

热门文章

  1. 给一个正在运行的Docker容器动态添加Volume
  2. LeetCode - Combinations
  3. linux uniq 命令详解
  4. cocos2dx基础篇(26)——场景切换CCTransitionScene
  5. [坐标]关于坐标系和投影的相关知识探讨[转]
  6. TableLayoutPanel闪烁问题解决
  7. 无聊说说 strong VS weak
  8. 五一期间,飞鸽传书我又更新了。
  9. 网络通信程序写起来很难专业课没问题
  10. 软件研发作为一项工程而言,纳闷!