はじめに

Dhingra, B. et al. ACL2016の論文

Google ScholarのAlertで引っかかったので軽く目を通した論文.著者がLasagneの実装を公開している.

最近 Keras のモデル書いてなかったので,実装もした.

本題

tweetからhashtagを分類するNNを学習している(ので 厳密には Hashtag tweet to Vector だと思う).

tweetは低頻度語や単語の表記が崩れていて素性として使いにくいので,文字単位でRNNにかける.文字単位で扱っても(当時Twitterでは)tweetの140文字の制限があるので,最長で140 time-step.(単語と比べて前処理する手間が省けるのでこれは素晴らしいと思う.)

NNの構成は以下のとおり

  • Character Lookup table
    • Embeddig
    • 仮に英語であればascii文字しかないので,word2vecのように大規模にならない
  • Bi-GRUs
    • tweetを前から処理するGRUと後ろから処理するGRUの2つ
    • その和をとり1つのベクトルに変換(これがtweetのEmbeddings)
  • softmax
    • ユニークなhashtag数

character2vecと似てると言及しているが,Lookup tableが1つなくなってBi-LSTMがGRUに置き換わった程度の違い.

評価は単語ベースのモデルに対してhashtagの予測を行っている.

実装

著者実装の出力層をサッと眺めたが,softmaxだけでだったので,ラベルの分だけ学習データを冗長にしてみた.

テストとして自分のTweetを使ってみたところ,一応 自然言語処理 といれたら chainer のhashtagを予測した(小規模だったので,うまくいってるのか微妙ですが).


余談

本筋には関係ないが,別のTweet2Vecをつい先日見つけた.

Tweet2Vec: Learning Tweet Embeddings Using Character-level CNN-LSTM Encoder-Decoder

こっちはNNがより複雑な構成になっているし,hashtagが不要なので汎用性は高そう.