【論文メモ】Adaptive Input Representations for Neural Language Modeling
slackで流れてきたQiitaのアドベントカレンダーに参加してみました。12/1が欠番なのでトップバッターに。
qiita.com
Adaptive Input Representations for Neural Language Modeling | OpenReview
[1809.10853] Adaptive Input Representations for Neural Language Modeling
今日取り上げる論文はこちら。ざっくり言うと、language modelの入力で低頻度語にも同じサイズのword-embeddingを割り当てるのは無駄が多いのではという発想で、パラメータサイズを制限したモデルです。学習時間の効率化に加えて、精度も向上したという報告。
arxivをみるとFacebook AI Researchからの発表のようです。
概略
Language modelとは、その前の文字列から次の単語/文字を予測するという自然言語処理の基本タスクの一つ。しかし例えばBILLION WORDというコーパスでは、80万単語もの単語があり、単語ベースのアプローチでは80万単語それぞれについての確率を計算する部分がボトルネックになっているとのこと。Grave+ 2017のadaptive softmaxを入力にも拡張したadaptive input embeddingsを導入し、Vaswani+ 2017のself-attention modelを用いて、その効果を検証した。
adaptive input embeddings
出現頻度がk番目に大きい要素が全体に占める割合が1/kに比例するというジップの法則が知られている。単語を出現頻度順にn個のクラスターに分け、そのクラスター内の 分散表現を次元で表すことにした。Graves+ 2017に沿ってk=4を用いた。
単語ごとに分散表現の次元が異なると使いにくいので、d次元への線形写像をおいて次元を揃えてからモデルに入力している。
adaptive softmax
続いて、Grave+ 2017からadaptive softmax。単語をVh, V1, ...Vn-1のnクラスタに分け(hはheadのh)、Vhには各V1~Vn-1を表すembeddingを連結させる。まずはVhでのsoftmaxをとってVhに含まれる単語の確率は計算できる。V1~Vn-1に含まれる単語の確率を得たいときは、Vh上でのViの確率にVi内で計算したsoftmaxをかけて求める。lossを求めるときも、forwardのときも計算量削減に効果的。
モデル
モデルの構造としては、ほぼほぼVaswani+ 2017のモデルと同じTransformer(layer normalizationだけ各ブロックの"前"に置いた点が違うらしい)。decorder層のみを用いて16層の積層とした。各層はmulti-head self-attention block, FFN blockの2つのブロックから構成されており、各々にresidual connectionが設置されている。
データセット
・BILLION WORD
768M word tokens
vocabulary of 800K word types (3回以上出現する単語)
・WIKITEXT-103
100M tokens
vocabulary of 260K word types(3回以上出現する単語)
embedding
・固定長のword embedding(入出力とも固定長のときはd=512, 出力のみadaptiveのときは入力はd=256とした)
・Character CNN
・adaptive input representations
WIKITEXT-103: 20K(d=1024), 40K(d=256), 200K(d=64)の3クラスター
BILLION WORD:60K(d=1024), 100K(d=256), 640K(d=64)の3クラスター
・sub-word models:byte-pair encodingによる約3万token(d=1024)
などを組み合わせて複数のembeddingを比較した。なお、いずれも評価としては単語単位でのperplexityを算出した。
実験結果
先行研究との比較
いずれのコーパスでもstate-of-the-artを達成。なお、Shazeer+ 2017はSparsely-gated mixture-of-experts layerを利用したモデル、Rae+ 2018は"Hebbian softmax" + LSTMによるモデル、らしい。
実験結果
続いて、inputやoutputを変更しての比較。
・adaptive input representation with tied input and output layers(ADP-T)が最も性能が良く、小さなvocabularyを持つBPE modelと同じくらい学習時間が短く済んだ。
・BPEは通常のembeddingによるmodelに比べ
・CNN modelは通常のembeddingによる入力に比べ性能は改善したもののADP-Tには及ばず、学習も遅かった。
・より大きなコーパスであるBILLION WORDでは改善の幅は小さかった。
上が単語の出現頻度ごとの損失。正則化の効果かいずれもweight share('-T'つきのモデル)すると改善する。全頻度を通じてADP-Tが良かった。下は直前単語の出現頻度ごとの損失。高頻度語の次の語は予測しにくい。低頻度語においてはCNNの成績が良いのが特徴的。
BILLION WORDでは同様の解析をすると、低頻度語でADP-Tがあまりよくない(理由はよくわからない)。
WIKITEXT-103ではADPにおいて、低頻度語にdropoutを加えたほうが良い。ただ、この効果はBILLION WORDでは見られなかった。
まとめ
self-attentionの導入による更新が大きく、adaptive input representationによる正味の更新としては、Embedding→AdaptiveとAdaptive→Adaptive(tied)を比較してWIKITEXT-130で-1.67、BILLIION WORDで-0.45の更新。
コーパスのサイズや性質に依存するかもしれないが、サブワードで語彙数を削減するアプローチよりも、低頻度語を低次元に埋め込むことでパラメータを削減するアプローチが有用だった。ただ、language modelでは、その語をまるごと再現しなくてはいけないのでサブワード化はやや不利。文書分類タスクや感情分析タスクの入力に用いるときは、また違う結果になるかもしれない。