自然言語処理ナイト #dllab

dllab.connpass.com

NLPに関するイベントとして目に入ってきたので参加してみました。

業界関係者でも自分がきちんと知っている分野でもなく、純粋に勉強目的で一参加者として勉強会に参加したのは久々でしたが、非常に内容の濃いイベントで面白かったです。主催されたマイクロソフト様と登壇者の皆様、ありがとうございます。

以下、自分の理解の範囲で書いたまとめを記しておきます。

Attention is all you need !!! を入門するまえに!

(Microsoft 得上竜一さん)

Transformer論文 Attention is All You Need を読むための前提知識を紹介したセッション。

arxiv.org

Attention is All You Need の解説記事は日本語でもあります。

deeplearning.hatenablog.com


  • Attentionは、注目したデータに従って出力する仕組み
    • 例: 画像処理
    • 背景が映った画像をそのまま処理すると背景情報を取り込んでしまう
    • Attentionを使うことで人だけに注目することができる
    • 人間は、人間が移ったとき写真について背景を無視することを自然とできるが、それと同じ
    • Convolution を二層に分岐して片方でsigmoidで出力して最後に分岐を合流させる。sigmoidが0に近い値はその後の処理に影響を与えなくなる
  • SENet
    • Convolutionによって複数の出力を得る。縦横のエッジ、色、明るさなど
    • 普通のCNNではこれら全ての特徴を後続の層でも利用する
    • 人間が注目する場合はどこに注目するかはケースバイケース
    • SENetでは画像の特徴をダイナミックに決定するアテンションになる
    • 画像全体に対してAvg. Poolingを取り、Conv(1,1)で特徴をとり最後にSigmoidを取る
    • このような仕組みを各Conv Unit で使えば、少し演算量増える程度で性能を上げることが確認できている
  • 言語処理におけるAttention
    • 典型的な文章分類問題
    • 特定の位置にある単語に注目するようにネットワークを構成することができる
    • 単語の特徴量を得られているとすると、それに対しアテンションを計算し、特徴ベクトルに掛け合わせる
  • 翻訳
    • Encoderで特徴抽出を行い、Decoderで別の言語に書き出していく
    • LSTMでは単語から次の単語への出力を行っていく
    • 契約書などでは単語の対応などの正確性が必要
    • Attentionを用いて、最初に翻訳すべき単語を決める
    • その単語をもとに次のAttentionを決めていく
    • 各単語の特徴とDecoderの初期ベクトルの内積を取る。これがAttentionの初期スコアになる。このスコアにSoftmaxをかけると、それがAttentionのスコアになる
    • 画像のときはSigmoidを使って全てのピクセルで注目するか否かを表現していたが、言語の場合はsoftmaxを使って、周りに比べて注目すべきかどうかを考える
    • どのような翻訳をするのかを出力するQuery vector と Key vector の内積をとってsoftmaxにかける
  • Self Attention
    • Query /Key / Value ã‚’Encoder / Decoder ではなく同じタイミングで特徴抽出を行う
    • ある単語は文章中の他の単語に依って意味が変わる
    • あなたを「嫌い」では「ない」
    • Self Attentionは他の単語に特徴づける動作をもたせることができる
    • 嫌いというQueryと全ての単語のKeyとの内積を取り、softmaxを出し、Valueとかけたものを現在の単語ベクトルに足す
    • Self Attentionで他の単語を使って自分自身を特徴づけることができる
  • Attention is All You Need
    • Transformerの話
    • RNNの問題点: 一つ前の単語の計算が終わるまで次の単語の計算ができない
    • RNNのレイヤーをSelf AttentionのレイヤーにおきかえるのがTransformer
    • BERT / GPT-2 などもTransformerを使う
    • これで基礎知識はついたのでこの論文を読んでね

生成系NLPの研究動向

(Microsoft 伊藤 駿汰さん)

今回このセッションを聞くために参加しましたが、非常にいい内容でした。

  • 文生成とは
    • 文字: 言語を表記するために使われる記号の最小単位
    • 単語: 文字を組み合わせて作られる、意味を表し構文上の働きを持つ最小単位
    • æ–‡: 単語を組み合わせて作られるまとまりある考え
    • 単語列: 単語を並べたもの。文も単語列の一種
    • 文生成: 単語の数、単語の種類、単語の順番を決定すること
    • 一定の制限を入れないと解けない。次の単語を予測を骨格とした文生成
    • 次単語予測: ある単語列が与えられたとき、次に来る単語を予測すること。例: スマホの予測入力
    • ある単語列が与えられたとき、次にどの単語になるか確率を計算し、最も確率が大きい単語を選ぶ
    • 文生成最初の単語Aを予測し、AからBを予測し、という流れを文が終わるまで繰り返す
  • 文生成モデルの歴史
    • 文生成モデルの歴史は言語モデルの歴史と絡んでいる
    • 言語モデル: ある文wが生じる確率を与える確率分布P(w)のこと
    • P(w)がわかると
      • 複数文で尤度比較ができる
      • 分布からいくらでも文を生成できそう
    • 言語モデル
      • 文を構成する単語の数は可変
      • 1種類の言語には数万程度の単語が存在
    • P(w)の計算は無理
      • 逐次的アプローチで近似する
      • 次に来る単語はそれより前の単語が何かで決まると仮定
    • N-gram言語モデル
      • ある単語より前の単語全部を見るのがつらいので見る数を決めて計算を軽くする
      • 前のN-1個の単語の並びに対し、次にきそうな単語の確率がわかればP(w)が計算できる
      • たくさんのデータから統計的に確率は得られる
      • P(wi|wi+1-N, Wi-1)があれば次単語予測ができて文生成ができる
    • 統計的手法を用いる文生成
      • 現実には5-gram程度が限界
      • Pitman-Yor過程を使って可変長N-Gramなども使われる
      • 現代ではあまり使われていない
    • DNNの学習
      • 入力と正解が必要
      • 予測が正解に近くなるよう学習を進めていく
      • RNN言語モデル(Mikolov 2010)
      • RNN (Rumelhart 1986)
      • P(w)が得られない変わりに、ある単語をいれたとき、次に来る単語の確率を予測させる
      • 入力: 単語、正解: 次の単語
    • RNNの問題点
      • プレーンRNNは遠い過去のデータの情報が急速に消えていくもしくは爆発的に増大していく
      • LSTM( Hochreiter 1997) ã‚„ GRU( Cho 2014) といった手法によって十分学習可能な水準に到達
    • Seq2Seq (Sutskever 2014)
      • 文の意味を取り出すエンコーダーRNN、取り出した意味から文を生成するデコーダーRNNをつなげて、文から文への変換を行うモデル
    • S2S + Attention (Luong 2015)
      • 過去の情報を重み付けして再度利用するAttention機構をSeq2Seqに追加して精度を改善したモデル
    • 生じてきた問題: RNNは過去の情報を処理してからでないと処理できない
    • Transformer (Vaswani 2017)
      • Seq2Seqと同じ文変換を行うモデル
      • 再帰構造を持たないNNとAttentionのみで構成され、高速
      • 翻訳タスクにおいて、RNN系手法よりはるかに少ない学習でSOTA
      • 長期依存を取れない問題を解決
      • 軽量・高速で並列化向きの構造
    • BERT (Devlin 2018)
      • 巨大な12層のTransformer Encoder
      • 2種類の言語モデル的事前学習
        • マスクされた単語の予測
        • 文の連続判定: 2つの文が連続した文であるかどうかの確率値
      • 膨大なデータで事前学習 + 少数のデータで目的タスクに転移学習
      • NLPの幅広いベンチマークでSOTA
      • 少量のデータで学習できるというのが産業利用上非常に大きかった
      • 工夫された事前学習によってTransformerの双方向学習が可能に。言語モデル的事前学習の有効性を示す
    • GPT-2 (Radford 2019)
    • UniLM(Dong 2019)
      • Transformer Prefix LM を使った事前学習モデル
      • 複数種類の言語モデル学習
      • 読解系タスクでBERT並、生成系タスクでSOTA
    • T5 (Raffel 2019)
      • Encoder - Decoder 構造を持つ巨大事前学習モデル(Transformerと同じ)
      • 全てのタスクを文変換として事前学習を行う
    • GPT-3 (Brown 2020)
      • 1750億パラメータの超巨大モデル
      • BERT: 3.4å„„
      • T5: 110å„„
      • 構造はGPT-2を踏襲
      • モデルのパラメータを増やすことで少ないデータの転移学習でも性能を出せるようになる
    • トレンドの推移
      • 2018å¹´
        • LSTM→Transformer
        • Transformer改善
        • BERT
      • 2019å¹´
        • BERTの流れを組む巨大事前学習モデル
        • 生成系タスクでGPT-2, T5が台頭
      • 2020å¹´
        • NLPはGPUとお金で殴る世界。GPU4000台並べるような世界
        • GPT-3
  • 今後のトレンド予測
    • Self-AttentionなどのTransformerの各要素の有効性についての知見が集積
    • Transformerは精度改善や軽量化の亜種が登場
    • GPT-3の方向性は実用上極めて重要
  • 発表者の研究
    • Memory Attention
    • Seq2Seq に発話に対する応答生成をAttentionを使って選んでいく
    • 研究から得られた知見
      • Attentionとは実質類似度の計算、情報の抽出に利用できる
      • 計算負荷も小さい、大小関係、解釈性
      • Transformerは新しい情報の流れを追加することが難しいが、LSTMベースのSeq2Seqは比較的簡単
      • シンプルなため、実装や構造検討に時間がかからない、とりあえずの実装として価値あり
      • 文生成の自動評価は難しい、対話系生成モデルは自動評価が極めて困難
        • BLEUã‚„METEOR等もあるけど不適切

NLPソリューション開発の最前線

(ISID 深谷勇次さん、小川雄太郎さん、ファイサルさん)

ISIDが5月にリリースした新製品のアーキテクチャや言語モデルの解説。

isid-industry.jp

  • フロントエンド
    • Azure Blob Storage に静的サイトをデプロイ
    • Vue.js / Nuxt.js フレームワークで静的サイトを構築し、axiosでバックエンドと通信
  • APサーバ
    • Azure VM上でDocker Compose を使ってコンテナ管理
      • ACIはマルチコンテナ運用が困難で、k8sは重たかった
    • Python + Django REST Framework
    • 非同期処理: Celery + RabbitMQ
    • DB: Azure PostgreSQL
    • 運用監視・ログ収集: Azure Log Analytics & Azure Logic Apps
  • MLサービス
    • Azure ML
    • GPU搭載のDSVMã‚’Azure ML に紐付け
    • APサーバからMLサービスを経由しDSVMにPythonファイルと引数を投げて実行
  • 言語モデル
    • ISIDオリジナルALBERTを作った
    • 業務システムに組み込む要件としてGPUリソースのコストとパフォーマンスの問題があったため、高速・小規模なモデルを選定した
  • ALBERT
    • 埋め込み行列の因数分解
    • レイヤーパラメーターの共有
      • 12個のレイヤーで1つのパラメータを使う
    • NSPの代わりにSentence-Order Predictionの新補助タスク
    • LAMB アルゴリズム使用
      • 大きいバッチで学習
    • n-gram マスキング
    • SentencePiece対応
  • ALBERT日本語版はまだ1つしかない
    • https://github.com/alinear-corp/albert-japanese
    • モデルの長さは512語で、実際の業務文書が入っていない
    • SentencePieceを使用している
  • ISIDオリジナルALBERT
    • モデル長1024語
    • Sudachiを使用。これはNICTの実験結果により、事前に形態素解析を行ったら良い精度が達成できることがわかっているため
    • Whole Word Masking (WWM) を使う
    • コーパス: Wikipedia日本語
    • トークナイザー: Sudachi モードC + Wordpiece
    • Livedoorニュースでファインチューニング
  • 今後の課題
    • 最長の長さを1024にしたため推論時間に影響がある
    • ナレッジ蒸留手法 DistillBERTなどの検討、Sparse Attentionの使用

Azure ML 自然言語処理の最新動向

(Microsoft 女部田啓太さん)

github.com

  • Classical Text Explainer
    • 古典的な機械学習パイプライン
    • sklearn の線形モデル coefs_
    • Treeベースのアンサンブルモデル feature_importances
    • デフォルト 1-gram BoW + sklern CountVectorizer + LR
  • Unified Information Explainer (Guan 2019)
    • MSのSOTAの研究
    • 相互情報量をベースにした post-hoc のアプローチ
    • DNNの隠れ層についての説明
    • 現在はBERTのみ対応
  • Introspective Rationale Explainer (Yu 2019)
    • MSのEMNLPで発表した研究
    • モデル学習の仕組みに埋め込むタイプ
    • 内省的生成機(Introspective Generator) を前処理で利用
    • 入力テキストを根拠(raitionales) と半根拠(anti-rationales) に分岐
    • 根拠のみを使って精度が最大になるように学習
    • モデルは入力テキストから生成された根拠しかみない