伪原创工具词库(提高用户搜索效率,更快更准地搜到自己想要的东西)
优采云 发布时间: 2022-04-01 03:02伪原创工具词库(提高用户搜索效率,更快更准地搜到自己想要的东西)
本文主要讲解用户在搜索时是如何点击的,尽情享受吧~
从这篇文章中你可以了解到:
了解搜索过程的基本原理:如何根据关键字匹配内容、如何返回搜索结果、如何向用户展示结果;在搜索场景中,更合理的划定搜索范围(输入内容命中了哪些字段),提高用户搜索效率,提高数据搜索的baseline;提高日常工作中的搜索效率,更快更准确地找到你想要的东西。
用户搜索过程:用户输入关键词,系统根据用户输入的内容过滤掉系统认为用户感兴趣的信息,然后按照系统设置的规则进行排序. 整个过程可以分解为三个步骤:分词、过滤和排序。
在了解分词之前,先看一下搜索的存储原理:建立系统词库和索引库的关联,通过用户输入的关键词匹配词库,然后拉取索引库的内容并将其显示给用户。
以在Gourmet网站中搜索“北京最大的火锅店”为例,索引数据库中的内容是系统中的所有店铺,每个店铺收录的字段包括店铺名称、位置、月销量、评论量、评分等;词库中的内容是系统中的条目。只要用户输入的内容与词条匹配,就可以快速找到该词条对应的索引内容。如果条目无法匹配,则不会返回任何结果。每个系统都有自己的词库,搜索的很多优化都集中在词库的优化上。
一、分词
分词是对用户输入的信息进行解释,是自然语言处理的重要步骤。与机器学习原理一样,分词将非结构化数据转化为结构化数据,结构化数据可以转化为数学问题。解决数学问题是计算机的强项。
1.1 分词原因
搜索系统的词库无论怎么优化完善都是有限的,但对用户的输入没有限制。那么如何将用户的无限输入映射到有限的词库并返回结果呢?
这就需要引入一个新概念——分词。简单的说:当系统不能完全匹配用户输入的内容时,会对内容进行切分,使切分出来的词能够与系统的词库相匹配。以上图为例,如果用户输入“北京最大的火锅店”,系统中不存在该词,完全匹配的情况下没有结果。这时候输入的内容会被切分,所以
“北京最大的火锅店”-->“北京”、“最大”、“德”、“火锅店”。
拆解后,每个单词匹配对应的内容,排序后返回结果。并不是所有的词都会返回有价值的结果,比如“de”的情况下,几乎所有的信息都会收录这个词,所以在系统分词中会直接忽略。
1.2 分词的种类和区别
分词有两种,中文分词和英文分词,本质上是不同的。
区别一:分词方式不同,中文分词难度更大,复杂度更高
英文有一个自然空格作为分隔符,但中文没有。如何分割一块中文是一个难点。拆分时,断点不同,导致结果不同(即歧义识别),比如“we are a group of three”分词有两种方式:“we three/group”和“we/three groups”。另一个难点是生词识别,即识别字典中没有的词收录。
区别2:英语单词有多种形式
英语单词有丰富的变形和变换,如复数形式、过去时、进行时等。为了处理这些复杂的变换,在处理英语时会进行词形还原和词干提取。
词形还原:does,did,done,doing会通过词形还原转换为do;
词干提取:通过词干提取,城市、儿童、树木将转换为城市、儿童、树木。
区别3:中文分词需要考虑分词粒度的问题
不同的分词粒度会导致不同的返回结果。例如,“北京科技学院”有多种分类方法:“北京科技学院”、“北京/科技/研究院”、“北京/科技/科技/研究院”。粒度越大,意思越准确,但返回的结果越少。因此,在分词中,应根据不同的场景和需求选择不同的切分粒度。
1.分词的3种方法
① 基于字典的分词
基于字典的匹配是最早的分词方法,比较典型的有:前向最大匹配法、反向最大匹配法和双向最大匹配法。
(1)前向最大匹配法
step1:匹配时,从前到后取词,取前m个词(m为字典中最长词的个数),开始扫描;
step2:如果有m个词扫描的结果,则匹配成功,对m个词进行分词,句子中剩余的词继续分词;
step3:如果m个单词扫描没有结果,取前m-1个单词继续扫描,每次减去一个单词,直到字典命中或剩下1个单词;
step4:重复以上步骤,直到所有语句都匹配。
(2)反向最大匹配法
匹配时从后向前取词,其他逻辑同前向。
(3)双向最大匹配法
由于正向最大匹配法和反向最大匹配法都有其局限性,因此产生了双向最大匹配法。即按照正反方向进行划分,然后进行比较,选择其中一个分词结果输出。
对比原则:①如果正反向分词结果中的词数不同,则选择词数少的;②如果字数相同,结果相同,则返回任意一个。如果字数相同但结果不同,则选择字数较少的那个。那个(词越少越准确)。
上面提到的几种分割方法从不同的角度处理歧义问题,每种方法只能解决有限类别的歧义问题。随着字典的扩大,词之间的交叉更加严重,歧义的负面影响也更加严重。同时,上面提到的切分方法对于新词的切分是完全无能为力的。
② 基于统计分词
基于统计的分词有两种类型。第一种是统计分词法(或无字典的分词法),将每个词视为由词组成。如果连接词在不同文本中出现的频率更高,则证明这个连接词很可能是一个词。
例如:比如单词a出现的概率是P(a),单词b出现的概率是P(b),词组a+b出现的概率是P(a+b),如果P (a+b)>P (a)*P(b),那么可以证明a+b不是一个随机组合,既不是一个生词,也不是一个词组,也不是一个词组。
但是,这种方法也有一定的局限性。它经常会提取一些共现频率高但不是词的常见词组,如“this”、“one”、“some”、“my”、“Many”等,识别准确率普通话差,成本高。在实际应用中,通常与词典分词的方法结合使用,既利用了词典分词的快速高效的分词,又利用了免词典分词结合上下文的优势识别新词并自动消除歧义。
另一种方法是基于统计机器学习。给定大量已分词的文本,利用统计机器学习和模型来学习分词的规则(称为训练),从而实现对未知文本的分词。这种方法的缺点是需要大量的预分词语料支持,训练成本也很高。比较经典的是N-gram语法模型(N-gram)。
N-gram(N-gram)分词
基于N-gram模型的分词策略是:一段文本有多个可能的切分结果(切分路径),用训练好的N-gram模型计算路径得到最优切分路径并返回结果.
示例:解释“他说的是真的”。
在 N-gram 模型的算法中,每条路径上的边是一个 N-gram 的概率,所以得到如下概率路径有向图:
可能的切分路径有:他说/真的/真的/理由、他说/真的/真的、他说/真的/真的/合理、他/说/真的/现实/理由、他/说/确实/真的/真的/合理...
假设随机变量S是一个汉字序列,W是S上所有可能的切分路径(如上图,从头到尾的所有不同路径)。对于分词来说,其实就是求解最大化条件概率P(W∣S)的切分路径W*,P(W∣S)是每条路径的度量。
至此,分词任务就变成了一道数学题。
③ 基于序列标注的分词
基于序列标注的分词是将分词过程看成是一个字符串中的词的标注问题(例如,将词标注为“首字、中字、末字”或其他标注方式),当这些标签都完成了,分词自然也就完成了。. 该策略可以平衡字典词和生词(未收录入字典的词)的识别,大大简化了使用的门槛,获得了相当不错的分词结果。如条件随机场(CRF)、隐马尔可夫模型(HMM)、最大熵算法、神经网络分词模型等。
隐马尔可夫模型 (HMM) 分割
根据词首、词中、词尾、单字词对文本序列进行标注。
例:*敏*感*词*说的是真的
当得到每个词的标注后,就逻辑上完成了分词。
二、过滤
对用户输入的信息进行切分后,对索引库中的内容进行匹配过滤。判断用户想要的结果是否被筛选出来,一般从Precision、Recall和F1(F1-Measure)三个维度来衡量,这也是搜索优化的关键指标,涉及到人工打分和更高级的优化。
准确率:相关内容在所有搜索内容中的比例。
召回率:所有应该找到的内容中实际找到的比例。
示例:假设此时有7个橙子和3个苹果放在一起,我想过滤掉所有的橙子,系统最终过滤掉了6个,其中有4个橙子。那么准确率P=4/6,召回率R=4/7。
F1值:precision和recall的调和平均值,即:
Q:为什么会有F1值?准确率和召回率还不够吗?
- 答:答案是:不够!通常我们期望更高的精度和更好的召回率,但这两者在某些情况下是矛盾的。还是以橙苹果为例,如果系统只过滤掉1个橙子,准确率100%,查全率1/7,会很低;如果系统一次过滤掉10个橙子,召回率是100%,准确率只有70%。
此外,还有一个容易混淆的概念:准确率,即正确判断的次数占总数的比例,其中正确判断的次数包括符合要求的和不符合要求的。要求。的。
还是以橙子苹果为例,准确率A=(4+1)/10=50%),即系统正确筛选出的水果(4个橙子+1个苹果被正确识别)和水果总数。比率。
准确率一般不用于搜索召回的测量。原因是,如果上面例子中苹果的数量是100万,橙子的数量是7,那么无论怎么过滤,准确率都是99.99%+,显然这不是符合要求。
三、排序
排序影响搜索结果的质量,结果越靠前,用户点击就越容易。一个好的搜索不仅是尽可能的搜索出应该搜索的内容,还要将最有可能吸引用户的内容显示在前面。因此,这里涉及到两个因素:文本数据和业务数据。
3.1 文本数据
文本数据是文本的相关性分数乘以权重。关于如何计算文本的相关性,市面上有成熟的开源方案,比如Lucene算法。然后根据文本类型给出相应的权重。例如系统中的文本有标题、描述和正文三种,并根据其重要性分配不同的权重:标题权重为10,线索权重为5,正文权重为1。
3.2 业务数据
业务数据是数据的得分乘以权重。数据分数是特定于数据的值。然后根据业务类型给出相应的权重。比如系统中有评论数、分享数、阅读数三类数据,并根据其重要性赋予不同的权重:评论数的权重为10,股数权重为20,读数权重为1。
示例:以基于Lucence的Solr系统为例,评分公式如下:
其中 Nx 是文本得分权重,Mx 是文本数据相关性得分,Ky 是数据得分权重,Ly 是数据得分。
由此可以看出,赋予文本数据和业务数据的权重直接影响最终的排名结果。如何赋值,赋值什么值需要基于对业务的理解和认知,这也是一个搜索系统设计的核心部分。