返回列表

24th place : Solution summary

666. Make Data Count - Finding Data References | make-data-count-finding-data-references

开始: 2025-06-11 结束: 2025-09-09 文献与知识发现 数据算法赛
第 24 名:解决方案总结

第 24 名:解决方案总结

使用正则表达式和大型语言模型识别及分类 DOI 和 accession ID

作者: chinnum97
发布日期: 2025-09-10
竞赛排名: 24

首先,我要感谢 Kaggle 举办了如此精彩的比赛。这是我的第一枚银牌,我很感激我的队友 @chaneyma, @diptyajitdas, @vaibhav486@blackberryisbetter,如果没有他们,我们的团队永远无法走到这一步。

我们的解决方案包含以下几个阶段:

  • 第一阶段:我们根据训练数据提取 DOI 模式,并对特定文章 ID(例如:10.1158/, 10.6084/, 10.5256/)进行过滤。在此阶段,所有获得的有效 DOI 均设置为 Primary(主要)。此阶段不处理常见 DOI。
  • 第二阶段:
  • 使用正则表达式提取潜在的 DOI / accession ID 候选项。
  • 我们在此阶段处理了更频繁且具有更多模式的 DOI(带有 zenodo, dryad, pasta, pangaea, cranfield, usn 和 icpsr 后缀)
  • 对 accession ID 使用了以下正则表达式(除了 SAMN 设置为 Primary):
    REGEX_IDS = ( r"\b(?:" r"CHEMBL\d+|" r"[E]-\w{4}-\d+|EMPIAR-\d+|" r"ENSBTAG\d+|ENSOARG\d+|ENSMMUT\d+|ENS[FPTG]\d{11}(\.\d+)?|" r"EPI_ISL_\d{5,}|EPI\d{6,7}|" r"HPA\d+|CP\d{6}|IPR\d{6}|PF\d{5}|BX\d{6}|KX\d{6}|K0\d{4}|" r"CAB\d{6}|" r"((NC|NG|NM|NP|NR|NT|NW)_\d+)(\.\d+)?" r"PRJ[DEN][A-Z]\d+|" r"SAM[NDE]\d+|" r"G(PL|SM|SE|DS)\d+|" r"PDB\s?[1-9][A-Z0-9]{3}|HMDB\d+|" r"(SR[RPAX]|STH|ERR|DRR|DRX|DRP|ERP|ERX)\d+|" r"(BIOMD|MODEL)\d{10}|BMID\d{12}|" r"UPI[A-F0-9]{10}|" r"CPX-[0-9]+|" r"UPI[A-F0-9]{10}|" r"RF\d{5}|" r"GU\d{6}|" r"EBI\-[0-9]+|" r"EGAD\d{11}|" r"NA\d{5}|" r"NSC\d{5}|" r"R-[A-Z]{3}-\d+(-\d+)?(\.\d+)?|REACT_\d+(\.\d+)?" r"phs\d{6}(?:\.v\d{1,2}\.p\d{1,2})?" r"EMD-\d{4,5}|" r"MTBLS\d+|" r"NZ_[A-Z]{2,4}\d+(\.\d+)?" r"PXD\d+|" r"A[PMYF]\d{6}|" r"M[TNF]\d{6}|" r"URS[0-9A-F]{10}(_\d+)?" r"[1-5]\.(?:10|20|30|40|50|60|70|80|90)\.\d{2,4}\.\d{2,4}|" r"CVCL_[A-Z0-9]{4}" r")\b" )
  • 使用 MDC corpus v4.1 no eupmc v1 对 DOI 进行后过滤。
  • 使用 LLM (qwen2.5 32B instruct awq) 分类文本是属于正文还是参考文献
  • 使用 LLM (qwen2.5 7B instruct awq) 提取摘要、标题和作者信息
  • 使用 LLM (qwen 2.5 32B instruct awq) 将 DOI 分类为 primary 或 secondary。我们根据文本是来自正文还是参考文献提供了单独的提示词。我们还使用了 logit 限制。
  • 合并所有预测结果进行提交

对我们无效的方法:

  • 我们做了许多 accession ID 实验。包括 PDB 字符串(例如:1kqp)和像 P\d{5}, Q\d{5) 这样的 ID 捕获了很多,但包含大量假阳性。不幸的是,我们的 accession ID 实验是分批进行的,所以到了某个阶段,很难追踪哪些实际上有助于提高分数 😅
  • 我们还尝试使用 LLM 来确定给定上下文中有效的 accession ID,并阈值化概率以获得更可能有效的 accession ID,从而限制上述方法获得的 FP 数量。但与不使用此方法的解决方案相比,得分几乎持平,所以我们最终没有使用它。

老实说,我对这次比赛收到的训练集质量有点失望,这让我们有时只能猜测提交的有效性,除了公共排行榜外没有任何指导。希望未来我能避免参加此类比赛。

话虽如此,总的来说这对我来说是一次很棒的学习经历,尤其是在正则表达式和 polars 方面。

感谢 @yeoyunsianggeremie 分享了第一个基线 Notebook,我们的解决方案是基于此制作的。
感谢 @aerdem4 分享了第一个使用 logit 限制的 Notebook,我们的解决方案是基于此制作的。
感谢 @mccocoful 分享了初始正则表达式解决方案并在多次讨论中提供指导,我们的解决方案是基于此制作的。
感谢 @kawchar85 建议专注于提示词工程。

如果大家对上述内容有任何疑问,请告诉我。这只是解决方案的初稿,我目前还没有涵盖每一个细节,计划清理代码并在一段时间后发布详细的解决方案。

同比赛其他方案