感谢主办方和参与者。这是一场相当累人且复杂的比赛。
我们的解决方案如下:
DOI 管道
- 处理所有 PDF 以提取正文部分,并使用基于 ML 的特殊方法提取干净的 Header(获取作者姓名)和参考章节。
- DOI 提取:
- 固定长度模式(安全使用正则表达式):
pangaea_pattern = r"(?:1\s*0\s*\.\s*1\s*5\s*9\s*4\s*/\s*)?p\s*a\s*n\s*g\s*a\s*e\s*a\s*\.\s*(?:\s*\d\s*){6}" pasta_pattern = r"(?:1\s*0\s*\.\s*6\s*0\s*7\s*3\s*/\s*)?p\s*a\s*s\s*t\s*a\s*/\s*(?:\s*[a-f0-9]\s*){32}" doi_pattern = f"(?:{pangaea_pattern})|(?:{pasta_pattern})" - 可变长度模式(不安全使用正则表达式,需要大语言模型):
- 我们首先使用正则表达式突出显示文章中可能的 DOI(基于此模式:
r"1\s*0\s*\.\s*\d{4,9}\s*/")。 - 然后我们创建一个 80 字符的右窗口,并要求 Qwen 7B 或 14B 提取它。
- 对于特殊品牌模式(没有标准 DOI 前缀 10.xxxx/),我们单独处理并使用特殊提示。
- 此阶段的交叉验证结果很强(我们主要关心召回率):
~doi - f1: 0.7597 [tp: 294 / fp: 157 / fn: 5]→ 所以我们只漏掉了 5 个 DOI。
- 我们首先使用正则表达式突出显示文章中可能的 DOI(基于此模式:
- 固定长度模式(安全使用正则表达式):
- 过滤非数据 DOI:
- 为了减少假阳性(FP),我们使用微调后的 Qwen 14B 过滤非数据 DOI。
~doi - f1: 0.8985 [292 / 59 / 7]
- 为了减少假阳性(FP),我们使用微调后的 Qwen 14B 过滤非数据 DOI。
- DOI 类型分类:
- 我们使用微调后的 Qwen 14B 和 4 个提示,取决于可用信息(是否有干净的作者列表,是否有干净的参考文献等)。
~doi - f1: 0.8554 [278 / 73 / 21]
- 我们使用微调后的 Qwen 14B 和 4 个提示,取决于可用信息(是否有干净的作者列表,是否有干净的参考文献等)。
Accession ID 提取
我们使用正则表达式和公开解决方案进行分类。
我们提交了两个解决方案进行最终评估:
- 纯机器学习(主要解决方案):
- 公共排行榜:0.80
- 私有排行榜:0.613
- 机器学习 + MDC 语料库:
- 公共排行榜:0.846
- 私有排行榜:0.647
注意:
最后一天我们发现其他团队使用 MDC 语料库过滤假阳性。所以我们提交了另一个运行以保持同步。然而,我们觉得这不是一个干净的解决方案 @inversion,因为使用它提出了以下问题:
“当主机想要使用你的代码时,推理模式怎么样?”
他将一无所获,因为你将所有新 DOI 视为假阳性(非数据)。