term weighting

wordrank

wordrank是衡量一个query中各个term的重要性的一种算法。相比于传统的tf*idf相比,可以理解为idf是一种静态的算法,即同一个term在不同的query中其重要性是一样的,但是wordrank是一个动态的算法,它衡量的是query中各个term的相对重要性。它在nlp中的地位可见下图,属于一种浅层句法分析。

image1

应用

在搜索引擎中,对于一个query查询的term越多,召回的就越少,准确也越高;反之,一个query查询的term约少,召回的就越多,准确也就越低。所以对于query的主干分析和重要性计算就很重要了。

传统的query主干分析方法

  • 机器学习
term位置特征(是否在query的前部)

term属性特征(比如词性,命名实体识别)



term统计特征 (idf等)
  • 高精度资源

    词语类型表 (‘ipad’ -> 商品名)

    词语关系表 (‘北京’ ‘海淀’ 上下位关系)

    词语属性表 (‘公司’ 公司机构后缀)

  • 文法规则

    词性模板(“NS+P+NS”)

wordrank算法

基本思想:一个词语在越多的子串中出现,且在子串中约重要,那么这个term的重要性就应该越高。

短语生成树
term weighting_第1张图片
image
算法步骤:
  1. 构建短语生成树,跟节点为所有单term按序组合成的短语。以idf值初始化(idf和term在不同文章出现的频次有关,猜想,这个词表的构建要考虑bigram)叶子节点。

  2. 从上往下递归计算,所有中间节点仅为2个term构成的子短语(可能不太准确)。

  3. 重新初始化叶子节点,迭代计算直到稳定(暂时未考虑,仅仅一次迭代)

算法demo实现:

https://github.com/waterzxj/wordrank

你可能感兴趣的:(term weighting)