勉強の記録

機械学習、情報処理について勉強した事柄など

multi-label learningについてメモ

マルチラベル分類(多ラベル分類)についてメモ。 BERTでNTCIR-18 MedWebを解かせてみた。各データに対して8個のラベルの正負が割り当てられており、それらを予測するタスク。最終的なembeddingから8出力の全結合層→sigmoid functionで8つのラベルを得てcross entropy lossの和で学習させた。もうちょっといい方法がないか調べてみたのでメモ。

参考:NTCIR-18 MedWeb 2500文の疑似tweetに対して風邪、鼻水などの8ラベルがannotationされたデータセットが公開されている。 NTCIR-13 MedWeb

多ラベル分類と多クラス分類

多クラス分類と混同されて使われることも多いが、データに対して一つではなく複数のラベルづけを行うことを多ラベル分類と呼ぶ。

マルチラベル - 機械学習の「朱鷺の杜Wiki」

【翻訳】scikit-learn 0.18 User Guide 1.12. 多クラスアルゴリズムと多ラベルアルゴリズム - Qiita

neural network以外の手法

マルチラベル分類メモ - Negative/Positive Thinking メモ。

A Review on Multi-Label Learning Algorithms - IEEE Journals & Magazine http://cse.seu.edu.cn/people/zhangml/files/FCS'17.pdf

こちらはいずれも同じ筆者。

単純にラベル数と同じ数だけ2値分類器を並べたものを Binary relevance と呼ぶ。 モデルが明快でbase lineとして重要。

ラベル数が少ない場合には label power set (ラベルの組み合わせをクラスとして多クラス分類)も有用。

あとは、マルチラベル分類に対応した学習器としては、 Random Forest, Multi-layer Perceptron、Multi-label k-NNなど…

scikit-learnにもいくつか実装されているので気軽に試せる。

1.12. Multiclass and multilabel algorithms — scikit-learn 0.20.1 documentation

neural networkによる方法

neural netwrok自体が表現力の高いモデルであり、多出力にすることで出力間の関連も組み込める。

[1802.00891] Joint Binary Neural Network for Multi-label Learning with Applications to Emotion Classification f:id:tmitani-tky:20181129234203p:plain タイトルでgoogle検索してみると中国の国内学会に出した発表のよう。

Binary Relevanceとして独立なモデルを学習させる方法、Softmax層から閾値を設定して多ラベル分類をする方法と、Joint Binary Neural Networkとして最終出力にsigmoidをかけて多ラベル分類をする方法(JBNN)を比較すると、JBNNが一番分類性能が良かった、ということで、結局自分の実装に戻ってきてしまった。

まとめ

特徴量を作る部分でneural networkを使っている場合はそのままneural networkを使うのが良さそう。 その際の最終層としてはsigmoid functionを使おう、という結論。結局同じところに戻ってきてしまったが、2値分類器を多数並べたものを binary relevance と呼ぶことがわかったのが収穫。

おまけ:extreme multi-label classification (XMC)

さらに発展的な話題として、10万〜100万におよぶ膨大なラベル分類を解くタスクがあり、extreme multi-label classificationという1ジャンルを形成しているらしい。 kamujun.hatenablog.com

extremeなところに特徴的な工夫としては、

  • 損失関数としてはpositive labelのみからの和を取って、数多くのnegative labelを無視した

  • 最終出力層の前にラベル数よりもサイズの小さいBottle-neck hidden layerを置いてパラメータを減らした

あたりか。ablation studyではいずれも成績向上に貢献していた。