关于搜推领域关键技术系列文章,请关注:
一、人工智能 vs 机器学习 vs 深度学习人工智能是一个广泛的概念,它包括了机器学习、深度学习等多种技术和算法。
机器学习是人工智能的核心部分,通过算法和数据使计算机具有学习能力。
深度学习是机器学习的一个子方向,通过搭建深层的神经网络模型来处理复杂的任务。
人工智能(AI)是指让机器像人类一样能够“思考”和“学习”的能力,使机器能够处理语言、音频、图像、视频等各种信息,并从中智能地学习和推断。AI是一种模拟人类智能的技术,使机器能够像人一样学习、思考和做出决策,从而能够自主地执行各种任务。
机器学习(ML):是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。
深度学习(DL):是机器学习领域中的一个新的研究方向,它通过搭建深层的神经网络模型来处理任务。深度学习通过学习样本数据的内在规律和表示层次,使机器能够像人一样具有分析学习能力,识别文字、图像和声音等数据。
二、样本(Sample)、特征(Feature)、标签(Label)在算法训练过程中,样本(Sample)、特征(Feature)和标签(Label)是三个核心概念,它们对于构建和训练机器学习模型至关重要。
样本(Sample)定义:样本是数据集中的单个数据点或实例。在机器学习中,样本是算法学习的基础单位,由一组特征(和可能的标签)组成。示例:在房价预测任务中,一个样本可能包括一个房屋的面积、卧室数量、地理位置等特征,以及该房屋的实际售价(标签)。特征(Feature)定义:特征是用于描述样本的属性或特性的数据项。在机器学习中,特征作为模型的输入,用于训练模型并使其能够做出预测或分类。示例:在房价预测任务中,房屋的面积、卧室数量、地理位置等都是特征。标签(Label)定义:标签是数据样本的已知结果或分类信息,在监督学习中与特征数据一起提供。标签是训练模型时用来指导算法学习正确映射关系的关键部分。示例:在房价预测任务中,房屋的实际售价就是标签。在图像分类任务中,图像的类别(如“猫”或“狗”)就是标签。三、Training(训练) 与 Serving(推理)在机器学习和深度学习领域,"training"(训练)和"serving"(服务/推理)是两个核心而不同的阶段,它们各自承担着不同的任务,并且在模型的整个生命周期中扮演着至关重要的角色。
Training(训练)定义:训练阶段是机器学习模型或深度学习模型的开发和调优过程。在这个阶段,模型通过学习算法和给定的训练数据集(通常包含大量已标记的样本)来自动调整其内部参数(或称为权重),以便更好地拟合训练数据的分布,从而对新的、未见过的数据做出准确的预测或分类。
目的:训练的主要目的是使模型能够在给定任务上表现良好,即尽可能准确地预测或分类新的数据点。这通常通过最小化某个损失函数(loss function)来实现,该损失函数衡量了模型预测与真实标签之间的差异。
特点:
需要大量的计算资源,尤其是当处理大规模数据集或复杂模型时。训练过程可能包含多个迭代周期(epochs),每个周期中都会遍历整个训练数据集。训练期间会使用一些技巧来加速学习过程并防止过拟合,如梯度下降、批量处理、正则化、dropout等。Serving(服务/推理)定义:服务或推理阶段是模型训练完成后,将模型部署到实际应用场景中进行预测或分类的过程。在这一阶段,模型将接收新的、未见过的数据输入,并输出相应的预测结果。
目的:服务的目的是让训练好的模型能够在真实世界的应用场景中发挥作用,提供实时的、准确的预测或分类结果。
特点:
对计算资源的需求通常低于训练阶段,因为推理过程不需要反向传播等复杂的计算。需要高效且低延迟的预测能力,以满足实时性要求。可能需要对模型进行优化,以提高推理速度和降低资源消耗,如模型剪枝、量化等。在一些场景下,还需要确保模型推理的鲁棒性和安全性。四、特征降维定义:降维是将训练数据中的样本(实例)从高维空间转换到低维空间的过程。这里的高维度和低维度,可以理解为数据特征的多少。比如,一个数据集原本有20个特征,通过降维后可能只剩下5个或更少的特征。
目的:
减少计算资源:高维数据执行学习训练具有非常高的计算成本,降维可以显著降低这些成本。提高模型准确性:通过消除数据中不相关的特征或变量,降维可以帮助模型避免维度诅咒,提高预测准确性。便于数据可视化:减少数据的维度使数据可视化更容易,有助于更直观地理解数据结构。缓解过拟合:降维可以通过减少模型的复杂度来缓解过拟合问题。降维的方法主要分为线性降维和非线性降维两大类。
线性降维方法
主成分分析(PCA):最常用的线性降维方法。它通过寻找数据中方差最大的方向(即主成分),将原始数据映射到一个低维子空间中,以保留尽可能多的信息。
非线性降维方法
t-分布邻域嵌入(t-SNE):一种非常流行的非线性降维技术,特别适用于高维数据的可视化。它通过在高维空间中计算数据点之间的相似度,并在低维空间中尽可能保持这种相似度,从而保留数据的局部结构。
总结:降维是一种重要的数据预处理技术,它可以帮助我们更好地理解和处理高维数据。
五、各种 Embedding(向量)Embedding是一种将高维数据映射到低维空间的过程或结果,目的是在保留重要信息的同时减少数据的维度。这种技术广泛应用于各种领域,包括自然语言处理(NLP)、计算机视觉、图论和网络分析等。
Graph Embedding、文本Embedding、图片Embedding ,在机器学习和深度学习中各自扮演着不同的角色。它们分别适用于不同类型的数据,并通过不同的模型和方法实现数据的低维表示。
文本Embedding
图片Embedding
Graph Embedding
数据类型
文本数据(单词、短语等)
图片数据(像素、颜色等)
图数据(节点、边等)
目标
将文本表示为向量,捕获语义和语法信息
将图片表示为向量,捕获视觉特征
将图表示为向量,保留节点连接和拓扑结构
应用场景
NLP任务(如情感分析、文本分类)
图像识别、图像检索、图像分类
推荐系统、社交网络分析、生物信息学
常用模型
Word2Vec、GloVe、FastText等
CNN等深度学习模型
DeepWalk、LINE、Node2vec、SDNE等
挑战
处理多义词、同义词等语义复杂性
处理不同尺度和角度的图片变化
保留图的复杂结构和节点连接关系
Embedding 本身并不直接等同于降维方法,但它在某些情况下可以被视为一种特殊的降维形式,尤其是在处理高维稀疏数据时。
六、 搜索词(Query)理解搜索词(Query)理解是搜索引擎和自然语言处理(NLP)领域的核心技术之一,它主要关注对用户输入的查询内容进行分析和理解,包括查询意图识别、分词、扩展和改写等多个方面。通过运用机器学习和深度学习等先进技术,Query理解能够显著提升搜索质量和用户体验。
query理解系统通常以Pipeline的形式搭建,其大致流程可以归纳为以下几个关键步骤:
预处理:对用户输入的query进行初步处理,包括大小写转换、繁简体转换、无意义字符剔除、query截断等,以消除格式差异和减少处理难度。分词/词性标注:将query中的字符串分解成有意义的词或短语单元,并标注每个词的词性。这是后续处理的基础,对于中文等需要分词的语言尤为重要。改写:对query进行一系列修改和转换,包括拼写纠正、同义词替换、去除停用词、查询扩展等,以优化查询内容,提高搜索结果的准确性和相关性。实体识别:识别query中的实体(如人名、地名、机构名等),以便更准确地理解用户意图。权重分析:分析query中每个词或短语的重要性,通过计算TF-IDF值、使用TextRank算法或构建机器学习模型等方式,为不同的词或短语赋予不同的权重。意图识别:确定用户提交查询的意图,如信息性查询、导航性查询或交易性查询等。意图识别可以通过分类模型(如SVM、朴素贝叶斯、决策树等)或深度学习模型(如BERT)来实现。七、词项字典(Term Dictionary)词项字典是一个包含文档集合中所有唯一单词(或称为词项)的列表。在搜索引擎或信息检索系统中,每个文档都被拆分成一系列的词项,这些词项经过规范化处理(如去重、时态统一、大小写统一、近义词处理等)后被存储在词项字典中。每个词项在词项字典中都有一个唯一的条目,该条目通常包含词项本身及其相关信息,如指向倒排表中相应条目的指针或引用。
词项字典与倒排索引的关系
在倒排索引结构中,词项字典与倒排表(Posting List)和词项索引紧密相关。具体来说:
倒排表:对于文档集合中出现的每个单词(词项),倒排表中都有一个条目与之对应。该条目包含了所有包含该词项的文档的列表以及相关统计信息(如词项在文档中的位置、词频等)。词项索引:词项索引是一种数据结构,用于加速词项字典的检索过程。通过词项索引,可以快速定位到词项字典中某个特定词项的位置,进而访问其对应的倒排表条目。八、搜索引擎极致性能下的数据结构搜索引擎内部应用了多种高效的数据结构来优化性能和功能。以下是针对FST(有限状态转换器)、SkipList(跳表)、BKD-Tree(Block K-Dimensional Tree)这三种数据结构的定义、特点、简单实现原理及应用场景的详细介绍。
1. FST(Finite State Transducer)
定义:FST是一种特殊类型的有限状态机,它不仅能够处理输入并改变状态,还能根据输入产生输出。在Lucene中,FST被用于压缩和存储倒排索引中的词汇表,以减少内存占用。假设我们有一个Set:mon,tues和thurs,并给他们关联相应的数值2,3和5。FST类似一种TRIE树。
特点:
● 内存占用低:FST通过共享状态和转换来减少内存占用,特别是在处理大量词汇时效果显著。
● 查询效率高:FST支持快速的词汇查找和遍历,有助于提升搜索性能。
FST的压缩率通常在3倍到20倍之间,内存节省可以达到9倍到60倍,性能虽然略逊于TreeMap和HashMap,但足以满足大多数应用需求 。
应用场景:
● 倒排索引压缩:Lucene使用FST来压缩和存储倒排索引中的词汇表,以优化内存使用。
● 自动机构建:FST也用于构建和管理自动机,支持复杂的字符串匹配和搜索操作。
2. SkipList(跳表)
定义:SkipList是一种基于多级索引的有序数据结构,它通过在链表上增加多级索引来提高查找效率。在Lucene中,SkipList被用于实现某些类型的索引结构,如TermDictionary的索引。
特点:
● 查找效率高:SkipList的查找、插入和删除操作的时间复杂度均为O(log n),具有较高的效率。
● 实现简单:SkipList的实现相对简单,不需要复杂的旋转或重平衡操作。
简单实现原理:SkipList由多层链表组成,每层链表都是下一层链表的一个子集。每个节点包含多个指针,分别指向不同层链表中后续节点的位置。在插入和删除节点时,通过随机选择层数来构建或更新多级索引。查找时,从顶层链表开始,逐层向下查找,直到找到目标节点或确定目标节点不存在。
应用场景:
● 有序索引:SkipList适用于实现有序索引结构,如Lucene中的TermDictionary索引。
● 内存数据库:在内存数据库中,SkipList可用于实现快速的有序数据访问和查询。
3. BKD-Tree(Block K-Dimensional Tree)
定义:BKD-Tree是一种用于存储和查询高维空间数据的数据结构,它是K-D Tree的一种变体。在Elasticsearch中,BKD-Tree被用于处理高维向量数据的索引和查询。
特点:
● 高效处理高维数据:BKD-Tree通过分块和递归划分空间来有效处理高维数据,保持查询效率。
● 空间划分灵活:BKD-Tree在划分空间时更加灵活,可以根据数据的分布特点进行优化。
简单实现原理:BKD-Tree通过递归地将高维空间划分为多个子空间来构建树结构。在每次划分时,选择一个维度和一个划分点,将空间划分为两个子空间。然后,对每个子空间重复上述过程,直到满足停止条件(如子空间中的数据点数量达到阈值)。在查询时,从根节点开始,根据查询点与划分点的关系选择进入哪个子空间,直到找到包含查询点的叶子节点或确定查询点不存在于树中。
应用场景:
● 高维向量索引:在Elasticsearch中,BKD-Tree被用于处理高维向量数据的索引和查询,如地理位置数据、图像特征向量等。
● 空间数据库:在空间数据库中,BKD-Tree可用于实现高效的空间索引和查询操作。
— END —
如需《搜索引擎- ——原理、技术与系统》、
《这就是搜索引擎核心技术详解》,请关注、后台留言。