第一百八十五章 层级
早上九点,卫越发来一个视频通话请求。
陆衍还没吃完早饭,把碗推到一边,接了。
卫越的桌上摊着两张纸,像是刚手绘了什么,还能看到铅笔线。他把其中一张举起来对着摄像头:「我昨晚想了一下,不用改底层结构,可以加一个标注层。」
纸上画的是三列:左边是原来的字段别名表,中间是一列叫「层级」的新属性,右边是改后的映射逻辑。层级那列里有三个值:主证、子证、变更。
「思路是这样,」卫越说,「别名表不动,每个字段映射条目加一个层级属性。主注册证号映射到「证号」+层级「主证」,附件证号映射到「证号」+层级「子证」,变更批复号映射到「证号」+层级「变更」。后面扫描的时候,只比较同层级内部的,不跨层比。」
陆衍把那张纸看了一会儿,「如果一份文件里有主证和子证同时出现怎么判断?」
「按文件类型,」卫越说,「文件类型是「注册证主件」,里面的证号就是主证;文件类型是「变更附件」,里面的证号就是子证。文件类型字段在清单里是有的。」
「那文件类型这个字段,」陆衍说,「有没有可能也有别名——比如有的文件里写的不是「注册证主件」而是「主证书」?」
卫越停了一下,把纸放下,「……有可能。」
「那文件类型的别名表也要建,」陆衍说,「然后文件类型的识别逻辑要先跑,层级标注才能跟着准确。」
「对,」卫越说,「这个我没想到。」他拿起铅笔,在那张纸上加了几行,「那就两步——先建文件类型别名表,跑文件类型识别,识别结果作为输入,再跑字段层级标注。」
「可以,」陆衍说,「这个顺序是对的。」

他们讨论到十点半,把层级标注的实现思路基本理清楚了。卫越去开始改代码,陆衍拿起碗,把已经凉透的早饭吃完。
大概过了四十分钟,卫越发来一条消息:「我改到一半发现了个问题。」
陆衍回:「什么问题。」
「注册证变更,」卫越发来,「有变更申请,有变更批复,两份文件。变更批复的批准日期应该在变更申请的提交日期之后——否则就是日期有问题。这个时序关系,理论上我们可以直接扫描,但现在的扫描模块只做同字段比对,不做跨文件时序。」
陆衍把这个读了两遍,没有立刻回复,先在脑子里把这件事想了一下。
跨文件时序逻辑——从技术上讲不难,两个日期字段,一个要求早于另一个,规则就一条。但问题在于,批复日期早于申请日期这件事,有多少比例是真的矛盾,有多少是录入问题。很多企业的文件归档并不规范,批复的盖章日期和收到通知的日期经常不一致,有人填前者,有人填后者,有人填的是扫描件上的日期,有人填的是系统录入的日期。
这不是工具检测不出来,是检测出来以后这条发现的可信度不够高。
他给卫越发了一条语音:「先不加时序逻辑进扫描模块。这类时序问题放到中置信度——我们能标出来,但不放高置信度,因为日期录入差异的情况太多了。标注的内容是「变更批复日期早于申请日期」,律所拿到以后自己去确认。」
卫越隔了一会儿回:「我理解,那中置信度里需要区分一下——原来的中置信度说明写的是「可能已有书面说明,请结合手头材料判断」,这对版本号问题适用,但对日期时序问题不一样。日期时序不是「可能有书面说明」,是「需要核实录入来源」。」
陆衍把这个想了一下,「你是说,中置信度内部需要分类。」
「对,」卫越回,「至少分两类:版本待确认和时序待核实。提示语分开写。」

这个改法陆衍觉得合理,但他想了一会儿,往远了想了一步。
如果中置信度内部分两类,以后遇到新的行业,可能会出现第三类、第四类。分类越多,输出端越细,阅读报告的人越清楚——但改法要是没想清楚,以后每遇到一个新情况就加一类,中置信度就会变成一个杂物抽屉。
他给卫越回了一条:「分类方向对,但分类的依据要想清楚,不然以后会越分越多。我觉得区分标准是:这条发现需要律所做什么动作——如果需要「查有没有书面说明」,是版本确认类;如果需要「核实日期来源和背景」,是信息核实类。以这个来分,后面遇到新情况也有地方放。」
卫越很快回:「这个分法好,我去改提示语。」
陆衍把手机放下,想了一下这两条提示语该怎么写才不会让阅读报告的人觉得这是工具在推卸判断责任,而是工具在诚实说明自己能做什么、不能做什么。
他在本子上写了两行:
版本确认类:「以下发现涉及版本或标准引用,可能已有书面说明或内部规程,建议结合现有材料确认。」
信息核实类:「以下发现涉及日期或时序关系,建议核实原始文件的日期来源(盖章日期/录入日期/通知日期),再作判断。」
他把这两行发给卫越,卫越回了一个「这个比我写的好」,然后继续改代码去了。
下午三点,卫越发来消息:「改完了,你要不要跑一遍测一下?」
陆衍打开测试环境,把医疗器械那批文件重新跑了一遍。
预处理完成,字段识别完成,层级标注完成——文件类型识别出来八类,其中有两个是卫越刚建的别名表覆盖到的,原来那个字段名和标准名差了两个字。

扫描完成,待确认条目生成:
``` 高置信度发现:0条 中置信度 / 版本确认类:4条 中置信度 / 信息核实类:5条 格式一致性提示:3条 ```
「17条降到9条,」卫越发来,「其中5条是时序问题新出来的。」
陆衍把这个结果看了一会儿,「高置信度0条是因为这批文件干净,还是层级改了以后原来的误判消掉了?」
「两个都有,」卫越回,「原来17条里有4条是主证和子证证号不一致,改了层级以后消掉了——那4条本来就不是矛盾。剩下的13条里,高置信度原来应该有两条,我看了一下是注册日期和合同签署日期,但这两条现在没有出来,可能是文件里日期格式不一样被过滤掉了。」
「先把那两条的原始数据发我看,」陆衍说,「格式问题是个坑,如果扫描因为格式差异漏掉了真实矛盾,那是我们要修的。」
卫越发来两段日期字段的原始内容:一个写的是「2021/09/03」,另一个写的是「2021年9月3日」。
同一天,两种写法,工具的日期解析没有对齐,把它们当成了不同的值,导致比对失败,这条发现没有触发。
「日期解析,」陆衍说,「要统一到同一个格式再比对,这个得改。」
「我知道,」卫越回,「这个是老问题,当时做生物技术项目就遇到了,修了一半,没修完,医疗器械这里又暴出来了。」
「这次把它修完,」陆衍说,「这类基础问题积累多了以后会很麻烦。」

「好,」卫越回,「今晚。」
傍晚陆衍正在整理那批日期格式问题的记录,手机响了,是一条微信消息,发消息的人他存的备注是「宸恒—霍律」,但发来的不是霍建新的内容,而是一条转发:
「我把我们所里祁明律师的微信给你了,他有个项目想跟你聊聊,你们自己约。」
下面是一个微信名片,备注:「祁明 / 宸恒律所 / 合伙人」。
陆衍把这条消息看了一下,然后把名片加了。
不到两分钟,那边通过了申请,发来一条:「陆先生,霍律说你们做的工具很有意思,我手头有个项目,涉及跨境收购,文件来源包括大陆、香港和新加坡,格式和语言都不统一。不知道你们的工具目前支不支持这个场景。」
陆衍把这条消息读了两遍,然后回了一句:「你好祁律,可以先了解一下,你们项目文件量大概多少,我跟合伙人确认一下覆盖范围再回你。」
那边很快回:「三地合计大概六十份,英文和中文各一半。」
陆衍把手机放下,给卫越发了一条:「宸恒另一个合伙人来了,项目有英文文件,你有没有想过要不要支持英文字段识别。」
卫越隔了一会儿回:「想过,但没做,因为不知道有没有需求。」
然后停了几秒,又发来一条:「现在有了。」