医学研究分野において、主要な先進国の中で唯一、論文の発表数が減り続けている国がある。それが、他ならぬ日本だ。科学分野のインパクトが強い論文が出ている国のランキングでも日本はTOP10圏外となっており、国際的に研究の最前線から遅れをとっているのが現状だ。一方で、少子高齢化は深刻化しており、今後も医療を必要とする人は増えていくと予想される。つまり、医療ニーズが高まっているのにも関わらず、その研究は進んでいない危機的な状況にあると言える。この状況を打破すべく、医療従事者の臨床研究を支援するため、適切な論文を選んで評価するAIをつくりたいという主催者の想いから、本コンペティションが開催される運びとなった。 今回お話を伺ったyui_kasugaさんは、普段は広告企業勤務で医学に関する知見が全くないにも関わらず、見事1位に輝いた。機械学習については、独学で知識を身に付けていったという。一体、どんな過程でゼロから技術を自力で身につけたのか。そして、専門外である医学領域のコンペティションで優勝を果たせた理由とは。
AI未経験ながら、機械学習専門の部署立ち上げメンバーに抜擢。
最初の会社にはプログラマーとして入社し、アプリケーション開発を担当していたため、業務でAIの使用機会はありませんでした。学生時代も、機械学習を活用する研究はしていませんでしたし、当時はAIと縁もゆかりもない人間でした。ただ、そんな私がいきなりAI活用を専門的に行う部署に異動になったんです。社長の一声で新設された部署で、その立ち上げメンバーに指名されました。これが私とAIとの出会いです。 本業でAIを使うなら業務を通じて身につけられると思われるかもしれませんが、そこはやはりできたばかりの部署。決まった仕事もなければ、教えてくれる人もいない。当時は今ほどAIも普及しておらず、教材も充実していなかったので、ネットで調べては詳しい方が書いたブログを読んで必死に勉強しました。 やってみると意外にも、しんどさよりも面白さが勝っていました。機械なのにまるで人間のように自分で学習して賢くなり、成長していく。作成者の私でも想定しなかったアプローチや動きをするのも楽しかったです。そして、夢中になればなるほど、環境に物足りなさを感じるようになっていきました。新設部署なので仕方ないのですが、分析できるデータ自体が非常に少ない。AIを駆使して、大量のデータを分析できる仕事がしたいと思い、現在の会社に転職することにしました。
コンペティションは格闘ゲーム。闘争心を糧にオンライン対戦で技術を磨く。
コンペティションに参加するようになったのも、今の会社に転職してからです。実は、今の会社での採用も新設部署の人員採用でした。会社としてこれからデータサイエンスに力を入れていこうと立ち上げた部署の新規メンバーとしてスカウトしていただきました。ただ、新設部署であるが故に仕事量が十分になく、それでも部署として何か実績を残すためにコンペティションに参加するようになりました。 多くのコンペティションは開催期間中に投稿する度に、自分のスコアや順位が表示されるのですが、これが競争心を掻き立てるのです。もともと格闘ゲームが好きで、休みの日に遊ぶことも多いのですが、その感覚と似ているかもしれません。「絶対負けない!」という気持ちで、楽しく全力で取り組んでいます。そのおかげで、自分のスキルもどんどん成長している実感があります。格闘ゲームも、自分一人で練習しているより、オンラインで対戦する方が実力向上に繋がるので、そこも共通しているのかなと思います。 今回、このコンペティションに参加したきっかけをお話しすると、“復帰戦”にピッタリだと思ったからです。本業の方が忙しくて1年ほど参加できていなかったのですが、業務も落ち着いたので久しぶりに参加してみようと。でも、1年のブランクがあるので、難易度の高すぎるテーマはなかなか厳しい。その点、このコンペティションは本業でも使っている自然言語処理の分野で、まさに私の得意分野。加えて、タスクも0と1の二値分類。データソースも英語で扱いやすいですし、これなら勘を取り戻すのに最適だと思い、参加を決めました。
過去のコンペの経験を活かして、同じ後悔はしない。
私の得意分野であり、本業でも使用している自然言語処理がテーマだったので、投稿まではスムーズにいくと予想していましたが、データセットや概要詳細に目を通してみると、気になる点がいくつかありました。まず気になったのが評価指標。使われている評価指標がやや特殊だったため、パブリックとプライベートで順位が大きくずれる危険性を感じました。そのため、あまりパブリックスコアを意識しすぎないようにしました。また、少し閾値を変えるだけで大幅にスコアも変動することが想定されることから、この辺りも慎重に設定することを心がけました。 一通り注意点を確認した後は、掲示板から有効と思われるソースコードを引用しました。引用といっても、そのまま使うのではなく自分なりに修正をかけました。具体的には、実験管理を楽にしたいと思ったので、出力されるテキストデータをログで残すようにする、モデルそのものを随時セーブする、といった変更を加えています。過去のコンペ参加時に、こまめにログを残さなかったために一部のモデルを使えず後悔したということがあったので、その経験を活かしました。実際、モデルの比較やアンサンブルを行う際に、実験で用いたモデルをログから引用することになったので、この仕様変更は結果的に役に立ちました。 あとは、精度向上のための工夫も話したいところですが、正直なところBERTは基本的に完成度がかなり高いので、改良の余地がほぼありません。つまり、モデルの選択がほぼ全て。片っ端からモデルを全て試すつもりで、ここに全力を注ぎました。探索し尽くした結果、サイズが小さめでPubMedを事前学習に使っているモデルだと精度が出そうだと見えてきたので、その中から検証スコアが良かったものをピックアップしました。
気づきや学びを次回に活かしながら、さらなる成長を。
今回は1位を獲ることができましたが、やはり使用したモデルの選定がよかったと感じています。その上で、細かな調整もいくつか行ったので、それらも効いたのかもしれません。BERTで精度を上げようと思ったらアンサンブルしかないので、最適な組み合わせを地道に試し続けたり、閾値もパブリックに適応させすぎないように人の手ではなく機械で平均的に設定したり、オプティマイザーや損失関数の選択に関しても熟考しました。これらが総合的に効果を出してくれたこと、そして運がよかったこともあって優勝できたと思っています。 順位にもスコアにも満足していますし、参加の目的であるコンペティションの実戦感覚も取り戻すことができたので、間をおかずに今後もコンペティションに参加していきたいです。その際には、基礎的な部分も疎かにせず、丁寧に取り組むことを意識していきたいと思っています。今回のコンペティション2位入賞者の方が、データに対する分析をしっかり行っていたり、クロスバリデーションのfold数を変えて実験していたりするのを見て、自分に足りていないところを改めて認識できました。基本的な部分から応用部分に至るまで、どう調整すれば精度が上がるのか徹底的にこだわることで、コンペティションを通して継続的に成長していければと思っています。
今後の目標
これまでは自然言語処理や画像処理のコンペティションに多く参加してきました。今後は他の領域のコンペティションにも参加しながら、知識の幅を増やしていきたいです。例えば、音声処理や時系列テーブルデータを扱うのも面白そうだと思っています。そうして培った知識を本業でも活かすことができれば言うことなしですね。 <Scientific Research Works Peer Support Group (SRWS-PSG)主催「医学論文の自動仕分けチャレンジ」の入賞者レポートはこちら>