在对社交网络新闻Feed项目进行排名时结合启发式方法

时间:2017-06-08 12:00:02

标签: machine-learning artificial-intelligence ranking data-science

我们有新闻Feed,我们希望根据多个条件向用户展示项目。某些项目将因为因子A而浮出水面,另一项因为因子B而浮出水面,而另一项因为因素C而浮出水面。我们可以为每个因素创建单独的启发式方法,但我们需要将这些启发式方法结合起来以促进最佳考虑每个因素的内容,同时仍然给出每个因素的混合内容。

我们天真的方法是从每个因子加载顶部n,取每个因子中的第一个,然后将它们作为Feed的前3个。然后从每个Feed中取第2个,然后在第3个中取出,依此类推。理想情况下,我们会有一些算法可以更智能地对这些Feed项进行排名 - 我们首先考虑的是简单地将三种启发式算法相加并使用得到的组合得分来拉出顶部项目,但不能保证启发式算法是均匀缩放的(或者对于特定用户而言是均匀缩放的,这可能导致一个因素占据馈送中的其他因素。是否有更智能的方式对这些新闻Feed项进行排名(类似于Facebook在其伪时间顺序新闻Feed中的作用)?

4 个答案:

答案 0 :(得分:6)

如果你的最终组合启发式不需要被允许,那么使用原始启发式的总和作为最终的启发式是没有害处的。这里的问题是原始启发式可能不具有相同的维度,例如A的值范围为0到100,B的值为-1到+1。我建议使用以下公式计算项目的组合启发式,忽略特定启发式的维度:

H = (A - min(A))/(max(A) - min(A)) + (B - min(B))/(max(B) - min(B)) + (C - min(C))/(max(C) - min(C))

当然,要查找每个启发式的minmax值,您需要了解每个启发式的含义。我不确定这会解决你的问题,但我希望能解决你的问题。

答案 1 :(得分:4)

我想补充一点Arne Van Den Kerchove - Normalization

我建议另一层:

  • 定义新的启发式方向:

    如果最佳A,B,C方向不同,例如最佳A低,但最佳B高。这种启发式算法是归一化因子平方的正平方根,因此越高越好。

  • 将允许根据金额合并用户响应 用户分配给每个指标的注意力(权重)。

以下是我的想法:

H = sqrt(
        alpha(
            ((A - min(A))/(max(A) - min(A)))^2
        ) + 
        beta(
            ((B - min(B))/(max(B) - min(B)))^2
        ) + 
        gamma(
            ((C - min(C))/(max(C) - min(C)))^2
        )
)

Alpha,beta和gamma是权重,将以[1,1,1]开头,除非您知道其中一个指标是首选。
这些权重应随每个用户响应而变化。

例如:

如果用户选择的排名如下:

Max(A)= 100 :       21 out of 100  in A - relative value is 0.21
Max(B)= 10,000 :    1234 out of 10,000 in B - relative value is 0.1234
Max(C)= 1 :         0.2 out of 1 in C - relative value is 0.2
Where all minima are 0.

您可以分别在alpha,beta和gamma的相对值之间添加一小部分差异。通过这种方式,您将获得动态评级,不仅可以计算您已经做过的因素,还可以根据用户的需要进行调整。

对于上面的示例,如果我们添加完全差异,则新的alpha,beta和gamma将分别为[1.0322,0.9456,1.0222]。 (从相对值[0.21,0.1234,0.2]中减去平均值(0.1778)并将结果添加到初始集[1,1,1])

这样,新的相关项目集将由用户的累积选择决定。

答案 2 :(得分:2)

你有很多类别。让我们说A,B和C.

将所有内容组合在一起并对其进行排名(您提到我们将使用一些算法来更智能地对这些Feed项进行排名),而不依赖于类别。

显示排名列表中的前4-5个项目,与类别无关。

如果您有赞助商的饲料项目(如Facebook),则显示排名最高的赞助饲料项目(如果排名为16,27,39等,则在5之后显示16)同样如此。

然后输入类别。

如果用户能够订阅类别,则根据类别显示帖子。

例如

A有10个项目说a1 ... a10

B有10个项目说b1 ... b10

同样C有10个项目说c1 ... c10

如果用户主要选择B类,则显示排名在b中排名第一,排名第6位,排名第二位于b,排名等等。

10-12项后,

根据排名顺序显示每个类别的项目。

如果用户未选择特定类别,则排名顺序应保持为8-10个项目,然后根据排名顺序从每个类别中进行选择。

侧尖

在实施新算法时,如果您从用户那里收集用户的反馈意见,这将始终有所帮助。

用户应先获取首选内容,然后获取每个类别中最重要的内容。

为此,请始终参考每个类别和每种类型的帖子的用户活动和浏览历史记录。

答案 3 :(得分:2)

我对Facebook不是很确定,但我看到了Netflix所做的一些事情,如果你有足够的标签数据(用户对你的启发式排名做出回应的历史记录),你可以尝试一下。它使用Matrix Factorization具有特殊的损失功能来获得排名,他们确实取得了非常好的结果! link to the presentation

如果这看起来如此复杂(并且在某种程度上),并且你有足够的数据来做MF,我建议你尝试并解释推断的数字作为你的排名指南。实际上,您预测的是您的用户对每个用户新闻Feed的亲和力,因此亲和力越高,排名越高,反之亦然。