CAEでクラスタリング
前置き
これからのタスクとして非定量データを可視化する手法やドキュメントのクラスタリングをすることが必要になってきました.
また,それなりに精度も欲しいので流行りのDeep何とかで何とかなりませんか?みたいな気持ちで,その辺りを調べて見るこにして見ました.
AEを用いたクラスタリング
Deep Clustering with Convolutional Autoencoders
こちらの論文ではConvolutional AEと,それに伴う特徴を用いて教師なしでクラスタリングをしようみたいな試みです.
CAEでうまく局所的特徴を捉え,クラスタリングに使う損失で特徴空間が歪むのを避けたりしています.
著者のkeras実装は上記のリンクにあります. ですが理解のために適当に自装して見ました.
結果
CAE部で事前学習をするとデコーダーから以下のような結果を得ます.
この事前学習で, うまく局所的特徴を捉えてくれます.
次に,クラスタリングレイヤーをKMeansのセントロイドで初期化してクラスタリングロスを追加し学習をします.
何ステップか後にt-sneを使って特徴量のクラスターを可視化した結果が以下になります.
クラスターごとに分かれてはいるのですが,
論文の示すようなクラスター間の距離が離れているような結果は得れませんでした.
まだ理解が完全に至っていないので,見直したら治りそうです.
Auto-clustering Output Layer
(Auto-clustering Output Layer)https://arxiv.org/pdf/1702.08648.pdf
次にこちらの論文を読みました.
著者のコードは下記にあります.
実装されていたものからバグをとるのが面倒だったのと,論文のdetailと違う点が見受けられたので解説は省きます.
まとめ
自然言語処理をクラスタリングをする際のアイデアとして, Word Level CNN, Seq2Seqを使ってAEを表現できないかとか考えています. 進捗が出たらまた更新しようと思います.