我在尝试在 SQL Server 2008 R2 中实现 BM25 算法时遇到了问题。我知道 SQL Server 包含全文搜索选项,它已经实现了 BM25 的变体,但我想做一些参数调整测试,并且由于 FTS 过程是不可编辑的(据我所知),我我决定自己实现它。
我有两个表,TF(词频)和 DF(文档频率),结构如下:
TF
*注:权重列表示该词的重要性(通常为1)
ID | Term | DocumentID | Count | TermID | Weight*
Run Code Online (Sandbox Code Playgroud)
DF
ID | Term | Count
Run Code Online (Sandbox Code Playgroud)
TF 表包含了词条和文档之间的关系;也就是说,该词在文档中的出现频率。DF 表包含有关有多少文档包含一个术语的信息。可以使用 DF.ID 和 TF.TermID 链接这两个表。使用这两个表,我现在想根据维基百科文章中的公式计算两个文档(一个文档充当查询)之间的 BM25 相似度值。表 TF 和 DF 分别转换为函数 f(q, D) 和 n(q):


我希望结果采用以下格式:
DocumentA_ID | DocumentB_ID | BM25_Value
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的一些代码:
DECLARE @N FLOAT;
DECLARE @AVGDL FLOAT;
DECLARE @K1 FLOAT;
DECLARE @B FLOAT;
SET @K1 = 1.2;
SET @B …Run Code Online (Sandbox Code Playgroud)