返回作品列表

项目笔记 / COMP3888

Grammar Inference
Platform.

我们在 COMP3888 中实现并比较多种语法推断算法。平台将训练与评估分开,因为向目标语言询问是否合法,不等于验证学到的语法能否正确识别输入。

我的参与
参与架构设计 · 重构评估流程 · 接入 BRNGLR
项目背景
COMP3888 小组项目
技术主题
语法推断 · BRNGLR 识别器

把推断与评估分开。

  1. 01

    训练并保存语法

    正例与目标语言 oracle 查询用于推断,结果保存为语法产物

  2. 02

    独立识别

    BRNGLR 读取保存的语法,判定留出输入是否属于该语法

  3. 03

    评估反馈

    将识别结果与预先记录的测试标签比较,生成评估指标

沿用三步概念流程:训练使用目标语言 oracle,评估读取保存的语法;测试标签预先记录,评估不会重新训练或查询 oracle。

01 / 项目背景

不止于生成一份语法。

我们小组开发了用于实现和比较 Arvada、TreeVada、Kedavra、Crucio 与 XVada 的语法推断平台,基准流程支持 Arithmetic 和 Lisp。算法从正例训练字符串和目标语言 oracle 的查询反馈中学习语法;得到一份语法只是起点,还需要检查它在未参与训练的输入上如何表现。

训练 oracle 是目标语言原有的解析器,回答“这个字符串属于目标语言吗?”。它提供学习时的成员查询反馈,却不代表推断出的语法。若只继续询问它,就无法知道学到的语法是否接受了不该接受的输入,或漏掉了合法输入。因此,评估需要独立读取推断结果,再与留出测试集的既有标签比较。

02 / 我的贡献

关注系统之间的连接。

01

参与系统架构设计

我参与了平台的系统架构设计,关注训练、语法产物和评估之间的职责边界:推断算法负责学习并导出语法,评估模块负责读取这份语法并检验它,而不是再次运行推断。

02

重构评估流程

我重构了评估流程,将训练与评估拆成互不调用的两个环节。训练保存语法与训练元信息;评估只使用保存的语法和留出测试输入,输出逐条预测、指标与评估元信息。这样可以对已有语法单独运行评估,不必重新训练。

03

接入 BRNGLR 识别器

我接入了原生 BRNGLR 识别器来评估推断出的语法。它回答的是“这个字符串属于保存的语法吗?”,而不是替代训练 oracle 判断目标语言。评估将它对留出正例与负例的识别结果,与预先记录的目标语言标签比较,计算 precision、recall、F1 等指标。

03 / 技术决策

用保存的语法划清边界。

重构中的一个关键决策,是让保存的语法产物成为训练与评估的交界,而不是把评估绑在某个算法的内部状态上。训练导出经过校验、符合 BRNGLR 契约的 JSON 语法产物;评估读取它时,不需要选择推断算法,也不会调用目标语言 oracle。

这使“学到了什么”与“如何检验它”可以分别检查,但也要求导出的语法符合识别器支持的契约。当前独立评估使用字面终结符、字符级 CFG;识别超时或执行错误必须作为评估失败报告,不能伪装成“该输入不属于语法”的负例预测。独立识别提供的是可分析的测试证据,而不是语法与目标语言完全等价的证明。

回到首页,继续探索