Algorithm 新闻提要推荐引擎的优化

Algorithm 新闻提要推荐引擎的优化,algorithm,optimization,matching,recommendation-engine,bipartite,Algorithm,Optimization,Matching,Recommendation Engine,Bipartite,我想写一个推荐引擎来优化我想在我的应用程序中实现的新闻提要。它将基于用户在注册阶段选择的首选项 逻辑如下:用户注册,并从15个主题中选择一个或多个感兴趣的主题。在应用程序中,用户可以发布照片、文本等内容 我想将使用该应用程序的用户与来自用户的内容进行匹配,这些用户在注册阶段具有相同的偏好(或者具有称为C的高相关性指数) 为了做到这一点,我考虑实施一个“相关性”评分,该评分将附在每个帖子上 该分数的计算如下:分数=C(两个用户偏好之间的相关性指数)x p(发布内容的用户的受欢迎程度)x F(为了显

我想写一个推荐引擎来优化我想在我的应用程序中实现的新闻提要。它将基于用户在注册阶段选择的首选项

逻辑如下:用户注册,并从15个主题中选择一个或多个感兴趣的主题。在应用程序中,用户可以发布照片、文本等内容

我想将使用该应用程序的用户与来自用户的内容进行匹配,这些用户在注册阶段具有相同的偏好(或者具有称为C的高相关性指数)

为了做到这一点,我考虑实施一个“相关性”评分,该评分将附在每个帖子上

该分数的计算如下:分数=C(两个用户偏好之间的相关性指数)x p(发布内容的用户的受欢迎程度)x F(为了显示最近发布的内容,文章的新鲜度)。然后,新闻提要将显示每个用户提要中得分从高到低的帖子

这里的困难是为每一篇文章生成一个分数,每个新闻提要的分数都会有所不同,并在我们的数据库中进行翻译,以便发出正确数量的请求。我使用Expo(React Native)和Firestore作为数据库

这里有一个真实的例子:在注册阶段,我可以在5个感兴趣的主题中选择:体育、摄影、音乐、时尚和旅游。我选择了运动和旅行。在完成该阶段并结束应用程序的新闻订阅之后,我希望与主要与体育和旅行相关的内容相匹配(我们甚至不考虑对这里的主题进行加权)。因此,我想显示其他用户的内容,这些用户选择了完全相同的类别(相关性指数为1)或最接近的类别(这里的次优相关性指数为0,5)

然后我会从选择运动和旅行的人那里得到内容,然后从选择运动或旅行的人那里得到内容,然后从选择运动和旅行的人那里得到内容(每次都会降低我们的C指数)

当我阅读了大量关于分配问题算法、加权二部图和组合优化问题的文档时,如何将其转化为算法类,但我仍然被困在


谢谢您的时间,我非常感谢。

假设我们有两套A和B感兴趣:

定义相关性的一种方法可以是:

Correlation =  size(intersection(A, B)) / max( size(A), size(B) )
场景1:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5
场景2:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5
场景3:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5

假设我们有两个集A和B,有兴趣:

定义相关性的一种方法可以是:

Correlation =  size(intersection(A, B)) / max( size(A), size(B) )
场景1:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5
场景2:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5
场景3:

Exact match : A: { Sport, Travel } B : {Sports, Travel }

Correlation :=  size(Sport, travel) / 2 = 2/2 = 1
Exact match : A: { Sport, Travel } B : {Sports, Travel, Car, Dress, Movie }

Correlation :=  size(Sport, travel) / 5 = 2/5 = 0.4
Exact match : A: { Sport, Travel } B : {Sports}

Correlation :=  size(Sport, travel) / 2 = 1/2 = 0.5

如果有15个类别,那么用户的首选项可以表示为每个类别的1位“想要/不想要”标志。换句话说,用户的首选项可以是一个简单的15位整数

这同样适用于每个新闻项目——它可以被放入一个或多个类别,它所属的类别可以表示为另一个15位整数


如果对用户的首选项和新闻项所属的类别进行逐位AND运算;您可以计算结果中设置的位数。此设置位计数将为您提供从“新闻项匹配用户想要的所有类别”到“新闻项不匹配用户想要的任何类别”的分数。您可以使用此选项对新闻项目列表进行筛选和/或排序。

如果有15个类别,则用户的首选项可以表示为每个类别的1位“想要/不想要”标志。换句话说,用户的首选项可以是一个简单的15位整数

这同样适用于每个新闻项目——它可以被放入一个或多个类别,它所属的类别可以表示为另一个15位整数


如果对用户的首选项和新闻项所属的类别进行逐位AND运算;您可以计算结果中设置的位数。此设置位计数将为您提供从“新闻项匹配用户想要的所有类别”到“新闻项不匹配用户想要的任何类别”的分数。您可以使用它来过滤和/或排序新闻项目列表。

谢谢Sourabh,这是一种非常好的转换变量的方法,我肯定会这样想。你知道我如何实现这个数据库吗?因为每次有人刷新他们的新闻提要时都需要一个电话。你能提供更多关于你正在查看的用户数量的详细信息吗?谢谢你的帮助,Sourabh,很抱歉回复太晚,由于我们仍处于测试阶段,我们谈论的是少量用户,准确地说大约100人,但我们希望能够迅速扩大这一数字,这就是为什么我们希望实现一种更个性化的方式来向他们推送内容。感谢Sourabh,这是一种很好的转换变量的方法,我肯定会这样想。你知道我如何实现这个数据库吗?因为每次有人刷新他们的新闻提要时都需要一个电话。你能提供更多关于你正在查看的用户数量的详细信息吗?谢谢你的帮助,Sourabh,很抱歉回复太晚,由于我们仍在进行beta测试,我们谈论的是一小部分用户,准确地说是大约100人,但我们预计这个数字会很快扩大,这就是为什么我们希望实现一种更个性化的方式来向他们推送内容。这是一种非常聪明的思考方式,我认为您已经确定了我们需要实现的体系结构类型,使其尽可能简单,特别是在这将触发的数据库请求量方面。因此,对于每个帖子和每个用户Id,我们可以得到2^15种不同的可能性,我们只需要在