我正在构建一个重复检测器,并且已经确定了一些与重复相关的因素:
- 文档长度的比较
- 文档标题的比较
- 文档引用的比较
- 使用”gestalt模式匹配“比较文档文本
我可以轻松地为这些因素中的任何一个获得0-1的值,但我卡在如何将这些因素组合成一个总分上。
例如,如果长度完全一致且标题非常相似,我可以假设它是重复的,即使引用相当不同,因为这个语料库中的引用很混乱。你可以想象类似的情况(长度不一致,但其他因素一致;所有因素都还不错但不完美;等等)。
最终我想让系统识别可能重复的文档(这部分很容易),然后我来决定是或不是。当我对这些重复进行投票时,它会确定在有效的重复中应该期望什么样的分数,并学会在没有我的投票的情况下如何继续进行。
回答:
你可以使用某种机器学习分类算法,该算法使用你的输入作为特征。
也就是说,你需要的是一个黑盒函数,它为这些因素中的每一个提供0-1的分数,并给你一个总体分数,以判断文档对是否应被视为重复。你需要根据一系列(输入,输出)对来选择这样的函数,其中输入是上述四个特征(或你认为可能有意义的其他特征),输出是0(非重复)或1(重复)。
这正是分类标准设置。实现这一点的一些选项包括逻辑回归、决策树、神经网络、支持向量机等等。
逻辑回归可能是一个不错的选择;它实现起来相当简单和快速,但也非常强大。基本上,它根据训练数据为每个维度选择权重,然后通过将加权特征相加并通过逻辑函数1/(1+exp(sum))
传递该总和来预测,给出重复的概率。这相当于在由你的特征选择的4维空间中选择一个分离超平面:如果4维输入点位于一侧,则为正,另一侧则为负。
如果你想要一个简单的numpy实现作为参考,这里有一个我为课堂作业写的。
请注意,这种方法只告诉你如何进行成对比较:除非你的文档数量非常少,否则你可能不希望对每对文档都这样做(因为至少模糊内容匹配的计算成本可能相当高,尽管使用逻辑回归实际预测相当容易)。你可能需要想出一些启发式方法来决定哪些文档应被视为重复(基于,例如,最近邻标题搜索或引用匹配或TF-IDF分数或其他什么)。