数据的“干净度”:我为什么开始死磕向量数据库

数据的干净度问题,就像今天下午公园里那棵半枯半荣的银杏树。左边枝桠已经爆出新芽,嫩得能掐出水;右边却还挂着去年冬天没掉干净的枯叶,风一吹就发出干裂的响声。我站在树下看了十分钟,脑子里全是昨天清洗的那批用户行为日志——同样的数据源,付费用户的点击路径清晰得像用尺子画出来的,免费用户的那部分却充满了乱跳、刷新、中途关闭的噪声。这种割裂感让人头皮发麻。

社会确实萧条。公园长椅上隔两米就贴着一张“请勿聚集”的提示,儿童游乐区用黄色警戒线缠成了木乃伊。但那些杂草根本不管这些,从砖缝里、从围栏根部、从一切你认为不该生长的地方野蛮地拱出来,绿得理直气壮。这大概就是自然界的“脏数据”——没有范式,没有约束,但生命力恰恰来自这种混乱。而我们这些搞产品的人,前半辈子都在和这种混乱对抗,试图用规则、用漏斗、用埋点把一切人类行为驯化成整齐的表格。现在想想,可能从根上就错了。

我这种人确实没法享受平庸。上周团队里的小孩交上来一份数据分析报告,用了最新的归因模型,图表做得花花绿绿。我只看了一眼就问:你这批用户ID的清洗规则是什么?沉默了三秒钟。然后他开始背产品手册上的标准流程。我打断他:标准流程解决不了的问题,比如同一个设备在凌晨两点和下午三点分别产生了两种截然不同的行为模式,你怎么判断是不是同一个用户?是不是该拆成两个向量?他又沉默了。那一刻我特别烦躁,不是对他,是对这个行业——我们培养了太多会工具的人,却太少愿意钻到数据毛孔里去看污垢的人。

所以必须死磕向量数据库。因为传统的关系型数据库在处理“相似性”时就是个瘸子。你没办法用SQL语句去查询“像用户A那样的人还有哪些”,除非你事先定义好“像”的维度——而定义本身,就是一种暴力裁剪。去年做健身教练平台时我就吃过亏。我们按年龄、性别、BMI指数给用户打标签,推荐相应的课程。结果一个45岁的前运动员,肌肉量极高但体重也大,系统把他和那些肥胖中年男人分到了一起,推荐的全是低强度有氧。他投诉了三次,最后注销了账号。那时候我就该明白,标签是死的,人的状态是流动的,而向量能捕捉的就是这种流动的“距离感”。

忍受寂寞。这个词今天在脑子里转了很久。公园里戴口罩散步的人都是独行的,彼此保持距离,但目光相遇时会轻轻点头。搞技术的人大概也需要这种默契——你明知道向量化、嵌入、余弦相似度这些概念在当下(2022年初)还小众得可怜,团队里的人和你说“先用ES凑合吧老板, deadline要紧”。你没法解释,因为解释需要从word2vec讲到BERT再讲到OpenAI刚刚放出来的那些论文,而对方只想快点上线下一个功能。这种寂寞是双重的:既要对抗外部的“差不多就行”,又要对抗内心那个“万一方向错了呢”的声音。

但有些事必须做。下周一我约了那个沉默的小孩单独开会,准备让他停掉手头所有需求,就做一件事:把我们过去三年积累的400万条用户文本反馈(投诉、建议、客服对话)全部向量化。不用考虑业务方催报表,不用管技术栈是否统一,甚至不用急着出成果。我要他像考古学家清理陶片一样,一条条去看,去感受“愤怒”和“着急”在向量空间里到底隔了多远,“功能建议”和“bug反馈”会不会在某些情况下其实是同一种情绪的不同表达。这可能要耗掉他两个月,可能最后证明价值有限。但我觉得,在所有人都急着用AI生成点什么的时候,或许我们更应该先学会如何让AI“理解”得更干净一点。毕竟,垃圾进,垃圾出——这个道理在公园里看杂草时突然特别清晰:你可以不喜欢它的生长方式,但你必须承认,它的生命力就来自那片“不干净”的土壤。而我们该做的,或许不是铲除所有杂草,而是学会分辨,哪些是杂草,哪些只是还没被命名的花。

© 版权声明
THE END
喜欢就支持一下吧
点赞45 分享