揭秘!海量搜索请求下的短文本聚类系统(上)
导读:大规模短文本聚类系统,旨在精准高效地将海量搜索 query 进行总结归纳,凝练成为含义内聚表达清晰的“需求”,不仅可以更好地满足用户需求,还能找到内容满足的长短版。如何保证聚类系统的高准确性,如何提高聚类系统的运行效率,是我们团队的工作重点。我们通过多级拆分、精准匹配语义相似度、误差修正等手段,逐步提升了系统的各项效果和性能指标。本文基于我们的实际工作经验,分享了大规模短文本聚类的设计和实践。
01 背景和问题介绍
搜索是用户明确表达需求的场景,百度搜索每天承接海量请求,query 的表达多种多样。大规模短文本聚类系统,核心目的就是对以 query 为代表的短文本进行总结归纳,精准高效地将含义相同表达不同的短文本,凝练成含义内聚表达清晰的“需求”。这种方式不仅可以压缩短文本量级,还能更好的满足用户需求,帮助内容提供方,提供更好的内容。目前已经辅助了百度 UGC 产品的内容生产。
在这一节中,我们先介绍短文本聚类问题,并介绍常用聚类算法,最后分析聚类算法在搜索场景下的难点和挑战。
1.1 短文本聚类问题
聚类是一种常用的无监督算法,按照某个距离度量方式把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。
一般来说,搜索 query 以短文本为主。从大量的短文本中,尽可能地将含义一致的所有文本,聚合在一起,形成一个“需求簇”,就是短文本聚类问题。
举例来说:
其中,query="手机碎屏了怎么办?" 和 query=“求助,手机屏幕摔碎了”是相同的需求,可以聚合成为⼀个簇;query="二月二什么意思",query="龙抬头什么意思" 和 query="龙抬头有什么典故"是相同的需求,可以聚合成为⼀个簇。
可以看出,搜索 query 场景下的短文本聚类问题,和常规聚类问题,有⼀个明显的区别:“簇”的内涵相对集中,也就是说,聚合完成后,簇的量级相对较⼤,同⼀个簇内的数据,距离较近。
1.2 常用算法和框架
simhash
在文本聚类领域,simhash 是⼀种常⽤的局部敏感哈希算法,常常被⽤来作为搜索引擎中的网页去重算法。它⼒图以较⾼的概率,将相似的⽂档映射为相同的哈希值,从而起到聚类(去重)的⽬的。
simhash 算法⼀般会将文档进行分词处理,并给出每个词的权重,再为每个词计算⼀个哈希值,将所有词的哈希值加权对位求和后,再采对位二值化降维,产出最终文档的哈希值。过程中使⽤了词的重要性加权,所以重要的词对最终文档哈希值的影响会更大,而不重要的词,对最终⽂档哈希值的影响就会更小,从而相似的文档,产生相同哈希值的可能性就会更⼤。
在长文档聚类(去重)领域,simhash 是⼀种高效的算法,但是,对短文本聚类而言,由于文本长度大幅度减少,simhash 的有效性大大降低了,不能保证产出结果的准确性。
向量化聚类
另⼀种常用的文本聚类方式,首先会将文本向量化,再采用常规聚类方法进行聚类。其中,文本向量化的方式很多,从早期的 tf-idf,到方便快捷 word2vec,甚至是采用 bert,ernie 等预训练模型产出的文本向量,都可以作为文本的向量化表征。⼀般来说,向量化方法会暗含分布式假设,产出的文本向量,可以在⼀定程度上解决同义词的问题。
聚类的方式也多种多样,例如常用的 kmeans,层级化聚簇,single-pass 等。特别需要注意的是,在设计聚类算法的距离度量时,需要特别考虑向量化的⽅式,针对不同的向量化方式,设计不同的距离度量。
这类算法存在三点问题:
1、以 kmeans 为代表的聚类算法,存在超参数“簇数量”,只能借助经验和辅助指标进⾏判定;
2、对短⽂本聚类问题,簇的数量往往特别⼤,会导致聚类算法性能严重下降;
3、聚类结果准确率受向量化和聚类算法双重影响,难以表达数据的细粒度差异。
其他算法和对比
尽管短文本聚类算法,在业界具有较多应用场景,但是在研究领域,它仍是⼀个相对小众的分支,主要采用改进文本向量化表示的方案,例如句子向量被设计成词向量加权矩阵的第⼀主成分,而非直接加权;例如采⽤聚簇引导的向量迭代的方式,改进向量化表示,例如 SIF+Aut。但不论是哪种改进,都会增加较大的计算开销,在工业界并不现实。
1.3 大规模短文本聚类的难点
我们面对的问题是大规模短文本聚类,它还包含 3 个隐含的限制条件:
1、聚类结果的准确性要求非常严格;
2、短文本数量规模非常大;
3、数据产出时效要求高;
不难看出,常规算法在运算效率和准确性方面,很难同时满足上述三个要求;而工业界并没有成熟框架,可以解决这个问题;学术界算法距离工业场景应用还有一定距离;我们需要一种新的思路来解决问题。
在设计算法时,需要重点考虑如下问题:
1、数据量级大,系统吞吐高:搜索 query 的量级是不言而喻的,对于亿级别数据,进行高效计算,非常考验算法设计能力和工程架构能力;
2、聚类算法准确率要求高:首先,聚类算法是无监督算法,采用向量空间上的距离度量,衡量聚类结果的聚集程度,本质上并没有准确率的概念;但是,在搜索 query 场景下,聚类算法就有了明确的衡量指标:通过统一的文本相似性评估标准,可以后验评估出在同一个簇中,结果是否相似, 在不同的簇中,数据是否不相似,从而可以衡量出聚类准确率。这为短文本聚类算法戴上了“紧箍咒”:并不是任意聚类算法都适用,需要考虑和文本相似度结合更紧密的聚类算法。
“结合更紧密”是从向量空间中距离的定义来考虑的,例如,由相似度模型给出的相似度度量,并不一定是向量空间上“距离”。具体来说,向量空间上的一个定义良好的“距离”,需要满足三角不等式:
distance(A,B)+distance(B,C)>=distance(A,C), 但是,对于相似度,
similarity(A,B)+similarity(B,C)与 similarity(A,C)并不一定有稳定的数量关系。因此,不能直接使用聚类模型,只能将相似度作为“场外指导”,实现相似度指导下的聚类算法。这导致一般的聚类算法不能直接用于短文本聚类。
3、文本相似度要求精度高,耗时短:文本相似度是一个场景依赖问题,对于同样的 query 对,在不同的场景下,可能有截然不同的判定结果。在搜索场景下,对相似度的精度要求非常高,往往一字之差,就是完全不同的需求,因此模型需要能够精确捕获文本的细粒度差异;另一方面,希望尽可能地将相同需求的 query 聚合成为一个簇,减少漏召回的情况;也就是说,对于短文本聚类问题,对文本相似度的准确率和召回率都有很高要求;除此之外,为了适应大规模的调用,文本相似度服务需要具有响应时长短、易扩展等特点。
4、文本表征复杂:文本表征指的是通过某种方式将文本转化为语义向量,用于后续文本聚类。文本向量的产出方式多种多样,例如在 simhash 中,采用加权 hash 函数表达文本信息;还可以用 word2vec 词向量加权产生文本的向量信息。除此之外,短文本的类别,关键词等信息,也是文本表征的重要组成部分;在文本向量化时,需要重点考虑如何在向量空间中体现相似度。文本表征是一项重要且基础的算法,选择不同的文本表征,决定了不同的相似度度量方式,直接影响聚类模型选型,间接影响最终结果。
5、误差的发现和修复:从文本表征到文本相似度,再到聚类算法,每一步都会积累误差,从而影响最终结果。对于大规模文本聚类,这个问题尤为明显,也是容易被忽略的环节。
由于文章篇幅较长,今天先分享到这里。在文章的下半部分,将详细展示大规模文章短文本聚类的总体思路以及演进和思考。希望对大家有所思考。
更多精彩内容欢迎关注百度开发者中心公众号。
版权声明: 本文为 InfoQ 作者【百度开发者中心】的原创文章。
原文链接:【http://xie.infoq.cn/article/f7cd1e56107c2922c549cc062】。文章转载请联系作者。
评论