論文紹介: EMNLP2018で発表された文書の階層分類の論文2本

# tl; dr

* 文書の階層分類 (Hierarchical classification) は、分類体系が階層をなしてる場合の文書分類
* 本投稿では、EMNLP2018で発表された文書の階層分類の論文を2本紹介
* [Sinha, Dong, Cheung and Ruths. A Hierarchical Neural Attention-based Text Classifier.](http://www.aclweb.org/anthology/D18-1094)
    * 1つの分類器で階層分類を行うことにより、階層分類全体の総パラメータを抑える。
    * 全階層 (分類)で共通の双方向LSTMを用い、上位階層の分類結果に条件付けて下位階層の分類を行う
    * 既存の階層分類のSotAよりも少ないパラメータで高い精度を実現
    * 非階層分類な分類器よりも精度が劣っているが、提案手法は階層分類の*枝*をまたぐように間違えてしまうことが少ない
* [Shimura, Li and  Fukumoto. Learning Hierarchical Category Structure for Multi-label Short Text Categorization](http://www.aclweb.org/anthology/D18-1093)
* 短い文章の階層分類において、下位分類では1クラスあたりのデータが少なくなり、特徴量抽出の学習がうまくいかない問題を対象としている。
* 各階層ごとに分類器を作成するアプローチにおいて、階層ごとに作成した分類器のパラメータを下の階層に転移させる。
* 人工的にテキストを短くした階層分類のデータにおいて、既存の階層分類のSotAよりも高い性能を実現

# はじめに

文書分類 (Text categorization) は、テキストデータを入力に、テキストデータが属する分類を推定する問題です。文書の階層分類 (Hierarchical classification) は、分類体系が階層をなしてる場合の文書分類です。

最もイメージしやすいのはeコマースサイトの商品分類でしょうか。新しい商品が登録されたときに、商品の説明文を元に、商品を階層化のカテゴリのいずれかに分類します (e.g. "パソコン・オフィス用品"の中の、"パソコン・周辺機器"の中の、"ノートパソコン")。

一方で、特許分類の1つである[Fターム](https://ja.wikipedia.org/wiki/F%E3%82%BF%E3%83%BC%E3%83%A0)のように、1つのデータに複数の分類が付与されるようなマルチラベルな階層分類も有ります。

本投稿では、EMNLP2018で発表された文書の階層分類の論文を2本紹介します。

# 階層分類の先行研究

階層分類の歴史は長いです。詳しくはサーベイ論文[^2]などを読むのが良いと思います。階層分類の手法は大きく2つ (+ 非階層分類) にわけられます。

[^2]: [Silla and Freitas. 2011. A Survey of Hierarchical Classification Across Different Application Domains. Data Mining and Knowledge Discovery. 22:1–2, pp. 31–72.](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.183.302&rep=rep1&type=pdf)

| ![screenshot3.png](https://qiita-image-store.s3.amazonaws.com/0/152362/9639fabf-7cd1-e389-5bbb-e51d525de8f7.png) |  ![screenshot4.png](https://qiita-image-store.s3.amazonaws.com/0/152362/2d2b8b52-7672-e23c-bc17-c040fea7283b.png) | ![screenshot5.png](https://qiita-image-store.s3.amazonaws.com/0/152362/8f3c5b73-db85-1298-154c-e62344f695d8.png) |
|---|---|---|
| Flat classification (=階層性の考慮なし) | Local classification | Global (Big-bang) classification |

全ての図は[^2]から引用


まず、階層性を全く無視して、末端分類に直接分類する手法をFlat classificationと呼びます。次に、複数の分類器を使い階層に分類する手法をLocal classificationと呼びます。Local classificationで最もわかりやすいのは、上の図にあるように分岐点ごとにマルチクラス分類を行う、Top-downと呼ばれるアプローチでしょうか。最後に、1つの分類器で階層を扱う手法をGlobal (Big-bang) classificationと呼びます。Global classificationには様々な実現方法が考えられますが、Local classificationに当てはまらない手法は全てGlobal classificationと呼んでいるようです（つまり「その他」的アプローチ）[^2]。

# 論文1: A Hierarchical Neural Attention-based Text Classifier

```
@InProceedings{sinha-EtAl:2018:EMNLP,
  author    = {Sinha, Koustuv  and  Dong, Yue  and  Cheung, Jackie Chi Kit  and  Ruths, Derek},
  title     = {A Hierarchical Neural Attention-based Text Classifier},
  booktitle = {Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing},
  month     = {October-November},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics},
  pages     = {817--823},
  url       = {http://www.aclweb.org/anthology/D18-1094}
}
```

本研究では、各データが階層化された分類体系の末端の分類のいずれか1つに入る階層分類を対象にしています。特に従来のLocal classifierでは階層の数にあわせて分類器の数が増えてゆくことを問題視しています。

## 手法

本研究は、Globalな階層分類により、階層分類全体の総パラメータを抑えた上で階層分類を行う手法です。

![figures.png](https://qiita-image-store.s3.amazonaws.com/0/152362/b9c6db7a-8f29-f591-d4cc-7e1606d1fea7.png)

本手法は次の手順で分類を行います。

1. 全階層で共通の双方向LSTMを使い、位置$t$の単語の埋め込み表現$w_t$を、コンテキストを考慮した表現$h_t = [\overrightarrow{h_t}; \overleftarrow{h_t}]$に変換します。（ただし、$h_i = \overrightarrow{\text{LSTM}}(w_t, \overrightarrow{h_{t-1}})$）
2. 1つ上の階層 ($k-1$番目の階層) で、データが分類$i$に属すると推定されたとします。この分類に紐ついた埋め込み表現$c_i^{l_{k-1}}$を、各$h_t$にconcatします。(論文内では明言されていないが)ここで埋め込み表現$c_i^{l_{k-1}}$はランダム初期化され、他のパラメータと同様に学習されるものと思われます。1階層目がどのように扱われるかには言及がありませんでした。
3. 分類に紐ついた埋め込み表現$c_i^{l_{k-1}}$をconcatした$h_t$に対してattentive poolingを行い、階層別の文献表現を得ます。ここでは、単なるattentive poolingではなく、multi-head attentive poolingを行います。

本手法において重要なのは2の手順で、上位階層の分類結果に条件付けて下位階層の分類を行う点です。

## 実験

論文の階層分類データ(WOS)と、ウィキペディア記事の階層分類データ(DBPedia)を対象に実験しています。

![screenshot1.png](https://qiita-image-store.s3.amazonaws.com/0/152362/5adeb808-0d67-77e5-6a63-86f5dcd35925.png)

上の4つの手法が階層分類を行わない手法（= Flat classification) です。階層分類手法である2つのうち１つめの手法は従来のSotA（らしい）です。提案手法により、階層分類のSotAよりも少ないパラメータで高い精度を実現しています。しかしながら、BiLSTM + MLP + Meanpool (比較的古典的な深層学習に基づくテキスト分類）よりも、精度が劣っています。

![screenshot2.png](https://qiita-image-store.s3.amazonaws.com/0/152362/79076d00-3f70-8e94-8cb0-fba78cb66954.png)

それに対して、著者らは、提案手法はFlat classificationよりも*枝*単位で間違えてしまうことが少ないと主張しています。つまり、下位階層の各分類に属するデータを、上位階層に存在する親の分類に入っているとみなし、上位階層おける分類精度を比較することで、提案手法の有効性を主張しています。

## コメント

分類に紐ついた埋め込み表現を使うなどのアイデアは面白いですが、やはりFlat classificationの精度より劣るのは少し残念です。提案手法はGlobal classification的な手法ではあるものの、上位階層での分類結果が下位階層に影響するため誤差が蓄積するという、Top-downアプローチの悪いところを引き継いでしまっているように思います。

# 論文2: HFT-CNN: Learning Hierarchical Category Structure for Multi-label Short Text Categorization

```
@InProceedings{shimura-li-fukumoto:2018:EMNLP,
  author    = {Shimura, Kazuya  and  Li, Jiyi  and  Fukumoto, Fumiyo},
  title     = {HFT-CNN: Learning Hierarchical Category Structure for Multi-label Short Text Categorization},
  booktitle = {Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing},
  month     = {October-November},
  year      = {2018},
  address   = {Brussels, Belgium},
  publisher = {Association for Computational Linguistics},
  pages     = {811--816},
  url       = {http://www.aclweb.org/anthology/D18-1093}
}
```


本研究では、階層分類において、下位分類では1クラスあたりのデータが少なくなるという問題に取り組んでいます。特に、テキストデータが短い場合、未知語が増えたりして特徴量抽出がうまくいかない問題があるので、そのような問題設定において有効な手法について検討しています。

## 方法

本研究は、もう1つの研究とは対象的に、Local classificationなアプローチです。本手法では、Local classificationの中でも各階層ごとに分類器を作成するアプローチをとっています。

![figures.png](https://qiita-image-store.s3.amazonaws.com/0/152362/b5a3e949-0c97-b13d-b1cb-791b1735821f.png)

図は[^2]から引用

提案手法は明快で、階層ごとに作成した分類器のパラメータを下の階層に転移させてゆきます。このとき、分類器の特徴量抽出器に相当するCNNの部分だけを転移させ、上位階層の分類器のパラメータを下の階層の分類の学習の初期値とします。これにより、階下位分類において1クラスあたりのデータが少ない、テキストデータが短い場合に特徴量抽出がうまく学習できない問題を解決します。

![figures.png](https://qiita-image-store.s3.amazonaws.com/0/152362/a33d907f-44ac-693f-2371-16d2e01678b0.png)

このような手法だと、上位階層の結果に関係なく下位階層の分類結果も算出されるので（そしてそれが矛盾する可能性もある）、これらの分類結果を組み合わせて、最終的な予測ラベルを出力する方法が必要です。著者らはそれをおこなうために、"Boolean Scoring Function " (BSF) と"Multiplicative Scoring Function" (MSF)を提案しています。

論文内では概念的な説明に終始しているため既存手法を使っているようにみえるのですが、特に論文をひいていません。したがって、手法については想像するしかないのですが、BSFは各階層ごとに1つの枝を選んでゆくのに対し、MSFは上位n個の枝を階層ごとに選択し、何らかの方法で最終的に一本の枝を選ぶ手法のようです。

## 実験

新聞データのカテゴリ分類 (RCV1) とAmazonの製品説明に基づくカテゴリ分類(Amazon670K)を対象にしています。本研究では、短いテキストを対象にしているということで、前者はタイトルだけ(最大13単語)、後者は製品説明文の先頭13単語だけを使うものとしています。

![figures.png](https://qiita-image-store.s3.amazonaws.com/0/152362/ec1ad8ee-79e3-b9ae-1673-bb2b5f3de9a9.png)

HFTが提案手法です。WoFTは提案手法と同一ですが、前述した転移学習をいれない（階層ごとに完全に新しく学習しなおす場合）です。上位階層がパラメータを転移させることで一貫して性能が向上することがわかりました。

![figures.png](https://qiita-image-store.s3.amazonaws.com/0/152362/d4142d4d-e36d-f130-11ae-f214023728fe.png)

XMLはSotA(らしい)先行研究です。提案手法は先行研究よりも高い性能を実現できていることがわかります。

## コメント

実験では、本来長文のデータを無理やり短文にしているが、そもそも短文かつ階層化された分類体系を持つデータなどあるのかな、と感じた。細かい分類体系のいずれかに当てはめるためには、入力データにも相応の長さが求められるのではないだろうか。13単語からなる文(章)を数千〜数万規模の分類体系にわけるというのは少々違和感がある。

編集可能な図は[こちら](https://drive.google.com/open?id=1Dv0h-bfZH5sCsne3A4EkYmGBLxjsFVIM)。