上記期間において、コンペ参加同意後表示される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まで~ (神草出版)
データをダウンロードするにはログインまたはユーザー登録して下さい
上記期間において、コンペ参加同意後表示されるtrain_data.jsonリンクのファイルに欠損が見つかりました。
該当データをダウンロードされている方は、誠に申し訳ございませんが再ダウンロードいただけますと幸いです。
なお、google driveリンクにアップされているデータについて問題なく、変わらずご使用いただけます。
正しいtrain_data.jsonは1,486,787KBとなります。
コンペに使用するデータは2つに分けられます。
訓練データ、テストデータには、それぞれ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(被引用数)を数値で予測してください
回答用のsubmission.csvを用意する(エントリーとヘッダー行を含む)。
提出されたファイルに余分な行や列(idとcites以外)が含まれていた場合はエラーとなります。
提出されたファイルは以下の列のみを必ず含んでください:
id,cites
1605.00995, 32
1206.6911, 0
cond-mat/0504055, 482
astro-ph/9907297, 8000
本コンペでは、開催期間終了後 賞金対象者のコードを公開し、ユーザーの皆様にチーティング有無をレビューしていただき順位確定させる、オープンレビュー方式のコンペティションを行います。
コード公開後1週間:
レビュアー(ユーザー)より、チーティングの疑いに関するコメントがある場合は、ご回答をお願いいたします。
※チーティングとは無関係のコメント(ノウハウに関する質疑 等)についてもご回答いただけると幸いですが、順位確定の判断材料とは致しません。
レビュアーからの質疑と、回答状況をふまえて、最終的に運営側で順位確定を判断します。
開始日 2021/1/18 00:00 JST
終了日 2021/3/28 24:00 JST
エントリー締め切り なし
※コンペ期間中であっても、不正が疑われる場合は、運営より確認のためメール連絡させていただくことがございます。一週間以内にご回答いただけない場合も、不正と判断させていただきます。
原則外部データ/学習済みモデルの使用は禁止としておりますが、正解データの入手につながらない場合は、
下記承認プロセスにより使用できることといたします。
ただし、コンペ終了まで一週間をきってからの申請は禁止とします。
また、下記ホワイトリストについては、申請不要で使用いただけます。
# | モデル/ツールキット | データソース |
---|---|---|
1 | word2vec | https://code.google.com/archive/p/word2vec/ |
2 | huggingface transformers | https://github.com/huggingface/transformers |
3 | googletrans | https://github.com/ssut/py-googletrans |
4 | NLTK | https://www.nltk.org |
5 | FastText | https://fasttext.cc/docs/en/english-vectors.html |
※注意事項
公平性の担保、チーティング等の不正防止のため、予告なくルールの追加・変更を行う場合がございます。
ご不便をおかけすることもあるかと思いますが、サービス向上のためご了承ください。
はい。
最も精度の高い学習モデルを作成した優勝者には、賞金10万円を贈呈します。
順位確定までのプロセスについては、ルール「Open Review Competition」を参照ください。
可能です。チームページから作成いただけます。
こちらから作成いただけます。
コンペティション参加にはアカウント登録が必要となりますのでご注意ください。
Seed を固定することが推奨です。
ただし、Seed を固定しなくても提出用コードとしては認めています。
このチュートリアルでは、論文のメタデータに対して
を行います。
#環境確認
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('説明変数','目的変数')
と記述することでモデルの学習が可能となります。目的変数を説明変数の組み合わせで説明可能な回帰モデルを作成できます。
#scikit-learnライブラリをimport
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('説明変数')
で表します。
# accuracyの出力
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条(定義)
本規約において次の各用語の定義は、それぞれ以下に定めるとおりとします。
第3条(権利の帰属)
第4条(入賞者の義務)
第5条(禁止事項)
第6条(本コンペの変更、中断、終了等)
第7条(損害賠償)
第8条(本規約の変更)
当社は、必要と判断した場合には、参加者に対して事前に通知する(本コンペにかかる当社ウェブサイト上での告知その他当社が適当と認める方法を含みます。)ことにより、いつでも本規約を変更することができるものとします。なお、変更内容の通知後、参加者が当社の定める期間内に本コンペへの参加を取り消す手続をとらなかった場合には、当該参加者は変更後の規約に同意したものとみなされます。当社は、本規約の変更により参加者に生じたすべての損害について一切の責任を負いません。
第9条(その他)
本契約の準拠法は日本法とし、本契約に起因し又は関連する一切の紛争については、当社の本店所在地を管轄する裁判所を第一審の専属的合意管轄裁判所とします。
(制定)2020年6月22日