【AI大模型学习路线】第二阶段之RAG基础与架构——第十一章(【项目实战】基于RAG的新闻推荐)推荐中的召回与精排 ?

【AI大模型学习路线】第二阶段之RAG基础与架构------第十一章(【项目实战】基于RAG的新闻推荐)推荐中的召回与精排 ?

【AI大模型学习路线】第二阶段之RAG基础与架构------第十一章(【项目实战】基于RAG的新闻推荐)推荐中的召回与精排 ?


文章目录

  • [【AI大模型学习路线】第二阶段之RAG基础与架构------第十一章(【项目实战】基于RAG的新闻推荐)推荐中的召回与精排 ?](#【AI大模型学习路线】第二阶段之RAG基础与架构——第十一章(【项目实战】基于RAG的新闻推荐)推荐中的召回与精排 ?)
  • 前言
    • 一、召回(Retrieval)阶段
      • [1.1 向量检索](#1.1 向量检索)
      • [1.2 混合检索策略](#1.2 混合检索策略)
      • [1.3 多阶段召回](#1.3 多阶段召回)
    • 二、精排(Re-ranking)阶段
      • [2.1 Cross-Encoder 精排](#2.1 Cross-Encoder 精排)
      • [2.2 LLM 驱动重排](#2.2 LLM 驱动重排)
      • [2.3 多信号融合与在线学习](#2.3 多信号融合与在线学习)
    • [三、Python 核心示例](#三、Python 核心示例)

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX "学术会议小灵通"或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/147526990


前言

  • 基于 RAG 的新闻推荐系统通过"召回(Retrieval)"与"精排(Re-ranking)"两步实现高效且精准的内容推荐,先利用向量检索及混合检索策略从海量新闻中快速召回候选,再借助 Cross-Encoder 或大模型生成评分、融合多信号,对候选进行细粒度排序,从而显著提升推荐相关性与可解释性。

一、召回(Retrieval)阶段

1.1 向量检索

  • 系统首先将用户画像或查询文本编码为高维向量,然后在向量数据库(如 FAISS)中执行近邻搜索,快速返回 Top-K 最相关的新闻片段。

1.2 混合检索策略

  • 为了同时兼顾语义匹配与时效性,通常采用向量检索与关键词检索(如 BM25 或 ElasticSearch)并行,然后对结果集进行并集或交集操作,以满足主题过滤和时间窗口约束

1.3 多阶段召回

  • 在大规模新闻库中常用双编码器(Bi-encoder)模型进行第一阶段粗排,缩小候选集规模,再进入精排环节,以兼顾检索效率与召回率。

二、精排(Re-ranking)阶段

2.1 Cross-Encoder 精排

  • Cross-Encoder 将查询与候选文档拼接后输入同一 Transformer,深度建模二者间的注意力交互,并输出更精确的匹配分数,在 Top-K(< 20) 文档上效果显著优于双编码器。

2.2 LLM 驱动重排

  • 利用 GPT-4、LLaMA 等大模型对候选文档进行打分或生成排序理由,并根据生成置信度重排列表,兼顾多样性与可解释性,适用于需要自然语言解释的新闻推荐场景。

2.3 多信号融合与在线学习

  • 精排时可将初始检索分、Cross-Encoder 分数、LLM 生成置信度,以及业务特征(如 CTR 预估、源站点权威度)加权融合,并结合用户点击等在线反馈,动态调整权重,实现闭环优化

三、Python 核心示例

csharp 复制代码
from langchain.embeddings import SentenceTransformerEmbedding
from langchain.vectorstores import FAISS
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 1. 初始化检索(召回)
embedder = SentenceTransformerEmbedding(model_name="all-MiniLM-L6-v2")
news_docs = ["地震快讯 A ...", "空气质量报告 B ...", "..."]
vectors = embedder.embed_documents(news_docs)
faiss_index = FAISS.from_embeddings(vectors, news_docs)

# 2. 粗排召回 Top-K
query = "关注近三日地震与AOD异常新闻"
retriever = faiss_index.as_retriever(search_kwargs={"k": 10})
candidates = retriever.get_relevant_documents(query)

# 3. 精排重排(LLM 驱动)
llm = OpenAI(model="gpt-4", temperature=0.0)
template = PromptTemplate(
    input_variables=["query", "doc"],
    template=(
        "请基于用户意图"{query}",为以下新闻片段"{doc}"打分(1-10),并简要说明评分原因:"
    )
)
chain = LLMChain(llm=llm, prompt=template)

scored = []
for doc in candidates:
    output = chain.run({"query": query, "doc": doc.page_content})
    score = float(output.split("\n")[0].strip())  # 假设第一行为分数
    scored.append((doc.page_content, score))

# 4. 融合排序与输出
final = sorted(scored, key=lambda x: x[1], reverse=True)[:5]
for idx, (doc, score) in enumerate(final, 1):
    print(f"{idx}. (Score: {score}) {doc[:100]}...")
  • 以上流程展示了如何在 RAG 新闻推荐中,通过 FAISS 向量召回结合 LLM 重排,实现"召回+精排"协同,既保证了检索效率,又提升了排序精准度,为用户提供更相关且可解释的推荐结果。
相关推荐
zskj_zhyl40 分钟前
从“被动养老”到“主动健康管理”:平台如何重构代际关系?
大数据·人工智能·重构
奔跑吧邓邓子1 小时前
DeepSeek 赋能车路协同:智能交通的破局与重构
人工智能·应用·车路协同·智能交通·deepseek
不剪发的Tony老师1 小时前
sqlite-vec:谁说SQLite不是向量数据库?
数据库·人工智能·sqlite
白熊1882 小时前
【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
人工智能·机器学习
白总Server2 小时前
C++语法架构解说
java·网络·c++·网络协议·架构·golang·scala
pen-ai2 小时前
【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导
人工智能·深度学习·生成对抗网络
掘金-我是哪吒3 小时前
分布式微服务系统架构第142集:全栈开发
分布式·微服务·云原生·架构
简简单单做算法3 小时前
基于mediapipe深度学习的虚拟画板系统python源码
人工智能·python·深度学习·mediapipe·虚拟画板
qq_314009833 小时前
Windows+VSCode搭建小智(xiaozhi)开发环境
ide·人工智能·vscode·编辑器·开源软件
技术便签3 小时前
第一篇:揭示模型上下文协议(MCP):AI的通用连接器
人工智能·ai编程·language model·多智能体·智能体