小红书推荐侧框架选型踩坑记
组里最近在搞用户增长实验项目,基于用户收藏夹图文内容做风格聚类,给运营出“审美偏好雷达图”。我作为推荐算法的人被拉去当壮丁。
模型侧踩坑
最初方案:文本用 BERT 系模型抽 embedding,图片用 CLIP image encoder,拼接后聚类。数据量 20 万条收藏记录,清洗后约 13 万条。训练在 A100 上跑,PyTorch 2.1 的 torch.compile 加速明显,但有个坑——数据加载器 num_workers=16 在容器里频繁触发 DataLoader worker (pid xxx) exited unexpectedly。排查发现共享内存 /dev/shm 只有 64M,图片 decode 时直接把 worker 干崩。Docker 启动参数加 --shm-size=8g 才解决。
Claude 意外好用
文本 embedding 原本想调公司模型平台,排队要三天。我拿 Claude API 先跑 prompt 改写,把笔记标题和摘要转成风格化描述,比如“偏日系简约风,低饱和,短句为主”。效果意外好,生成的描述比原始文本过 BERT 更“语义干净”。最终把 Claude 描述作为文本模态输入,聚类轮廓系数从 0.31 提到 0.47。成本方面 20 万条请求花了不少钱,财务专门来问。
Midjourney 的教训
图片侧试过调 Midjourney Describe 接口做反向 prompt 提取,用外部模型的“审美语言”桥接两个模态。但实际跑下来有两个问题:响应时间不稳定,高峰期单张 8-15 秒,13 万张跑不完;生成的描述偏艺术风格,对生活化照片理解“飘”,比如把普通美食照描述成“cinematic lighting, rustic wood table”。最后只抽 5000 张做实验,其余用 CLIP 自己抽特征。
框架对比
| 环节 | 选型 | 实际体验 | 踩坑指数 |
|---|---|---|---|
| 模型训练/推理 | PyTorch 2.1 | 稳,torch.compile 有加速,DataLoader 共享内存坑 |
★★★☆ |
| 文本语义增强 | Claude API | 效果好但成本高,适合小批量高质量标注 | ★★☆☆ |
| 图片风格描述 | Midjourney Describe | 创意不错,不适合大规模生产 | ★★★★ |
| 可视化后台 | Angular 17 | 模块化清晰,JSON 对接顺畅 | ★★☆☆ |
Angular 的改观
一开始对 Angular 有偏见,推荐侧平时 Python 一把梭,Flask 起服务,前端 Vue 或 React 糊页面。但这次要同时展示聚类结果、缩略图、收藏时间轴,数据流复杂。Angular 的 Service 层和 RxJS 处理异步流比 React useEffect 乱飞清爽得多。唯一想吐槽的是模板语法,*ngFor 和 [ngClass] 像写 XML 配置。
项目上线后运营用雷达图做了用户分群,产品经理说“图挺好看”。为了这两个字加了三天班。这次折腾让我重新理解“深度学习框架”——不光是 PyTorch 和 TensorFlow,整个链路里任何环节的工具选择都在影响效果和效率。Claude 和 Midjourney 虽不属于传统框架,但实际扮演着“语义预处理框架”的角色。
下次再接这种活,第一件事把 /dev/shm 调大,第二件事提前跟财务报备:调外部 API,钱真的要花。

评论 0