【发布时间】:2010-10-13 21:55:12
【问题描述】:
你知道我在哪里可以找到Lucene Similarity Class 算法的高级解释。我想理解它,而不必破译搜索和索引所涉及的所有数学和术语。
【问题讨论】:
标签: java search lucene search-engine
你知道我在哪里可以找到Lucene Similarity Class 算法的高级解释。我想理解它,而不必破译搜索和索引所涉及的所有数学和术语。
【问题讨论】:
标签: java search lucene search-engine
Lucene 内置的Similarity 是一个相当标准的"Inverse Document Frequency" 评分算法。维基百科的文章很简短,但涵盖了基础知识。 Lucene in Action这本书更详细地分解了Lucene公式;它并没有完美地反映当前的 Lucene 公式,但解释了所有主要概念。
首先,分数随该词条在当前文档中出现的次数(词条频率)而变化,而反之随着一个词条在当前文档中出现的次数而变化所有文档(文档频率)。公式中的其他因素是次要的,调整分数以使不同查询的分数彼此相当。
【讨论】:
将每个文档和搜索词视为一个向量,其坐标代表了整个文档语料库中每个词对该特定文档或搜索词的重要性的某种度量。相似度告诉您两个不同向量之间的距离。
假设您的语料库被规范化以忽略某些术语,那么仅包含这些术语的文档将位于您的语料库定义的向量空间中所有文档的图形的原点。每个包含一些其他术语的文档都表示空间中的一个点,其坐标由文档中该术语相对于语料库中该术语的重要性定义。坐标使它们的“点”靠得更近的两个文档(或一个文档和搜索)比坐标使它们的“点”更远的那些文档更相似。
【讨论】:
erickson 在 Lucene 中提到的余弦相似度词频-逆文档频率 (TF-IDF)。假设您在查询和文档中有两袋术语。此测量仅匹配完全匹配的术语,并且在上下文中包括它们的语义权重。经常出现的术语权重较小(重要性),因为您可以在很多文档中找到它们。但是我看到的严重问题是余弦相似度 TF-IDF 在更不一致的数据上并不那么健壮,您需要计算查询和文档之间的相似度更健壮,例如拼写错误、印刷和语音错误。因为单词必须完全匹配。
【讨论】: