(1)我应该提取所有哪些功能?
首先,要意识到您没有对文档进行分类。您正在对(文档,查询)对进行分类,因此您应该提取表示匹配程度的要素。
学习排名的标准方法是针对各种搜索引擎设置(例如tf-idf,BM-25等)运行查询,然后根据相似性评分训练模型,但是对于小型的,特定于领域的SE,您可能具有以下功能
- 对于每个术语,一个布尔值,指示该术语是否出现在查询和文档中。也许不是布尔值,而是文档中实际出现的那些查询词的tf-idf权重。
- 各种重叠指标,例如Jaccard或Tanimoto。
(2)是否有更好的方法将机器学习组件集成到搜索引擎中?我的最终目标是基于业务逻辑和用户反馈来“学习”排名功能。
这是一个非常广泛的问题,答案取决于您要付出多少努力。想到的第一个改进是,您不应使用分类器的二进制相关性判断,而应使用其实值决策函数,这样您就可以进行排名,而不仅仅是过滤。对于SVM,决策函数是到超平面的有符号距离。好的机器学习包具有获取其价值的接口。
除此之外,研究成对和成对学习排名。您所建议的是所谓的逐点方法。IIRC,成对运行在实践中要好得多。原因是使用成对排名时,您需要的点击次数要少得多:您不必给用户标记文档为相关/不相关的标签,只需给他们提供“相关”按钮即可。然后,您将学习三元组(文档1,文档2,查询)上的二进制分类器,该分类器告诉文档1是否比文档2与查询更相关,反之亦然。当用户将排名中的文档4标记为相关时,您将获得六个样本以供学习:
- document4> document3
- document4> document2
- document4> document1
- document1 <document4
- document2 <document4
- document3 <document4
因此您可以免费获得底片。
(这些全都是建议,我还没有尝试过。我只是在一个研究小组工作过,人们调查了学习排名。我确实为一个阅读小组做过别人论文的介绍,也许幻灯片可能会有帮助。)