機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

Snorkelの概要

Snorkelとは



Stanford大学で開発されたラベル付き訓練データを簡単に作成できるツール。
Snorkel by HazyResearch

機械学習の多くはラベル付き訓練データを必要とするが、それらの作成は主に手作業で行われている。
この作業は時間やコストがかかり、効率的とは言えない。
また、実世界ではデータは時間とともに変化するため、最初にモデリングで利用したラベルが常に正解になるとは限らない。
Snorkelはラベル無しのデータ(生データ)からラベル付き訓練データを生成することを実現する。
開発者は、訓練データをラベリングする代わりに、「ラベリング関数」を定義する。
ラベリング関数は、個々の訓練データをラベリングするために用いられる関数
(詳しい説明については後述)。
通常、ラベリング関数は複数定義するが、一つの訓練データに対して全てのラベリング関数が同じ値を返すとは限らない。
ただし、訓練データ全体で見ると、関数同士がどれだけ同じ結果を返したのか(異なる結果を返したのか)という情報を得ることが出来る。
Snorkelでは、それらの情報を用いて各ラベリング関数の精度を学習する。

ラベリング関数



シンプルな2値分類 y\in \{-1,1\}で考える。(対象Aと対象Bの関係の有無など)
x\in Xとして、個々のラベリング関数は、\lambda:X\mapsto \{-1,0,1\}で定義される。
\lambda=0は、関数により判断できない場合の戻り値。
例えば、薬品と病気の関係を抽出したい場合、ラベリング関数は以下のように定義する。

f:id:kento1109:20180109111941p:plain
Weak Supervisionより引用

lf2の場合、対象Aと対象Bの間に「cause」という文字が入っていれば「1」(関係あり)を返す。
(人手でラベリングする場合もこのような判断基準が用いられるため、妥当な関数と考えられる。)