kdd比赛方案
解决方案概述
采用两阶段的方法来解决比赛任务。在第一阶段,采用与 SciBERT 集成的跨编码器模型来确定源论文是否是最重要的参考文献之一。在第二阶段,利用了从目标和源论文中得出的特征,以及第一阶段的输出,输入到几个二进制分类器中进行预测。最后,我们使用集成方法聚合了这些分类器的结果,以提高我们解决方案的整体准确性和稳健性。
数据内容结构:
- 训练集与验证集都包含若干篇论文的信息,每篇论文以字典形式存储。具体字段包括:
_id
: 论文的唯一标识符。title
: 论文题目。refs_trace
: 重要参考文献列表(每个参考文献为一个字典,包含作者、组织、期刊/会议、年份及序号等详细信息)。references
: 参考文献列表。authors
: 作者信息。venue
: 发表地点(期刊或会议)。year
: 发表年份。
验证集和测试集都提供了提交样例文件(如 submission_example_valid.json
),便于参赛者理解提交格式要求。
比赛还提供了额外的训练数据 (paper_source_gen_by_rule.json
),通过关键词如“motivated by”或“inspired by”从上下文中自动提取出参考文献标题。这部分数据并未人工标注,存在一定的错误可能性。
论文原文使用TEI格式标注,
额外数据:
本次比赛为参赛者提供了额外的训练数据,文件为paper_source_gen_by_rule.json,该文件包含4854条数据,其内容为一个字典,键是论文的_id,值为其重要参考文献的字典,该字典键为该参考文献在论文参考文献列表中的序号,值为对应的重要参考文献论文题目。例:
"564b35960cf25e4e03c8752d": {
"15": "Co-saliency detection based on hierarchical segmentation",
"20": "Transfer learning by ranking for weakly supervised object annotation",
......
"25": "Deep learners benefit more from out-of-distribution examples"
}
注意!额外数据为使用规则的方法从论文数据集中收集。具体地,通过”motivated by”, “inspired by”等关键词抽取出现在相应关键词上下文的参考文献。该数据非标注数据,无法保证其正确性。
测试集公开数据
paper_source_trace_test_wo_ans.json
测试集数据,该文件格式与paper_source_trace_valid_wo_ans.json相同。
submission_example_test.json
测试集提交样例。
这次使用了允许用于本次比赛的纸质属性数据集
-
DBLP 数据集
- DBLP-Citation-network V15
DBLP 数据集:
6,404,473 篇论文和 62,492,559 条引文关系 (2024-02-05) 概述
该数据集仅用于研究目的。引文数据从 DBLP、ACM、MAG (Microsoft Academic Graph) 和其他来源提取。第一版包含 629,814 篇论文和 632,752 次引用。每篇论文都与摘要、作者、年份、地点和标题相关联。
该数据集可用于与网络和侧面信息进行聚类、研究引文网络中的影响力、查找最具影响力的论文、主题建模分析等。
DBLP-Citation-network V15: 6,275,271 篇论文和 42,104,228 个引文关系 (2023-11-22)
-
OAG 数据集
- OAG V3.1 数据集
- publication_1.zip ~ publication_14.zip
- OAG V3.1 数据集
OAG 是通过链接两个大型学术图形生成的:Microsoft Academic Graph (MAG) 和 AMiner。
OAG 在 ODC-BY 许可下发布。2017 年年中,我们发布了 OAG v1,其中包含来自 MAG 的 166,192,182 篇论文和来自 AMiner 的 154,771,162 篇论文(见下文),并在两个图之间生成了 64,639,608 个链接(匹配)关系。它可以用作研究引文网络、论文内容等的统一大型学术图谱,也可以用于研究多个学术图谱的整合。
Open Academic Graph 3.1
概述
Open Academic Graph (OAG) 由 AMiner 生成。版本 3.0 数据集于 2023 年首次发布。基于 3.0 版本的数据集,我们通过合并重复论文并更新论文与研究人员、论文与机构、论文与期刊之间关系的匹配算法,大大提高了关系的准确性。现在我们发布 3.1 版数据集,如下所示。
目录中的文件如下所示。dataset
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>.
├── DBLP-Citation-network-V15.json
├── OAG
│ ├── v3.1_oag_publication_1_00.gz
│ ├── v3.1_oag_publication_1_00.json
│ ├── .......
│ └── v3.1_oag_publication_14.json
└── PST├── paper-xml│ ├── 53e99792b7602d9701f57e77.xml│ ├── 53e99796b7602d9701f5d380.xml│ ├── 6584f922939a5f408236fc36.xml│ ├── ........│ └── 65922fe2939a5f40826ca612.xml├── paper_source_gen_by_rule.json├── paper_source_trace_test_wo_ans.json├── paper_source_trace_train_ans.json├── paper_source_trace_valid_wo_ans.json├── submission_example_test.json└── submission_example_valid.json </code></span></span></span></span>
- 原始的 OAG 数据集被划分为小规模数据集,因为我们在实现中使用以下命令在有限的内存上执行代码。
$ split -l 1000000 -d --additional-suffix=.json v3.1_oag_publication_X.json v3.1_oag_publication_X_
- “context_feature” 表示 train_context.csv 和 test_pub_context.csv
前处理
$ <Inside container /works>
$ cd preprocess
从 DBLP 数据集中提取数据。
$ poetry run python process_kddcup_data.py
从提供的训练、验证和测试数据集以及 DBLP 数据集中解析 XML 文件,以提取标题、摘要、关键字、组织、地点、上下文等。
$ poetry run pytohn xml_parser.py
为最终提交的测试数据集中的缺失值生成论文标题。
$ poetry run python oagbert_title_gen.py
特征生成(填充上下文功能)
使用 Open Academic Graph 填写论文信息。在执行以下笔记本之前,请从 Open Academic Graph 下载 OAG 数据集。
Fill_paper_info_by_OAG.ipynb
第一阶段(训练和测试预测)
使用 sentence-transformers 库执行跨编码器模型。我们使用 SciBERT 模型,并使用 GroupKFold 进行 5 倍交叉验证。
$ <Inside container /works>
$ cd first_stage
$ poetry run python cross_encoder.py --ubm --output_dir ../ce/default --train --prediction
第二阶段
$ <Inside container /works>
$ cd second_stage
基于 DBLP 的功能
使用 DBLP 数据集和 XML 文件创建纸张元数据要素。此脚本基于 paper-source-trace/rf/process_data.py at main · THUDM/paper-source-trace · GitHub 上提供的公共基线代码
$ poetry run python dblp_feature.py
和修改版的 dblp_feature.py
$ poetry run python dblp_feature2.py
基于 OAGBERT 的功能
使用以下笔记本填写上下文特征 b 后计算基于 OAG-BERT 的余弦相似度特征。
OAGBERT_embedding_cossim.ipynb
使用 OAGBERT 模型对论文进行编码,并计算目标论文和源论文之间的余弦相似度。此脚本创建 OAGBERT 功能的另一个版本。
$ poetry run python oagbert.py
生成特征
运行以下笔记本以设置特征的格式。
feature_generate4.ipynb
feature_generate5_feature_without_emb.ipynb
feature_generate6_with_oag.ipynb
feature_post_process.ipynb
运行分类器(训练和测试预测)
执行二元分类模型。CatBoost、LightGBM、RandomForest 和 SVM。使用 GroupKFold 实现 5 倍交叉验证。 在这里,我们训练了 6 个模型。2 个 CatBoost、2 个 LightGBM、1 个 RandomForest 和 1 个 SVM。
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>$ poetry run python classifier.py --model_name catboost_0 --input_dir ../output/0601/ --trial_name catboost_0
$ poetry run python classifier.py --model_name lightgbm_binary --input_dir ../output/0601/ --trial_name lgbm_binary
$ poetry run python classifier.py --model_name random_forest --input_dir ../output/0601/ --trial_name rf
$ poetry run python classifier.py --model_name svm --input_dir ../output/feat_without_emb --trial_name svm_feat_without_emb --fill
$ poetry run python classifier_weight.py --model_name catboost_0 --input_dir ../output/dblp_title_2_oag_clean/ --trial_name catboost_0_dblp_2_clean
$ poetry run python classifier_weight.py --model_name lightgbm_binary --input_dir ../output/dblp_title_2_oag_clean/ --trial_name lgbm_dblp_2_clean
</code></span></span></span></span>
整体
运行以下笔记本以集成分类器的结果。
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:#1f2328"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>ensemble_oag_clean.ipynb
</code></span></span></span></span>
现在目录中有最终的提交文件。submit