基于全文检索系统实现文档系统相关推荐功能

概述

当我们查看一些文档资料是,会选择相应的文库查询资料,比如百度文库,在我们预览文档内容是,网页还会提供相关的推荐功能,比如:搜索推荐、相关文档等,如下图百度文库的推荐功能:

百度文库推荐功能
搜索推荐基于浏览的文档标题给出相似标题的推荐,而相关文档一般会找出相似文档内容的文档给出推荐,进而提升用户的使用体验。
那么,如何实现以上推荐功能,下文给出一种实现方案,如有不精准的地方,欢迎指正。

1、搜索推荐

搜索推荐一般是基于短文本(文档标题)进行相似性推荐,目前业界常用的短文本推荐方法是基于文本编辑距离实现,以下给出编辑距离的基本概念。

1.1 编辑距离

编辑距离(Levenshtein Distance),是针对二个字符串(例如英文字)的差异程度的量化量测,是 用来度量两个序列相似程度的指标。编辑距离指的是在两个字符串之间,由一个字符串转换为另一个字符串所需要的最少单字符编辑操作。
单字符编辑操作定义为:

  • 插入(Insertion)
  • 删除(Deletion)
  • 替换(Substitution)

例如,“kitten” 和 “sitting” 这两个字符串,由 “kitten” 转换为 “sitting” 需要的最少单字符编辑操作有:
1.kitten → sitten (substitution of “s” for “k”)
2.sitten → sittin (substitution of “i” for “e”)
3.sittin → sitting (insertion of “g” at the end)
即二者之间的编辑距离为 3 。

2、相关推荐

2.1 文档指纹(Simhash算法)

SimHash是一种局部敏感hash(即Locality Sensitive Hashing),是Google在2007年发表的论文中提到的一种指纹生成算法,被应用在Google搜索引擎网页去重的工作之中。SimHash算法主要的工作就是将文本进行降维,生成一个SimHash值,也就是论文中所提及的“指纹”,通过对不同文本的SimHash值进而比较海明距离,从而判断两个文本的相似度。
SimHash算法主要有五个过程:分词、Hash、加权、合并、降维。通过下图来描述SimHash算法的整个过程:
在这里插入图片描述

  • 分词:把文本分词形成这个文章的特征单词,并为每个词加上权重, 在此,基于分词后进行关联词抽取,词条权重是关键词的TF-IDF值;
  • Hash:通过合适的hash函数算法把每个词变成相应的hash值;
  • 加权: 通过Hash步骤的hash生成结果,需要按照单词的权重形成加权数字串;
  • 合并: 把上面各个单词算出来的序列值累加,变成只有一个序列串;
  • 降维:把上一步算出来的 序列串变成 0 1 串,形成我们最终的simhash签名。
2.2 文档相似度(海明距离)

对于文本去重这个问题,常见的解决办法有余弦算法、欧式距离、Jaccard相似度、最长公共子串等方法。但是这些方法并不能对海量数据高效的处理。

2.3 海量文档处理技巧

基于文档指纹和海明距离即可计算出两个文档的相似度,给定一个文档,在文档库中找到和该文档内容相似推荐转化为找出和该文档指纹的海明距离较小的文档集合。
那么,问题是如何基于文档指纹的海明距离从海量文档库中快速找到相似推荐文档,在此,根据抽屉原理,对文档指纹做以下处理:
在这里插入图片描述

3、基于全文检索系统实现文档系统推荐

3.1 文档标题的搜索推荐

文档构建时线下遍历每一个文档基于编辑距离计算文档相似文档集合,写入文档索引字段,线上输入文档标题,检索上文存储的字段给出推荐:

编辑距离
存入字段
文档索引
相似文档集合
线上搜索
输入文档标题
推荐结果

在这里插入图片描述

3.2 文档内容的相关推荐

文档构建时计算文档指纹,写入文档索引字段,线上输入文档标题,检索文档对应的文档指纹,基于文档指纹构建查询表达式,线上检索相似文档给出推荐:

SimHash算法
存入字段
精确查询
组合查询
文档索引
文档指纹
检索文档指纹
线上检索
输入文档标题
基构建查询表达式
推荐结果

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值