読者です 読者をやめる 読者になる 読者になる

ニコニコの動画を識別するためのマルチモーダル特徴(ニコニコ動画の統計的機械学習1)

niconico 機械学習

"ニコニコ動画の統計的機械学習"シリーズとして、ニコニコ動画のデータを使った解析を幾つか書いてみます。 結構前にやった、以下の発表の内容をブログ化するってのも含めて。

ニコニコ動画のコメント解析

このスライドのトピックは

  1. ごちうさ難民はどこにいったか
  2. コメントによる動画要約
  3. 動画を表現するマルチモーダル特徴量の精度検証

なんですが、まずこの記事では3番目の、特徴量の精度検証に触れます。

概要

ニコニコ動画の体験は、音声、画像、そしてなんといってもコメント、と マルチモーダルな体験ですが、それらの情報を使ってニコニコ動画を解析するにあたって、どういう入力特徴を使うことができるか、そしてどの特徴が有用か、を検証しました。

結果は、"コメント >>> 超えられない壁 >>> 画像 > 音声"でした。

また、特徴量を結合することで、ニコニコ動画のカテゴリ(12クラス)の識別問題を6割以上の正答率で識別できました。

実験の目的

f:id:Hi_king:20150430203646p:plain

ある動画の特徴を入れて、ランダムフォレスト識別器によってニコニコ動画上のカテゴリ(アニメ、スポーツ、歌ってみた etc...)を当てる問題を解きます。 様々な特徴量を入力として比較し、どの特徴が効くのかを調査します。

各特徴量のはなし

と、メディア分析でおそらく三大分野だと思われる特徴をそれぞれ考えて、全部を結合する

画像

まず、入力としてに使うのは、サムネイル画像です。 ここから取り出して使った特徴量は

  • GIST特徴量
  • CNNの中間層

の2種類。 カテゴリという抽象的な特徴を取るために、写真の分類によく使われるGIST特徴量[1]。 そして、ディープラーニングの流れにはとりあえず乗っておこうということでCNN。ただし、自前で学習するにはデータ集めるのも大変だったので、caffeのサンプル[2]に入っている、ILSVRC2012で優勝したモデルの、中間層(第6層)を入力特徴量として利用してランダムフォレストにかけています。中間層を利用しているのは、今回識別したい"ニコニコ動画のカテゴリ"というものが、もとの物体認識タスクと多少異なるからです。

f:id:Hi_king:20150430211905p:plain

混同行列(どのカテゴリをどのカテゴリと間違えてしまったか)は以下になります。 明るいところが、誤認識が多いカテゴリなんですが、(歌ってみた, ボカロ) = 全く同じサムネが多い、(アニメ, アイドルマスター) = アニメ絵、(車載, 旅行) = 風景画像、など、納得の間違いが多いです。そして、改めてみてみると、ニコニコのカテゴリって、似通ってるものも多いなぁと。

f:id:Hi_king:20150430222014p:plain

音声

動画から抽出した音声を入力として、2種類の特徴量を作りました。

  • パワーの統計量
  • 動画中で最大パワーの時刻の瞬時周波数特徴量

カテゴリを特徴付ける音声ってなんだろうと思って、動画毎のパワーをプロットしてみると、以下のように、綺麗に編集された動画と、無編集に近い動画ではパワーの動きに特徴があることがわかりました。 具体的には、編集によって無音部分が少なく、かつ、振れ幅も小さくなる傾向があります。そこで、毎秒のパワーを計算して、動画全体について、その(平均、最大、最小、標準偏差)をとって、4次元の入力としました。

f:id:Hi_king:20150430212154p:plain

また、音声の分析をするなら周波数特徴は必須だろうということで、動画中でパワーが最大となる瞬間の、周波数バンド毎のパワースペクトルを適度なバンド幅で離散化し、64次元にしたものも使いました。

それぞれの結果が以下。

f:id:Hi_king:20150430213404p:plain

混同行列は以下。画像のほうよりも得意不得意がはっきりしています。音楽系か人の声か、等はわけられているけど、歌ってみた、ボカロ、ニコニコインディーズはわけられないみたいです。

f:id:Hi_king:20150430221908p:plain

コメント

ニコニコらしい特徴量として、やはりコメントの文字情報には触れないわけにはいきませんね。

用いた特徴量は割とシンプルに

  • 繰り返しやユニコードの正規化をかけたあとのコメントそのものを次元とする、動画中のコメント出現頻度
  • 文字1gramの出現頻度
  • 文字1gram+文字2gramの出現頻度

の3種類です。 コメントはかなり短い文字列で、かつ、かなり通常の語彙と異なるため、形態素解析して語の出現頻度をはかるよりは、文字Ngramを扱ったほうがマシかとおもい、このようにしています。最近有用そうな辞書[3]がでてきたり、RNNを用いた文書解析が流行ってるので、そのへんを使って今度もうちょい掘り下げもやってみたいな、とは思います。

f:id:Hi_king:20150430215957p:plain

f:id:Hi_king:20150430215557p:plain

マルチモーダルに結合してみた

(画像+音声+コメント)を同時に使う話。最強の特徴量になるんじゃね?って思いでやったんですが、結局コメントの文字2gramの力が圧倒的でした。

f:id:Hi_king:20150430220225p:plain

f:id:Hi_king:20150430220235p:plain

混同行列は以下です。

f:id:Hi_king:20150430222856p:plain

コメントが少ない動画だったらいけるんじゃね?という実験でも、

  • コメント10以下の動画でもそれなりの精度がでる
  • コメント300も行けば精度はサチる

f:id:Hi_king:20150430220256p:plain

という結果がわかり、なかなかコメント特徴の精度を超えることは難しそうに感じました。 コメントの中には大した情報量のないものも多いことを考えると、コメント数10以下でも分類できてしまう、というのは結構面白い話な気がします。

参考文献

[1] Spatial envelope [2] http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/filter_visualization.ipynb [3] http://diary.overlasting.net/2015-03-13-1.html