1. 项目概述:当向量计算遇上商品推荐
去年双十一期间,我们电商平台的商品搜索系统经历了严峻考验——当用户搜索"适合送女友的礼物"时,传统关键词匹配返回的结果简直是一场灾难。从情趣内衣到厨房刀具,这种令人尴尬的推荐背后,暴露了基于关键词匹配的搜索系统在语义理解上的致命缺陷。这正是我们引入DWS向量计算功能的契机。
华为云数据仓库服务DWS(Data Warehouse Service)最新推出的向量计算引擎,支持通过简单的SQL函数就能实现高维向量相似度计算。这意味着我们可以在现有数据仓库架构上,用不到200行代码构建出能理解"礼物"、"女友"等语义关联的智能推荐系统。实测显示,改造后的系统不仅使相关商品点击率提升37%,更将服务器资源消耗降低了60%。
2. 核心架构设计
2.1 向量化改造的技术路线
传统推荐系统通常采用协同过滤或内容匹配算法,需要维护复杂的特征工程管道。而我们的方案直接利用DWS的vector类型和vec_similarity函数,将商品信息转化为768维的语义向量。具体实现路径如下:
- 商品特征提取:使用开源的sentence-transformers/all-MiniLM-L6-v2模型,将商品标题、类目、标签等文本信息编码为向量
- 向量存储优化:利用DWS的列存表特性,将vector类型字段与商品基础信息同表存储
- 实时计算层:通过视图封装vec_similarity计算逻辑,对外提供标准SQL接口
-- 创建包含向量字段的商品表 CREATE TABLE products ( id BIGINT, name TEXT, category TEXT, tags TEXT[], embedding vector(768) -- 存储768维向量 ) WITH (ORIENTATION = COLUMN); -- 相似度计算示例 SELECT id, name FROM products ORDER BY vec_similarity(embedding, '[0.12,0.34,...,0.78]') DESC LIMIT 10;2.2 关键性能优化策略
在压力测试中,我们发现三个性能瓶颈点及解决方案:
批量查询延迟:当需要同时计算100+商品的相似推荐时,原始方案的P99延迟达到820ms。通过启用DWS的向量索引功能,我们实现了20倍加速:
CREATE INDEX product_vec_idx ON products USING ivfflat (embedding) WITH (lists = 100);冷启动问题:新上架商品缺乏用户行为数据。我们设计了两阶段向量融合策略:
- 初始阶段:纯内容向量(标题+类目)
- 成熟期:内容向量与用户行为向量的加权融合
内存消耗:768维向量占用较大空间。实验发现采用FP16精度存储,在效果损失不到1%的情况下,内存占用减少50%。
3. 实现细节与避坑指南
3.1 向量生成的最佳实践
商品文本的向量化质量直接决定推荐效果。经过三个月的AB测试,我们总结出以下黄金准则:
文本预处理配方:
- 保留:商品品牌、核心属性、材质等实体词
- 过滤:促销信息("限时折扣"等)、特殊符号
- 标准化:将"iPhone13"统一为"苹果手机"
多字段融合技巧:
# 最佳权重配比(经过网格搜索验证) final_vector = 0.6*title_vec + 0.3*category_vec + 0.1*tags_vec批量处理优化:使用DWS的foreign table功能对接OBS对象存储,实现每小时增量更新:
CREATE FOREIGN TABLE temp_vectors ( id BIGINT, embedding vector(768) ) SERVER obs_server OPTIONS (format 'csv', location 'obs://bucket/hourly_vectors/*'); UPDATE products p SET embedding = v.embedding FROM temp_vectors v WHERE p.id = v.id;
3.2 相似度计算的六个陷阱
余弦相似度不一定最优:对于价格敏感型商品(如大家电),需要加入欧式距离约束:
SELECT id, 0.7*vec_similarity(embedding, query_vec) + 0.3*(1-ABS(price-expected_price)/max_price) AS score FROM products维度诅咒的应对:当向量维度超过300时,务必启用DWS的PCA降维功能:
-- 在查询时动态降维 SELECT vec_similarity( vec_pca(embedding, 256), vec_pca('[0.1,0.2,...]', 256) )NULL值处理:约5%的商品因描述不规范导致向量为NULL。我们设置默认向量为类目中心向量:
UPDATE products SET embedding = ( SELECT vec_avg(embedding) FROM products p2 WHERE p2.category = products.category ) WHERE embedding IS NULL;
4. 效果验证与业务洞察
4.1 AB测试指标体系
我们设计了三级评估指标来全面衡量系统效果:
| 指标层级 | 核心指标 | 提升幅度 |
|---|---|---|
| 用户体验 | 点击率(CTR) | +37% |
| 转化率(CVR) | +22% | |
| 系统性能 | 查询延迟(P99) | 820ms→65ms |
| 吞吐量(QPS) | 120→350 | |
| 商业价值 | GMV贡献度 | +18% |
| 跨类目购买比例 | +41% |
4.2 意想不到的发现
- 长尾效应放大:向量推荐使排名1000名后的商品曝光量增加3倍
- 季节适应性:冬季自动突出"保暖"属性商品,无需人工规则
- 跨语言匹配:中文搜索"蓝牙耳机"能匹配到英文商品"wireless earphone"
5. 扩展应用场景
这套架构经简单改造后,已在多个业务场景落地:
- 客服工单路由:将用户问题与知识库文章向量匹配,自动分配最合适的客服
- 欺诈检测:通过交易描述向量聚类,识别异常模式
- 智能补货:基于商品向量相似度优化仓储位置
关键提示:在实施向量搜索时,务必建立人工评估机制。我们每周会抽样检查bad case,发现"充电宝"与"移动电源"的向量相似度仅为0.3,后通过添加同义词表解决。
实际部署中最大的教训是:不要过度追求向量维度。我们曾测试1024维的BERT向量,不仅性能下降,效果反而不如768维的蒸馏模型。现在我们对所有新模型都采用渐进式验证策略——先小流量测试,确认ROI达标后再全量。