クラウドソーシングのためのDawid-Skeneモデルと確率的プログラミングPyroによるベイズ化
自分の研究とはあまり関係はないのですが、最近趣味で確率的プログラミングを触っています。 これが結構面白いので試しにDawid-SkeneモデルをPyroで実装してみました。
はじめに
まずクラウドソーシングにおけるラベル集約について説明します。
教師あり学習では教師データを元に学習を行います。この教師データは人手によるアノテーションによって作成されています。
しかし、専門家を雇ってアノテーション作業を頼むのは非常に高いコストがかかります。
そこで、複数人のボランティアや非専門家(以下、ワーカー)にアノテーションを頼むというのがクラウドソーシングです。
一見良さそうに見えるアイデアですが、数をこなすためにデタラメにアノテーションを行う質の悪いワーカーが出てくるのが世の中の常です。
これを解消するために一つのデータに対して複数のワーカによるアノテーションを頼み、ラベルの集約を試みます。
Dawid-Skeneモデルについて
ラベルを集約を考えたときまず思いつくのが多数決です。 しかし、多数決では質の悪いワーカーと質のいいワーカが同じだけの発言権(重み)を持ってしまいます。
かといって、真のラベルは手に入らないため教師あり学習でワーカーの重み付けも出来ません。
そこで考えられたのがDawid-Skeneモデル*1です。これは次のようなグラフィカルモデルによって記述できます。
これはワーカーがデータ
に付けたラベル
から真のラベルである
を
推測するためのモデルです。
ここでのはEMアルゴリズムによって予測された真のラベルとワーカー
が予測したラベルからなる混同行列になります。
Bayesian Dawid-Skeneモデルについて
PaunらはDawid-Skeneモデルのベイズ化を行いました*2。以下がそのアルゴリズムになります。
Dirはディレクレ分布、Catはカテゴリカル分布のことです。
はクラス数、
はワーカー
がデータ
に付けたラベルの数を意味しています。
比較実験
データセットには麻酔医5人が患者45人に対して全身麻酔への安全度を4段階で評価したものを利用しました。これはDawidらの論文中にて公開されています。
Bayesian Dawid-Skeneモデルの学習にはMCMCを利用しました。
真のクラスの割合
左がベイズ、右がEMアルゴリズムによる学習です。 Bayesian Dawid-Skeneモデルはデータの生成結果もプロットしています。
見た感じかなり似たような所に収束していますね。
各ワーカの混同行列
各ワーカーの混同行列をヒートマップにしたものがこちらです。
両方のモデルにおいて混合行列の対角成分に強い確率が割り当てられています。
おわりに
今回はDawid-SkeneモデルとBayesian Dawid-Skeneモデルについて実装を行ってみました。
EMアルゴリズムに比べて、MCMCによる学習はPyroに乗っかっている分かなり楽に実装出来る印象です。
しかし、Pyroの売りはPytorchを利用した確率的変分推論(Stochastic Variational Inference; SVI)にあると思います。なので次は大きめのデータセットでEMアルゴリズムによる点推定とSVIでのベイズ学習について比較したいです。
実装
詳しいハイパーパラメータや実装については下記を参照してください。
ノートブック
EMアルゴリズムによるDawid-skeneの実装
https://github.com/kajyuuen/Dawid-skene
*1:Alexander Philip Dawid and Allan M Skene. Maximum likelihood estimation of observererror-rates using the em algorithm.Journal of the Royal Statistical Society: Series C(Applied Statistics), Vol. 28, No. 1, pp. 20–28, 1979.
*2:Silviu Paun, Bob Carpenter, Jon Chamberlain, Dirk Hovy, Udo Kruschwitz, and MassimoPoesio. Comparing bayesian models of annotation.Transactions of the Association forComputational Linguistics, Vol. 6, pp. 571–585, 2018.