2

我有一个文档列表,每个文档都有一个搜索查询的相关性分数。我需要较旧的文档来降低其相关性分数,以尝试在排名过程中引入它们的日期。我已经尝试过摆弄诸如 1/(1+date_difference) 之类的函数,但是倒数函数对于最近的日期来说太具有区分性了。

我在想可能是一个具有范围(0..1)和域(0..x)的数学函数来放大他们的分数,其中 x 轴是文档的年龄。最好通过图像解释我对该功能的进一步需求:

4

4 回答 4

1

如果一个简单的 1/(1+x) 下降得太快太快,那么像 1/(1+e^-x) 这样的sigmoid 函数或误差函数可能更适合您的目的。对于此类函数,让当前日期处于负数中的某个位置,您可以获得一个在某个可配置时间段内是当前的值,然后向基值递减。

于 2012-01-14T14:59:26.230 回答
1

衰减行为通常由指数函数很好地建模(自然界中的许多衰减过程也遵循它)。您将使用 2 个正参数AB得到

y(x) = A exp(-B x)

因为你想要一个y-range [0,1] set A=1。较大B的衰减较慢。

于 2012-01-14T15:08:07.930 回答
1
log((x+1)-age_of_document)

其中对数的底为 (x+1)。请注意,x 是根据您的图表,是“阈值”。如果文档的年龄大于 x,则分数变为负数。乘以最大可能分数以引入缩放。

例如,域 = (0,10),最高得分为 10:10*(log(11-x))/log(11)

于 2012-01-14T15:19:18.487 回答
0

有点晚了,但正如 thiton 所说,您可能想要使用 sigmoid 函数,因为它对您的长尾数据点具有“地板”值。例如:

0.8/(1+5^(x-3)) + 0.2 - 您可以调整常数 5 和 3 来控制曲线的斜率。0.2 是地板所在的位置。

于 2015-04-02T06:46:01.503 回答