材料生长 · Growth Design
从文献到真炉
四级保真度,一套闭环:换掉物理过程那一环,上层算法不动
文献里学不学得到参数→质量的关系,先用 GroupKFold 和置换检验判一次;有反应器图纸就上 CFD 算工艺窗口;有十几炉历史数据就直接给下一炉最值得试的点;装了原位传感器就算清楚反馈划不划算、读数准确率要多高。
判据四级通用:数据先过可信度裁定,结论要跟零对照比过,来源一路带着。
文献数据库
Europe PMC 全文 + DeepSeek 结构化抽取 + ontology 单位归一;没有任何插补,空值就是文献没报。
读取样品表…
优化目标
五选一;每个目标的可学性差别很大,离线诊断已经算过
生长方法过滤
不同方法的参数-质量关系不是同一个函数,混在一起学不动
MOCVD / MOVPE / OMVPE
虚拟闭环预算
初始点铺开设计空间,之后每轮 BO 挑一个点
共 20 次「虚拟开炉」。
噪声与对照
炉次噪声是假设;零对照决定这次结论算不算数
σ = 0.03 相当于同一配方重开一炉,目标值有 ±7.2% 的波动 —— 这个数是假设,不是从文献测出来的。种子数 = 0 就不跑零对照,结论不成立。
诊断 + BO + 零对照 · 预计 30 秒内
方法与局限 · 文献冷启动
方法链
- 1文献抽取OpenAlex + Europe PMC 检索,Europe PMC fullTextXML 取全文,DeepSeek 结构化抽取参数与质量指标,ontology_gan 做单位归一。语料规模见上方「数据来源」卡,没有插补:空值就是文献没报这一项。
- 2可学性诊断(先做,不是后补)同一子集上跑两个口径:随机 5 折 CV 与按 paper 分组的 GroupKFold。两者之差就是同文献泄漏的贡献。再打乱 y 跑置换检验,拿 null 分布的 95 分位当门槛 —— 分组 R² 打不过它,就是「跨文献不可学」。
- 3虚拟炉子(oracle)随机森林 400 树,目标在 log10 空间,特征 = 5 个工艺参数 + material_family。优化时 material_family 钉死 GaN,不让模型靠「换材料」拿分。每次「开炉」在预测值上叠一层 σ = 0.03(log10)的炉次波动。
- 4贝叶斯优化闭环GP(Matern 2.5 + White)+ EI,4000 点固定候选池。初始点随机铺开设计空间,之后每轮挑一个点开一次虚拟炉。
- 5零对照每个种子给 BO 和同预算随机搜索「同一批初始点」、同样的轮数,配对比较,Wilcoxon 配对符号秩检验。降幅报中位与区间,不报单次 —— 单个种子的降幅在这个噪声水平下能差好几倍。
局限(每一条都会随结果一起出现)
- 按文献 GroupKFold 的 R² 只有 0.124(XRD (002),182 行 / 49 篇),而随机 5 折 R² 是 0.726 —— 泄漏 Δ = 0.602。也就是说:看起来学到的东西,绝大部分是「认出这是哪篇文献」,不是「参数怎么影响质量」。
- 把 oracle 当预测器跨文献用,它打不过「常数预测器」(每篇文献都猜该目标的全局中位数)。因此这里的 oracle 只用作虚拟炉子,不作为对真炉子的预测。
- 虚拟炉次噪声 σ = 0.03(log10,约 ±7%)是「假设」,不是从文献重复实验测出来的。改这个旋钮会直接改变零对照的胜率。
- 轨迹上找到的「最优点」只活在文献代理里。代理只见过文献报过的那些点,代理外推出来的最优不构成对真炉子的配方建议。
- AlN 与 GaN 的参数-质量关系不是同一个函数,而文献库里两者混杂(GaN 214 / AlN 107 样品)。优化时把 material_family 钉死成 GaN 才不至于用「切到 AlN」来降 FWHM;这条约束是产品加的,不是数据自带的。
- 生长方法过滤(默认 MOCVD 族)会大幅改变子集大小与诊断结果。样本量小到几十行时,GroupKFold R² 本身的方差就很大,别拿单次数当结论。
参考:M1/M2 文献数据引擎(gan-growth code/export_literature.py、baseline_model.py);GroupKFold 口径见 sklearn.model_selection.GroupKFold。