机器学习与数据挖掘
基于梯度下降的自动调参
我们采用基于梯度下降的自动调参方法实现对上百参数的自动调整,整个调参框架采用机器学习的方法,利用一定的标注数据和交叉验证方法来选择最优的参数。自动调参是一种监督的机器学习方法,其主要技术体现在利用近似偏导作为梯度搜索最优参数、交叉验证等。
分词算法
我们的分词算法采用具有良好的切分歧义处理能力和新词识别能力的统计语言模型及词典分词算法,统计语言模型主要用于识别未登录词(下一小节新词挖掘部分将详细介绍)或者系统未配置的词汇,普通分词采用词典分词算法,即将输入的字符串中首先识别和切分出带有明显特征的确定词汇,以这些词汇为间隔点,把原输入字符串分割成较小的串再进行词典分词。为了减少单纯的匹配错误,我们的分词器采用最大匹配算法和最大切分(使每句中切出的词数最多)相结合的方式来分词。同时,分词器支持不限制个数的自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本并加载。
分词器工作中词典是相当重要的一个环节,其特征主要包括:
1.多词典支持,词典功能分区。包括分词主词典(最后构建索引的索引项)、中文姓氏词典(用于识别特殊词)、停止单字词典(该词典中的字不用于构建索引项)、停止词语词典(该词典中的词不用于构建索引项)、计量单位词典(该词典中的词主要是一些计量单位)。同时可以根据需求的不同,灵活的添加相关的专业词典,以达到更好的分词效果。分词器可以将多个词典进行组合来使用。
2. 词典加载入内存使用,采用预加载和Lazy Mode模式。
3. 根据分词模式,对词典进行二次编译;
4. 词典变更侦测,即当词典文件发生变化时,可以重新加载词典。
新词挖掘
使用多元语言模型实现高准确率和高召回率的新词挖掘。下面以一个简单的例子进行说明。
假设当前系统中“甘草”和“片”都是单独的词,但是“甘草片”不是一个词语。为了证明“甘草片”是否真的是新词,我们需要利用二元语言模型进行一些统计和概率计算。我们可以计算一下,如果“甘草”和“片”真的是各自独立地在文本中随机出现,它俩正好拼到一起的概率会有多小。在整个4800万字的数据中,“甘草”一共出现了5648次,出现的概率约为0.000113。“片”字则出现了9594次,出现的概率约为0.000197。如果两者之间毫无关系,它们正好在一起的概率就应该是0.000113×0.000197,约为2.223乘以10的–8次方。但经过统计发现,“甘草片”在整个语料中一共出现了350次之多,出现概率约为7.183乘以10的–6次方,比原来的预测值高300多倍。根据这样的计算结果,我们有理由怀疑“甘草片”是一个新词。这里举得是二元语言模型。多元语言模型则是看更多词的组合,比如三元语言模型可能会发现“临床”“医学”“工程”组合在一起的“临床医学工程”是一个新词。
我们还会对新词挖掘算法进行一定的自我训练。事先去除库中一部分已有词汇作为训练集,然后训练新词挖掘算法去准确地发现这些去除的“新词”,反复迭代直到算法满足需求时再真正进行新词的挖掘,同时挖掘过程依然可以进行一定的干预和迭代,使得算法准确率越来越高。
相关推荐算法
我们的系统采用基于用户的协同过滤模型和基于Item的协同过滤模型,使得推荐的结果能够很好的迎合用户的兴趣。
基于用户的协同过滤模型和基于Item的协同过滤模型推荐出来的结果进行统一排序,然后选择预测评分最高的TOP-N项推荐给目标用户。
点击模型
我们通过提取上百的点击反馈feature(log记录系统对搜索结果和用户行为有较为详细的记录)训练一个更为精准的基于最大期望(Expectation-Maximization, EM)算法的点击模型,该模型一旦训练完成,即可直接在检索排序中应用,可以显著地提升排序质量。同时很多有用的点击反馈信息也作为feature送给前面的Learning to Rank模型。
我们的点击模型考虑的Feature有:
文档总的展现次数。
文档总的点击次数。
文档展现的平均位置。
文档被点击的平均位置。
文档展现最多次数的所在位置。
文档被点击最多次数的所在位置。
文档总的点击次数。
文档在所有查询词下的平均展现位置。
文档被作为第一次点击的次数。
文档作为最后一次点击的次数。
文档被作为第二次点击的次数。
文档被作为其他点击的总次数。
文档被作为唯一被点文档的次数。
第一次点击的总次数。
第二次点击的总次数。
其他点击的总次数。
只发生唯一一次点击的次数。
页面相对停留时间。
文档在第i个位置展现的次数。
文档在第i个位置被点击的次数。
此外我们还添加了该查询词下所有文档对应的上述feature,以及整个系统中所有查询词对应的上述feature。最终点击反馈的feature数量在100左右。利用这些feature和EM算法我们可以单独训练出一个高质量的点击模型。