【Python机器学习】NLP词频背后的含义——距离和相似度

我们可以使用相似度评分(和距离),根据两篇文档的表示向量间的相似度(或距离)来判断文档间有多相似。

我们可以使用相似度评分(和举例)来查看LSA主题模型与高维TF-IDF模型之间的一致性。在去掉了包含在高维词袋中的大量信息之后,LSI模型在保持这些距离方面十分出色。我们可以检查主题向量之间的距离,以及这个距离是否较好地表示文档主题之间的距离。我们想要检查意义相近的文档在新主题向量空间中彼此相近。

LSA能够保持较大的距离,但它并不总能保持小的距离(文档之间关系的精细结构)。LSA底层的SVD算法的重点是使新主题向量空间中所有文档之间的方差最大化。

特征向量(词向量、主题向量、文档上下文向量)之间的距离驱动着NLP流水线或者任何机器学习流水线的性能。这些距离的类别如下,不同的NLP问题,可能会在其中选择较好的类别:

  • 欧几里得距离或笛卡尔距离,或均方根误差(RMSE):2范数或;
  • 平方欧几里得距离、距离平方和(SSD):;
  • 余弦、夹角或投影距离:归一化点积;
  • 闵可夫斯基:p范数或;
  • 分级距离,分级范数:p范数或为0<p<1;
  • 城市街区距离、曼哈顿距离或出租车距离,绝对距离之和(SAD):1范数或;
  • 杰卡德距离,逆集合相似性;
  • 马哈拉诺比斯距离;
  • 莱文斯坦距离或编辑距离。

计算距离的各种方法都说明了它的重要性。除了在scikit-learn中成对距离的实现,还有许多其他的实现用于数学专业,如拓扑学、统计学、工程学等。为了便于参考,可以在下面的模块中找到举例方法:

python 复制代码
import sklearn.metrics.pairwise
print(sklearn.metrics.pairwise._VALID_METRICS)

距离通常由相似度(分数)计算,反之亦然,因此距离与相似度得分成反比。相似度得分涉及为0到1之间。典型的距离与相似度之间的换算公式如下:

python 复制代码
similarity=1.0/(1.0+distance)
distance=(1.0/similarity)-1.0

但是,对于0到1之间(像概率一样)的距离和相似度得分,更常用的公式如下:

python 复制代码
similarity=1.0-distance
distance=1.0-similarity

余弦距离对于取值范围由自己的约定。两个向量之间的夹角距离通常被计算为两个向量之间最大可能的角间距(180°或pi弧度)的一个分数表示。

因此,余弦相似度与余弦距离互为倒数:

python 复制代码
import math
angular_distance=math.acos(cosine_similarity)/math.pi
distance=1.0/similarity-1.0
similarity=1.0-distance

术语"距离"和"长度"经常与术语"度量指标"混淆,因为许多距离和长度都是有效和有用的度量指标。但不幸的是,并非所有的距离都可以称为度量指标。但是,在正式的数学和集合论文 中,度量指标有时也被称为"距离函数"或"举例度量指标"中。

相关推荐
爱敲代码的小黄11 小时前
神经网络入门指南:从 CNN、RNN 到 Attention
人工智能·面试·程序员
Wang's Blog12 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
一只爱撸猫的程序猿12 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
我登哥MVP13 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
LucianaiB13 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
apcipot_rain13 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克60513 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_67814 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋14 小时前
Rust 编程其实很简单
开发语言·rust
冬奇Lab14 小时前
一天一个开源项目(第256篇):Anatomy —— 让 Claude 为技术概念「发明一台机器」,画成可交互的等距插画
人工智能·开源