热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

搜索引擎判定相似文章网页的原理大解析

在上一篇文章中已经详细的介绍了利用TF-IDF算法自动提取文章关键词的原理。接下来,我们再来研究一下另一个相关的问题。这个问题也是我们做SEO的最关心的,有些时候,我们除了要

在上一篇文章中已经详细的介绍了利用TF-IDF算法自动提取文章关键词的原理。接下来,我们再来研究一下另一个相关的问题。这个问题也是我们做SEO的最关心的,有些时候,我们除了要明白如何找到并提取文章关键词,我们还需要找到与原文章相似的其他文章。比如,我们平时在搜索引擎的新闻栏目下搜索某条新闻的时候,在主新闻下方,还提供了多条相似的新闻。如下图所示:

223052OD-0

为了找出相似的文章,我们就需要用到另外一个公式原理了,那就是“余弦相似性(cosine similiarity)”。

一、什么是"余弦相似性"?

余弦相似性是指通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相似度通常用于两个向量的夹角小于90°之内,因此余弦相似度的值为0到1之间。

值得注意的是余弦相似度可以用在任何维度的向量比较中,它尤其在高维正空间中的利用尤为频繁。例如在信息检索中,每个词条拥有不同的度,一个文档是由一个由有权值的特征向量表示的,权值的计算取决于词条在该文档中出现的频率。余弦相似度因此可以给出两篇文档其主题方面的相似度。

二、搜索引擎是如何判定相似文章的?

下面,马海祥还是以举例子的方式来说明如何才能找出相似文章?

为了简单起见,我们先从句子着手。

句子A:我喜欢看电视,不喜欢看电影。

句子B:我不喜欢看电视,也不喜欢看电影。

那么我们怎样才能计算出上面两句话的相似程度呢?

马海祥建议的基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

第1步:分词

句子A:我/喜欢/看/电视,不/喜欢/看/电影。

句子B:我/不/喜欢/看/电视,也/不/喜欢/看/电影。

第2步:列出所有的词

我,喜欢,看,电视,电影,不,也。

第3步:计算词频

句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。

句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。

第4步:写出词频向量

句子A:[1, 2, 2, 1, 1, 1, 0]

句子B:[1, 2, 2, 1, 1, 2, 1]

到这里,问题就变成了如何计算这两个向量的相似程度。

我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似,如下图所示:

2


推荐阅读
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
  • 利用CSS技术实现文本的上标和下标效果
    通过运用CSS中的`vertical-align`属性,可以实现文本的上标和下标效果。该属性通常用于调整行内元素的垂直对齐方式,例如在化学公式中表示二氧化碳(CO₂)时,可以将数字“2”设置为下标。此外,`vertical-align`还支持多种值,如`super`、`sub`等,以满足不同的排版需求。 ... [详细]
  • 如何快速掌握日柱推算技巧?解读大运、小运、流年与命宫的精准方法
    大运是指人生各阶段的运势变化,通过命理学分析,可以预测个人在不同时间段的吉凶祸福。本文将详细介绍如何快速掌握日柱推算技巧,解读大运、小运、流年与命宫的精准方法,帮助读者更好地理解并运用这些命理知识,从而在关键时刻做出明智决策。 ... [详细]
  • 哈希表(Hash Table)是一种高效的查找算法,与传统的链表和树结构相比,其在查找过程中无需进行逐个元素的比较。本文将深入探讨哈希表的基本原理、应用场景以及优化策略,帮助读者全面理解其在实际开发中的优势和局限性。通过实例分析和代码示例,我们将展示如何有效利用哈希表提高数据处理效率,并解决常见的冲突问题。 ... [详细]
  • 题目要求在给定的 m×n 矩阵中,计算并返回所有完全由 1 组成的正方形子矩阵的数量。矩阵中的每个元素只能是 0 或 1。通过动态规划的方法,可以高效地解决这一问题。示例中,输入矩阵包含多个由 1 组成的正方形子矩阵,需要统计这些子矩阵的总数。 ... [详细]
  • 在 Python 中,列表(list)是一种内置的数据类型,属于有序且可变的集合,支持随时添加或删除元素。此外,Python 还提供了多种独特的数据结构,如字典(dict)、集合(set)和元组(tuple),每种数据结构都有其特定的应用场景和优势。了解这些数值类型和数据结构对于高效编程至关重要。 ... [详细]
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
  • 在SWUSTOJ #1063中,题目要求对带权重的有向图进行算法计算与分析。假设图G使用邻接矩阵存储,任务是计算图中的最大权值和最小权值,并确定对应的有向边。输入数据的第一行包含一个整数n,表示图中节点的数量。随后的输入将提供图的边及其权重信息。通过该算法,可以有效地找出图中的关键路径和最短路径,为图论问题的解决提供重要参考。 ... [详细]
  • PHP 数组逆序排列方法及常用排序函数详解 ... [详细]
  • 本文深入探讨了二叉树路径和问题的算法优化方法。具体而言,给定一棵二叉树,需要找出所有从根节点到叶节点的路径,其中各节点值的总和等于指定的目标值。通过详细分析和优化,提出了一种高效的解决方案,并通过多个样例验证了其有效性和性能。 ... [详细]
  • 本文详细解析了高性能通信库 NanoMsg 的框架及其应用场景。其中,BUS模式支持多对多的简单通信方式,消息会传递给所有直接连接的节点。REQREP模式则适用于构建无状态的服务集群,用于处理用户的请求,每个请求都需要一个相应的响应。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 二叉树的直径是指树中任意两个叶节点之间最长路径上的节点数量。本文深入解析了计算二叉树直径的算法,并提出了一种优化方法,以提高计算效率和准确性。通过详细的案例分析和性能对比,展示了该优化算法在实际应用中的优势。 ... [详细]
  • 本文详细探讨了YOLO目标检测技术在实际应用中的实践与优化。通过一系列实战案例,展示了如何在不同场景下高效部署和调优YOLO模型。验证环境包括Ubuntu 18.04、NVIDIA驱动450、CUDA 11.0、cuDNN 8.0.5和OpenCV 4.4.0,确保了模型的稳定性和高性能表现。文章将持续更新,提供最新的技术进展和实践经验。 ... [详细]
  • vtkGlyph3D 是一种强大的符号化可视化工具,能够将三维数据集中的每个点用预定义的几何图形(如球体或箭头)进行表示。该工具不仅支持自定义符号的方向和缩放比例,还能够在复杂的数据场中突出显示关键特征,从而提高数据的可解释性和可视化效果。通过这种方式,用户可以更直观地理解和分析三维数据集中的重要信息。 ... [详细]
author-avatar
mobiledu2502860093
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有