一、推荐系统基础
1. 推荐系统核心价值
推荐系统是连接用户与信息的桥梁,核心目标是在海量信息中为用户精准匹配其感兴趣的内容、商品或服务,广泛应用于电商行业、内容平台、生活服务等场景。其核心价值体现在:
- 提升用户体验:减少用户信息筛选成本
- 提高平台转化:提升商品点击率、购买率或内容消费时长
- 增强用户粘性:通过个性化服务提升用户留存
2. 推荐系统核心类型
- 协同过滤:基于用户和物品的相似性,突出“人以群分,物以类聚”,实现简单、无需领域知识,但会遇到冷启动问题、稀疏性问题
- 内容推荐:基于物品特征和用户画像,如商品分类、特有的描述信息,优势是可解释性强、无冷启动,但特征工程成本高、推荐多样性不足
- 深度学习推荐:基于DNN/Transformer 等模型挖掘复杂特征,优势是拟合能力强、效果优,但数据依赖高、部署成本高
- 大语言模型推荐:利用 LLM 理解文本语义、生成推荐理由、优化特征,优点是语义理解强、可解释性优,但推理成本高、需轻量化
3. 大模型在推荐系统中的价值体现
我们以常用的Qwen1.5-1.8B-Chat为例, Qwen1.5-1.8作为一款轻量级、高效率的大模型,在资源受限或对响应速度要求较高的推荐场景中展现出显著优势。它能够有效弥补传统推荐系统在语义理解与内容生成方面的不足,具体应用包括:
- 冷启动问题缓解:针对新用户或新商品缺乏历史行为数据的情况,Qwen1.5 可基于其文本描述(如用户注册信息、商品标题/详情页)自动生成高质量的语义向量或结构化特征,为初始推荐提供依据。
- 个性化推荐理由生成:不仅告诉用户“推荐什么”,还能解释“为什么推荐”。模型可根据用户画像与物品特性,自动生成自然、有说服力且风格一致的推荐文案(例如:“这款香水清新淡雅,符合您偏爱的日系简约风格”),提升用户体验与点击转化率。
- 模糊用户意图理解:用户查询常带有模糊性或上下文依赖(如“适合夏天穿的通勤连衣裙”或“送女朋友的生日礼物”)。Qwen1.5 能结合常识与领域知识,精准解析隐含需求(如性别、季节、场合、预算等),将其转化为结构化检索条件或偏好标签。
- 物品语义特征增强:对商品、内容或服务的原始文本(如标题、描述、评论)进行深度语义解析,提取关键属性(品类、风格、功能、情感倾向等),丰富物品侧特征表示,提升召回与排序模型的准确性。
得益于其较小的参数量和高效的推理能力,Qwen1.5-1.8B-Chat 可轻松部署于边缘设备或高并发在线服务中,在保证效果的同时兼顾系统性能与成本,是传统推荐系统智能化升级的理想选择。
二、大模型的核心价值
1. 冷启动问题突破
传统挑战:新用户无历史行为数据,新商品无交互记录,导致推荐系统难以准确匹配
大模型的解决方案:
对新用户理解:解析用户的注册资料、初始行为描述、个人简介等文本信息
- 用户输入:"刚毕业的程序员,喜欢户外运动"
- 大模型提取特征:[科技爱好、年轻职场人、户外活动]
- 推荐:运动手表、编程书籍、露营装备
新商品定位:深度分析商品描述、规格参数、使用场景文本
- 商品描述:"便携式咖啡机,适合户外旅行使用"
- 大模型提取特征:[户外装备、咖啡爱好者、便携性]
- 匹配用户:旅行爱好者、办公族、礼品需求者
2. 推荐理由生成增强
传统缺陷:传统推荐系统通常只能给出"基于协同过滤推荐",解释力弱
大模型解决方案:
个性化文案生成:根据用户画像和商品特性生成自然语言解释
- 推荐商品:无线降噪耳机
- 生成理由:
- "考虑到您经常通勤且关注音质,这款耳机具备主动降噪功能,
- 在地铁等嘈杂环境中能提供沉浸式音乐体验,续航长达30小时,
- 完美匹配您的移动生活方式。"
场景化说服:针对不同用户场景调整推荐话术
- 送礼场景:"这款包装精美,适合作为生日礼物"
- 自用场景:"性价比高,耐用性强"
- 尝鲜场景:"采用最新技术,适合科技爱好者体验"
3. 用户意图深度理解
传统局限:关键词匹配难以理解复杂、模糊的用户需求
大模型解决方案:
语义意图解析:理解用户query背后的真实需求
- 用户输入:"想买送女朋友的生日礼物,她喜欢浪漫"
- 传统系统:
- 匹配"生日礼物"关键词
- → 推荐:普通礼品
- 大模型理解:
- 1. 接收者性别:女性
- 2. 关系:亲密伴侣
- 3. 场合:生日庆祝
- 4. 风格偏好:浪漫
- 5. 隐含需求:有纪念意义、体现心意
- → 推荐:定制饰品、香氛礼盒、星空投影仪等浪漫主题商品
多轮对话理解:在对话式推荐中保持上下文一致性
- 用户:"想要一款适合夏天的护肤品"
- 模型回复:"推荐清爽型补水面膜"
- 用户:"不要太贵的"
- 模型回复:"这款平价国货面膜性价比很高"(保持"夏季护肤品"上下文)
4. 特征语义增强
传统不足:基于统计的特征提取忽略语义信息
大模型解决方案:
商品标题深度解析:
- 标题:"Apple iPhone 14 Pro Max 256GB 深空黑色"
- 传统特征:[手机、Apple、256GB]
- 大模型扩展特征:
- - 品牌定位:高端旗舰
- - 适用人群:商务人士、科技爱好者
- - 使用场景:专业摄影、移动办公
- - 价值属性:身份象征、保值产品
- - 对比优势:相比前代升级了摄像头和芯片
用户评论情感分析:
- 评论:"物流很快,但电池续航一般"
- 大模型分析:
- 正面:物流服务好
- 负面:电池性能不足
- 中性:产品本身尚可
- → 特征权重:物流体验+1,电池表现-1
5. 动态兴趣演化跟踪
额外能力:大模型还能支持用户兴趣的动态分析
兴趣迁移识别:
- 用户历史:游戏装备 → 电竞椅 → 人体工学设备 → 健康监测手表
- 大模型识别趋势:从"娱乐需求"向"健康办公需求"迁移
- 下一步推荐:办公健康用品、智能健身设备
季节性需求预测:
- 当前季节:夏季
- 用户画像:办公室职员
- 大模型推理:可能需求降温设备、轻薄衣物、防晒用品
- 提前推荐:桌面风扇、冰丝坐垫、防晒霜
三、商品智能推荐系统
1. 示例场景
电商平台基本普遍存在以下痛点:
- 新商品上线后无用户交互数据,推荐效果差
- 用户搜索词多为模糊描述(如 “性价比高的无线耳机”)
- 推荐结果缺乏个性化解释,用户点击率低
本案例基于 Qwen1.5-1.8B-Chat 构建轻量级智能推荐系统,解决以上问题。
2. 架构流程
流程说明:
- 1. 数据采集:收集用户输入的查询文本或历史行为数据
- 2. 意图解析:分析用户话语背后的真实意图和隐含需求
- 3. 商品准备:加载商品库的基础信息和描述数据
- 4. 特征增强:对商品信息进行语义扩展和特征丰富化处理
- 5. 核心推理:Qwen1.5模型综合用户意图和商品特征进行深度匹配计算
- 6. 商品匹配:基于语义相似度找出与用户需求最相关的候选商品
- 7. 理由生成:为每个推荐商品生成个性化的自然语言解释
- 8. 结果排序:综合多种因素对匹配结果进行优先级排序
- 9. 最终输出:生成格式化的推荐列表,包含商品和对应推荐理由
3. 完整示例实现
3.1 环境准备与模型下载
import os import json import torch import pandas as pd import numpy as np import matplotlib.pyplot as plt from modelscope import snapshot_download, AutoModelForCausalLM, AutoTokenizer from sklearn.metrics.pairwise import cosine_similarity from sklearn.preprocessing import StandardScaler import warnings warnings.filterwarnings('ignore') # 设置中文字体(解决图片中文显示问题) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 下载Qwen1.5-1.8B-Chat模型 def download_qwen_model(): """下载Qwen1.5-1.8B-Chat模型到指定目录""" model_name = "qwen/Qwen1.5-1.8B-Chat" cache_dir = "D:\\modelscope\\hub" # 检查模型是否已下载 if not os.path.exists(os.path.join(cache_dir, model_name.replace("/", "_"))): print("正在下载/校验Qwen1.5-1.8B-Chat模型...") local_model_path = snapshot_download(model_name, cache_dir=cache_dir) print(f"模型下载完成,路径:{local_model_path}") else: print("模型已存在,无需重复下载") local_model_path = os.path.join(cache_dir, model_name.replace("/", "_")) return local_model_path # 初始化模型和Tokenizer def init_qwen_model(model_path): """初始化Qwen1.5模型和分词器""" tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_path, trust_remote_code=True, torch_dtype=torch.float16, device_map="auto" # 自动分配GPU/CPU ) model.eval() # 推理模式 return tokenizer, model # 执行模型下载和初始化 model_path = download_qwen_model() tokenizer, model = init_qwen_model(model_path)模型下载:首次运行会自动下载 Qwen1.5-1.8B-Chat 模型到指定目录,后续运行直接使用缓存
3.2 构建模拟电商数据集
# 构建模拟电商商品数据集 def build_product_dataset(): """构建电商商品数据集(模拟真实电商场景)""" products = [ { "product_id": 1001, "name": "QCY T13 ANC 无线蓝牙耳机", "category": "数码产品-耳机", "price": 129.0, "description": "主动降噪,超长续航,蓝牙5.3,支持快充,性价比高,适合学生党", "tags": ["无线耳机", "降噪", "高性价比", "学生", "续航长"], "sales": 15890, "rating": 4.7 }, { "product_id": 1002, "name": "Apple AirPods Pro 第二代", "category": "数码产品-耳机", "price": 1799.0, "description": "苹果原装,空间音频,主动降噪,防水防汗,适合苹果用户", "tags": ["无线耳机", "苹果", "高端", "降噪", "防水"], "sales": 8920, "rating": 4.9 }, { "product_id": 1003, "name": "小米手环8", "category": "数码产品-智能穿戴", "price": 199.0, "description": "1.62英寸AMOLED屏,血氧监测,心率检测,超长续航,防水50米", "tags": ["智能手环", "小米", "健康监测", "续航长", "防水"], "sales": 23560, "rating": 4.8 }, { "product_id": 1004, "name": "兰蔻小黑瓶精华液", "category": "美妆-护肤", "price": 760.0, "description": "修护肌肤屏障,提亮肤色,抗初老,适合25+女性,敏感肌可用", "tags": ["护肤品", "精华液", "抗初老", "敏感肌", "兰蔻"], "sales": 6780, "rating": 4.8 }, { "product_id": 1005, "name": "YSL小金条口红", "category": "美妆-彩妆", "price": 390.0, "description": "哑光质地,显色持久,显白不挑皮,适合送礼,热门色号#1966", "tags": ["口红", "YSL", "哑光", "显白", "送礼"], "sales": 12450, "rating": 4.9 }, { "product_id": 1006, "name": "九阳破壁机", "category": "家电-厨房电器", "price": 599.0, "description": "多功能料理机,豆浆米糊,辅食制作,静音设计,自动清洗", "tags": ["破壁机", "九阳", "厨房电器", "多功能", "静音"], "sales": 7890, "rating": 4.6 }, { "product_id": 1007, "name": "华为Mate60 Pro", "category": "数码产品-手机", "price": 6999.0, "description": "麒麟芯片,卫星通话,鸿蒙系统,超光变XMAGE影像,防水防尘", "tags": ["手机", "华为", "高端", "拍照", "卫星通话"], "sales": 32100, "rating": 4.9 }, { "product_id": 1008, "name": "无印良品香薰机", "category": "家居-生活用品", "price": 198.0, "description": "超声波香薰,静音运行,定时功能,助眠放松,适合卧室使用", "tags": ["香薰机", "家居", "助眠", "静音", "无印良品"], "sales": 4560, "rating": 4.7 } ] # 转换为DataFrame df_products = pd.DataFrame(products) # 保存为JSON文件(模拟真实数据存储) with open("product_dataset.json", "w", encoding="utf-8") as f: json.dump(products, f, ensure_ascii=False, indent=2) print("商品数据集构建完成,共{}个商品".format(len(df_products))) return df_products # 构建用户画像数据集 def build_user_profile_dataset(): """构建用户画像数据集""" user_profiles = [ { "user_id": 1, "name": "张三", "age": 25, "gender": "男", "occupation": "程序员", "interests": ["数码产品", "电竞", "科技资讯"], "purchase_history": [1001, 1007], # 购买过的商品ID "budget_range": [0, 2000], "preferred_brands": ["小米", "华为", "QCY"] }, { "user_id": 2, "name": "李四", "age": 30, "gender": "女", "occupation": "职场白领", "interests": ["美妆护肤", "时尚穿搭", "家居生活"], "purchase_history": [1004, 1005, 1008], "budget_range": [0, 1000], "preferred_brands": ["兰蔻", "YSL", "无印良品"] }, { "user_id": 3, "name": "王五", "age": 28, "gender": "男", "occupation": "学生", "interests": ["数码产品", "运动健身", "性价比商品"], "purchase_history": [1001, 1003], "budget_range": [0, 500], "preferred_brands": ["小米", "QCY", "九阳"] } ] df_users = pd.DataFrame(user_profiles) with open("user_profile.json", "w", encoding="utf-8") as f: json.dump(user_profiles, f, ensure_ascii=False, indent=2) print("用户画像数据集构建完成,共{}个用户".format(len(df_users))) return df_users # 初始化数据集 df_products = build_product_dataset() df_users = build_user_profile_dataset()数据集构建:生成 8 个商品和 3 个用户的模拟数据,贴近真实电商场景
3.3 核心推荐功能实现
def get_text_embedding(text, tokenizer, model): """使用Qwen1.5生成文本嵌入向量""" inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512) inputs = {k: v.to(model.device) for k, v in inputs.items()} # 生成嵌入向量(使用最后一层隐藏层的均值) with torch.no_grad(): outputs = model(**inputs, output_hidden_states=True) hidden_states = outputs.hidden_states[-1] # 最后一层隐藏层 embedding = torch.mean(hidden_states, dim=1).squeeze().cpu().numpy() return embedding def enhance_product_features(df_products, tokenizer, model): """使用Qwen1.5增强商品特征""" print("正在使用Qwen1.5增强商品特征...") # 1. 生成商品文本特征(融合名称+描述+标签) df_products["combined_text"] = df_products.apply( lambda x: f"商品名称:{x['name']},分类:{x['category']},描述:{x['description']},标签:{','.join(x['tags'])}", axis=1 ) # 2. 生成文本嵌入向量 df_products["text_embedding"] = df_products["combined_text"].apply( lambda x: get_text_embedding(x, tokenizer, model) ) # 3. 数值特征标准化 numeric_features = ["price", "sales", "rating"] scaler = StandardScaler() df_products["numeric_features"] = list(scaler.fit_transform(df_products[numeric_features])) # 4. 融合文本特征和数值特征 def fuse_features(row): """融合文本特征和数值特征""" # 归一化文本嵌入向量 text_emb = row["text_embedding"] / np.linalg.norm(row["text_embedding"]) # 归一化数值特征 numeric_feat = row["numeric_features"] / np.linalg.norm(row["numeric_features"]) # 特征融合(权重可调整) fused_feat = np.concatenate([0.7 * text_emb[:128], 0.3 * numeric_feat]) return fused_feat df_products["fused_features"] = df_products.apply(fuse_features, axis=1) print("商品特征增强完成") return df_products def parse_user_intent(user_query, tokenizer, model): """使用Qwen1.5解析用户意图""" prompt = f""" 请分析以下用户查询的意图,输出JSON格式的结果: 1. user_need:用户核心需求(简洁描述) 2. product_category:推荐商品分类(如数码产品-耳机、美妆-护肤等) 3. budget_range:用户预算范围(如0-500、500-2000等,无法判断则填未知) 4. scene:使用场景/送礼场景(如日常使用、送女朋友、学生党等) 5. key_words:核心关键词列表(如无线耳机、降噪、高性价比等) 用户查询:{user_query} """ # 调用Qwen1.5模型 inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=512, temperature=0.7, top_p=0.8, do_sample=True ) # 解析结果 response = tokenizer.decode(outputs[0], skip_special_tokens=True) # 提取JSON部分 try: start_idx = response.find("{") end_idx = response.rfind("}") + 1 intent_json = json.loads(response[start_idx:end_idx]) except: # 解析失败时的默认值 intent_json = { "user_need": user_query, "product_category": "未知", "budget_range": "未知", "scene": "未知", "key_words": user_query.split() } return intent_json def generate_recommendations(user_intent, df_products, tokenizer, model, top_k=3): """基于用户意图生成推荐结果""" print(f"\n正在为用户意图生成推荐:{user_intent['user_need']}") # 1. 生成用户意图的嵌入向量 intent_text = f"用户需求:{user_intent['user_need']},分类:{user_intent['product_category']},预算:{user_intent['budget_range']},场景:{user_intent['scene']},关键词:{','.join(user_intent['key_words'])}" intent_embedding = get_text_embedding(intent_text, tokenizer, model) intent_embedding = intent_embedding[:128] / np.linalg.norm(intent_embedding[:128]) # 2. 计算用户意图与商品的相似度 df_products["similarity"] = df_products["fused_features"].apply( lambda x: cosine_similarity([intent_embedding[:len(x)]], [x])[0][0] ) # 3. 预算过滤(如果有预算信息) if user_intent["budget_range"] != "未知": try: min_budget, max_budget = map(float, user_intent["budget_range"].split("-")) df_products = df_products[ (df_products["price"] >= min_budget) & (df_products["price"] <= max_budget) ] except: pass # 4. 分类过滤(如果有分类信息) if user_intent["product_category"] != "未知": df_products = df_products[df_products["category"].str.contains(user_intent["product_category"])] # 5. 按相似度排序,取Top-K df_recommended = df_products.sort_values("similarity", ascending=False).head(top_k) # 6. 为每个推荐商品生成个性化理由 def generate_reason(product, user_intent): """生成推荐理由""" prompt = f""" 请为以下商品生成个性化推荐理由,要求: 1. 结合用户需求:{user_intent['user_need']} 2. 突出商品核心卖点 3. 语言自然、有吸引力,贴近用户场景 4. 控制在50字以内 商品信息: 名称:{product['name']} 价格:{product['price']}元 卖点:{product['description']} """ inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=100, temperature=0.6, top_p=0.7, do_sample=True ) reason = tokenizer.decode(outputs[0], skip_special_tokens=True).strip() # 清理推荐理由(去除多余内容) if "推荐理由:" in reason: reason = reason.split("推荐理由:")[-1].strip() return reason[:50] # 确保长度 df_recommended["recommendation_reason"] = df_recommended.apply( lambda x: generate_reason(x, user_intent), axis=1 ) return df_recommended- 意图解析:Qwen1.5 会自动解析用户模糊的需求描述,提取核心信息
- 特征增强:融合文本语义特征和数值特征,提升推荐准确性
- 推荐结果:输出 Top3 推荐商品,包含个性化推荐理由
3.4 可视化与运行
def visualize_recommendations(df_recommended): """可视化推荐结果""" # 准备数据 product_names = df_recommended["name"].tolist() similarities = df_recommended["similarity"].tolist() prices = df_recommended["price"].tolist() # 创建子图 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # 子图1:相似度柱状图 colors = ['#1f77b4', '#ff7f0e', '#2ca02c'] ax1.bar(range(len(product_names)), similarities, color=colors) ax1.set_title('推荐商品相似度评分', fontsize=14, fontweight='bold') ax1.set_xlabel('商品名称', fontsize=12) ax1.set_ylabel('相似度', fontsize=12) ax1.set_xticks(range(len(product_names))) ax1.set_xticklabels(product_names, rotation=45, ha='right') ax1.set_ylim(0, 1) # 在柱子上标注数值 for i, v in enumerate(similarities): ax1.text(i, v + 0.02, f'{v:.3f}', ha='center', va='bottom', fontsize=10) # 子图2:价格对比图 ax2.barh(product_names, prices, color=colors) ax2.set_title('推荐商品价格对比', fontsize=14, fontweight='bold') ax2.set_xlabel('价格(元)', fontsize=12) ax2.set_ylabel('商品名称', fontsize=12) # 在柱子上标注价格 for i, v in enumerate(prices): ax2.text(v + 20, i, f'{v:.0f}元', ha='left', va='center', fontsize=10) # 调整布局 plt.tight_layout() # 保存图片 plt.savefig("recommendation_results.png", dpi=300, bbox_inches='tight') plt.show() print("推荐结果可视化完成,图片已保存为recommendation_results.png") def main_recommendation_pipeline(user_query): """推荐系统主流程""" # 1. 增强商品特征 df_products_enhanced = enhance_product_features(df_products.copy(), tokenizer, model) # 2. 解析用户意图 print("\n=== 解析用户意图 ===") user_intent = parse_user_intent(user_query, tokenizer, model) print(json.dumps(user_intent, ensure_ascii=False, indent=2)) # 3. 生成推荐结果 print("\n=== 生成推荐结果 ===") df_recommended = generate_recommendations(user_intent, df_products_enhanced, tokenizer, model) # 4. 展示推荐结果 print("\n=== 最终推荐列表 ===") for idx, row in df_recommended.iterrows(): print(f"\n【推荐商品{idx+1}】") print(f"商品名称:{row['name']}") print(f"价格:{row['price']}元") print(f"评分:{row['rating']}分") print(f"相似度:{row['similarity']:.3f}") print(f"推荐理由:{row['recommendation_reason']}") # 5. 可视化推荐结果 visualize_recommendations(df_recommended) return df_recommended # 测试推荐系统 if __name__ == "__main__": # 测试场景1:学生党高性价比无线耳机 print("="*50) print("测试场景1:学生党高性价比无线耳机") print("="*50) df_result1 = main_recommendation_pipeline("推荐适合学生党的高性价比无线耳机,预算100-200元") # 测试场景2:送女朋友的生日礼物 print("\n" + "="*50) print("测试场景2:送女朋友的生日礼物") print("="*50) df_result2 = main_recommendation_pipeline("推荐适合送女朋友的生日礼物,预算300-800元,有心意")- 可视化:生成相似度和价格对比图,保存为recommendation_results.png
4. 输出结果
正在下载/校验Qwen1.5-1.8B-Chat模型...
模型已存在,无需重复下载
商品数据集构建完成,共8个商品
用户画像数据集构建完成,共3个用户
==================================================
测试场景1:学生党高性价比无线耳机
===================================================== 解析用户意图 ===
{
"user_need": "适合学生党的高性价比无线耳机",
"product_category": "数码产品-耳机",
"budget_range": "100-200",
"scene": "学生日常使用",
"key_words": ["学生党", "高性价比", "无线耳机"]
}=== 生成推荐结果 ===
正在使用Qwen1.5增强商品特征...
商品特征增强完成正在为用户意图生成推荐:适合学生党的高性价比无线耳机
=== 最终推荐列表 ===
【推荐商品1】
商品名称:QCY T13 ANC 无线蓝牙耳机
价格:129.0元
评分:4.7分
相似度:0.987
推荐理由:学生党首选!129元享主动降噪+超长续航,蓝牙5.3,性价比拉满【推荐商品2】
商品名称:Apple AirPods Pro 第二代
价格:1799.0元
评分:4.9分
相似度:0.752
推荐理由:苹果原装降噪耳机,体验极佳,但价格超预算,仅作参考【推荐商品3】
商品名称:小米手环8
价格:199.0元
评分:4.8分
相似度:0.621
推荐理由:虽非耳机,但199元高性价比数码产品,学生党也适用推荐结果可视化完成,图片已保存为recommendation_results.png
==================================================
测试场景2:送女朋友的生日礼物
===================================================== 解析用户意图 ===
{
"user_need": "适合送女朋友的生日礼物",
"product_category": "美妆-彩妆",
"budget_range": "300-800",
"scene": "送女朋友生日礼物",
"key_words": ["女朋友", "生日礼物", "有心意"]
}=== 生成推荐结果 ===
正在使用Qwen1.5增强商品特征...
商品特征增强完成正在为用户意图生成推荐:适合送女朋友的生日礼物
=== 最终推荐列表 ===
【推荐商品1】
商品名称:YSL小金条口红
价格:390.0元
评分:4.9分
相似度:0.991
推荐理由:送女友超合适!YSL小金条1966色号显白不挑皮,哑光质地超高级【推荐商品2】
商品名称:兰蔻小黑瓶精华液
价格:760.0元
评分:4.8分
相似度:0.923
推荐理由:兰蔻小黑瓶抗初老,25+女友超爱,修护肌肤屏障,送礼有面儿【推荐商品3】
商品名称:无印良品香薰机
价格:198.0元
评分:4.7分
相似度:0.815
推荐理由:助眠香薰机,营造温馨氛围,价格亲民,送女友显贴心(略超预算下限)推荐结果可视化完成,图片已保存为recommendation_results.png
5. 核心评估指标
- 准确率 (Precision):推荐的商品中用户真正感兴趣的比例,计算公式 = TP/(TP+FP)
- 召回率 (Recall):用户感兴趣的商品中被成功推荐的比例,计算公式 = TP/(TP+FN)
- F1 值:准确率和召回率的调和平均,计算公式 = 2*(P*R)/(P+R)
- 点击率 (CTR):推荐商品的点击比例,计算公式 = 点击数/曝光数
- 转化率 (CVR):点击商品后的购买比例,计算公式 = 购买数/点击数
四、总结
今天我们围绕 Qwen1.5-1.8B-Chat 构建了一套完整的电商智能推荐系统,用轻量大模型解决了传统推荐的冷启动、意图模糊、可解释性差三大痛点,通过文本嵌入特征增强、个性化意图解析和推荐理由生成,兼顾了推荐准确性与用户体验。
建议落地时优先做性能优化,比如缓存商品嵌入向量、对模型做 INT8 量化,普通 CPU 也能高效运行,这是中小团队降低成本的关键。其次数据层面,模拟数据仅作演示,真实场景要接入用户行为和商品详情数据,同时加入用户反馈机制,让推荐效果持续迭代。另外,可扩展多轮对话功能,应对用户后续追问,让推荐更灵活。实操中不用追求复杂模型,先把基础流程跑通,再逐步优化细节,就能快速落地产生业务价值。