← 返回项目档案

项目复盘 · 2019

人工智能研究生产:口径、批处理与交付证据

从年度报告、主管部门数据交付和专题咨询中,还原一条由分类树、双语检索式、专利批处理、统计聚合和版本交付组成的研究生产链,并明确代码与成稿之间尚未闭合的证据。

人工智能产业研究专利分析数据工程

这组历史工作最有价值的部分,并不是某一版报告中的排名,而是团队逐渐形成了一套“先冻结口径,再批量计算”的研究生产方法。Jira 记录了任务承诺与状态,Confluence 留下分类树、数据矩阵、排期和终稿,GitLab 快照则展示专利 XML 如何被解析、清洗、聚合。不过三类证据并不总能首尾相接:有些指标在工单里写着“计算完成但未入库”,有些源码迟至报告完成后才集中导入,还有一版解析器甚至把入队语句注释掉了。

因此,本文不把分散材料包装成一套已经自动化运行的“报告平台”,而是还原其中可以确认的机制、实际交付,以及尚不能确认的环节。

研究对象不是一张表,而是一组带口径的数据集

年度报告的数据框架把研究对象拆成七类:产业、科研、学术、人才、技术、应用和区域。产业层继续拆成企业数量、投融资金额与频次、融资轮次以及并购;科研层统计发明专利申请与授权;学术层限定 SCI 论文;人才层区分一般人才、招聘需求与高端人才;技术层覆盖机器学习、计算机视觉、自然语言理解、知识图谱、机器人和智能芯片;应用层再看自动驾驶、医疗、金融、教育等方向。

这不是简单的章节目录。数据矩阵为每项指标分别记录国家范围、时间范围和备注。例如,两项主管部门交付的企业统计并不使用相同的国家集合和截止日期;技术层与应用层也只复用企业、融资、专利和论文中的部分指标。换言之,同名图表只有同时满足“地区、时间、对象、事件口径”一致时才能比较。

2018 年报告的专利说明进一步冻结了四项规则:只统计发明专利;以公开日限定约十年的观察窗;用公开编号中的国家或地区代码归属专利;技术范围限定在计算机与信息科学相关的两组 IPC 大类。这个选择会排除部分以机械结构为主的机器人专利,材料也明确指出由此会改变国家间排序。

专利权人处理还存在一处重要的不一致:常规统计把不同法人名称视为不同申请主体,前十名展示却又做了局部合并。这个做法能改善头部机构的可读性,但如果合并表没有版本,头部排名与总体统计便不是完全相同的实体口径。

分类树同时承担“定义”和“查询编译器”的角色

Confluence 中的边界表不是一列关键词,而是一棵允许多父节点的双语分类树。机器学习、视觉、自然语言、知识图谱、机器人、驾驶、语音等是中层节点;文字识别、可视搜索、本体、客服机器人等可以同时挂在两个上级分类下。每个末级节点再配置中文词、英文词、缩写和拼写变体。

报告检索采用了两层约束:先用 IPC 或论文数据库学科类别限定技术域,再在标题、摘要等文本字段中匹配双语词表。材料特别说明,大写的布尔连接词是表达式而不是关键词。例如,语音方向把语音处理、语音识别和麦克风阵列拆开,人脸方向同时覆盖两种常见英文表达;自动驾驶方向保留连字符、分写和行业缩写的变体。

这套设计解决了三件事:

  1. 分类编码让企业、融资、论文和专利可以复用同一技术树;
  2. 多父节点保留交叉技术,而不是强迫每个词只属于一类;
  3. 词表把研究员的概念边界转换成可执行查询。

它也留下一个容易被忽视的计数问题。多父节点适合检索,却不适合直接相加;如果“文字识别”同时计入视觉与自然语言,上层总数必须使用去重后的文档集合,不能把子类柱状图求和。现有附件保存了分类与关键词,却没有保存每次运行的命中样本、误命中率和去重集合,因而无法复算报告中每个数字。

从压缩包到统计表:源码还原出的专利处理管线

一份后期汇总进入 GitLab 的 Java 仓库,保留了最具体的处理过程。README 明确区分申请专利的两个结构版本和授权专利的三个结构版本;代码也确实为不同时期的数据保留多组解析入口,而不是用一套 XPath 强行覆盖所有年份。

可恢复的调用链如下:

专利指标从年度文件到报告图表
年度压缩包按年代选择 XML 解析器删除复杂片段通用 Map
通用 Map统一申请人和受让人有界队列批量写入检索库
批量写入检索库成功失败清单专利族去重国家与年份聚合
外部网络权重文档标识对齐缺失权重降级加权统计

下面按现存 Java 解析器、清洗线程和统计入口整理为等价伪代码。源码为多个年代版本分别实现,示例有意合并重复分支,不冒充某一个原文件。

等价伪代码

text
parser = parser_for(publication_year, document_kind)
for xml_document in read_archive(input_file):
  sanitized = remove_sections(
    xml_document, ["drawing", "table", "formula", "sequence"]
  )
  raw = parser.to_map(sanitized)
  patent = normalize_parties(raw)
  if patent.id is null:
    failures.write(input_file, "missing_id")
    continue
  queue.put(patent)
consumer.take_batch(batch_size)
consumer.write_search_index()
stats.add_unique(patent.family_id, patent.country, patent.year)
stats.add_weight(patent.family_id, external_weight.get(patent.id, fallback))

解析器逐行读取压缩包,在每个新 XML 文档开始时重置状态位;遇到图纸、表格、公式、序列和化学结构区块时暂时跳过,并对一个已知乱码文件做专项修复。进入统一结构的字段包括申请与公开信息、发明名称、申请人或受让人、摘要、说明书和权利要求。

清洗线程专门处理历史 XML 的“单对象或数组”差异:受让人既可能直接包含地址簿,也可能拆成机构名、姓名、角色和地址;申请人又可能出现在普通 parties 或美国专用 parties 结构中。代码把这些变体合并为列表,再写入新索引。读取侧使用滚动查询,写入侧按可配置批量大小提交;成功、失败和字段缺失分别落入清单,使中断后的任务可以跳过已经完成的文档。

统计层不是直接数文档。代码能先以专利族号去重,再按国家聚合;也能在“年份 → 国家 → 专利族”的嵌套桶内累计外部导入的网络权重。另一条路径把论文或专利的 UID 与 PageRank 结果对齐,缺失权重使用固定兜底值,然后批量回写。它与 Jira 中“PageRank 已跑完、尚未导入”的描述在技术上相互印证,但没有同一批输入文件、运行日志或提交号,仍不能证明报告最终采用了这次计算。

源码中的失效路径,反而说明为什么需要运行级证据

这份源码不能被当作无条件可靠的生产实现。至少有四个可直接从代码确认的问题:

  • 一版授权专利解析线程计算完文档 ID 后,真正的队列写入语句被注释,按该快照运行会得到空的下游队列;
  • 生产者数量使用可变整数对象做同步锁,递减后锁对象会变化,并发语义不安全;
  • 若受让人、申请人或正文节点缺失,若干分支会在判空前强制转换,异常记录可能来不及写出;
  • 测试目录只有模板式单元测试,未见针对多版本 XML、断点续跑或批量失败重试的样例。

更关键的是,仓库只有四次集中导入提交,时间晚于主要报告。代码可以证明团队拥有或整理过这些处理机制,却不能单独证明某张历史图表就是由当前快照生成。若要形成可审计链路,每个图表至少需要绑定:输入快照校验值、分类词表版本、解析器提交、运行参数、失败清单和输出表版本。

行研资料库是另一条独立的轻量管线

一个仅有两次提交的 Python 仓库,展示了行业报告资料如何进入内部资料库。它为多个来源各写一组页面选择器,先抓标题、发布日期、摘要与下载地址,再用链接摘要生成文件名。能直接下载的 PDF 保存原文件;只有网页正文的来源,则通过无头浏览器打印为 PDF。结构化元数据进入关系表,二进制正文进入键值存储,下载状态用于避免重复处理。

这条管线的设计亮点是把“发现资料”和“保存正文”分开,也为原生 PDF 与网页打印准备了不同路径。但快照仍带有典型脚本风险:选择器与页面结构硬绑定;部分分支提前返回,使后续下载代码不可达;连接配置与文件目录写死在源码;网络校验被关闭;日志、样本和程序混在同一仓库。它适合解释资料如何被批量收集,不足以证明年度报告已经具备可重复构建能力。

交付证据比“任务完成”更细一层

证据链中可以确认三个不同层次:

  • Jira 中较早的年度报告事项记录了融资数据上传、技术趋势关键词确认和区域数据补充完成;
  • Confluence 后续空间保存了排期表、原始数据草稿、整合表、产业篇多个版本、论文与专利表,移交页还保存了一份打印版成稿;
  • 面向两个行业组织或主管部门的项目记录了至少三批已交付文件,并在移交页保留技术层、应用层和并购核验材料。

“存在成稿”和“可以重算成稿”仍是两回事。并购核验事项要求先把英文公司名对齐到中文主体,再与上市公司并购库交叉检查;移交附件也确实包含机器汇总、公告关键词与人工匹配表。这说明实体对齐不是一句方法建议,而是实际遇到的瓶颈。最后一次重新交付事项仍停留在待办,现存材料也没有统一的变更清单,因此不能判断重新交付是否采用了修订数据。

建筑专题同样处于部分完成状态。工单把建筑生命周期拆成设计、施工与运维,再为成本管理、质量管理、协同管理等场景构造中英文布尔检索式;评论明确要求先检查返回量和相关性,再按申请公司聚合并补充产品分析。技术定义、数据准备和一项英文专利筛选已完成,趋势分析、章节完善和更完整的专利分析未完成。它证明了“行业流程词 × AI 技术词”的交叉检索方法,却不能证明整章数据已经验收。

复建时应保留四道门,而不是一个完成状态

如果今天重建这套研究生产线,最小可行的数据契约应包含四道独立门槛:

  1. 边界通过:分类树、布尔词表、国家与时间范围经过评审;
  2. 数据通过:输入快照冻结,实体归并和排除样本可追踪;
  3. 计算通过:失败率、去重数、抽样精度和跨版本差异达到阈值;
  4. 发布通过:图表绑定运行清单,文字结论经过事实核验。

这四道门能准确表达历史材料里反复出现的状态差异:“计算完成”不等于“已经入库”,“附件已上传”不等于“已经核验”,“报告有终稿”也不等于“所有图表可复现”。

证据账本

结论证据类型可以确认什么仍缺什么
年度报告建立了跨产业、科研、人才和区域的数据框架Confluence 文档事实指标、国家、时间和分类维度曾被逐项设计每项指标最终采用的查询快照
至少存在一份正式排版的 2018 年成稿Confluence 附件事实工作不只停留在提纲验收、发行和采用记录
专利处理考虑了历史 XML 版本、断点和批量写入GitLab 代码事实具体字段统一与并发管线可恢复报告运行所用提交与参数
PageRank 可按国家、年份和专利族聚合Jira 与代码交叉证据计算目标和聚合实现相互支持入库完成记录和结果校验
行研 PDF 可由多来源批量采集GitLab 代码事实元数据、原文与下载状态的处理方式稳定调度、测试和来源授权记录
全部报告已由统一平台自动生成无证据只能作为未来复建目标端到端构建清单与发布流水线

公开复盘不保留客户名称、内部路径、账号、访问配置、人员身份和原始数据链接。工单状态方面:一个规划报告项目共 12 项,仅专利引证明确完成,两项网络计算停留在“完成计算、未入库”;建筑专题 7 项中 3 项完成;医疗 AI 企业关键词筛选只有一项完成事项;通用行研流程的三项仍处在评估或开放状态。本文据此确认方法、局部实现和部分交付,不把未入库结果、候选企业清单或源码快照扩大解释为全部成果已验证。