**【本节概要】**这一节主要讨论有哪些小技巧可以有效提升个性化检索服务的精度。
目录
[1.1 基于上下文感知的搜索](#1.1 基于上下文感知的搜索)
[1.2 细化的上下文感知不同类型](#1.2 细化的上下文感知不同类型)
[3.1 数据采样](#3.1 数据采样)
[3.2 数据归约](#3.2 数据归约)
[3.3 数据离散](#3.3 数据离散)
一、情境感知的查询理解
在许多时候,用户输入的查询条件缺乏足够的精准性。用户查询条件存在歧义,难以判断真实意图,或是过于精简、语义信息不够完整。因此,在缺少直接来自用户的反馈时,往往需要借助其他信息来协助判断。比如说,查询上下文,基于查询时的环境信息来填补查询条件中的缺失要素。
上面提到的两种方式,都用了其他信息帮助我们理解用户意图。这一类信息被我们称作**"情境信息"(Context Information)**。
从计算机学科的视角出发,**"情境"**一词可定义为"所有与人机交互相关,用于区分标定当前特殊场景的信息"。
直观上,查询上下文可以帮助更好的理解用户查询词,因为用户的搜索行为往往具有一定的连贯性。相应的,同一查询会话中的查询词和点击的 URL 往往是相关的。
1.1 基于上下文感知的搜索
基于上下文感知的搜索的基本流程,大致分为两部分:
-
线下训练阶段(模型准备阶段):首先,将查询词归纳为查询概念,从而避免查询词稀疏性的影响;其次,建立模型,描述查询概念之间的关联关系,支撑上下文感知。
-
线上服务阶段(感知查询阶段):首先,切分会话,判断与当前查询相关的上下文查询与点击记录;其次,根据已有查询记录理解用户当前意图,并进行精准查询。
**查询概念:**一组有着相同语义的查询词。可以解决查询词的稀疏性问题,同时,更规范地解释查询上下文。
借助查询概念归纳,我们将会话内的查询序列转化为了查询概念序列。接下来,核心任务在于如何从序列中抽取查询概念的序列模式。

【举个例子】
假设
- 用户搜索历史(查询序列):"华为 Mate60 参数"→"华为 Mate60 价格";
- 转化为概念序列:「华为 Mate60 - 参数」(C1)→「华为 Mate60 - 价格」(C2);
- 查后缀树:找到 "C2C1"(对应「参数→价格」)节点;
- 看子节点:比如子节点是 "C2C3C1"(对应「参数→价格→续航」);
- 推荐查询:把概念序列转化为具体内容 ------"华为 Mate60 续航"。
1.2 细化的上下文感知不同类型
这里我们介绍几种常见的查询上下文类型:查询重组、查询特化、查询泛化、一般关联。
- 查询重组:用户的后续查询仅仅只是先前查询的重新表述,目的不变或类似。在此情况下,先前点击的内容往往不再被点击(即使内容相关)
- 查询特化:在用户的后续查询中,对先前查询中部分内容进行了更为具体、深入的查询。在此情况下,先前查询中较为泛指的内容将被略过
- 查询泛化:在用户的后续查询中,对先前查询中部分内容进行了更泛化的查询。体现了用户对于该查询更广泛的兴趣,而不是局限在某一特定话题。
- 一般关联:借助先前查询,可以补全用户在当前搜索中的特定意图。更接近之前所笼统叙述的"上下文"情境感知的概念。
二、情境感知的推荐任务
随着智能终端与传感器技术的发展,我们所能够获得的情境信息更为丰富。描述用户所处状态及意图的,也不再是单一的上下文(查询或查询概念), 而是一组复杂且相互关联的情境信息,单一解读某一种情境要素,可能无法得到用户当前状态的准确描述。
显然,并非所有的情境信息都会影响到用户当下的决策。直接询问用户哪些情境信息对于当下是重要的,通过特征选择或是统计分析。那么,如何将情境信息整合到推荐系统中?
情境感知推荐的三种范式:
- 情境预过滤:事先根据情境信息筛选、分隔数据记录

- 情境后过滤:产生推荐结果后,根据情境信息进行筛选

- 情境建模:将情境信息纳入到推荐系统的模型中,在推荐的各个阶段更好地理解和利用情境信息
三、数据预处理
糟糕的数据质量会给数据分析过程造成严重的负面影响。一些常见的数据质量问题包括,数据测量、采集等过程中出现的错误;噪声、离群点、缺失值等数据问题;重复数据。
针对上述问题,需要通过数据预处理的方式提升数据质量。这里主要有三种数据预处理的方式,分别是数据采样,维度归约,数据离散。
3.1 数据采样
**数据采样,指选择一部分数据对象的子集进行分析的常用方法。**数据规模的急剧增加带来了计算能力的巨大负担,通过采取小规模样本,可以起到近似的效果,同时降低开支。即使在要求精确的场合,通过采取小规模样本进行初步分析,了解数据特性,也是有效的手段。
但无可避免地,采样缺乏代表性,将影响对于原数据集的还原程度,进而产生误导。因此采样数据应至少在统计指标上近似原数据集,例如均值和方差。
最基本的采样技术为简单随机采用。对于所有对象,采用简单的等概率方式进行采样,一般采用两种方式(无放回采样:被采中的对象从整体中删除,仅可选中一次;有放回采样:被选中的对象不会从整体中删除,可再次被选中)进行。两种方式无本质区别,但有放回采样较为简单(概率不变),更为复杂的方法包括分层采样,即对数据进行分组,从预先指定的组里进行采样。
通过以上的讲述,我们可以意识到影响采样效果的重要因素之一是采样的样本容量。较大的样本容量更能完整代表数据,但降低了采样的收益;较小的样本容量在采样收益上更高,但可能造成信息的损失。
针对采样的样本容量如何确定的问题。往往可以采用渐进式采样的方式,从一个小样本开始,然后逐步增大采样规模,在模型的准确率趋于稳定的时候停止采样,从而确定采样规模。这样,不需要在一开始就确定采样的容量,但是计算开销大(需要多次迭代训练模型)。
**注:**数据采样不能成为数据造假的帮凶!一种不良的倾向:将数据采样等同于数据"筛选"。但是,采样不应该具有任何的倾向性,所有算法的数据标准应该一视同仁,不能以结果作为采样依据。
3.2 数据归约
在数据集中,描述一个对象可能涉及到许多特征,然而,并不是所有的特征都具有显著的区分作用,比如下表中的语文列。**通过维度归约,可以删除不具有区分度的特征,同时可能降低噪声。**这种方法在避免维度灾难的同时,模型更容易理解,也更易于可视化。

**维度灾难:**维度灾难,又称维度诅咒。指随着数据维度的增加,数据分析困难程度大幅上升的现象,一方面计算复杂:计算量呈指数级增长,需要更多的计算资源来处理;另一方面数据稀疏:随着维度增加,数据点在高维空间中的分布变得稀疏, 大部分数据之间的距离都变得非常远,难以区分或识别模式。
降低维度的基础思路是仅使用特征的一个子集(而不是归纳新特征)。其目的在于去除冗余特征和不相关特征。除了直接删去多余特征外,为特征赋予不同权值也是一个可选择的方案。
在先前的例子中,缺乏区分度的维度可以直观地发现,因此人工删除即可。然而,更多时候,需要归约的维度难以通过简单的人工判断加以区分。我们希望能够从纷乱的属性中找到一些具有代表性、综合性的指标,从而包含丰富的信息量,帮助我们抓住主要矛盾。主成分分析(PCA)的思路应运而生,PCA的思路是通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
主成分分析的过程比较复杂,这里提供一个简要的算法过程介绍:

从上面的算法过程可以看出,主成分分析依赖于原始变量,也只能反映原始变量的信息。因此,原始变量的选择很重要(对于原来的问题本身也很重要)。主成分分析的内在假设之一是原始变量直接存在一定的关联性,相应的,如果原始变量本质上相互独立,那么降维就有可能失败,同理很难将独立变量用少数综合变量概况,数据越相关,降维效果越好。
需要注意的是,维度归约同样可能造成信息损失,甚至产生误导效果,毕竟我们看到的特征更少了,也就更容易出错了。
3.3 数据离散
数据离散化,旨在将连续属性变换为分类属性。例如,病人的年龄是一个连续值,但是在实际治疗中,往往仅需要一些年龄段的信息即可(如成年/未成年,儿童/成人/老人等)。对于特定数据挖掘问题,特别是分类问题,通过合并减少类别数目是有益的。
- 非监督离散化:
仅利用连续特征的数值分布信息,不参考任何分类标签(如 "是否患病""是否购买"),直接对特征进行区间划分。
常见方法(附例子):假设我们有一个连续特征:年龄 ,取值范围为 [0, 100],样本数为 1000。
-
等宽分箱(Equal Width Discretization)
- 原理:将特征的数值范围均匀划分为
k个区间,每个区间的宽度相同。 - 公式:区间宽度 = (max - min) /k
- 例子:k=4 时,区间为
[0,25), [25,50), [50,75), [75,100]。 - 优点:计算简单,区间边界直观。
- 缺点:对异常值极其敏感(如存在一个年龄为 200 的异常值,会导致大部分样本集中在第一个区间);无法反映数据的实际分布(如样本主要集中在 20-30 岁,等宽分箱会强行拆分这个密集区间)。
- 原理:将特征的数值范围均匀划分为
-
等频分箱(Equal Frequency Discretization)
- 原理:将样本按特征值排序,划分为
k个区间,每个区间包含的样本数量相同(或近似相同)。 - 例子:k=4 时,每个区间包含 250 个样本。假设排序后,第 250 个样本的年龄是 18,第 500 个是 30,第 750 个是 50,则区间为
[0,18), [18,30), [30,50), [50,100]。 - 优点:抗异常值能力强;能反映数据的实际分布。
- 缺点:区间边界可能不合理(如两个相邻样本的年龄差为 1,但被分到不同区间);不同数据集的区间边界不可复用。
- 原理:将样本按特征值排序,划分为
-
聚类分箱(Clustering-based Discretization)
- 原理:使用无监督聚类算法(如 K-Means)将特征值划分为
k个簇,每个簇对应一个离散区间。 - 例子:对年龄特征做 K-Means 聚类(k=4),聚类中心为 10、30、60、80,则区间由聚类边界决定。
- 优点:能自动发现数据的自然簇结构。
- 缺点:计算成本高于等宽 / 等频;聚类结果受初始中心影响;k 值需要手动调整。
- 原理:使用无监督聚类算法(如 K-Means)将特征值划分为
无监督离散化的共性:
- 优点:计算速度快,不依赖标签,适用于标签缺失的场景(如数据探索阶段)。
- 缺点:无法保证离散化后的特征对分类任务有区分度 。例如,等宽分箱将年龄分为
[0,25)和[25,50),但这两个区间的样本在标签(如 "是否患病")上的分布可能完全相同,离散化后没有提升模型性能。

- 有监督离散化
不仅利用特征的数值分布,还利用分类标签的信息 ,目标是让离散后的每个区间内的样本标签分布尽可能一致 (即区间内的样本属于同一类的概率高),同时不同区间的标签分布尽可能不同(即区间间的区分度高)。
常见方法(附例子):仍以年龄特征和标签 "是否患病"(0 = 健康,1 = 患病)为例。
-
卡方分箱(Chi-square Discretization)
- 核心思想:基于卡方检验,衡量两个区间的标签分布是否存在显著差异。如果差异不显著(卡方值小),则合并这两个区间;否则保留分开。
- 步骤:
- 初始化:将每个特征值作为一个独立的区间(即每个样本一个区间)。
- 计算相邻区间的卡方值。
- 合并卡方值最小的两个区间(即标签分布最相似的区间)。
- 重复步骤 2-3,直到满足停止条件(如区间数达到 k,或卡方值超过阈值)。
- 例子:假设初始区间中,年龄
[20,25)和[25,30)的卡方值最小,说明这两个区间的 "患病" 概率几乎相同,合并为[20,30)。最终得到的区间可能是[0,15), [15,35), [35,60), [60,100],这些区间的患病概率差异显著。 - 优点:离散化后的特征对分类任务的区分度高;能自动确定最优区间数。
- 缺点:计算成本高(尤其是样本量大时);对噪声标签敏感;可能过拟合(样本量小时,区间划分过于贴合训练集标签)。
-
信息增益分箱(Information Gain Discretization)
- 核心思想:基于决策树的信息增益,选择能最大程度降低标签熵的特征值作为划分点。
- 原理:熵越小,标签分布越集中。对于一个特征值
x,将样本分为≤x和>x两部分,计算划分后的信息增益,选择信息增益最大的x作为划分点。重复此过程,直到区间数达到 k。 - 优点:与决策树模型的兼容性好;划分后的特征区分度高。
- 缺点:倾向于选择样本数多的划分点;可能过拟合。
-
最小熵分箱(Minimum Entropy Discretization)
- 核心思想:最小化离散化后所有区间的标签熵之和,即让每个区间的标签分布尽可能纯净。
- 优点:直接优化分类任务的目标(熵最小化)。
- 缺点:计算复杂度高;对噪声敏感。

有监督离散化的共性
- 优点:离散化后的特征与标签的关联性强,能显著提升依赖离散特征的模型(如决策树、朴素贝叶斯)的性能。
- 缺点:计算成本高,依赖标签,无法用于无标签数据;样本量小时易过拟合。
