【Python机器学习】NLP词频背后的含义——距离和相似度
我们可以使用相似度评分(和距离),根据两篇文档的表示向量间的相似度(或距离)来判断文档间有多相似。
我们可以使用相似度评分(和举例)来查看LSA主题模型与高维TF-IDF模型之间的一致性。在去掉了包含在高维词袋中的大量信息之后,LSI模型在保持这些距离方面十分出色。我们可以检查主题向量之间的距离,以及这个距离是否较好地表示文档主题之间的距离。我们想要检查意义相近的文档在新主题向量空间中彼此相近。
LSA能够保持较大的距离,但它并不总能保持小的距离(文档之间关系的精细结构)。LSA底层的SVD算法的重点是使新主题向量空间中所有文档之间的方差最大化。
特征向量(词向量、主题向量、文档上下文向量)之间的距离驱动着NLP流水线或者任何机器学习流水线的性能。这些距离的类别如下,不同的NLP问题,可能会在其中选择较好的类别:
- 欧几里得距离或笛卡尔距离,或均方根误差(RMSE):2范数或;
- 平方欧几里得距离、距离平方和(SSD):;
- 余弦、夹角或投影距离:归一化点积;
- 闵可夫斯基:p范数或;
- 分级距离,分级范数:p范数或为0<p<1;
- 城市街区距离、曼哈顿距离或出租车距离,绝对距离之和(SAD):1范数或;
- 杰卡德距离,逆集合相似性;
- 马哈拉诺比斯距离;
- 莱文斯坦距离或编辑距离。
计算距离的各种方法都说明了它的重要性。除了在scikit-learn中成对距离的实现,还有许多其他的实现用于数学专业,如拓扑学、统计学、工程学等。为了便于参考,可以在下面的模块中找到举例方法:
import sklearn.metrics.pairwise
print(sklearn.metrics.pairwise._VALID_METRICS)
距离通常由相似度(分数)计算,反之亦然,因此距离与相似度得分成反比。相似度得分涉及为0到1之间。典型的距离与相似度之间的换算公式如下:
similarity=1.0/(1.0+distance)
distance=(1.0/similarity)-1.0
但是,对于0到1之间(像概率一样)的距离和相似度得分,更常用的公式如下:
similarity=1.0-distance
distance=1.0-similarity
余弦距离对于取值范围由自己的约定。两个向量之间的夹角距离通常被计算为两个向量之间最大可能的角间距(180°或pi弧度)的一个分数表示。
因此,余弦相似度与余弦距离互为倒数:
import math
angular_distance=math.acos(cosine_similarity)/math.pi
distance=1.0/similarity-1.0
similarity=1.0-distance
术语“距离”和“长度”经常与术语“度量指标”混淆,因为许多距离和长度都是有效和有用的度量指标。但不幸的是,并非所有的距离都可以称为度量指标。但是,在正式的数学和集合论文 中,度量指标有时也被称为“距离函数”或“举例度量指标”中。