使用Python中的余弦相似度测量两个句子之间的相似度2025 年 1 月 4 日 | 阅读 6 分钟 句子相似性介绍句子相似性是自然语言处理 (NLP) 中的一个关键概念,它衡量两个句子在意义或内容上的相似程度。这种衡量对于各种应用至关重要,包括:
处理句子相似性的一种流行技术是余弦相似度,我们将在本次解释中重点关注它。 理解余弦相似度余弦相似度是一种测量工具,用于确定两个向量的相似程度,而不考虑它们的幅度。它计算两个向量之间夹角的余弦值。在文本分析的上下文中,这些向量在多维空间中代表句子。 余弦相似度的公式为: 其中
结果值的范围从 -1 到 1,其中:
文本预处理在计算相似性之前,预处理文本通常很有用。常见的预处理步骤包括:
让我们来实现这些预处理步骤。 示例 输出 Original sentence 1: The quick brown fox jumps over the lazy dog Preprocessed sentence 1: quick brown fox jump lazi dog Original sentence 2: The lazy dog is jumped over by the quick brown fox Preprocessed sentence 2: lazi dog jump quick brown fox 向量化技术要应用余弦相似度,我们需要将文本转换为数学向量。有几种方法可以做到这一点:
让我们同时实现计数向量化和 TF-IDF。 示例 输出 Count Vectorization: [[1 1 1 1 1 1] [1 1 1 1 1 1]] TF-IDF Vectorization: [[0.44943642 0.44943642 0.44943642 0.44943642 0.44943642 0.44943642] [0.44943642 0.44943642 0.44943642 0.44943642 0.44943642 0.44943642]] 在 Python 中实现余弦相似度既然我们有了向量化后的句子,我们如何实现余弦相似度函数呢? 示例 输出 Cosine Similarity (Count Vectorization): 1.0 Cosine Similarity (TF-IDF Vectorization): 1.0 在这种情况下,两种技术都产生了完美的相似度分数 1.0,因为在预处理之后,我们的句子以相同的顺序包含相同的词。 高级技术和注意事项虽然基本实现对于简单情况效果很好,但有一些高级技术和注意事项需要牢记: a) N-grams:不单独使用单词,我们可以使用连续单词的组合(n-grams)来捕获更多上下文。 示例 输出 TF-IDF Vectorization with n-grams: [[0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010] [0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010 0.27735010]] Cosine Similarity (TF-IDF with n-grams): 1.0 b) 词嵌入:而不是使用像计数向量化或 TF-IDF 这样的词袋模型,我们可以使用预训练的词嵌入,如 Word2Vec 或 GloVe。 示例 输出 Cosine Similarity (Word2Vec): 0.9789562821388245 c) 加权词嵌入:我们可以将词嵌入与 TF-IDF 权重结合起来以获得更好的表示。 示例 输出 Cosine Similarity (Weighted Word2Vec): 0.9789562821388245 余弦相似度的应用
结论余弦相似度是一种强大而灵活的工具,用于测量向量之间的相似性,尤其是在文本和数据分析中。其应用范围涵盖信息检索、搜索引擎、推荐系统、文本挖掘、社交网络分析、生物信息学、图像处理和购物篮分析。在信息检索和搜索引擎中,余弦相似度通过比较文档和查询向量来增强搜索结果的相关性。推荐系统利用它通过比较用户偏好和商品描述来提供个性化推荐。在文本挖掘和 NLP 中,它通过衡量文本相似性来辅助文本分类、情感分析和抄袭检测。社交网络分析利用它来识别社区并根据用户相似性推荐联系人。在生物信息学中,它分析基因表达谱和蛋白质序列以推进生物学研究。图像处理通过比较图像特征向量,从基于内容的图像检索和面部识别中受益。购物篮分析使用余弦相似度来识别经常一起购买的商品,并细分客户以进行定向营销。诸如根据用户查询推荐商品或在语料库中查找相似文档等实际应用,展示了余弦相似度在不同领域中的有效性和多功能性。 |
Python中的“with”语句是一个强大的工具,用于资源管理并确保可靠地执行清理操作。它通过抽象使用资源(如文件、网络连接和锁)中涉及的常见模式来简化资源管理。本文旨在...
阅读 4 分钟
在 Python 中使用 OpenCV 对图像进行下采样相对直接。下采样是指降低图像的分辨率或尺寸。OpenCV 是 Python 中流行的图像处理库。您可以使用 `cv2.resize()` 函数执行下采样。这是一个简单的示例: import cv2 #...
阅读20分钟
在不断发展的 Web 开发领域,构建健壮的 API 是一项关键技能。Flask,一个轻量级且通用的 Python Web 框架,可以轻松创建可以处理各种任务的 API。API 开发的一个基本方面是返回...的能力。
7 分钟阅读
在大数据时代,从海量数据中发掘有意义的洞察是组织、科学家和数据分析师的关键任务。一个主要的挑战是找出数据中的模式和关系,这些模式和关系可以为决策和营销策略提供可操作的信息,然后……
11 分钟阅读
简介:在本教程中,我们将学习 time localtime() 方法在 Python 中的用法。Python time localtime() 方法将 Python 时间转换为本地时间。Python 时间计算为自本地时钟相对于系统空间的时间以来经过的秒数....
5 分钟阅读
强化学习 (RL) 是人工智能的一个强大分支,它侧重于智能体如何在环境中采取行动以获得累积奖励。它的灵感来自行为心理学,即智能体通过与环境互动并获得奖励作为反馈来学习...
阅读 10 分钟
? 在当今的数字时代,网络安全对于保护敏感信息和基础设施免受恶意行为者的侵害至关重要。Python 以其简单性、多功能性和强大的库,已成为网络安全领域的一个强大工具。本文探讨了 Python 在网络安全中的各种用法...
阅读 4 分钟
Python 以其简单性和多功能性而闻名,提供了多种数据结构以适应不同的编程需求。在这些结构中,列表作为基础且强大的容器脱颖而出。列表是可以存储异构元素的动态数组,提供了一种灵活高效的...
阅读 3 分钟
? Python 中的 datetime 模块提供了用于处理日期和时间的类。有时,您需要将一个需要时间信息的日期更改为一个完整的 datetime 对象。在 Python 中有多种转换日期的方法,具体取决于...
5 分钟阅读
引言 计算机科学和各种实际领域(包括基于地图的路线规划、网络路由等)中的一个核心问题。解决此类问题可以使用称为统一成本搜索 (UCS) 的算法。本书将彻底讨论统一成本搜索...
11 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India