本文简单介绍了什么是Soso新闻话题追踪系统,如何自动推荐热点话题,并重点讲述自动推荐话题过程中的一个关键技术点——话题自动取名。


一. 什么是新闻话题追踪

  每一个热点事件都有一个产生、发展、结束的过程,而当用户处在某一时间点的时候,往往希望能够了解这一事件的来龙去脉,了解该事件的全貌。在一个热点事件发展的每个时间点都会有一些相关新闻的对其进行报道,而这些新闻报道实际上就是对该事件的一个描述。新闻话题追踪系统就是通过对新闻的抓取、挖掘来发现热点话题,并对这些话题进行刻画和表征。表征方式基本上是由一系列的热词,以及一个代表文档集合来表示一个话题。


  话题的展现方式为二维热度图,横坐标表示时间点,纵坐标表示某时间点上报道新闻的数量,并选取分布于不同时间点的若干篇最具代表性的文档进行展示。以话题“默多克窃听门”为例,如下图所示。



  话题服务的输出有两种途径,一种是在新闻首页推荐出当前最受关注的6个话题,另一种是用户在搜索新闻时触发话题的展现。


  本文假定话题的发现和挖掘工作都已完成,重点讲述在此基础之上如何来进行首页话题的自动推荐。


二. 新闻话题自动推荐
1.1 目的

  在新闻话题追踪系统上线之初,首页展现的6条热点话题都是通过编辑人工筛选,而每次筛选的时间间隔较长,当某些更热门的话题出现时可能无法及时被推荐到线上。因此实现热点话题的自动推荐就非常必要。


1.2 实现方法

  实现热点话题自动推荐主要有两步工作,首先是要判断哪些话题是当前最热门的,同时又是能够保证展现质量的;其次是需要自动为各个话题生成一个名字。


  首先来看第一步,要判断哪些话题被推荐实际上就是要按照一定的标准对挖掘到的所有话题进行排序。排序的标准主要有两个,话题热度和话题质量。


  在计算话题热度时需要综合考虑话题的报道量以及话题的时兴性。话题报道量的计算相对容易,只需要统计最近一段时间区间当中的新闻数量;而对于话题时兴性的计算,为了避免某些时刻文档数波动的干扰,而只考虑全局的走势,利用了每个话题对应文档在其整个生命周期的分布情况同时综合考虑了话题峰值的出现位置因素来计算。


  话题质量的计算是为了保证推荐的话题能够有比较好的展现质量,比方说能够绘制出清晰的热度图,能够选取出具有代表性的新闻。计算方法也比较简单,可以通过引入一定的规则得分来进行约束。


  在从这些方面对话题进行度量之后,就可以计算出话题的一个综合得分,从而实现对话题的排序,实现最优话题的推荐。


  有了话题排名,就需要进行第二步,对每个话题都生成一个名字,这也是整个话题自动推荐过程当中最困难的一点,下面的章节将详细介绍其实现方法。


三. 话题自动取名

  话题取名就是为各个话题自动生成出一个名字或者叫做标题,这个标题需要同时满足两个要素:首先要能够代表和概括这个话题,其次需要是可读的。


  在话题取名模块,输入是话题,输出是话题名字。那么话题又是什么呢?正如前面提到的,话题是由各个时间点的代表新闻以及一些热词构成。为了保证话题名字能够满足上述的两个要素,我们将话题取名的任务进行了转化,转化为从一系列新闻概括一个标题的任务,比如:



  在上图中,以茅台成为奢侈品这一话题为例,话题取名任务实际上就是从这个话题的代表文档的标题中提取出一个可读的具有代表性的短语。


  在确保话题名字的代表性方面,我们从构成话题名字的词的来源入手,这些词全部从话题相关新闻的标题中提取,进行停用词过滤,并在对候选话题名字排序时还会根据其中词的TF-IDF、是否含有命名实体等因素计算其重要性。


  在确保可读性方面,使用了语言模型来对某个候选话题名字进行打分,并引入一些辅助的句法规则进行进一步约束。


3.1 语言模型

  统计语言模型是自然语言处理当中一项重要的技术,应用非常广泛,例如机器翻译、语音识别、输入法等。简单地说,语言模型就是用来计算一个句子的概率的模型。因此,利用语言模型,可以确定哪个词序列构成可读句子的可能性更大。举个音字转换的例子,输入拼音串“nixianzaiganshenme”,对应的输出可以有多种形式,如“你现在干什么”,“你西安再赶什么”,等等。那么到底哪个才是正确的转换结果呢,利用语言模型,我们知道前者的概率大于后者,因此转换成前者比较合理。


3.1.1 形式化描述

  令S表示一连串特定顺序排列的词 w1, w2, …, wk,计算该词串构成句子的可能性就是对其概率进行计算,用P(S)表示,展开式为:



  其中P(w1)表示第一个词w1出现的概率,P(w2|w1)表示已知第一个词的前提下第二个词出现的概率,依此类推,词wk由它前面的k-1个词决定。从计算的角度看,上面公式中参数很多,需要考虑的可能性过多,无法实现,因此需要近似的算法。我们可以假定任意一个词的出现只与它前面的n个词有关,即:



  引入这一假设的模型通常被称为n-Gram,也叫做n-1阶马尔科夫模型。n越大,模型越准确,但也越复杂,需要的计算量越大。最常用的是n=2n=3的情况,分别被成为Bigram,和Trigram。


3.1.2 模型训练

  模型训练就是从训练语料当中学习出公式当中的参数,比较简单的办法是采用最大似然估计:



  其中C(W)表示W在训练语料中出现的次数。通过模型训练出参数之后,就可以利用该模型来判断一个新的词串构成句子的概率。


3.1.3 平滑

  在语言模型的训练过程中,训练语料的规模越大,参数估计的结果越可靠。但即使训练数据的规模非常大,也还是会有很多语言现象在训练语料中没有出现过,这就会导致很多参数为0。这种现象称为数据稀疏,其中一种解决办法就是使用数据平滑技术。


  语言模型中常用的平滑算法有加法平滑、Good-Turing平滑、Katz平滑、插值平滑等。下面我们以加法平滑和Good-Turing平滑来说明。


  加法平滑是最简单的一种平滑技术,其基本思想是通过对每个n元对的出现次数加上一个常数来实现:



  Good-Turing平滑是利用频率的类别信息来对频率进行平滑:




  其中N(C)表示频率为C的n-gram出现的数量。


3.2 话题取名实现方法

  如前所述,我们将话题取名的任务抽象为从一系列的新闻标题中概括一个名字,这个名字需要同时符合代表性和可读性,同时长度满足一定限制。实现代表性约束的方面,通过从原始新闻当中提取关键词,计算重要性得分来实现;实现可读性约束则是通过语言模型打分,并配合简单句法规则来实现。


  基本流程为,首先根据当前话题的信息获取到该话题对应的新闻文档,对这些文档进行分词以及过滤等预处理,然后分为两个分支。第一个分支,利用获取的新闻文档进行语言模型的训练,这里的语言模型使用Good-Turing平滑;另一个分支对新闻文档标题当中的词计算TF-IDF等统计信息,然后对其中的一些关键词通过排列的方式生成一个候选话题名字序列。接下来利用之前训练好的语言模型来对各个候选名字进行打分,在此得分的基础之上融合规则得分,生成最终的话题名字排名。


  话题名字的最终得分可以表示为:


  总得分 ﹦ 语言模型得分 × TF-IDF得分 × 规则得分


  其中规则得分的计算主要考虑了热词比重、命名实体、虚词比重、搭配规则等因素。


四. 示例

  在通过计算话题重要性筛选出来6条话题,并且为它们自动生成了名字之后,就可以推送到主页上进行展示。下图中是2012年3月26日,自动推荐到Soso新闻首页的6条话题。