5 搜索引擎算法
5.1 搜索排序打分
当前的搜索引擎的排序技术有两个不足:语意相关性和排序个性化。前者需要完善的自然语言处理技术,后者需要记录庞大访问者信息和复杂的计算。
Lucene/ES 打分
Elasticsearch 的默认打分公式是 lucene 的打分公式,主要分为两部分的计算,一部分是计算 query 部分的得分,另一部分是计算 field 部分的得分,下面给出 ES 官网给出的打分公式:
$$
score(q,d) = queryNorm(q) · coord(q,d) · ∑ (tf(t,d) · idf(t)² · t.getBoost() · norm(t,d))
$$
公式说明:
score(q,d) =
queryNorm(q) # 查询归一化
· coord(q,d) # 协调因子
· ∑ (
tf(t in d) # 词频
· idf(t)² # 反文档频率
· t.getBoost() # 词的权重
· norm(t,d) # 查询权重
) (t in q)
说明:q查询词,d文档,t~q 分词后的单词。
在计算过程中,涉及的变量应该考虑的是 document 所在的分片而不是整个 index。
相关性打分其实是查询与某个文档的某个字段之间的相关性打分,而不是与文档的相关性;
根据公式转换,就变成了查询的所有 Term 与文档中字段的相关性求和,如果某个 Term 不相关,则需要处理 coord 系数
queryNorm(q)=1 / √sumOfSquaredWeights , sumOfSquaredWeights =(idf(t1)^2+idf(t2) ^2+...+idf(tn) ^2), 对于 ES 来说分片是 1 才不影响排序
coord(q,d)=overlap/maxoverlap,overlap 是检索命中 query 中 term 的个数,maxoverlap 是 query 中总共的 term 个数,指分词后命中词在查询词的比例。
tf(t in d) = √frequency,词频即 term t 在文档中出现的个数。
idf(t) = 1 + log ( numDocs / (docFreq + 1)) 逆词频数,即召回的文档在总文档中出现过多少次
t.getboost():
norm(t,d): field 的标准化因子,在官方给的解释是 field 越短,如果召回的话权重越大。
5.2 垂直搜索打分
音乐搜索权重
小说搜索权重
说明:小说更新越快,来源站越多,章节数越多,说明小说越受欢迎,权重越高。
- 选取指标:爬取频率 freqs、来源站数 sources、章节数 chapters、
- 指标标准化:
- f_boost = log(1+ freqs/(freqs+2)
- s_boost = 1+sources/(sources+4) // 来源站数标准取 4
- c_boost = 1+chapters/(chapters+4) //章节数标准取 50
- 指标加权:boost = fboost∗f_boost*fboost∗s_boost*$c_boost
PHP 实现示例 :
$f_boost = dba_fetch($u_key, $dba);
$f_boost = 1+($f_boost/($f_boost+2));
$f_boost = pow($f_boost, 2); //爬取频率权重
$s_boost = 1+($info['sourcenum']/($info['sourcenum']+4)); //来源站权重,越多权重越高
$c_boost = 1+$info['chapter_total']/($info['chapter_total']+50); //章节数权重,章节越多权重越高
$boost = round($f_boost*$s_boost*$c_boost, 1);
整合搜索权重
选择指标:频道权重、查询权重
指标标准化:
搜索权重指标的标准化是为了确保不同搜索指标可以在同一标准下进行比较和分析。常见的搜索权重指标包括点击率(CTR)、转化率(CVR)、排名等。以下是一些常用的标准化方法:
1. 最小-最大标准化(Min-Max Normalization)
将指标值缩放到[0, 1]范围内。
- 公式 :\[ \text{X}_{\text{norm}} = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}} \]
- 优点 :简单直观。
- 缺点 :对异常值敏感。
2. Z-Score 标准化(标准差标准化)
将数据转换为标准正态分布(均值为 0,标准差为 1)。
- 公式 :\[ \text{X}_{\text{norm}} = \frac{X - \mu}{\sigma} \]
- 优点 :不受异常值影响。
- 缺点 :对于不符合正态分布的数据效果较差。
3. 分位数标准化
将数据转换为特定的分位数范围(如[0, 1])。
- 公式 :\[ \text{X}_{\text{norm}} = \frac{R - 1}{N - 1} \]
其中,\( R \) 是样本的排名,\( N \) 是总样本数。 - 优点 :对异常值不敏感。
- 缺点 :可能丧失数据的精确度。
4. 百分位标准化
将数据值转换为百分位数形式。
- 公式 :\[ \text{X}_{\text{norm}} = \frac{\text{Rank}(X)}{\text{Total Count}} \]
- 优点 :适用于有明显分布的情况。
- 缺点 :计算相对复杂,受数据分布影响。
5. 归一化加权和
在归一化数据后,计算加权和。
- 公式 :\[ \text{Weighted Sum} = \sum w_i \cdot \text{X}_{\text{norm},i} \]
其中,\( w_i \) 是指标权重,\( \text{X}_{\text{norm},i} \) 是标准化后的指标值。 - 优点 :综合考虑各指标的权重。
- 缺点 :权重的选择可能会影响结果。
选择合适的标准化方法取决于数据的性质和分析的需求。标准化有助于确保不同指标的可比性,并为进一步的数据分析和建模打下基础。
指标加权:
5.3 搜索质量评价
评价一个搜索引擎的指标包括:查全率,查准率和性能。
准确率-召回率-MAP
参见 《AI 算法》评价指标章节
信息检索领域两个最基本指标是召回率(Recall Rate) 和准确率(Precision Rate)。
如果是做搜索,那就是保证召回率的情况下提升准确率;如果做疾病检测、反垃圾,则是保证准确率的条件下,提升召回率。所以,在两者都要求高的情况下,可以用 F1(或者称为 F-score) 来衡量。计算公式如下:
$$
F1 = (2 × P × R) / (P + R)。
$$
MAP(Mean Average Precision,平均准确率):单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值。
归一化折扣累计增益 NDCG
网页满意度评分(0-5):非常不满意、较不满意、勉强满意、较满意、满意、非常满意
NDCG~ 归一化折扣累计增益是一种综合考虑排序和真实序列之间关系的指标。
累计增益(CG)
CG,cumulative gain,是 DCG 的前身,只考虑到了相关性的关联程度,没有考虑到位置的因素。它是一个搜素结果相关性分数的总和。指定位置 p 上的 CG 为:
备注:reli 代表 i 这个位置上的相关度。
折损累计增益(DCG)
DCG, Discounted 的 CG,就是在每一个 CG 的结果上处以一个折损值,为什么要这么做呢?目的就是为了让排名越靠前的结果越能影响最后的结果(位置相关)。假设排序越往后, 价值越低。到第 i 个位置的时候,它的价值是 1/log2(i+1),那么第 i 个结果产生的效益就是 reli * 1/log2(i+1),所以:
归一化折损累计增益(NDCG)
NDCG, Normalized 的 DCG,由于搜索结果随着检索词的不同,返回的数量是不一致的,而 DCG 是当前排序的折扣累计增益,IDCG 是最佳排序时的折扣累计增益。一个累加的值,没法针对两个不同的搜索结果进行比较,因此需要归一化处理,除以 IDCG;
基于日志的反馈学习
搜索引擎日志挖掘的主要技术有:统计分析方法、数学模型分析与预测、关联规则分析、聚类分析等。
基于搜索词的分析
- 发现搜索词价值:相关搜索、近义词、热词缓存
- 发现不明意图下的用户行为:搜索引擎本身问题分词歧义和新词识别,可通过搜索日志改善。
基于用户点击日志的分析
- 时间与搜索意图的关系
- 地理位置与搜索意图的关系
- 点击日志与同义词:同义词发现
- 点击日志与词语权重:
- 点击日志与新词分类
- 点击日志与知识图谱
- 点击日志与网页重排序
- 点击日志与网页评价
- 基于用户特征分析:用户跟踪、用户群体、用户个体
5.4 查询意图识别
对用户输入的理解称为 QueryParser,包括:query 切分(分词),query 意图识别,query 改写(query 扩展/query 纠错/query 删除等)。
意图识别的难点
针对意图识别,主要存在以下难点:
- 输入不规范,前文中已有介绍,不同的用户对同一诉求的表达是存在差异性的;
- 多意图,查询词为:
水
,是矿泉水,还是女生用的化妆水; - 数据冷启动。当用户行为数据较少时,很难获取准确的意图;
- 没有固定的评价标准。
评价标准,例如 pv,ipv,ctr,cvr 这种可以量化的指标是对搜索系统总体的评价,具体到用户意图的预测上并没有标准的量化指标。其中, pv:店铺内所有页面的浏览总量(次数累加); page view, 通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。IPV:指买家找到您店铺的宝贝后,点击进入宝贝详情页的次数。CTR (Click Through Rate): 点击率。CVR (Click Value Rate): 转化率,衡量 CPA 广告效果的指标。
意图识别的方法
意图识别的方法可归纳为三种:词表穷举法、规则解析法以及机器学习法,以下将针对这三种方法进行详细介绍。
词表穷举法
这种方法最简单暴力,通过词表直接匹配的方式来获取查询意图,同时,也可以加入比较简单并且查询模式较为集中的类别。
查询词:德国
[addr]
爱他美[brand]
奶粉[product]
三段[attr]
查询模式:
[brand]+[product];[product]+[attr];[brand]+[product]+[attr]
当然查询模式是可以做成无序的。这种意图识别的方式实现较为简单,能够较准确的解决 高频词 。由于 query 一般是满足 20/80 定律,20%的 query 占据搜索 80%的流量。但是,80%的长尾 query 是无法通过这种方式来解决的,也就是说这种方式在识别意图的召回可能只占 20%。同时,需要人工参与较多,很难自动化实现。
规则解析法
这种方法比较适用于查询非常符合规则的类别,通过规则解析的方式来获取查询的意图。比如:
北京到上海今天的机票价格,可以转换为[地点]到[地点][日期][汽车票/机票/火车票]价格。
1 吨等于多少公斤,可以转换为[数字][计量单位]等于[数字][计量单位]。
这种靠规则进行意图识别的方式对规则性较强的 query 有较好的识别精度,能够较好的提取准确信息。但是,在发现和制定规则的过程也需要较多的人工参与。
机器学习方法
意图识别其实可以看做是一个分类问题,针对于垂直产品的特点,定义不同的查询意图类别。可以统计出每种意图类别下面的常用词,对于考拉海淘而言,可 以统计出类目词,产品词,品牌词,型号词,季节时间词,促销词等等。对于用户输入的 query,根据统计分类模型计算出每一个意图的概率,最终给出查询的 意图。 但是,机器学习的方法的实现较为复杂,主要是数据获取和更新较困难,数据的标注也需要较准确才能训练出较好地模型。
本章参考
- ElasticSearch 打分机制学习 https://blog.csdn.net/ginobefun/article/details/52861660
- 推荐系统遇上深度学习(十六)--详解推荐系统中的常用评测指标 https://blog.csdn.net/jiangjiang_jian/article/details/80728607
- 逸轩:从搜索引擎浅析意图分析 http://47.99.39.229:8000/article-detials/1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论