Potato 在浏览器中为化学家提供结构编辑器和谱图查看器,标注者可以校正从专利和论文中识别出的结构,绘制按标准答案评分的结构,标记反应中心等原子,并在 NMR、IR 和质谱谱图上拾取峰并积分。Potato 免费开源,运行在你自己的服务器上,并把结构导出为 SD 文件、把峰导出为 CSV 文件,每条记录都存在相应标注者的名下。
光学化学结构识别(OCSR)把专利或论文中的分子图转换为机器可读的结构。OCSR 模型 MolScribe 在公开基准上的准确率为 76% 到 93%(Qian et al., 2023),因此由专利构建的数据集需要有人把每个识别出的结构与原图逐一核对。在线化学教学中,大多数关于化学结构的问题无法按对错二分来评分,而当可以接受一定容差时,与预期结构做严格比较就会失效(Plyer et al., 2022)。Potato 把每个结构评为对或错,标准答案可以忽略立体化学,也可以只要求包含某个子结构。Potato 不运行任何 OCSR 模型,研究载入的是其他工具生成的识别结构和处理后的谱图。
Potato 中的化学任务
chemical_structure 和 peak_picking 方案以及 molecule 和 spectrum 显示类型是 Potato 2.13 新增的,链接页面给出了配置。
| 任务 | Potato 的做法 | 文档 |
|---|---|---|
| 校正 OCSR 输出 | 编辑器打开时载入识别出的结构,旁边是原始插图,标注者修正识别错误的原子、键和立体中心 | 化学结构 |
| 为手绘结构评分 | 学生用鼠标绘制或键入 SMILES 字符串,Potato 在服务器上把每份绘制结果与 SMILES、molfile、InChIKey 或 SMARTS 标准答案比对评分 | 化学结构 |
| 标记反应中心或代谢位点 | molecule 显示类型配合 viewer_selection 方案,按索引存储每个选中的原子,旁边可以用固定高亮显示模型预测的原子 | 化学结构 |
| NMR 峰拾取与积分 | 点击拾取一个峰,在 Integrate 模式下拖动对一个多重峰积分,每个峰可以填写归属和多重性等字段 | 谱图 |
| 审核自动峰拾取程序的结果 | 程序给出的峰作为建议载入,标注者逐一接受或拒绝每个建议峰 | 谱图 |
| 标注 IR 和质谱谱图 | IR 透射谱上取极小值,质心化的 mzML 扫描和 JCAMP-DX 峰表则以棒状谱显示 | 谱图 |
一项由两名标注者完成的结构校正研究
下面的配置让两名标注者检查从专利插图中识别出的每个结构,每名标注者标记识别错误的原子,校正结构,并评价识别质量。化学结构页面列出了所有选项和条目格式。
annotation_task_name: "Patent structure check"
task_dir: .
media_directory: media
output_annotation_dir: annotation_output
data_files: [data/structures.json] # each item: figure, OCSR SMILES, true SMILES
item_properties: {id_key: id, text_key: note}
user_config:
allow_all_users: true
num_annotators_per_item: 2
instance_display:
layout:
direction: horizontal
fields:
- key: page_image # the figure cropped from the patent
type: image
label: "Source image"
- key: ocsr_smiles # what the OCSR tool produced
type: molecule
label: "Recognized structure"
annotation_schemes:
- annotation_type: viewer_selection
name: wrong_atoms
description: "Mark the atoms the recognizer got wrong"
viewer_field: ocsr_smiles
labels: ["wrong element", "wrong bond or charge", "wrong stereo"]
- annotation_type: chemical_structure
name: corrected
description: "Correct the structure so it matches the source image"
prefill_field: ocsr_smiles
answer_field: true_smiles # graded in the export, never sent to the page
rdkit: false # OpenChemLib only, graded by the chemistry extra
label_requirement: {required: true}
- annotation_type: radio
name: verdict
description: "How good was the recognition?"
labels: ["Correct", "Minor errors", "Wrong structure"]
label_requirement: {required: true}num_annotators_per_item: 2 把每个结构发给两名标注者。Potato 会从页面收到的所有内容中删除 true_smiles。设置 rdkit: false 后,浏览器只载入 OpenChemLib,由 chemistry 可选依赖(pip install 'potato-annotation[chemistry]')在导出时为每个校正后的结构评分。在导出中把 answer_correct 与 changed 对照,可以区分标注者漏掉的错误和标注者引入的错误。
导入结构和谱图,导出答案
结构字段存放 SMILES 字符串、molfile 文本,或者 .mol、.sdf 或 .smi 文件的名称。谱图由 Potato 服务器从媒体目录读取,文件扩展名决定使用哪个读取器:
- JCAMP-DX。
.jdx、.dx和.jcamp文件无需额外安装即可打开,包括压缩的##XYDATA、峰表,以及 Bruker 和 MestReNova 写出的##NTUPLES形式。 - mzML。 质谱运行文件需要
spectra可选依赖(pip install 'potato-annotation[spectra]')才能打开,条目可以指定运行中的某一个扫描。 - CSV 和文本。 两列,先 x 后 y,可选的表头行给出单位。
chemistry 导出写出每个答案一行的 chemical_structures.csv、包含每个答案 molfile 的 chemical_structures.sdf,以及每个选中原子一行的 molecule_atoms.csv。peak_table 导出写出 peaks.csv 和 peaks.jsonl,每个峰、每个积分区域和每个被拒绝的建议各占一行:
python -m potato.export --config config.yaml --format chemistry --output out/
python -m potato.export --config config.yaml --format peak_table --output out/Potato 的一致性指标不覆盖 chemical_structure、viewer_selection 或 peak_picking 方案。要比较两名标注者给出的结构,可以按 instance_id 和 schema 匹配 chemical_structures.csv 中的行,再比较 inchikey。对于峰,在 ppm 或 cm⁻¹ 的容差范围内匹配 peaks.csv 中同一条目的行;已接受和已拒绝建议的数量给出每名标注者对峰拾取程序结果的接受率。
与 ChemDraw、RDKit 及 Mnova 的分工
ChemDraw 是 Revvity Signals 的商业绘图软件,斯坦福等大学购买了全校授权,适合为论文和学位论文绘制结构。RDKit 是面向 C++ 和 Python 的开源化学信息学软件,适合对导出的结构做脚本化分析。Mestrelab 的 Mnova NMR 处理和分析来自多家谱仪厂商的一维和二维 NMR 数据,适合把原始数据处理成谱图。NMRium 在浏览器中处理来自 JCAMP-DX 文件、Bruker 文件夹和 JEOL 文件的 NMR 谱图,并提供用于教学的结构解析练习。当多名标注者回答同样的条目时,Potato 更合适,因为 Potato 把每个结构或每张谱图分配给设定人数的标注者,用带评分的练习条目培训标注者,并把每位标注者的答案分开导出。一种做法是先在 Mnova 中处理谱图,把谱图保存为 JCAMP-DX,再让标注者在 Potato 中拾取峰。
借助编程智能体搭建研究
potato-skill 1.2.0 认得 chemical_structure、molecule、peak_picking 和 spectrum 这些名称,并指导 Claude Code、Codex 或 Cursor 完成研究设计这一侧的工作,例如向标注者问什么、每个条目由几名标注者查看、培训和注意力检查,以及导出。这个技能目前还没有记录结构和谱图格式、标准答案模式、显示选项,以及 chemistry 和 spectra 可选依赖。请让智能体参考化学结构和谱图页面,或这些页面的 Markdown 副本(例如 https://www.potatoannotator.com/docs/annotation-types/spectra.md),以了解格式和选项。
常见问题
标注者能否对照专利插图核对 DECIMER 或 MolScribe 的输出?
能。每个条目给出从专利中裁出的插图和 OCSR 工具生成的 SMILES 字符串,编辑器打开时载入识别出的结构,旁边是这幅插图。标注者标记识别错误的原子并校正结构。未改动的结构保存时带有 changed: false,导出中的 answer_correct 表示每个保存的结构是否与真实结构一致。
标准答案能区分立体异构体吗?
能,默认如此。精确模式比较标准 InChIKey,在某个立体中心上构型画错的结构无法通过标准答案。在结构型键上加 ignore_stereo: true 后,只比较 InChIKey 的第一个 14 字符段,预期结构的任何立体异构体都能通过。第一段只编码连接关系。
Potato 能读取 XYDATA 经过压缩的 JCAMP-DX 文件吗?
能。Potato 读取所有 ASDF 形式的 ##XYDATA,包括 SQZ、DIF 和 DUP 压缩,并检查每个续行开头的 DIF Y 值检查,检查失败的文件会被视为损坏而拒绝。二维 NMR、JCAMP-CS 结构和没有横坐标的 FID 不会被读取。
延伸阅读
- 化学结构:编辑器、标准答案和导出文件
- 谱图:所有谱图格式、显示选项和导出列
- 培训阶段和质量控制:带评分的练习条目和金标准结构
- 你需要多少位标注者?:选择每个条目的标注者人数
- 生命科学:本站关于变异审核、蛋白质结构和生物医学文本的页面
参考文献
- Qian et al. (2023). MolScribe: Robust Molecular Structure Recognition with Image-to-Graph Generation. Journal of Chemical Information and Modeling 63(7). https://doi.org/10.1021/acs.jcim.2c01480
- Plyer et al. (2022). Implementation of a soft grading system for chemistry in a Moodle plugin. Journal of Cheminformatics 14. https://doi.org/10.1186/s13321-022-00645-0