※2021/1/18 - 23にデータダウンロードされた皆さま
上記期間において、コンペ参加同意後表示されるtrain_data.jsonリンクのファイルに欠損が見つかりました。
該当データをダウンロードされている方は、誠に申し訳ございませんが再ダウンロードいただけますと幸いです。
なお、google driveリンクにアップされているデータについて問題なく、変わらずご使用いただけます。
正しいtrain_data.jsonは1,486,787KBとなります。
コンペティション概要
本コンペでは、論文投稿サイト(プレ・プリントサーバー)の公開情報を用いて、
被引用数の予測モデル開発にチャレンジいただきます。
背景課題・目的
「論文の被引用数」とは、その研究論文が他の論文で引用された回数を示す数値であり、
被引用数が多いほど重要性の高い研究とみなされやすいことから、
査読論文の本数、掲載ジャーナル・カンファレンスの影響力 等と並び、
研究功績を評価する一指標として用いられています。
そこで本コンペにおいてはタイトル・アブストラクトへの言葉選び、ジャーナル・カンファレンスの選択がどれだけ引用数に影響するか考察したいと思います。
研究者・学生の皆さまにとって、論文執筆や研究テーマを選ぶ上でのインサイトとなれば幸いです。
本コンペティションの特徴
今回のコンペでは、学習データの一部に目的変数(被引用数)が含まれておらず、
代わりにDigital Object Identifier(DOI)により計算された低精度被引用数が代替変数として付与されています。
現実世界の問題においては必ずしも充分な量の教師データを用意できるとは限らず、
そのような場合においては弱教師あり学習が1つの有効な手段となります。
本コンペを通して弱教師ありにおけるモデル開発に親しんでいただければ幸いです。
賞金
1位 100,000円
※ 対象者には、コンペティション終了後 メールにてご連絡いたします。
締切
2020年3月28日 24:00 JST
参考文献
自然言語処理の基本と技術
深層学習による自然言語処理 (機械学習プロフェッショナルシリーズ)
Python自然言語処理101本ノック:: ~基礎からBERTまで~ (神草出版)
ダウンロード
データをダウンロードするにはログインまたはユーザー登録して下さい
■ ダウンロードはこちらより
※2021/1/18 - 23にデータダウンロードされた皆さま
上記期間において、コンペ参加同意後表示されるtrain_data.jsonリンクのファイルに欠損が見つかりました。
該当データをダウンロードされている方は、誠に申し訳ございませんが再ダウンロードいただけますと幸いです。
なお、google driveリンクにアップされているデータについて問題なく、変わらずご使用いただけます。
正しいtrain_data.jsonは1,486,787KBとなります。
概要
コンペに使用するデータは2つに分けられます。
- 訓練データ(train_data.json)
- テストデータ(test_data.json)
訓練データ、テストデータには、それぞれ851,524件と59,084件のデータが含まれます。
論文メタデータと被引用数が記載された訓練データを用いて、学習モデルを作成してください。
また、テストデータには、被引用数情報が存在しません。
作成された学習モデルを用いてテストデータの被引用数を予測し、結果を提出してください。
(※提出ファイル形式に関しては、"評価方法"をご参照ください)
データの形式
データセットのカラムは以下の通りになっています。
column name |
example |
meaning |
id |
"hep-ph/9902295" |
データの識別子 |
submitter |
"K. Koyama" |
論文のサーバへの投稿者の名前 |
authors |
"Kabu Koyama and Hoge Miyama" |
論文の著者の一覧 |
title |
“Heavy-Flavour Production at HERA” |
論文タイトル |
comments |
"12 pages" |
論文に付与されたコメント。ページ数や図表の数などが含まれる。 |
journal-ref |
"J.Phys.G25:1477-1493,1999" |
この論文が出版された論文誌の情報 |
doi |
"10.1088/0954-3899/25/7/332" |
Digital Object Identifier |
report-no |
"CERN-TH/99-30, UCL/HEP 99-03" |
大学のプレプリントサーバー等による識別子 |
categories |
"hep-ph hep-ex" |
プレプリントサーバのシステム上のカテゴリ |
license |
"null" |
ライセンス種別 |
abstract |
"We review the theoretical … production.\n" |
論文の概要 |
versions |
"'version': 'v1', 'created': 'Wed, 10 Feb 1999 08:15:58 GMT'" |
バージョン、各版の投稿日情報 |
update_date |
"2008-11-26" |
更新日時 |
authors_parsed |
“Hayes”, “Mark E.“, “”, “University College London” |
著者名 |
doi_cites |
"1" |
低精度被引用数 |
cites |
"2" |
目的変数。被引用数 |
目標
目標はテストデータセットの論文の情報に基づき、被引用数を予測することです。cites(被引用数)を数値で予測してください
評価指標
- モデルの予測性能は評価指標RMSLE(root mean squared Logarithmic error)で評価されます。
- 評価値は0以上の値を取り、精度が高いほど小さな値となります。
提出ファイルの形式
回答用のsubmission.csvを用意する(エントリーとヘッダー行を含む)。
提出されたファイルに余分な行や列(idとcites以外)が含まれていた場合はエラーとなります。
提出されたファイルは以下の列のみを必ず含んでください:
- id(テストデータセットと同じ順序)
- cites(予測された被引用数)
以下は提出ファイルの例です。
id,cites
1605.00995, 32
1206.6911, 0
cond-mat/0504055, 482
astro-ph/9907297, 8000
コンペティションルール
■Open Review Competition
本コンペでは、開催期間終了後 賞金対象者のコードを公開し、ユーザーの皆様にチーティング有無をレビューしていただき順位確定させる、オープンレビュー方式のコンペティションを行います。
賞金対象ユーザー
コンペ終了後1週間以内:
トピックにて、学習過程の分かるコードの公開をお願いいたします。
(簡易解説までつけていただけると助かります。)
コード公開後1週間:
レビュアー(ユーザー)より、チーティングの疑いに関するコメントがある場合は、ご回答をお願いいたします。
※チーティングとは無関係のコメント(ノウハウに関する質疑 等)についてもご回答いただけると幸いですが、順位確定の判断材料とは致しません。
レビュアー(ユーザーの皆様)
コード公開後1週間:
公開コードを確認いただき、チーティングが疑われる場合は、トピックを通して質疑の投稿をお願いいたします。
レビュアーからの質疑と、回答状況をふまえて、最終的に運営側で順位確定を判断します。
■順位決定ロジック
- コンペ期間中はPublicリーダーボード(以下LB)により暫定評価を、最終結果についてはPrivate LBにより評価します。
※ Private LBはコンペ終了と同時に表示されます
- スコアが同値の場合は、早い日時に提出いただいたユーザーが上位となります。
- コンペ終了後であっても、不正が発覚の際は、対象ユーザーは失格となり、全体の順位が繰り上がります。
順位繰上げにより賞金対象者となられた場合は、繰上げ日より一週間以内に、トピックにてコードを公開いただき、「Open Review Competition」と同様のフローにて順位を確定させていただきます。
■タイムライン
開始日 2021/1/18 00:00 JST
終了日 2021/3/28 24:00 JST
エントリー締め切り なし
■システム利用
- 参加者ごとに1つのアカウントでご参加ください
- チーム参加の場合は、最大5名までエントリー可能です
- 1日あたり、最大5回までの提出が可能です
■禁止事項
- ユーザー間での情報共有
コンペティションに関連するコード・データを、チーム外のユーザーと共有することはできません。全参加者が利用できる場合に限り、共有可能です。
- 外部データの使用
本コンペティションの基本情報/データから取得できるデータのみを用いてチャレンジして下さい。コンペ外データを用いて学習されたモデルの使用も禁止とします。
ただし、トピック上で、運営より承認された外部データのみ、活用を許可いたします。承認プロセスについては、「外部データの活用申請について」をご確認ください。
※コンペ期間中であっても、不正が疑われる場合は、運営より確認のためメール連絡させていただくことがございます。一週間以内にご回答いただけない場合も、不正と判断させていただきます。
■外部データの使用申請について
原則外部データ/学習済みモデルの使用は禁止としておりますが、正解データの入手につながらない場合は、
下記承認プロセスにより使用できることといたします。
- トピックを作成し、取得元情報とデータ(格納先URLも可)を添付
- 運営にて判断・承認
ただし、コンペ終了まで一週間をきってからの申請は禁止とします。
また、下記ホワイトリストについては、申請不要で使用いただけます。
ホワイトリスト
※注意事項
- 上記をラップしたツールキットは申請不要で使用可能
- データを追加し再学習されたモデルについては使用不可(要申請)
■運営からのお願い
公平性の担保、チーティング等の不正防止のため、予告なくルールの追加・変更を行う場合がございます。
ご不便をおかけすることもあるかと思いますが、サービス向上のためご了承ください。
FAQ
このコンペティションでは賞金はでますか?
はい。
最も精度の高い学習モデルを作成した優勝者には、賞金10万円を贈呈します。
順位確定までのプロセスについては、ルール「Open Review Competition」を参照ください。
チームで参加できますか?
可能です。チームページから作成いただけます。
どこでアカウントをつくればいいですか?
こちらから作成いただけます。
コンペティション参加にはアカウント登録が必要となりますのでご注意ください。
コードを提出するにあたって Seed を固定する必要はありますか?
Seed を固定することが推奨です。
ただし、Seed を固定しなくても提出用コードとしては認めています。
概要
このチュートリアルでは、論文のメタデータに対して
- データの読み込み
- データの確認と前処理
- Scikit-Learnを用いた被引用数を予測する回帰モデルの作成、学習
- 提出用データの作成
を行います。
import pandas as pd
import numpy as np
import sklearn
import gensim
!python3 --version
print(pd.__version__)
print(np.__version__)
print(sklearn.__version__)
import matplotlib
print(matplotlib.__version__)
print(gensim.__version__)
Python 3.8.6
1.1.1
1.18.5
0.23.2
3.3.1
3.8.3
データのロードと確認
まずはデータを読み込んで見ましょう。jsonデータの読み込みは複数のやり方がありえますが、今回はファイルの一行ごとにjsonデータが文字列として格納されているようなのでjson.loads
を使って読み込みます。
train_file = 'train_data.json'
import json
def get_data_iter(fpath):
with open(fpath, 'r') as f:
for l in f:
yield l
train_iter = get_data_iter(train_file)
for i, line in enumerate(train_iter):
if i > 0:
break
print(json.loads(line))
print(list(json.loads(line).keys()))
{'id': 'hep-ph/9902295', 'submitter': 'Michael Kraemer', 'authors': 'Mark E. Hayes (University College London) and Michael Kr\\"amer\n (CERN-TH)', 'title': 'Heavy-Flavour Production at HERA', 'comments': "LaTeX, 21 pages, 13 Postscript figures. Summary of the working group\n on `Heavy Flavour Physics' at the 3rd UK Phenomenology Workshop on HERA\n Physics, Durham, UK, 20 -- 25 September 1998. To appear in the proceedings", 'journal-ref': 'J.Phys.G25:1477-1493,1999', 'doi': '10.1088/0954-3899/25/7/332', 'report-no': 'CERN-TH/99-30, UCL/HEP 99-03', 'categories': 'hep-ph hep-ex', 'license': None, 'abstract': ' We review the theoretical and experimental status of heavy-flavour production\nat HERA. The results presented include some outstanding issues in charm and\nbeauty photoproduction, charm production in DIS and quarkonium production.\n', 'versions': [{'version': 'v1', 'created': 'Wed, 10 Feb 1999 08:15:58 GMT'}], 'update_date': '2008-11-26', 'authors_parsed': [['Hayes', 'Mark E.', '', 'University College London'], ['Krämer', 'Michael', '', 'CERN-TH']], 'doi_cites': '1'}
['id', 'submitter', 'authors', 'title', 'comments', 'journal-ref', 'doi', 'report-no', 'categories', 'license', 'abstract', 'versions', 'update_date', 'authors_parsed', 'doi_cites']
データにはid
、 投稿者、著者、タイトル、概要、引用数が含まれているようです。今回予測を行いたいのはdoi_cites
ではなくcites
なのでcites
を含むデータだけを使っていこうと思います。
データの前処理
論文の概要は重要な情報と考えられるのでgensim
を用いてベクトルに変換を行います。
emb_model = gensim.models.KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin', binary=True)
train_iter = get_data_iter(train_file)
X = []
y = []
for i, line in enumerate(train_iter):
data = json.loads(line)
if not 'cites' in data:
continue
title = data['title']
abstract = data['abstract']
cites = int(data['cites'])
emb_abstract = np.mean([emb_model[w] for w in abstract.split(' ') if w in emb_model], axis=0)
X.append(emb_abstract)
y.append(cites)
np.array(X).shape
(15117, 300)
X = np.array(X)
y = np.array(y)
X.shape, y.shape
((15117, 300), (15117,))
import matplotlib.pyplot as plt
%matplotlib inline
plt.hist(y, log=True)
(array([1.5094e+04, 1.6000e+01, 3.0000e+00, 1.0000e+00, 1.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00, 1.0000e+00]),
array([1.0000e+00, 8.7320e+02, 1.7454e+03, 2.6176e+03, 3.4898e+03,
4.3620e+03, 5.2342e+03, 6.1064e+03, 6.9786e+03, 7.8508e+03,
8.7230e+03]),
<BarContainer object of 10 artists>)
予測モデルの作成、学習
モデルに投入する目的変数(y)、説明変数(X)を作成します
いよいよ予測モデルの作成に入ります。
model.fit('説明変数','目的変数')
と記述することでモデルの学習が可能となります。目的変数を説明変数の組み合わせで説明可能な回帰モデルを作成できます。
import sklearn
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)
LinearRegression()
分類モデルの評価
モデルの評価
テストデータに対する回帰モデルの当てはまりの良さの指標としては'決定係数'などの指標が用いられます。
決定係数の値は、.score
で確認が可能です。
1に近いほど回帰式で予測された値が実際のデータに当てはまることを表します。
model.score(X, y)
0.023893111927129174
また、コンペの評価指標となるRMSLE
を見てみましょう。
今回は、sklearn.metrics
に含まれるmean_squared_log_error
メソッドとnp.sqrt
メソッドを使用します。
RMSEは予測した出力が正答とどの程度かけ離れているかを表す指標であり、0に近いほど予測精度が高いことを表します。
モデルを元にした予測値は、model.predict('説明変数')
で表します。
from sklearn.metrics import mean_squared_log_error
y_true = y
y_pred = model.predict(X)
y_pred = np.where(y_pred < 0, 0, y_pred)
print(np.sqrt(mean_squared_log_error(y_true, y_pred)))
1.5424619969678226
今回作成したモデルの訓練誤差は1.54程度でした。
テストデータに対する出力
最後に、作成したモデルを使用してテストデータでの被引用数を予測します。
test_file = "test_data.json"
test_iter = get_data_iter(test_file)
test_X = []
test_index = []
for i, line in enumerate(test_iter):
data = json.loads(line)
abstract = data['abstract']
emb_abstract = np.mean([emb_model[w] for w in abstract.split(' ') if w in emb_model], axis=0)
test_X.append(emb_abstract)
test_index.append(data['id'])
先ほど使用したmodel.predict('説明変数')
の'説明変数'にテストデータの値を代入することで、テストデータの予測値を算出することができます。
下記のようにして、提出用のsubmission.csv
を出力することが可能です。
test_predicted = model.predict(test_X)
submit_df = pd.DataFrame({'cites': test_predicted})
submit_df.index = test_index
submit_df.index.name = 'id'
submit_df.to_csv('submission.csv')
「論文の被引用数予測」コンペティション参加規約
コンペティションへの参加に際しては、ProbSpace利用規約(以下、「利用規約」といいます。)に加え、本ProbSpace参加規約(以下「本規約」といいます。)に同意いただく必要があります。利用規約にて定義された用語は、本規約においても同様の意味で用いられるものとします。
第1条(適用)
- 参加者(第2条に定義します。)は、コンペティションに参加した時点で、本規約、利用規約、その他ご同意いただいた規約のすべて、及びコンペティションサイトに掲載されているコンペティションに関するルールの一切に同意したものとみなされます。
- 本規約、利用規約、その他ご同意いただいた規約のすべて、及びコンペティションサイトに掲載されているコンペティションに関するルールは、コンペティションの終了後も参加者に適用されます。
第2条(定義)
本規約において次の各用語の定義は、それぞれ以下に定めるとおりとします。
- 「本コンペ」とは、当社ウェブサイト上で開催されるAI開発又はデータ分析等に関するコンペティションのうち、本規約に紐づく特定のコンペティションを意味します。
- 「主催者」とは、当社またはユーザーのうち、本コンペを主催する者を意味します。また、本コンペが、当社の顧客又は提携先の企業、学校その他の団体等がスポンサードするものである場合は、当該団体等も主催者の定義に含まれます。
- 「参加者」とは、ユーザーのうち、主催者側以外の立場で本コンペに参加する方を意味します。
- 「成果物」とは、本コンペにおいて参加者により開発される学習済みモデル、そのソースコード及び乱数シード等の設定値を意味します。
- 「入賞者」とは、当社より本コンペに入賞した旨の通知を受けた参加者を意味します。
- 「知的財産権」とは、著作権(著作権法第27条及び第28条に定める権利を含みます。)、特許権、実用新案権、商標権、意匠権、その他のノウハウ及び技術情報等の知的財産権(それらの権利を取得し、又はそれらの権利につき登録等を出願する権利を含みます。)を意味します。
第3条(権利の帰属)
- 本コンペで発生した成果物に関する知的財産権は、参加者に帰属します。
第4条(入賞者の義務)
- 入賞者は、本コンペで公開した成果物を、MITライセンスを適用し、商用利用の許諾条項及び著作権人格権の包括的不行使条項をライセンス条項に付与した形式で、オープンソースソフトウェアとして公開する義務を負うものとします。その前提として、入賞者は、成果物について本項に基づく方法でオープンソース化する権利を有していることを当社に対して表明保証するものとします。
※第三者が、授業・研修・セミナー等で活用できるようにするための規約となります。ご理解のほどよろしくお願いいたします。
- 当社は、以下の3点の確認が完了した時点で、本コンペの賞金または商品を、入賞者に対して授与するものとします。
- 入賞者が、前項に基づいて成果物のオープンソース化を実施したこと
- 入賞者が、本規約、利用規約、その他ご同意いただいた規約のすべて、及びコンペティションサイトに掲載されているコンペティションに関するルールの一切に違反していないこと
- 当社が定める方法による本人確認
- 当社は、入賞者が第1項に基づいてオープンソース化した成果物を、自由に商用利用することができます。
第5条(禁止事項)
- 参加者は、本コンペにおいて、以下の各号のいずれかに該当する行為を行ってはならないものとします。
- クラッキングやチート行為、なりすまし、盗用等の不正行為
- 第三者の知的財産権その他の権利を侵害する内容ないし態様で、参加者公開事項を公開する行為
- 主催者(当社以外の者に限ります。)に対する直接連絡、相談、依頼、勧誘、勧誘対応等の活動(但し、当社を介して当社が認めた方法により行うものは除きます。)
- 本コンペにおいて、当該コンペと直接関係のない成果物等を提出すること
- 本規約における参加者としての地位又は参加者としての権利義務について、譲渡、移転、担保設定、その他の処分をすること
- その他、本規約、参加ルール及び利用規約に違反する行為
- 参加者が前項に規定する禁止行為を行ったと当社が認める場合、当社は、当該参加者に事前に通知することなく、当該参加者の本コンペにおける失格処分、当社サービスの全部又は一部の利用停止、ユーザー登録の抹消、その他当社が必要と判断した措置をとることができるものとします。
第6条(本コンペの変更、中断、終了等)
- 当社は、参加者に事前の通知をすることなく本規約に基づく本コンペの開催内容の変更、本コンペの一時的な中断又は終了を行うことができます。
- 当社は、本条に基づき当社が行った措置により生じた結果及び損害について、一切の責任を負わないものとします。
第7条(損害賠償)
- 参加者は、本コンペに関連して、自らの責に帰すべき事由により、当社、主催者その他の第三者に損害を与えた場合には、その一切の損害(逸失利益、弁護士費用を含みます。)を賠償するものとします。
- 参加者が本規約の規定に違反したことにより主催者(当社を除きます。)その他の第三者が当社に対して何らかの訴え、異議、請求等がなされた場合において、当社から処理の要請がなされたときは、参加者は自己の責任と費用負担において、当社に代わって当該第三者との紛争を処理するとともに、当社がかかる訴え、異議、請求等により被った一切の損害(逸失利益、弁護士費用を含みます。)を賠償するものとします。
第8条(本規約の変更)
当社は、必要と判断した場合には、参加者に対して事前に通知する(本コンペにかかる当社ウェブサイト上での告知その他当社が適当と認める方法を含みます。)ことにより、いつでも本規約を変更することができるものとします。なお、変更内容の通知後、参加者が当社の定める期間内に本コンペへの参加を取り消す手続をとらなかった場合には、当該参加者は変更後の規約に同意したものとみなされます。当社は、本規約の変更により参加者に生じたすべての損害について一切の責任を負いません。
第9条(その他)
本契約の準拠法は日本法とし、本契約に起因し又は関連する一切の紛争については、当社の本店所在地を管轄する裁判所を第一審の専属的合意管轄裁判所とします。
(制定)2020年6月22日