经典搜索核心算法:语言模型算法
- 格式:doc
- 大小:37.00 KB
- 文档页数:6
搜索核心算法BM25算法BM25算法,全称为BM25文本相似度算法(Best Match 25),是一种用于信息检索的核心算法。
它是按照关键词匹配度为基础,通过对文档之间的相似度进行评分,以便为用户提供最相关的结果。
BM25算法是一种基于概率检索模型的改进版本,旨在提高文本检索的准确性和效率。
相较于传统的向量空间模型(VSM),BM25算法在处理长文本、短文本和检索效果不佳的情况下表现更好。
BM25算法的核心思想是根据文档中关键词的出现概率和查询中关键词的重要性对文档进行评分。
它包括三个主要的评分因素:匹配度因子、相关度因子和长度因子。
首先,匹配度因子是通过计算查询词与文档中关键词匹配的次数和频率,以及文档中关键词的重要性进行的。
匹配度因子旨在提高查询词与文档关键词匹配的准确性,以增加相关性。
其次,相关度因子是通过查询词和文档关键词之间的相关性进行的。
它使用了一个反向文档频率(IDF)公式来计算查询词的重要性。
该公式通过查询词在所有文档中的出现频率,来估计查询词的重要性。
这样,出现频率较低但在相关文档中频繁出现的查询词将获得更高的相关度因子。
最后,长度因子是通过计算文档的长度来进行的。
该因子用于调整过长或过短的文档对相似度的影响。
较短的文档可能意味着关键词更稀疏或不够详细,因此可能与查询词不够匹配。
而较长的文档可能包含大量冗余信息,因此可能与查询词的相关性较低。
长度因子旨在根据文档的长度对其相似度进行适当的调整。
总的来说,BM25算法通过综合考虑匹配度因子、相关度因子和长度因子,对文本相似度进行评分。
它能够有效地解决长文本、短文本和检索效果不佳的问题,并在信息检索任务中取得良好的效果。
为了实现BM25算法,可以使用倒排索引技术。
倒排索引是基于文档的关键词创建的反向索引,能够加快过程。
对于每个关键词,倒排索引记录了该关键词出现在哪些文档中以及出现的次数。
综上所述,BM25算法是一种用于信息检索的重要算法,通过综合考虑匹配度因子、相关度因子和长度因子对文本相似度进行评分。
数据挖掘十大经典算法数据挖掘是一种通过计算机科学的方法,从大量数据中挖掘出有用的信息和知识的过程。
在这个过程中,数据挖掘算法扮演着非常重要的角色,它们能够帮助我们从数据中抽取出精华,更好地理解和利用数据。
下面是十大经典数据挖掘算法。
1. K-Means算法:K-Means算法是一种聚类算法,可以将数据集分成K个不同的类别。
这种算法的基本思想是将数据分成若干个类别,使得同一类别内的数据点的距离比其他类别内的数据点的距离更短。
2. Apriori算法:Apriori算法是一种关联规则挖掘算法,可以用来发现最常见的数据项之间的关联性。
这种算法基于频繁项集的概念,通过计算数据中频繁项集的支持度和置信度来挖掘关联规则。
3. 决策树算法:决策树算法是一种基于树结构的分类算法,可以将数据集分成若干个不同的类别。
这种算法的基本思想是通过递归地将数据集划分成不同的子集,直到子集中所有数据都属于同一类别为止。
4. SVM算法:SVM算法是一种基于统计学习理论的分类算法,可以用于解决非线性问题。
这种算法的基本思想是将数据集映射到高维空间中,然后在高维空间中建立超平面,将不同类别的数据分开。
5. 神经网络算法:神经网络算法是一种模拟人脑神经系统的分类算法,可以用来处理非线性问题。
这种算法的基本思想是通过构建一个多层的神经网络,将输入数据映射到输出数据。
6. 贝叶斯分类算法:贝叶斯分类算法是一种基于贝叶斯定理的分类算法,可以用来预测数据的类别。
这种算法的基本思想是根据已知数据的先验概率和新数据的特征,计算这个数据属于不同类别的概率,然后选择概率最大的类别作为预测结果。
7. 随机森林算法:随机森林算法是一种基于决策树的集成算法,可以用来处理大量的数据和高维数据。
这种算法的基本思想是通过随机选取特征和样本,构建多个决策树,然后将多个决策树的结果汇总,得到最终的分类结果。
8. Adaboost算法:Adaboost算法是一种基于加权的集成算法,可以用来提高分类算法的准确率。
(完整版)《搜索算法》知识点总结1. 搜索算法的概念搜索算法是计算机科学中的一类算法,用于在一个数据集合中查找指定的数据项。
搜索算法的目标是通过最少的计算操作来找到目标数据项,以提高效率。
2. 常见的搜索算法2.1 线性搜索线性搜索是最简单的搜索算法之一,它从数据集合的第一个元素开始逐个比较,直到找到目标数据项或者遍历整个数据集合。
线性搜索的时间复杂度为O(n),其中n为数据集合的大小。
2.2 二分搜索二分搜索是一种高效的搜索算法,它适用于有序的数据集合。
它将数据集合分为两部分,并与目标数据项进行比较,然后根据比较结果确定继续搜索的方向。
通过每次排除一半的数据,二分搜索的时间复杂度为O(log n),其中n为数据集合的大小。
2.3 哈希搜索哈希搜索通过将数据项映射到哈希表中的特定索引位置来进行搜索。
通过哈希函数,可以快速找到目标数据项所在的位置。
哈希搜索的时间复杂度为O(1),但需要额外的存储空间来存储哈希表。
2.4 深度优先搜索深度优先搜索是一种递归的搜索算法,它从起始点开始一直沿着一个路径搜索,直到找到目标数据项或者无法继续搜索。
如果搜索失败,则回溯到上一个节点,并探索其他路径。
深度优先搜索在有向图和无向图中均适用。
2.5 广度优先搜索广度优先搜索是一种逐层扩展的搜索算法,它从起始点开始,先访问所有直接相邻的节点,然后再访问相邻节点的邻居节点。
通过队列数据结构,广度优先搜索可以按层次进行遍历,直到找到目标数据项。
广度优先搜索适用于无权图和加权图。
3. 搜索算法的应用场景搜索算法在各种领域和实际问题中广泛应用,包括但不限于以下几个方面:- 文本搜索:在大规模的文本数据集中查找关键字或短语。
- 图像搜索:根据图像特征找到相似的图像。
- 数据库查询:根据指定条件查询数据库中的记录。
- 路径规划:在地图上找到最短路径或最优路径。
- 推荐系统:根据用户的兴趣和偏好推荐相关的内容。
- 人工智能:在机器研究和深度研究中的搜索空间优化等。
各种搜索引擎算法的分析和比较在互联网上搜索所需信息或资讯,搜索引擎成为了人们必不可少的工具。
然而,搜索引擎的搜索结果是否准确、全面,搜索速度是否快速等方面,关键在于搜索引擎的算法,因此,搜索引擎算法成为了搜索引擎核心竞争力的来源。
目前,主流的搜索引擎包括Google、Baidu、Yahoo、Bing等,但它们的搜索结果和排序结果却存在着很大的差异。
这些搜索引擎的搜索结果背后都有不同的算法,下面将对目前主流的几种搜索引擎的算法进行分析和比较。
1. Google算法Google算法是目前全球最流行的搜索引擎算法,其搜索结果广受用户信任。
Google算法最重要的要素是页面权重(PageRank),其名字最初来源于Google的创始人之一拉里·佩奇的名字。
页面权重是根据页面链接的数量和链接网站的权重计算得到的一个评分系统,也就是所谓的“链接分”。
除此之外,Google还有很多其他的评分规则,比如页面初始状态、页面内部链接等。
可以说,Google的算法非常复杂,它使用了很多技术来确保其搜索引擎结果的质量。
2. Baidu算法Baidu是中国主流的搜索引擎,其搜索算法相较于Google来说较为简单。
Baidu的搜索结果主要依靠页面的标题、关键词、描述等元素,因此其搜索结果的可靠性稍逊于Google。
不过,Baidu的形态分析算法却是非常出色的,可以识别图片和视频等多种形态的信息。
除此之外,Baidu还使用了一些人工智能技术,例如深度学习算法来优化搜索结果。
3. Bing算法Bing是由微软开发的搜索引擎,其搜索结果以关键词匹配为核心来实现。
在关键词匹配的基础上,Bing还使用了一些机器学习和推荐算法来优化搜索结果。
另外,Bing还使用类似Google的页面权重评分系统来实现页面的排序。
除此之外,Bing还注重在搜索结果页面中显示质量较高的结果,而不局限于排序前十的结果。
4. Yahoo算法Yahoo算法是基于文本内容分析的搜索引擎算法。
信息检索中常用的索引模型
在信息检索中,常用的索引模型包括:
1. 布尔模型(Boolean Model):将文档和查询表示为逻辑运算的布尔表达式,通过对文档和
查询进行逻辑运算得到匹配结果。
该模型适用于简单的查询,但不考虑查询词的相关性和权重等因素。
2. 向量空间模型(Vector Space Model):将文档和查询表示为向量,在向量空间中计算文档
和查询的相似度。
该模型将文档和查询表示为多维向量,考虑了查询词的权重和相关性等因素。
3. 概率检索模型(Probabilistic Retrieval Model):基于概率理论,通过统计方法对文档和查询
进行建模,计算文档与查询的相关性概率。
常见的概率检索模型包括布尔概率模型、随机模型和语言模型等。
4. 基于语言模型的检索(Language Model Retrieval):将文档和查询看作是语言模型,计算文
档与查询的概率分数来衡量相关性。
该模型考虑了文档语言模型的平滑和查询中的词重要性等因素。
5. PageRank模型:基于超链接分析,通过网页之间的链接关系构建网页的重要性排序。
该模
型将网页看作图中的节点,通过计算节点之间的链接关系和转移概率来评估网页的重要性。
这些索引模型各有特点,适用于不同的检索场景和需求。
在实际应用中,可能会选择或结合多个索引模型来进行信息检索。
世界十大经典算法世界十大经典算法算法是计算机科学中非常重要的概念,它是一种解决问题的方法和步骤的描述。
以下是世界上广泛应用且被业界认可的十大经典算法: 1. 二分查找算法(Binary Search Algorithm):在有序数组中查找目标元素的算法。
通过将目标元素与数组中间元素进行比较,可以将搜索范围缩小一半,从而提高搜索效率。
2. 快速排序算法(Quick Sort Algorithm):一种基于分治法的排序算法。
它通过选择一个基准元素,将数组分为两个子数组,其中一个子数组的元素都小于等于基准元素,另一个子数组的元素都大于等于基准元素,然后递归地对子数组进行排序。
3. 归并排序算法(Merge Sort Algorithm):一种基于分治法的排序算法。
它将数组分成两个子数组,然后递归地对子数组进行排序,并将排序好的子数组合并成一个有序的数组。
4. 广度优先搜索算法(Breadth-First Search Algorithm):用于图遍历的一种算法。
它从图的某个顶点开始,逐层遍历其邻接顶点,直到遍历完所有顶点。
广度优先搜索常用于寻找最短路径或解决迷宫等问题。
5. 深度优先搜索算法(Depth-First Search Algorithm):用于图遍历的一种算法。
它从图的某个顶点开始,沿着一条路径一直向下遍历,直到无法继续为止,然后回溯到上一个没有遍历完的邻接顶点,继续遍历其他路径。
深度优先搜索常用于生成迷宫、图的连通性问题等。
6. Dijkstra算法(Dijkstra's Algorithm):用于求解单源最短路径问题的一种算法。
它根据权重赋值给每条边,计算出从源节点到其他节点的最短路径。
7. 动态规划算法(Dynamic Programming Algorithm):一种基于分治法的优化算法。
动态规划在问题可分解为重叠子问题时,通过保存子问题的解,避免重复计算,从而提高算法效率。
人工智能基础概念习题(含答案)一、单选题(共60题,每题1分,共60分)1、在数据产品研发的过程中,以下()属于低层次数据。
A、一次数据B、三次数据C、二次数据D、零次数据正确答案:D2、在人工神经网络算法中,不属于实现“人工神经元”的方法的有()。
A、感知器B、线性单元C、Sigmoid单元D、Untied单元正确答案:D3、下列哪项不是构建知识图谱用到的主要技术()A、关系抽取B、命名实体识别C、词性标注D、实体链接正确答案:C4、以下关于机器学习说法错误的是A、机器学习可以解决图像识别问题B、监督学习和非监督学习都属于机器学习C、机器学习在一定程度上依赖于统计学习D、目前机器学习已经可以代替人类正确答案:D5、图像识别任务可以分为三个层次,根据处理内容的抽象性,从低到高依次为A、图像分析,图像处理,图像理解B、图像分析,图像理解,图像处理C、图像理解,图像分析,图像处理D、图像处理,图像分析,图像理解正确答案:D6、2010年谷歌推出以顶点为中心的图处理系统(),其专为大规模图数据处理而设计,将图数据保存在主存储器中并采用并行计算的BSP模型A、PregelB、DregelC、CregelD、Aregel正确答案:A7、()是人工智能地核心,是使计算机具有智能地主要方法,其应用遍及人工智能地各个领域。
A、深度学习B、智能芯片C、机器学习D、人机交互正确答案:C8、标准AdaBoost只适用于()任务A、二分类B、分类C、回归D、多分类正确答案:D9、阿尔法狗是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能程序,它的主要工作原理是什么?A、深度学习B、卷积神经网络C、机器学习D、BP神经网络正确答案:A10、下列选项中,不属于生物特征识别技术的是()A、声纹识别B、文本识别C、步态识别D、虹膜识别正确答案:B11、对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是()。
在信息检索(Information Retrieval)、文本挖掘(Text Mining)以及自然语言处理(Natural Language Processing)领域,TF-IDF 算法都可以说是鼎鼎有名。
虽然在这些领域中,目前也出现了不少以深度学习为基础的新的文本表达和算分(Weighting)方法,但是 TF-IDF 作为一个最基础的方法,依然在很多应用中发挥着不可替代的作用。
TF-IDF 的历史把查询关键字(Query)和文档(Document)都转换成“向量”,并且尝试用线性代数等数学工具来解决信息检索问题,这样的努力至少可以追溯到 20 世纪 70 年代。
1971 年,美国康奈尔大学教授杰拉德·索尔顿(Gerard Salton)发表了《SMART 检索系统:自动文档处理实验》(The SMART Retrieval System—Experiments in Automatic Document Processing)一文,文中首次提到了把查询关键字和文档都转换成“向量”,并且给这些向量中的元素赋予不同的值。
这篇论文中描述的 SMART 检索系统,特别是其中对 TF-IDF 及其变种的描述成了后续很多工业级系统的重要参考。
1972 年,英国的计算机科学家卡伦·琼斯(Karen Sp?rck Jones)在《从统计的观点看词的特殊性及其在文档检索中的应用》(A Statistical Interpretation of Term Specificity and Its Application in Retrieval)一文中第一次详细地阐述了 IDF 的应用。
其后卡伦又在《检索目录中的词赋值权重》(Index Term Weighting)一文中对 TF 和 IDF 的结合进行了论述。
可以说,卡伦是第一位从理论上对 TF-IDF 进行完整论证的计算机科学家,因此后世也有很多人把 TF-IDF 的发明归结于卡伦。
C语言中的模式匹配算法在计算机科学中,模式匹配是一种非常重要的算法,它可以用于文本匹配、字符串匹配、图形识别等领域。
在C语言中,有多种模式匹配算法可以用于实现字符串匹配操作。
本文将介绍C语言中的一些常用模式匹配算法,包括Brute-Force算法、Knuth-Morris-Pratt(KMP)算法和Boyer-Moore算法。
一、Brute-Force算法Brute-Force算法,也称为朴素模式匹配算法,是最简单直接的一种算法。
它的思想是从目标字符串的第一个字符开始,依次和模式字符串对应位置的字符比较,如果出现不匹配的字符,则将目标字符串的指针向后移动一位,再次进行比较,直到找到匹配的子串或遍历完整个目标字符串。
Brute-Force算法的时间复杂度为O(m*n),其中m为目标字符串的长度,n为模式字符串的长度。
该算法简单易懂,但对于较长的字符串匹配操作效率较低。
二、Knuth-Morris-Pratt(KMP)算法KMP算法是一种优化的字符串模式匹配算法,它利用了模式字符串中的信息来避免不必要的比较。
该算法的核心思想是,当模式字符串中的某一部分与目标字符串不匹配时,不需要将目标字符串的指针回溯到上一次比较的位置,而是利用已有的信息直接跳过一部分字符,从而提高了匹配的效率。
KMP算法的时间复杂度为O(m+n),其中m为目标字符串的长度,n为模式字符串的长度。
相较于Brute-Force算法,KMP算法在处理较长字符串时能够明显提高匹配速度。
三、Boyer-Moore算法Boyer-Moore算法是一种更加高效的字符串模式匹配算法,它充分利用了模式字符串中的信息进行跳跃式匹配。
该算法的核心思想包括两个关键步骤:坏字符规则和好后缀规则。
坏字符规则是通过将模式串与目标串在不匹配的位置对齐,找出目标串中不匹配的字符在模式串中最后一次出现的位置,从而跳过一部分字符的比较。
好后缀规则则是利用模式串与目标串中已匹配的部分,找出能够与好后缀匹配的最长子串,直接将模式串向后滑动到该子串的位置,从而跳过一部分字符的比较。
DeepWalk论⽂精读:(2)核⼼算法模块21. 核⼼思想及其形成过程DeepWalk结合了两个不相⼲领域的模型与算法:随机游⾛(Random Walk)及语⾔模型(Language Modeling)。
1.1 随机游⾛由于⽹络嵌⼊需要提取节点的局部结构,所以作者很⾃然地想到可以使⽤随机游⾛算法。
随机游⾛是相似性度量的⼀种⽅法,曾被⽤于内容推荐[11]、社区识别[1, 38]等。
除了捕捉局部结构,随机游⾛还有以下两个好处:1. 容易并⾏,使⽤不同的线程、进程、机器,可以同时在⼀个图的不同部分运算;2. 关注节点的局部结构使得模型能更好地适应变化中的⽹络,在⽹络发⽣微⼩变化时,⽆需在整个图上重新计算。
1.2 语⾔模型语⾔模型(Language Modeling)有⼀次颠覆性创新[26, 27],体现在以下三点:1. 从原来的利⽤上下⽂预测缺失单词,变为利⽤⼀个单词预测上下⽂;2. 不仅考虑了给定单词左侧的单词,还考虑了右侧的单词;3. 将给定单词前后⽂打乱顺序,不再考虑单词的前后顺序因素。
这些特性⾮常适合节点的表⽰学习问题:第⼀点使得较长的序列也可以在允许时间内计算完毕;第⼆、三点的顺序⽆关使得学习到的特征能更好地表征“临近”这⼀概念的对称性。
1.3 如何结合可以结合的原因,是作者观察到:1. 如果不论规模⼤⼩,节点的度服从幂律分布,那么在随机游⾛序列上节点的出现频率也应当服从幂律分布。
2. ⾃然语⾔中词频服从幂律分布,⾃然语⾔模型可以很好地处理这种分布。
所以作者将⾃然语⾔模型中的⽅法迁移到了⽹络社群结构问题上,这也正是DeepWalk的⼀个核⼼贡献。
2. 具体算法算法由两部分组成:第⼀部分是随机游⾛序列⽣成器,第⼆部分是向量更新。
2.1 随机游⾛⽣成器DeepWalk⽤$W_{v_i}$表⽰以$v_i$为根节点的随机游⾛序列,它的⽣成⽅式是:从$v_i$出发,随机访问⼀个邻居,然后再访问邻居的邻居...每⼀步都访问前⼀步所在节点的邻居,直到序列长度达到设定的最⼤值$t$。
TF-IDF 因其简单和实用常常成为很多信息检索任务的第一选择,BM25 则以其坚实的经验公式成了很多工业界实际系统的重要基石。
然而,在信息检索研究者的心里,一直都在寻找一种既容易解释,又能自由扩展,并且在实际使用中效果显著的检索模型。
这种情况一直到20 世纪90 年代末、21 世纪初才得到了突破,一种叫“语言模型”(Language Model)的新模型得到发展。
其后10 多年的时间里,以语言模型为基础的各类变种可谓层出不穷,成了信息检索和搜索领域的重要研究方向。
今天我就来谈谈语言模型的历史,算法细节和语言模型的重要变种,帮助初学者快速掌握这一模型。
语言模型的历史
语言模型在信息检索中的应用开始于1998 年的SIGIR 大会(International ACM SIGIR Conference on Research and Development in Information Retrieval,国际信息检索大会)。
来自马萨诸塞州大学阿姆赫斯特分校(UMass Amherst)的信息检索学者杰·庞特(Jay M. Ponte)和布鲁斯·夸夫特(W. Bruce Croft)发表了第一篇应用语言模型的论文,从此开启了一个新的时代。
布鲁斯是信息检索的学术权威。
早年他在英国的剑桥大学获得博士学位,之后一直在马萨诸塞州大学阿姆赫斯特分校任教。
他于2003 年获得美国计算机协会ACM 颁发的“杰拉德·索尔顿奖”,表彰他在信息检索领域所作出的突出贡献。
另外,布鲁斯也是ACM 院士。
从那篇论文发表之后,华人学者翟成祥对于语言模型的贡献也是当仁不让。
他的博士论文就是系统性论述语言模型的平滑技术以及各类语言模型的深刻理论内涵。
翟成祥来自中国的南京大学计算机系,并于1984 年、1987 年和1990 年分别获得南京大学的学士、硕士和博士学位,2002 年他从美国卡内基梅隆大学计算机系的语言与信息技术研究所获得另外一个博士学位。
翟成祥曾经获得过2004 年的美国国家科学基金会职业生涯奖(NSF CAREER Award)和2004 年ACM SIGIR 最佳论文奖。
另外,2004 年翟成祥还获得了著名的美国总统奖(PECASE,Presidential Early Career Award for Scientists and Engineers)。
语言模型详解
语言模型的核心思想是希望用概率模型(Probabilistic Model)来描述查询关键字和目标文档之间的关系。
语言模型有很多的类型,最简单的、也是最基础的叫做“查询关键字似然检索模型”(Query Likelihood Retrieval Model)。
下面我就来聊一聊这个模型的一些细节。
首先,我来描述什么是语言模型。
简单来说,一个语言模型就是一个针对词汇表的概率分布。
比如,词汇表总共有一万个英语单词,那么一个语言模型就是定义在这一万个单词上的离散概率分布。
拿骰子来做类比,这里的骰子就有一万种可能性。
一旦语言模型的概念形成。
“查询关键字似然检索模型”的下一步,就是认为查询关键字是从一个语言模型中“抽样”(Sample)得到的一个样本。
什么
意思呢?就是说,和我们通常情况下从一个概率分布中抽样相同,“查询关键字似然检索模型”认为查询关键字是从这个语言模型的概率分布中进行采样,从而产生的一个随机过程。
这一观点不仅是这个简单语言模型的假设,也是很多语言模型的核心假设。
我们假设这个语言模型,也就是这个概率分布的参数已知,那么,如何来对一个查询关键字打分(Scoring)就变成了计算在这个概率分布的情况下,一组事件,也就是这组词出现的联合概率。
现实中,因为联合概率可能会很小,因此很多时候都通过一个对数变换来把概率的乘积变成概率对数的加和。
然而,现实情况是,我们事先并不知道这个语言模型的参数,这个信息一般来说是未知的。
要想确定这个语言模型的参数,我们首先要确定语言模型的形态。
我刚才说过,语言模型本质上就是定义在词汇表上的离散概率分布。
那么,这里就有几种经典的选择。
首先,我们可以选择“类别分布”(Categorical Distribution)函数,也就是多项分布(Multinomial Distribution)去除排列组合信息。
这也是最常见的语言模型的实现形式。
在类别分布的假设下,我们认为每一个单词都是从类别分布中采样得到的结果,而单词之间互相独立。
那么,定义在一万个单词上的类别分布就有一万个参数。
每个参数代表所对应的单词出现的概率,或者说可能性。
当然,这个参数是未知的。
除了利用类别分布或者多项分布来对语言模型建模以外,其他的离散概率分布也都曾被提出来用作语言模型。
比如,伯努利分布(Bernoulli Distribution)
或者泊松分布(Poisson Distribution)。
这些不同的假设我今天就不展开讲了。
但是在实际应用中,其他概率分布假设的语言模型基本上都还属于纯研究状态。
还是回到刚才说的基于类别分布的语言模型。
由于参数是未知的,那么问题的核心就变成了如何估计这样的参数,这里就回归到基本的统计参数估计的范畴。
因为类别分布是概率分布,在有观测数据的情况下(这个的观测数据就是现实中的文档和查询关键字),最直接的参数估计算法叫“最大似然估计”(Maximum Likelihood Estimation)。
在这里我不展开这个算法的细节。
最大似然估计的核心思路就是把参数估计问题变换成一个最大化的优化问题,从而通过求解这个优化问题来达到参数估计的目的。
在类别分布的假设下,最大似然估计的最优参数解,恰好有解析形式。
也就是说,在有数据的情况下,我们能够得到一个唯一的最优的参数估计。
而且这个解非常直观,也就是每个单词出现的可能性,正好等于这个单词在目标文档中出现的次数,除以所有单词在目标文档中出现的次数。
换句话说,每个单词的参数正好等于单词出现的频率。
这样的话,每个文档都对应一个类别分布。
有多少个文档就有多少个类别分布,而且每个类别分布都可以从自己这个文档中求得所有的参数。
最大似然估计有一个很大的问题,那就是如果某一个单词没有在训练数据中出现过,那么这个单词的参数,根据上面的最优解,就是零。
什么意思呢?也就是说,在最大似然估计的情况下,没有出现过的单词的参数是零,然后模型认为这个词出现的可能性、或者概率就是零。
这显然是一个非
常悲观的估计。
因为你可以认为,不管在任何情况下,就算一个单词没有出现过,但是出现的概率也不应该绝对是零。
那么,如何针对这些为“零”的概率估计,就成了语言模型研究和实践中的一个重要问题。
一个通常的技术叫“平滑”(Smoothing)。
这个技术的基本思想就是,给这些因为最大似然估计所产生的零值一些非零的估计值。
最简单的一个做法,其实也是很有效的一个做法,就是通过整个数据集的频率来做平滑。
具体来说,就是对于每一个词,我们计算一个目标文档的频率,同时也计算一个全数据集的平率。
然后这个单词的最终估计值,是这两个频率的一个加权平均。
这个权重就成了另外一组超参数,可以动态调整。
另外一个常见的平滑策略是借助贝叶斯统计推断(Bayesian Inference)的方法。
也就是说,为类别概率分布加上一个先验分布,通常是狄利克雷分布(Dirichlet Distribution),并且计算出某个单词在先验分布和数据都存在情况下的后验概率,我这里就不展开这个思路了。
在这里需要注意的是,经过研究人员发现,语言模型的平滑其实是不可或缺的。
一方面是为了解决我们刚才提到的零概率估计问题;另一方面,经过一个代数变形,语言模型的平滑其实可以写成一个类似TF-IDF 的形式。
于是,研究人员指出,这个平滑其实削减了过分流行词汇的概率,使最后的估计值并不完全只是由单词的多少而决定。
我在之前介绍TF-IDF 算法和
BM25 算法的时候,都分别提到了这个观点,那就是单词出现的多少和相关性的关系问题。
从经验上看,这个关系一定是有一个阈值的。
语言模型变种
语言模型有很多类型的变种,我这里简单地提两个比较有代表的方向。
一个方向就是我刚才说的不同类型的平滑策略,比如,结合全数据集平滑和狄利克雷平滑。
或者是先把文档分成一些聚类或者不同的类别(例如不同的话题),然后根据不同的类别或者话题进行平滑等等。
另外一个方向其实就是在语言模型本身的的定义上做文章。
比如,在查询关键字似然检索模型里,我们假定有一个语言模型,查询关键字是这个模型的一个抽样。
乍一看这很有道理,但是仔细一想,这个模型并没有明说目标文档和查询关键字之间的关系。
目标文档进入视野完全是为了估计这个语言模型的参数,“相关性”这个概念并没有明确定义。
那么,另外一个主流的语言模型,就是认为有两个模型(分布)。
查询关键字从一个分布中产生,目标文档从另外一个分布中产生,而这两个分布的距离,成为了相关性的定义。
在这样的结构下,文档和查询关键字形成了一种对称的局面,而相关性也根据距离直接得到定义。