IT男のアジャイルキャリア奮闘記

IT業界でキャリアを築きたい貴方にお役立ち情報を発信していきます

MENU

Coleridge Initiative - Show US the Dataコンペ ~ 2nd Submission

※Kaggleアクティブコンペの順位(LeaderBoard)に影響しうる情報は掲載しておりません。

 

今回は現在取り組んでいるKaggleコンペ「Coleridge Initiative - Show US the Data」で2nd Submissionを実施するまでに得た学びを発信しようと思います。
Kaggle初心者の方は参考にしていただければと思います。

www.kaggle.com

 

 

目次

 コンペの概要について

本コンペは自然言語処理を利用したコンペになります。

 

訓練データとして膨大な科学論文コーパス(文章の塊)と各論文の分類ラベルが与えられ、参加者は訓練データを利用して別途与えれた論文コーパスデータ(テストデータ)に対し、以下に正確にラベリングできるかを競います。

 

実際はテストデータに対して推論したラベルデータが正解データ(Ground Truthラベル)とどのくらい類似しているかがスコアリングされ、順位に反映されます。

 

また、コンペプラットフォームへ提出するスタイルはcsvではなく、Notebook(コード)そのものを提出します。

2nd Submission(Sub)で得た気づき

結果から言いますと2nd Subを実施した時にスコア計算でエラーが出てしまい、
1st Subからの順位変動というものを見ることができませんでした。

 

しかしながら、Subするまでに得た学びを紹介します。

 

学びその①「Notebook実行時、インターネット接続は禁止」というルールを忘れていた。。。

今回文章コーパスデータに対してラベリングをする際に文章の要約技術を検証するために、PEGASUSという文章要約の事前学習モデルを利用することにしました。

 

PEGASUSについては以下のサイトがわかりやすいです。

qiita.com

 

公式サイトの実装コードを利用してテストデータからラベルを推論するNotebookを作成しました。

f:id:hungrycrazyman:20210531083139p:plain

 

いざ submitしようとした時にSubmissionErrorが出てしまいました。。。

 

コンペのCode Requirementsを見てみると、

 

f:id:hungrycrazyman:20210531083030p:plain

 

Internet access disabledとありますね。。。

 

先程のUsage Exampleにある以下のコードは事前学習モデルをインターネットアクセスでダウンロードするというものなので今回Submission Errorとなっておりました。

>>> tokenizer = PegasusTokenizer.from_pretrained(model_name)
>>> model = PegasusForConditionalGeneration.from_pretrained(model_name).to(device)

 

対応策として事前学習モデルを事前にKaggleプラットフォームにアップロードし、

f:id:hungrycrazyman:20210531083508p:plain

 

Kaggleプラットフォーム内で事前学習モデルをダウンロードするようにし、インターネット通信することなく、Notebookを実行できるようにしました。

 

tokenizer = PegasusTokenizer.from_pretrained('/kaggle/input/huggingfacepegasusmodel/')
model = PegasusForConditionalGeneration.from_pretrained('/kaggle/input/huggingfacepegasusmodel').to(device)

 

学びその② 推論中にメモリが足りず、セッションがクラッシュする。。。

今回事前学習したモデル(サイズ2.0GB)を利用して推論を実行するため、モデルをキャッシュ(RAM・メモリに該当)にダウンロードします。

 

メモリを使用した処理が非常に重くなるため、Notebook上で処理の仕方を工夫しないとRAM使用量が上限に来てセッションがクラッシュしてしまいます。

 

RAMの表示はNotebookの右上に表示されます。

f:id:hungrycrazyman:20210531122239p:plain

 

今回4つの推論処理をfor文で回していたため、RAMのキャパが足りず、セッションがクラッシュしてしまいました。。。

 

対策としては重い処理の後に必ず今後使用しない変数の削除とメモリ解放を行いました。

 

変数の削除は以下の通り、"del"を利用します

 

del train_df

 

メモリ解放はgarbage collectionというライブラリを利用して以下のようにdel文の後に記述します。

import gc
del train_df
gc.collect()

 

このような対策でNotebookのスペック制約がある中で最後までコードを実行させることができ、 submitを実施することができました。

 

最後までお読みいただきありがとうございました!