在这个信息爆炸的时代,如何从海量的信息中筛选出用户感兴趣的新闻成为了一个重要的问题。随着人工智能技术的发展,特别是像阿里云的通义千问或其他大模型这样的大模型的出现,为构建高效的新闻推荐系统提供了新的可能性。本文将详细介绍如何利用通义千问或其他大模型构建一个新闻推荐系统,从数据准备到推荐结果输出的全过程。
一、新闻推荐系统的整体架构
为了构建一个高效的新闻推荐系统,我们的实现方案大致分为以下几个步骤:
-
对新闻文章进行标签化,并将新闻内容和标签向量化存储。
-
通过用户画像,捕捉用户的阅读历史和行为习惯,如点赞、收藏、点击的文章等。
-
根据用户画像和行为在文章库中进行初步搜索(召回)。
-
对召回结果进行精排,考虑用户兴趣变化、文章来源、时效性等因素。
-
输出Top 10的个性化推荐文章。
接下来,我们将详细说明各个步骤的技术细节及实现方案。
二、数据准备
构建推荐系统的第一步是准备数据。我们需要获取新闻数据和用户行为日志。新闻数据包括新闻的ID、类别、标题、摘要等信息;用户行为日志则记录了用户的点击历史和展示历史。
2.1 读取新闻数据
首先,我们需要读取新闻数据文件 news.tsv,并将其转换为Pandas DataFrame格式。
import pandas as pd
# 读取新闻数据
news_df = pd.read_csv('news.tsv', sep='\t', header=None, names=['news_id', 'category', 'subcategory', 'title', 'abstract', 'url', 'title_entities', 'abstract_entities'])
# 查看前几行数据
print(news_df.head())
2.2 读取用户行为日志
接下来,我们需要读取用户行为日志文件 behaviors.tsv,并将其转换为Pandas DataFrame格式。
# 读取用户行为日志
behavior_df = pd.read_csv('behaviors.tsv', sep='\t', header=None, names=['impression_id', 'user_id', 'time', 'history', 'impressions'])
# 查看前几行数据
print(behavior_df.head())
三、新闻推荐实现方案
我们将通过以下步骤构建高效的新闻推荐系统,结合通义千问或其他大模型的大模型能力,完成从数据处理、用户画像生成到推荐结果的全过程。
3.1 已有的文章进行打标签
为了更好地理解和处理新闻内容,我们需要对已有文章进行打标签。标签可以帮助我们更精确地召回和排序新闻。
3.1.1 设计打标签Prompt
设计一个合适的Prompt,告诉通义千问或其他大模型我们需要生成的标签类型。
from qwen import QwenClient
# 初始化通义千问客户端
client = QwenClient(api_key='YOUR_API_KEY')
def tag_articles(articles, client):
tagged_articles = []
for article in articles:
prompt = f"为以下文章生成标签:\n类别: {article['category']}, 子类别: {article['subcategory']}, 标题: {article['title']}, 摘要: {article['abstract']}\n请生成相关的标签。"
# 调用通义千问生成标签
response = client.generate(prompt)
tags = response.strip().split(',')
tagged_articles.append({**article, 'tags': tags})
return tagged_articles
3.1.2 应用打标签函数
将打标签函数应用于新闻数据,生成带有标签的新闻数据。
# 示例:为新闻文章打标签
tagged_news_df = tag_articles(news_df.to_dict('records'), client)
tagged_news_df = pd.DataFrame(tagged_news_df)
# 查看带有标签的新闻数据
print(tagged_news_df.head())
3.2 用户画像
用户画像是推荐系统的核心部分之一。通过分析用户的点击历史和用户行为(如收藏、点赞、点击),我们可以生成用户的兴趣画像,从而更好地理解用户的偏好。
3.2.1 设计生成用户画像Prompt
设计一个合适的Prompt,告诉通义千问或其他大模型我们需要生成的用户画像信息。
def generate_user_profile(user_history, client):
# 将用户点击过的新闻详细信息拼接成一段长文本
history_news = tagged_news_df[tagged_news_df['news_id'].isin(user_history)]
history_text = ' '.join(history_news['title'] + ' ' + history_news['abstract'].fillna(''))
# 设计prompt
prompt = f"基于以下用户点击历史,生成一个用户画像,描述用户感兴趣的新闻主题和地区。\n点击历史:\n{history_text}\n请描述用户的兴趣主题和关注地区。"
# 调用通义千问生成用户画像
response = client.generate(prompt)
user_profile = response.strip()
return user_profile
3.2.2 应用生成用户画像函数
将生成用户画像函数应用于用户点击历史,生成用户的兴趣画像。
# 示例:生成用户画像
user_history = ['N1', 'N2', 'N3'] # 假设这是某个用户的点击历史
user_profile = generate_user_profile(user_history, client)
# 输出用户画像
print(user_profile)
3.3 搜索召回
在生成用户画像后,我们需要根据用户的兴趣以及用户的行为(收藏、点赞、看过的文章等),从新闻库中召回一批与用户兴趣匹配的候选新闻。
3.3.1 设计召回候选新闻Prompt
设计一个合适的Prompt,告诉通义千问或其他大模型我们需要召回的候选新闻。
def recall_candidate_news(user_profile, tagged_news_df, client):
# 设计prompt
prompt = f"基于以下用户画像,从新闻库中召回一批与用户兴趣匹配的新闻。\n用户画像:\n{user_profile}\n新闻库:\n{tagged_news_df.to_json(orient='records')}\n请从新闻库中选出与用户兴趣匹配的新闻。"
# 调用通义千问召回候选新闻
response = client.generate(prompt)
candidate_news_ids = response.strip().split('\n')
# 获取召回的候选新闻
candidate_news = tagged_news_df[tagged_news_df['news_id'].isin(candidate_news_ids)]
return candidate_news
3.3.2 应用召回候选新闻函数
将召回候选新闻函数应用于用户画像,获取候选新闻。
# 示例:召回候选新闻
candidate_news = recall_candidate_news(user_profile, tagged_news_df, client)
# 输出召回的候选新闻
print(candidate_news)
3.4 精排
召回候选新闻后,我们需要根据用户兴趣的细微变化、新闻的时效性、来源等因素进行精细排序,以确保推荐结果的相关性。
3.4.1 设计评分和排序Prompt
设计一个合适的Prompt,告诉通义千问或其他大模型我们需要对候选新闻进行评分和排序。
def score_and_rank_news(user_profile, candidate_news, client):
# 设计prompt
candidate_news_json = candidate_news.to_json(orient='records')
prompt = f"基于以下用户画像,对以下候选新闻进行评分,并按评分从高到低排序。\n用户画像:\n{user_profile}\n候选新闻:\n{candidate_news_json}\n请对这些候选新闻进行评分,并按评分从高到低排序。"
# 调用通义千问进行评分和排序
response = client.generate(prompt)
scored_news = json.loads(response.strip())
# 将评分结果转换为DataFrame
scored_news_df = pd.DataFrame(scored_news)
scored_news_df = scored_news_df.sort_values(by='score', ascending=False)
return scored_news_df
3.4.2 应用评分和排序函数
将评分和排序函数应用于候选新闻,获取评分和排序后的新闻列表。
# 示例:评分和排序
scored_news = score_and_rank_news(user_profile, candidate_news, client)
# 输出评分和排序后的新闻列表
print(scored_news)
3.5 输出Top 10的文章
最后,我们将排序后的新闻列表展示给用户,输出Top 10的新闻。
# 输出推荐结果
top_n = 10
recommended_news = scored_news.head(top_n)
# 输出推荐的Top 10新闻
print(recommended_news[['news_id', 'title', 'score']])
四、总结
通过上述步骤,我们成功地利用通义千问或其他大模型构建了一个高效的新闻推荐系统。系统基于用户的阅读行为和兴趣生成用户画像,并通过召回和精排步骤,推荐最符合用户兴趣的新闻内容。未来,我们可以通过不断收集用户反馈、结合更细致的用户行为分析(如点赞、收藏等),进一步提升推荐系统的性能和用户体验。
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
学习路线
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓