使用匹配分数确定正确的功能(机器学习)

时间:2014-10-06 18:06:00

标签: machine-learning feature-selection supervised-learning

一旦功能可用,我熟悉确定知识库中给定文档集与搜索查询文档(基于余弦距离)的匹配程度。我们将根据特征在矢量空间上进行映射。

如何处理反向 - 我已经获得了一组文档和针对多个查询文档的匹配分数,并且必须确定功能(或确定匹配的决策标准)。这将是训练数据,该模型将用于识别针对我们的知识数据库的匹配 搜索查询

我们目前的方法是考虑一组功能,看看哪些组合在训练集中得到最佳匹配分数......但我们最终会尝试多种组合。有一个更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这是一种应该有效的简单直接的方法(线性模型)。 如果您正在处理文档和查询,那么您使用的功能可能是令牌(或单词)或n-gram或主题。为简单起见,我们假设这些特征是单词。

假设您有一个查询文档:

apple iphone6 

你有一组文件及其对应上述查询的匹配分数: (假设文件是​​网址的内容)

www.apple.com (Apple - iPhone 6) score: 0.8
www.cnet.com/products/apple-iphone-6 (Apple iPhone 6 review), score: 0.75
www.stuff.tv/apple/apple-iphone-6/review (Apple iPhone 6 review), score: 0.7
....

每个查询模型

首先,您需要从匹配的网址中提取单词功能。假设我们获得了单词及其L1-normalized TF / IDF分数:

www.apple.com
apple 0.5
iphone 0.4
ios8 0.1

www.cnet.com/products/apple-iphone-6
apple 0.4
iphone 0.2
review 0.2
cnet 0.2

www.stuff.tv/apple/apple-iphone-6/review
apple 0.4
iphone 0.4
review 0.1
cnet 0.05
stuff 0.05

其次,您可以将要素得分和匹配得分组合在一起,并按每个要素汇总:

w(apple) = 0.5 * 0.8 + 0.4 * 0.75 + 0.1 * 0.7 = 0.77
w(iphone) = 0.4 * 0.8 + 0.2 * 0.75 + 0.4 * 0.7 = 0.75
w(ios8) = 0.1 * 0.8 = 0.08
w(review) = 0.2 * 0.75 + 0.1 * 0.7 = 0.22
w(cnet) = 0.2 * 0.75 = 0.15
w(stuff) = 0.05 * 0.7 = 0.035

您可能需要执行标准化步骤,将每个w除以文档数。现在,您可以通过以下相关性获得以下功能:

w(apple)=0.77 / 3
w(iphone)=0.75 / 3
w(review)=0.22 / 3
w(cnet)=0.15 / 3
w(ios8)=0.08 / 3
w(stuff)=0.035 / 3

您甚至可以使用这些权重获得线性分类器:

score = w(apple) * tf-idf(apple) + w(iphone) * tf-idf(iphone) + ... + w(stuff) * tf-idf(stuff)

现在假设您有一个检测到这些功能的新网址:

ios8: 0.5
cnet: 0.3
iphone:0.2

然后,您可以计算有关查询的匹配分数" apple iphone6":

score = w(ios8)*0.5 + w(cnet)*0.3 + w(iphone)*0.2
      = (.08*.5 + .15*0.3 + .75*.2 ) / 3

然后,匹配分数可用于对与相同查询的相关性相关的文档进行排名。

任意查询模型

为每个查询构建线性模型执行相同的操作。假设您的训练数据中有k个此类查询和匹配文档,您最终会得到 k这样的模型;每个模型都是基于一个查询构建的。

model(apple iphone6) = (0.77*apple + 0.75iphone + 0.22review + ...) / 3
model(android apps) = (0.77google + 0.5android + ...) / 5
model(samsung phone) = (0.5samsung + 0.2galaxy + ...) / 10

注意在上面的示例模型中,3,5,10是规范化器(与每个查询匹配的文档总数)。

现在出现一个新查询,假设它是:

samsung android release

我们的任务是:

  • 查找相关查询q1, q2, ..., qm
  • 使用查询模型对新文档进行评分并进行汇总。

首先需要从此查询中提取功能,并假设您已经为已经学习的每个查询缓存了这些功能。基于任何nearest neighbor方法(例如,Locality sensitive hashing),您可以找到与#34; samsung android release"的top-k类似查询,可能它们应该是:

similarity(samsung phone, samsung android release) = 0.2
similarity(android apps, samsung android release) = 0.2

整体排名

因此我们得到了最终的排名:

0.2*model(samsung phone) + 0.2*model(android apps) =
  0.2* (0.77*apple + 0.75iphone + 0.22review + ...) / 3 + 
  0.2* (0.77google + 0.5android + ...) / 5

通常在这些信息检索应用程序中,您构建了从功能(单词)到文档的反向索引。因此,最终排名应该能够在顶级文档中非常有效地进行评估。

参考

有关详细信息,请参阅Omid Madani等人的IND算法。 Learning When Concepts Abound