排序
排序
Gorse 合并来自多个推荐器的推荐,并对它们进行排序以产生最终的推荐列表。
配置
type是排序器类型。支持的排序器是:query_template是大语言模型重排的查询模板。当type为llm时,此字段是必需的。模板支持以下变量:feedback是用户的历史反馈。
document_template是大语言模型重排的文档模板。当type为llm时,此字段是必需的。模板支持以下变量:items是要排序的推荐物品列表。
feedback 和 items 的类型定义。
feedback 的类型是:
type FeedbackItem struct {
FeedbackType string
ItemId string
IsHidden bool
Categories []string
Timestamp time.Time
Labels any
Comment string
}items 的类型是:
type Item struct {
ItemId string
IsHidden bool
Categories []string
Timestamp time.Time
Labels any
Comment string
}recommenders是其推荐被合并和排序的推荐器的名称。值应为以下之一:latest使用最新的物品推荐器。collaborative使用协同过滤推荐器。non-personalized/NAME使用名称为NAME的非个性化推荐器。item-to-item/NAME使用名称为NAME的物品到物品推荐器。user-to-user/NAME使用名称为NAME的用户到用户推荐器。
early_stopping.patience是在没有改进的情况下,因子分解机训练将停止的 epoch 数。默认为10。
示例
在演示项目 GitRec 中,因子分解机用于对来自多个推荐器的推荐物品进行排序:
- 来自最新物品推荐器的最新仓库。
- 协同过滤推荐。
- 来自非个性化推荐器的过去一周最受关注的仓库。
- 来自物品到物品推荐器的相似仓库。
- 来自用户到用户推荐器的相似用户的积极反馈中的仓库。
[recommend.ranker]
type = "fm"
recommenders = ["latest", "collaborative", "non-personalized/most_starred_weekly", "item-to-item/neighbors", "user-to-user/neighbors"]算法
因子分解机
与矩阵分解的学习算法不同,负反馈用于因子分解机训练。训练数据集由下式构成
输入向量 的维度是物品、用户、物品标签和用户标签数量的总和:。对于一对 , 中的每个元素定义为
输入向量 的预测输出是
其中必须估计的模型参数是:,,。而 是两个向量的点积。参数通过带有 SGD 的 logit 损失进行优化。损失函数是
每个参数的梯度是
大语言模型重排
最近的研究表明,大型语言模型(如 ChatGPT)可以通过提示词工程有效地执行推荐[2:1][3]。Gorse 利用这种能力,通过使用 LLM 根据用户反馈和物品信息对推荐物品进行排序。
在使用大语言模型重排器之前,必须在配置文件的 [recommend.ranker.reranker_api] 中配置 Reranker API。还必须在排序器配置中提供查询模板和文档模板。推荐 GitHub 仓库的一个示例模板如下:
- 查询模板
You are a GitHub repository recommender system. Given a user is interested in the following repositories:
{% for repo in feedback -%}
- {{ repo.Comment }}
{% endfor -%}
Please sort repositories by the user's interests.- 文档模板
{{ item.Comment | replace(",", " ") | replace("\n", " ") }}feedback 包含用户最近的反馈,items 包含要排序的推荐物品列表。feedback 的数量可以通过 recommend.context_size 控制。大语言模型重排器渲染查询模板和文档模板,然后将其发送到 Reranker API。然后解析响应以提取排序后的物品 ID 列表。
Rendle, Steffen. "Factorization machines." 2010 IEEE International conference on data mining. IEEE, 2010. ↩︎
Liu, Junling, et al. "Is chatgpt a good recommender? a preliminary study." arXiv preprint arXiv:2304.10149 (2023). ↩︎ ↩︎
Dai, Sunhao, et al. "Uncovering chatgpt’s capabilities in recommender systems." Proceedings of the 17th ACM Conference on Recommender Systems. 2023. ↩︎
