近期需要研究一些特征工程的工作,就打算把微软之前公布出来的特征都复现一遍,今天遇到的特征是 LMIR, 其实也就是language model for information retrieval的简写,下面简要记录下研究经过。
首先,该特征主要是三种smoothing方法,分别是:JM、DIR和ABS,详细的文章介绍见:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.94.8019&rep=rep1&type=pdf
其次就是代码的实现,很奇怪,这个特征网上开源的代码并不多,可能是因为实现起来难度不大吧,但是没有成熟的工具包实在不应该,只能理解为实用性不强吧,否则BM25咋还很流行呢。废话少说,在git上看到了两个相关的开源项目,一个是六年前的代码(地址:https://github.com/liheyuan/SimpleLMIR),一个是一年前的代码(地址:https://github.com/airalcorn2/LMIR),因为这两个项目星都很少,不敢贸然使用,就都研究了一下,以下是这两个代码的分析:
一、SimpeLMIR
优点:有文本的简单预处理工作,如把所有字母都转换成小写,把复杂的标点符号都替换成空格。
缺点:1.计算的时候考虑不周全,以JM为例,文中说明的是(1-lambda)*p_ml + lambda * p_c,但是还有些词可能在Collection中也并未出现,这种情况并未考虑到。
2.计算的时候累乘,不如取log规范。
二、LMIR
优点:计算的时候考虑全面,且以log累减,感觉更规范。
缺点:1.有一个bug,全局计算错误,致命。
2.没有文本预处理,直接计算。另,这两种方法都只提供一句话和训练集里所有文档之间的关联性,不支持指定两句,但是也很方便改就是啦。
总的说来,很感谢两位,理清了思路,下一步自己把代码完善好同步出来(地址待附o(* ̄︶ ̄*)o)