既然 AI 还没那么聪明,那我就写个更聪明的规则引擎

这玩意儿根本不是什么“规则引擎”,就是个正则表达式加一堆 if-else 的缝合怪。但对付那些乱七八糟的客户数据,它比任何花里胡哨的 AI 都管用。

客户扔过来一个 3G 的 Excel 文件,打开直接卡死。里面什么都有:地址栏里塞着电话号码,公司名后面跟着“(已注销)”,日期格式横跨 2019/12/16、20191216、Dec-16-2019 三种纪元。指望 AI 理解这个?拉倒吧。现在的所谓智能清洗工具,遇到“深圳市南山区腾讯大厦(备注:旧地址,新址在科兴)”这种字符串,能准确提取出“腾讯大厦”的概率,跟我中彩票差不多。它们太“聪明”了,总想理解语义,结果在歧义上栽跟头。我要的不是理解,是精确的切割和替换。

所以我的路子特别糙,但有效。第一阶段,暴力拆解。用 Python 的 pandas 读?内存直接爆炸。我换成了 csv 模块迭代读取,每 50000 行切一个 chunk 出来处理。正则不是单个写的,是写成“规则链”。比如处理公司名:先上 `r’\(.*?已注销.*?\)’` 把注销标记整块剥掉;再用 `r’有限公司|有限责任公司|Ltd\.?’` 做标准化替换;最后用一组精心排布的关键词字典(比如“科技”、“咨询”、“贸易”)去打标签,判断业务类型。这里面的 if-else 逻辑是瀑布式的,前一步清洗的结果,是后一步判断的输入。AI 目前干不了这个,它没法把这么强的、人为设定的业务逻辑链条贯穿始终,它总想自己“归纳”,一归纳就出岔子。

第二阶段,上下文校验。这是最恶心也最体现“工程师思维”的地方。比如,同一个客户 ID 下,出现了两个不同的手机号。AI 可能会基于某些统计规律选一个,但我的规则是:检查这两个号码出现的“数据源权重”。来自官网联系页面的,权重 10;来自销售手动录入的,权重 5;来自三年前旧 CSV 备份的,权重 1。然后看时间戳,取权重最高且最新的。如果权重相同,再触发人工标记。这套逻辑写下来就是两百多行的函数,全是布尔判断和数值比较。现在的 AI 模型,你让它写个正则它还行,你让它把业务规则、数据权重、时间衰减因子融合成一个决策流程,它生成的代码要么漏边界条件,要么逻辑绕得你自己都看不懂。

第三阶段,才是让 AI 打辅助。清洗完、校验完的相对干净的数据,扔给一个微调过的 NER 模型,去抽一下里面可能的人名、产品名,作为补充字段。但主心骨,永远是我那套又臭又长、但每一行意图都极其明确的规则代码。团队里新来的小孩总问我,为啥不用更“智能”的方法。我反问他:智能出错了,你怎么 debug?你怎么跟客户解释“是模型没学好”?而我的规则引擎报错,日志能精确到是“规则链第 7 步,在匹配‘XX区’时,因字符串包含非标准空格而失败”。客户要的就是这个确定性。

管理这摊子事也让我身心俱疲。上个月为了赶这个清洗项目,团队两个小孩加班到凌晨,就因为一个正则里的贪婪匹配写成了非贪婪,导致几千条数据被截断。最后是我一行行看日志查出来的。当时就觉得,所谓的“智能”,在真实、肮脏、充满人为随意性的数据面前,脆弱得不堪一击。你训练模型需要干净数据,可我的工作就是制造干净数据。这是个死循环。所以,在 AI 真正能理解“为什么‘深圳市腾讯大厦’和‘深圳腾讯大厦’是同一个东西,但‘腾讯深圳大厦’却不是”之前,我的铁拳规则,就是最聪明的存在。

至少,它不会在凌晨三点告诉我,它需要更多数据才能学习。

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