ARISE Kaggle部活動記 #3

Kaggle部

ARISE analytics 福嶋です。ARISE Kaggle部の活動記へようこそ。

この部では、世界的に知名度の高いKaggleを中心に、国内外の分析コンペティションへ参加・上位ランクインを目指し、部員30(20225)で活動しています。

今までに参加したコンペティションの結果は以下の通りです。

今回は、5月初旬までKaggleで行われていた、NBME – Score Clinical Patient Notes で銀メダル(71 / 1471)を獲得したので、取り組んだ分析内容・工夫した点について解説していきます。

 

NBME – Score Clinical Patient Notes 概要

  • コンペの目標

まず簡単に、今回のコンペの概要について説明します。
NBME – Score Clinical Patient Notesは、米国医師免許試験で実際に行われる模擬診察において、受験者が記載した医療カルテ(テキスト)データの採点作業の効率化を目的としたコンペティションです。[1]

コンペの参加者は、医療カルテと患者の症状が与えられ、医療カルテ内にある「症状と同じ意味合いを表す箇所」を特定することが目標になります。

同じ症状、例えば「Weight-loss(体重減少)」という症状に対し、「loss weight」「clothes fit looser(服が緩くなった)」など受験者によって様々な記載パターンがあるため、これらを同じ意味と解釈できるモデルの作成が求められました。

 

  • 提供データセット

次に利用できるデータセットについて説明します。

今回利用可能なデータセットは、10名の患者のカルテ計約40,000件で、そのうち1000(10名×100)にはラベル付けがされています。ラベル付けは、各患者の症状とカルテ内の箇所がペアとなるように付与されています。

 

 

今回のデータセットの大きな特徴は、ラベル付けされているデータがかなり少なく、その代わりにラベル付けされていないデータが非常に多くある、ということです。
従って、何かしらの方法でラベル付けされていないデータにラベルを付け、学習データの増やす必要性があると考えられました。

また、もう一つの特徴として、当たり前ではありますが出現単語が医学用語に偏っているということも挙げられます。したがって一般的な文章に適用されているBert系をそのまま利用しても精度が上がらないことが予想されました。

これら二点の観点から、①ラベル付けされていないカルテにラベルを付けること、②医学系の単語に適用させる方法を検討すること、を主眼にコンペに挑みました。

 

解法

コンペの概要について理解できたところで、解法の解説に移りたいと思います。
今回スコア算出の処理は大きく①テキスト前処理、②モデリング、③アンサンブルの3つに分かれていますので、それぞれ解説していきます!

 

①テキスト前処理

まず、モデリングする前に実施するカルテデータの正規化についてです。

今回は、「文字の小文字化」のみを実施しています。

最近のNLP系のモデル(BERT, RoBERTa, DeBERTa,etc)などでは、正規化を行わない方が、精度が良い場合[2]があるため、何も処理せずにトークン化することが多いです。
しかし今回、カルテデータの一部に文字がすべて大文字になっているものが含まれていました。
今回メインで使っていたDeBERTaは、サブワード(DeBERTaが持っている辞書に含まれるトークン)に分割の方法に、小文字・大文字で大きな差が生まれます。例えば“weight”“WEIGHT”では

“weight” ⇒ “weight”

“WEIGHT” ⇒ “WE”, “IGHT”

のように、大文字のWEIGHTが登録されていないため無駄に分割されてしまいます。分割されてしまうことがどれほどの影響を与えているのかは定かではないのですが、実際精度がわずかに上昇したため効果があったのではないかと推定されます。

 

②モデリング

次は、文字列を抽出するモデルの作成方法についてです。
モデルは、公開Notebookを参考にしたトークンベースの二値分類(抽出範囲に各トークンが含まれる否か)をベースに行っています。加えてDiscussion*[3]内で有力視されていた、MLM(Masked Language Model)Pseudo Labelingを実施することが精度向上に大きく貢献しました。
*コンペ参加者がKaggle内で情報共有するスペース

今回の精度向上に大きく効いたと思われる、MLMPseudo-Labelingについてのみ紹介します。

 

(ア)MLM学習

MLMは、文中の一部をマスクし、ほかの単語からマスクした単語を予測する事前学習方法の一つです。
これにより、同じ意味合いの単語が同じような分散表現を獲得でき、精度向上に寄与することが見込まれます。

DeBERTaの事前学習に利用されているWikipedia[4]のデータセットと比較し、今回利用するカルテデータは前述の通り医学用語が多く出現しており、文構成・出現単語・単語のメインの意味が大きく異なることが想定されました。

実際、MLM前後のembeddingを確認すると大きな変化があったことが確認できました。
下記の図は、カルテ内に含まれていた単語のembeddingMLM前後のdeberta-largeから抽出したものです。” smoking ”(煙、たばこ)付近の単語を確認すると、MLM前では、周辺に “burn”, “warm” など火や熱さに関する単語があったのに対し、MLM後では、”tobacco” ”cigarette”などのたばこの同義語や、”alcohol”,” drink”(飲酒)などの嗜好品の単語があるように変化していました。

 

(イ)Pseudo-Labeling

Pseudo-Labelingは、Kaggle内でよく用いられる半教師あり学習方法の一つです。
プロセスは、①ラベルありデータで学習したモデルをラベルなしデータに適用②スコアが高かったもの(例えば0.9以上)を正解として疑似ラベルを付け③元々ラベルがあったデータと合わせて再度学習、という流れで行います。

概要のところでも述べましたが、今回は初期状態で学習できるデータセットが少なかったため、学習データを増やす必要がありました。

ある程度の人数や時間がある案件であれば人力でのラベル付けも可能ですが、Kaggleではそこまで時間を割けないため、Kaggle上でも使われるPseudo-Labelingを実施することにしました。
これにより、学習データが約40000件となり、安定した学習が行えるようになりました。

 

③アンサンブル

最後にアンサンブルです。
アンサンブルは、Kaggle等コンペ特有?の複数モデルをよい塩梅で足し合わせることで精度を向上させる方法です。
今回は、deberta-largedeberta-v3-largeの二つのモデルを0.5ずつ重みづけし足し合わせています。
(いろいろ最適化したのですが、単純な平均より精度が上がらなかったです…)

最終的には、アンサンブル後のスコアを用いF1スコアが最大化される閾値を算出、閾値を超えたトークンを答えとして抽出しています。

 

精度

最終的なスコアも確認しておきます。
注目点は、MLMPseudo-Labelどちらか未実施の場合、銅メダル圏内にも入れなかったというところです。
この二つの処理がいかに重要だったかということが分かります。

しかしながら、金メダル圏にはまだまだ差があります。上位の解法と比べてもそこまで大きな差はなかったように思えたのですが、細かな処理の部分を突き詰めていく必要がありそうです。

考察

今回は、MLM・Pseudo-Labeling等、ラベルなしデータをどこまで活用できるかが実際に勝敗を分けたコンペでした。
直近で行われていた同じくKaggleのNLP系コンペである、Feedback Prize – Evaluating Student Writing[5]ではMLMは効果がなかったので(時間とリソースを背景に)一瞬実施をためらいましたが、今回は文構成や単語も一般的な文章とは大きく異なってそうだったため、MLMを実施したのはよい判断だったと思います。

また、NLP系のモデルの主流がRoBERTaからDeBERTaに移ってきたと感じたコンペでもありました。
直前に行われていたFeedback Prize – Evaluating Student Writingと今回のコンペで上位層のモデルがほとんどDeBERTaになったことはDeBERTaの強さを物語っています。
ただ、具体的に何が要因で精度の差が生まれているのかを理解はできていない・そもそも理解できるのかわからないため、今後深堀を行っていきたいと考えています。

終わりに

今回は銀メダルを獲得したNBME – Score Clinical Patient Notesの解法について紹介いたしました。

今回のようなラベルのないデータが大量にあることは業務でも頻繁に起こりえます。今回のコンペでは、そういった状況でどのように精度を上げればよいのかを考え知ることができた良いコンペだったと感じています。

Kaggle等のデータ分析コンペに参加することで、最新の技術から業務に活用できるTipsまで、様々な知見を得ることができるため、引き続き挑戦していければと考えています。

ARISE analyticsでは、kaggle等の分析コンペティションで上位成績を残すと、インセンティブとして報奨がもらえるARISE Tech Master制度があるので引き続き金メダルを目指し、努力していきたいです。

分析はチームワークが大事です。役割を決めお互いの強みを持ち合うことで、一人で行うより何倍も効率的に分析課題に取り組めます。我々と一緒にKaggle部を盛り上げてくださる方はこちらのページからご連絡お待ちしております!!!!