揭秘百度HITS算法及如何利用HITS算法做SEO优化

作者: duozhandian 分类: 东莞SEO技术 发布时间: 2019-12-10 05:20

HITS的全称是Hyperlink-Induced Topic Search,HITS 算法是由康奈尔大学( Cornell University ) 的Jon Kleinberg 博士于1997 年首先提出的,为IBM 公司阿尔马登研究中心( IBM Almaden Research Center) 的名为“CLEVER”的研究项目中的一部分。

一、HITS算法来源:

1999年,Jon Kleinberg 提出了HITS算法。作为几乎是与PageRank同一时期被提出的算法,HITS同样以更精确的搜索为目的,并到今天仍然是一个优秀的算法。HITS算法的全称是Hyperlink-Induced Topic Search。在HITS算法中,每个页面被赋予两个属性:hub属性和authority属性。同时,网页被分为两种:hub页面和authority页面。hub,中心的意思,所以hub页面指那些包含了很多指向authority页面的链接的网页,比如国内的一些门户网站;authority页面则指那些包含有实质性内容的网页。HITS算法的目的是:当用户查询时,返回给用户高质量的authority页面。

二、算法原理:
很多算法都是建立在一些假设之上的,HITS算法也不例外。HITS算法基于下面两个假设:
Ⅰ、一个高质量的authority页面会被很多高质量的hub页面所指向。
Ⅱ、一个高质量的hub页面会指向很多高质量的authority页面。
什么叫“高质量”,这由每个页面的hub值和authority值确定。其确定方法为:
Ⅰ、页面hub值等于所有它指向的页面的authority值之和。
Ⅱ、页面authority值等于所有指向它的页面的hub值之和。
HITS衡量1个页面用A[i]和H[i]值表示,A代表Authority权威值,H代表Hub枢纽值。
大意可理解为我指出的网页的权威值越高,我的Hub值越大。指向我的网页的Hub值越大,我的权威值越高。二者的变量相互权衡。下面一张图直接明了:

Hub页面和Authority页面解释

Hub页面和Authority页面解释

HITS算法详解
如果理解了PageRank算法的原理,理解HITS应该很容易,最后结果的输出是根据页面的Authority权威值从高到低。
HITS算法描述:

三、实例分析:
如下有三个网页A,B,C及其链接关系:

 HITS算法链接关系分析

HITS算法链接关系分析

构造邻接矩阵(Adjacent Matrix):

HITS算法 构造邻接矩阵(Adjacent Matrix)

HITS算法 构造邻接矩阵(Adjacent Matrix)

每个节点都有一个Hub分数和Authority分数,所以有一个Hub向量h和Authority向量a,向量的每个元素都初始化为1n√,其中n为节点数:

HITS算法原理详解

HITS算法原理详解

按如下方式交替更新h和a的值:

HITS算法介绍

HITS算法介绍

过程如下,直到任一向量不再变化(收敛):

HITS算法详解

HITS算法详解

需要注意的是每一步都需要对得到的向量进行归一化:

HTIS算法推演

HTIS算法推演

用Python代码实现:

用python实现,需要先安装python-graph-core。

class HITSIterator:
__doc__ = ”’计算一张图中的hub,authority值”’

def __init__(self, dg):
self.max_iterations = 100 # 最大迭代次数
self.min_delta = 0.0001 # 确定迭代是否结束的参数
self.graph = dg

self.hub = {}
self.authority = {}
for node in self.graph.nodes():
self.hub[node] = 1
self.authority[node] = 1

def hits(self):
“””
计算每个页面的hub,authority值
:return:
“””
if not self.graph:
return

flag = False
for i in range(self.max_iterations):
change = 0.0 # 记录每轮的变化值
norm = 0 # 标准化系数
tmp = {}
# 计算每个页面的authority值
tmp = self.authority.copy()
for node in self.graph.nodes():
self.authority[node] = 0
for incident_page in self.graph.incidents(node): # 遍历所有“入射”的页面
self.authority[node] += self.hub[incident_page]
norm += pow(self.authority[node], 2)
# 标准化
norm = sqrt(norm)
for node in self.graph.nodes():
self.authority[node] /= norm
change += abs(tmp[node] – self.authority[node])

# 计算每个页面的hub值
norm = 0
tmp = self.hub.copy()
for node in self.graph.nodes():
self.hub[node] = 0
for neighbor_page in self.graph.neighbors(node): # 遍历所有“出射”的页面
self.hub[node] += self.authority[neighbor_page]
norm += pow(self.hub[node], 2)
# 标准化
norm = sqrt(norm)
for node in self.graph.nodes():
self.hub[node] /= norm
change += abs(tmp[node] – self.hub[node])

print(“This is NO.%s iteration” % (i + 1))
print(“authority”, self.authority)
print(“hub”, self.hub)

if change < self.min_delta:
flag = True
break
if flag:
print(“finished in %s iterations!” % (i + 1))
else:
print(“finished out of 100 iterations!”)

print(“The best authority page: “, max(self.authority.items(), key=lambda x: x[1]))
print(“The best hub page: “, max(self.hub.items(), key=lambda x: x[1]))

if __name__ == ‘__main__’:
dg = digraph()

dg.add_nodes([“A”, “B”, “C”, “D”, “E”])

dg.add_edge((“A”, “C”))
dg.add_edge((“A”, “D”))
dg.add_edge((“B”, “D”))
dg.add_edge((“C”, “E”))
dg.add_edge((“D”, “E”))
dg.add_edge((“B”, “E”))
dg.add_edge((“E”, “A”))

hits = HITSIterator(dg)
hits.hits()

程序中给出的网页之间的关系如下:

hits2

运行结果如下:

This is NO.9 iteration
authority {‘E’: 0.7886751345855355, ‘C’: 0.2113248654398108, ‘B’: 0.0, ‘A’: 7.119870133749228e-06, ‘D’: 0.5773502691457247}
hub {‘E’: 3.6855159786102477e-06, ‘C’: 0.40824829046663563, ‘B’: 0.7071067811721405, ‘A’: 0.40824829046663563, ‘D’: 0.40824829046663563}
finished in 9 iterations!
The best authority page: (‘E’, 0.7886751345855355)
The best hub page: (‘B’, 0.7071067811721405)

四、HITS算法特点:
该算法对于国内搜索引擎而言,具有一定的缺陷,也正是一些缺陷影响了搜索引擎结果排序。从而可以利用HITS算法的缺陷进行网站优化。比如由于HITS的主题漂移,即使你发布的外链是不相关的,也会提升网页主题的推荐度,从而提升网页关键词排名。其次,HITS算法由于是归属于链接分析算法,该算法不仅仅是强调外部链接的重要性,同样也强调内部链接的重要性,如站内网页A信任度高,站内网页B包含内页A的链接,也会间接性提升网页B的权重,这也是为何很多时候做排名优化的页面没有排名,反倒引起了没有优化的页面参与了排名。

五、HITS算法用途:
1、可以利用HITS枢纽页面与权威页面之间的关系提升排名卡位现象,比如排名第三页,可以利用该方式有少许排名提升;
2、可以利用HITS的主题漂移原理带动其他页面之间的排名,比如优化页面带动没有优化的页面排名。

六、HITS算法与PageRank算法比较
HITS算法和PageRank算法可以说是搜索引擎链接分析的两个最基础且最重要的算法。从以上对两个算法的介绍可以看出,两者无论是在基本概念模型还是计算思路以及技术实现细节都有很大的不同,下面对两者之间的差异进行逐一说明。

1.HITS算法是与用户输入的查询请求密切相关的,而PageRank与查询请求无关。所以,HITS算法可以单独作为相似性计算评价标准,而PageRank必须结合内容相似性计算才可以用来对网页相关性进行评价;

2.HITS算法因为与用户查询密切相关,所以必须在接收到用户查询后实时进行计算,计算效率较低;而PageRank则可以在爬虫抓取完成后离线计算,在线直接使用计算结果,计算效率较高;

3.HITS算法的计算对象数量较少,只需计算扩展集合内网页之间的链接关系;而PageRank是全局性算法,对所有互联网页面节点进行处理;

4.从两者的计算效率和处理对象集合大小来比较,PageRank更适合部署在服务器端,而HITS算法更适合部署在客户端;

5.HITS算法存在主题泛化问题,所以更适合处理具体化的用户查询;而PageRank在处理宽泛的用户查询时更有优势;

6.HITS算法在计算时,对于每个页面需要计算两个分值,而PageRank只需计算一个分值即可;在搜索引擎领域,更重视HITS算法计算出的Authority权值,但是在很多应用HITS算法的其它领域,Hub分值也有很重要的作用;

7.从链接反作弊的角度来说,PageRank从机制上优于HITS算法,而HITS算法更易遭受链接作弊的影响。

8.HITS算法结构不稳定,当对“扩充网页集合”内链接关系作出很小改变,则对最终排名有很大影响;而PageRank相对HITS而言表现稳定,其根本原因在于PageRank计算时的“远程跳转”。

9.作弊网页
试想我们弄一个页面指向很多高质量的authority页面,那么这个页面就成为了一个高质量的hub页面。然后再弄个链接指向自己的差网页,按照HITS算法,将大大提升自己的差网页的authority值。

文章来源快排科技,详情页链接:http://seoyh.seokuaipai.cn/278.html,在保留原文中心思想的提前下有改动。