TL;DR
- NTTドコモ R&Dチームはデータ分析のトップカンファレンスであるACM KDD主催のデータ分析コンペKDDCUP2024 に参加し、Open Academic Graph (OAG) Challenge部門のTask3 Paper Source Tracing(PST) コンペにおいて 8位に入賞しました。
- PSTコンペは、論文引用関係のグラフデータを用いて、論文が引用している複数の引用論文を元論文に影響を与えた度合い順に並び替えるタスクになります。
- ドコモチームの解法では2ステージモデルを採用し、SciBERTモデルと複数の2値分類モデルをスタッキングした手法を実装しました。手法のソースコードはGitHub、論文はOpenReviewにて公開されております。
はじめに
NTTドコモ サービスイノベーション部の橋本です。普段は、データサイエンティストとして、ドコモが提供するサービスの利用ログを活用し、広告CTR予測やレコメンドシステムの構築に従事しております。 本記事では、データ分析コンペKDDCUP2024におけるOpen Academic Graph (OAG) Challenge部門のTask3 Paper Source Tracing (PST)タスクのコンペ概要およびドコモの8位入賞解法について紹介いたします。
また、本記事で紹介するコンペ解法の発表を目的にKDD2024国際会議に参加してきました。参加報告については本ブログのこちらの記事をご確認ください。OAG Challenge のTask1、 Task2 においてもドコモR&Dの別のチームが参加し共に6位に入賞しております。それぞれ本ブログの記事がありますので、ご確認ください。
- Task1 OAG-IND https://nttdocomo-developers.jp/entry/2024/11/14/090000
- Task2 OAG-AQA https://nttdocomo-developers.jp/entry/2024/10/17/090000
コンペ概要
本コンペは、論文引用関係のグラフデータを用いて、論文が引用している複数の論文を影響の与えた度合いの順に並び替えるタスクです。 並べかえタスクにおける評価指標はMean Average Precision (MAP)です。本指標は主に商品推薦タスク(商品のおすすめ順に並び替えるタスク)でも頻繁に使われる指標です。
また、コンペ期間は3月20日から6月8日の約3ヶ月にわたり実施されました。
データセット概要
本コンペでは3種類のデータセットが与えられます。①論文関係データ(正解データを含む)、②論文本文データ、③ルールベースでラベル付された追加学習用論文関係データ、となります。 ①の論文関係データは論文とその引用論文のペアが定義されてます。また正解順序は人間によって手動でラベル付けされたものとなっており、定義基準は以下の3つです。括弧内は原文になります。
- 本論文の考えは引用論文にインスパイアされているか? (Is the main idea of paper p inspired by the reference? )
- 本論文のコアとなる手法は引用論文から派生したものか? (Is the core method of paper p derived from the reference?)
- 引用論文が存在しなければ本論文の研究は実現されなかったか? (Is the reference essential for paper p? Without the work of this reference, paper p cannot be completed.)
②の論文本文データはXMLファイルの生データが与えられ、参加者はこのデータから必要なテキスト情報を抽出するエンジニアリング能力が求められます。
③はルールベースのロジックで影響度合い定義しラベル付けしたものであり、人間による定義をした①と比べてノイズがある可能性があります。このデータを利用するか否かは参加者に委ねられております。
また、本コンペではOAGデータ、DBLPデータの2種類の公開されている論文データセットの利用が認められております。これらの外部データをどのように活用するかもコンペの重要なポイントとなります。
- OAGデータ https://open.aminer.cn/open/article?id=5965cf249ed5db41ed4f52bf
- DBLPデータ https://open.aminer.cn/open/article?id=655db2202ab17a072284bc0c
さらに、提出データセットですが、validationとtestの2種類があります。コンペ最初はvalidationのみ評価対象で、5/31以降はtestデータの提出が可能となります。最終評価はtestデータセットで行われます。
デーセットの内容を以下のテーブルにまとめます。
No | データセット | 元論文数 |
---|---|---|
1 | 論文関係学習データ(手動正解ラベル) | 788 |
2 | 論文XMLファイル | 7544 |
3 | ルールベースによるラベル付けデータセット | 4854 |
4 | 提出データセット1 validation | 394 |
5 | 提出データセット2 test (5/31以降) | 394 |
ドコモチーム手法(8位)
手法概要
ドコモチームでは本タスクを解くために2つの仮説を立てました。 - A.引用論文が元論文に影響を与えた度合いは、引用論文と元論文のタイトルや引用文のテキストが類似しているか否かで判断できるだろう。 - B.引用論文の被引用数や共著者数などの特徴量を使うことで、引用論文の重要度合いを予測できるだろう。
また、本コンペと同様に論文引用データを用いたコンペである論文の被引用数予測コンペがProbspace上で行われており、それの上位解法を参考に特徴量や全体の方針を検討しました。(解法を公開してくださっている方に感謝です。)
上記の方針をもとに、2ステージの手法を実装いたしました。1ステージ目として、Cross Encoderモデル1を用いて、論文とその引用論文のペアが重要なものか否かを予測する2値分類モデルを構築しました。2ステージ目として、1ステージ目の予測結果に加えて、特徴量エンジニアリングで得られた特徴量を用いて2値分類モデルの学習を行いました。2値分類モデルはLightGBM2やCatBoost3などの複数のモデルを用いそれらの予測結果を平均によるアンサブルを行い最終的な予測結果としました。
前処理
手法に入る前に前処理について紹介します。 前述のとおり、論文のテキストデータを得るためにはXMLファイルをパースが必要です。運営によって提供されたベースラインコードの中にXMLファイルをパースするコードが含まれていたためそれを参考に実装を行いました。 ただし、パースロジックが不十分だったり、そもそもの元XMLデータにタイトルとアブストラクトのみで本文がないなどファイルが不完全だったりすることがありました。そのため、元論文と引用論文のそれぞれについて、論文タイトルやキーワード、著者名などいくつかの項目のパース結果をCSV形式で中間生成ファイルとして出力させるプログラムを作成しました。このCSVをエクセルで眺めながらどのような場合にパースが失敗しているのか、どのような欠損があるのかを確認し、パース処理を地道に改善する作業を行いました。 また、どうしてもパース処理では対応できない部分については利用が認められているOAGデータやDBLPデータを利用しそれらをもとに補完することを行いました。これでも数件の論文はアブストラクトはあるが論文タイトルが欠損している状態であったため、OAGデータセットで事前学習したOAG BERT4モデルを用いて、アブストラクトからタイトルを生成することも行いました。
大規模言語モデル (Large Language Model; LLM) を用いたXMLパースや欠損補完も検討したかったのですが、自身のノウハウがなかったため作業時間の長期化を懸念して後回しにしてしまいました。結局着手せずにコンペ終了となってしまいました。
1ステージ
本節では1ステージを説明します。
1ステージではCross Encoderモデルを用いた文書の2値分類モデルを構築しました。Cross Encoderモデルはペアとなる2つのテキストを入力にしそれら関係を予測する手法となっております。また、Cross EncoderはSentense-Transformersライブラリ5を利用することで簡単に実装することができるためコンペの初手としても有効かと思います。Cross EncoderのベースモデルとしてはBERTを科学技術論文向けにチューニングしたSciBERT6というモデルを利用しました。 また、Cross Encoderモデルに入力したテキストは以下のペアになります。
- 元論文のタイトル
- 引用論文のタイトル + 元論文において引用論文を引用している部分のテキスト
Cross Validation (CV) を行う戦略としては単純にGroupKFold (k=5)を用いて検証を行うことにしました。本件は各論文ごとの順序を予測するタスクですので各論文ごとをひとまとめにしながら学習・予測を行う必要があると考えたためです。
実験設定は以下のとおりです。 - Model: SciBERT / Cross Encoder - max_seq_length: 512 - Epoch: 1 - Loss: BCEwithLogitsLoss - Optimizer: AdamW - CV: GroupKFold (k=5)
結果としてローカルCross Validationの結果(CV) 0.44997 /リーダーボード 0.35423であり、コンペの中盤においてはかなり上位に入ることができました。
仮説Bのアイデアと更なる精度向上を目指して、2ステージ目のモデルを構築することにしました。また、評価指標が順序関係を重視するMAPであるため、BCEではなくTriplet Loss のような影響が与えた論文同士のペアとそうでない論文同士のペアの距離の大小関係を考慮する損失関数のほうが適切な可能性があります。ただし、Sentence-TransformersのCross EncoderのAPIではそのような機能が提供されておりませんでした。なので、後段の2ステージに距離の大小関係を考慮したモデルを用意すれば解決するだろうという考えもありました。
2ステージ
2ステージでは、1ステージのCross Encoderの出力にいくつかの特徴量を加え、それを入力として複数の2値分類モデルを構築しました。2ステージ利用した特徴量の例をいくつか挙げます。
- CrossEncoder特徴量: 1ステージの出力。リークを防ぐため1ステージのCross ValidationのOut Of Fold (OOF)を利用しています。
- DBLPベースの特徴量: DBLPデータセットに含まれる論文メタ情報をもとにしたもの。被引用数や著者数、公開年などです。
- XMLベース特徴量: XMLのデータをもとに、元論文のどのセッションで対象とする引用論文が引用されていたか、など。
- SciBERTエンコードベースの特徴量: 元論文と引用論文それぞれのタイトルやキーワード、アブストラクトなどからSciBERTを用いてEmbeddingを取得し、それらのコサイン類似度を特徴量として利用しました。(後処理として元論文と引用論文いずれかに欠損の場合は0としました)
- OAGエンコードベースの特徴量:元論文と引用論文それぞれのタイトル、キーワード、アブストラクトなどからOAG BERTを用いてEmbeddingを取得し、それらのコサイン類似度を特徴量として利用しました。
- テキストペースの特徴量:元論文と引用論文それぞれのタイトル、キーワード、アブストラクトなどから共通単語数、レーベンシュタイン距離など。(論文タイトルに手法名、手法名V2などように手法名にナンバリングされているタイトルがあったため検討)
また特徴量エンジニアリングにより作成した下記の特徴量は有効でした。
- 元論文と引用論文のペアにより算出される特徴量の元論文ごとの最大値や平均値とその差分。
- 元論文と引用論文のペアのタイトル、キーワード、アブストラクトそれぞれのコサイン類似度の積をとったもの。
- 元論文において、引用論文を引用している部分のテキストと以下3つの文章のコサイン類似度 (手動ラベル付の定義より検討)。
- "Main idea of this paper is inspired by the reference"
- "The core method of this paper is derived from the reference"
- "The reference is essential for this paper without the work of this reference this paper cannot be completed"
モデルはCatBoost、 LightGBM、SVM、RandomForestの4つのモデルはアンサンブルしました。どのモデルを使用するかについては、さまざまな組み合わせを試行し、リーダーボード上の精度が最も高いものを採用しました。結果としてCatBoostとLightGBMはコサイン類似度の後処理のあるなしの2パターンで、合計6種類のモデルを作成した。
アンサンブル方法には、6モデルの平均をとる単純な方法を採用しました。 CV戦略は1ステージと同様にGroupKFold (k=5)を用いて検証を行いました。また、特にパラメータチューニングは行いませんでした。
1ステージ単体ではリーダーボード 0.35423でしたが、2ステージのCatBoostのみで0.40384に向上し、さらに6つのモデルをアンサンブルした結果はMAP 0.41668となりリーダーボード上8位になりました。当初立てた2つの仮説はある程度当たっていたのかと思います。
このコンペの評価指標はMAPであるため、順序を考慮するLightGBM RankerやCatBoost Rankerなども試しましたが、本コンペのリーダーボードでの精度はClassifierの方が良かったため不採用になりました。
その他
上手くいかなかったこと
以下の項目は試しましたがうまく精度向上につながらなかったものです。 単に実装にバグあったりした可能性もあります。
- パラメーターチューニング
- Adversarial Validationによる特徴量選択(ローカル評価CVとリーダーボードで精度の乖離があったため)
- 3ステージ目のstacking (線形回帰)
- 引用論文の参照文章のクレンジング
- 論文のIntroduction/ Conclusionの利用
- Bi-encoder 距離学習
- ランキング学習
- SciBERT/OAG以外の言語モデル(RoBERTa/DeBERTa/SciDeBERTa/XLNet/ALBERT)
- 負例サンプリング
- ChatGLM (LLM) 7 + プロンプトチューニング
試しても良かったこと
- グラフニューラルネットワーク (GNN) (DBLP/OAGのデータからグラフを作成してエッジ分類タスクなどが考えられる)
- LLMの深掘り(ChatGLMを試しがうまくいかずやめた)
- 論文の分野ごとに処理を変える (本コンペのデータセット論文を読むと分野ごとに特徴がある旨が記載されていたが気づいたのがコンペ最終日付近で諦めた)
- 追加データセットの利用 (結局手を出しませんでしたが、1位の手法を見るとちゃんと活用していたので、こういうところが違いですよね)
所感とまとめ
本コンペは論文引用関係のグラフデータを用いて、論文が引用している論文の影響度合いを予測しその順番に並び替えるタスクでした。
今回は8位入賞にしっかりコミットできたので良かったです。とくに初めて2ステージのモデルを構築できたのは経験としては良かったかと思います。また開発環境はDocker+poetryを使ってライブラリバージョンを固定し再現性を担保できたので、チーム内や運営への共有も比較的楽にできたかと思います。
一方で、普段レコメンドの業務でGNNを扱っておきながら、今回の論文引用グラフデータに対してGNNを適用できなかったことは残念です。グラフ構築のためにDBLP・OAGのデータを網羅的に使う必要があり、より多くの計算資源が必要なことから後回しにしていたところ、そのまま試さずに終わってしまいました。
また、せっかくのテキストデータですのでLLM周りの勉強もしたかったのですが、ChatGLMを試してうまく精度が出せなかったので、知見がある手法を試して精度出すことを優先してしまいこちらも後回しにしてしまいました。序盤から上位勢とのスコアの差分が圧倒的だったりしたら優先度高めに挑戦したかもしれません。ただ、上位勢の解法をみるとやはりLLMの活用しており、コンペ利用も当たり前になってきているので、自身でもシュッとLLMを(LightGBMなみに)使えるようになっていく必要性を感じました。
コンペの全体の流れとしては中盤からCVとリーダーボードのスコアが乖離しておりなかなか苦しかったです。幸い本コンペでは最終的な順位評価もPubilc リーダーボードでなされるため、リーダーボードのスコアを参考にチューニングする方針にしました。2ステージ構成でリークしているのかと思いましたが、自分が調べた範囲では問題なさそうなので迷宮入りとなってしまいました。
多くの課題がありましたが、入賞できたことは大変嬉しく思います。今後もコンペを通じて、コンペティション技術およびAI関連技術の習得を目指して参ります。本記事が他コンペの取り組みの参考になれば幸いです。
続いて優勝チームの解法は別の記事で書きたいと思います!