Zero-Shot Learning with Semantic Output Codesを読んだ

Zero-Shot LearningというのをNLPの論文タイトルで最近よく見かけるので、気になっていました。なので、以下の論文を読んでみました。

Zero-Shot Learning with Semantic Output Codes

たぶんZero-Shot Learningという名前の初出がこれだと思います(違っていたらすみません)。


Zero-Shot Learningというのは訓練データが全部のクラスを網羅していないような場合に、訓練データにないクラスが正解であるようなテストデータもきちんと分類できるようにする手法のようです。

って言っても訓練データにないのにどうやって学習するの、という感じです。これをクラスをただのラベルではなく特徴ベクトルで表現することで実現しているようです。

こうやって、データが「クラスを表すラベル」ではなく「クラスを表す特徴ベクトル」を推定できるように学習されます。すべてのクラスを訓練データで網羅するのは難しくても「クラスを表す特徴ベクトル」の特徴量を網羅するのはできそうだよね、ということのようです。

推定時は、推定結果の特徴ベクトルに最も近い(Nearest Neighbor)ものを選ぶようです。この最近傍なクラスは訓練データにないものである場合もあり、うまく学習できていれば訓練データにないクラスもきちんと推定できるよ、ということのようです。


なお、すべてのクラスについて、対応する特徴ベクトル表現を与えてあるという前提です。論文では、クラスラベルとしてタグなどの「単語」を想定していて、このクラスの特徴ベクトルとして2つの方法を試していました。

一つはGoogle Trillion-Word-Corpusから単語と共起する単語を特徴量として使う方法。もう一つは、Amazon Mechanical Turkを使って「その単語は動物ですか?」などの質問をした答えを特徴量として使う方法でした。実験では後者のほうがよい結果となっていました。

理論的な性質についても書いてありましたが、PAC学習に詳しくないので「ふーん」という状態でした(だめっぽい)。


余談ですが、本文中にNeuralという単語が出てきて「ウッ」となりましたが字面通り神経のほうのやつでした。著者にHinton氏が入ってるのも超絶紛らわしい・・・。