Upgrade to Pro — share decks privately, control downloads, hide ads and more …

eccoによる言語モデルの可視化 (2022-01-28 NLP Hacks#1)

Akira Sasaki
February 04, 2022

eccoによる言語モデルの可視化 (2022-01-28 NLP Hacks#1)

2022-01-28に開催されたNLP Hacks#1での発表資料です。

Akira Sasaki

February 04, 2022
Tweet

Other Decks in Research

Transcript

  1. eccoによる
    言語モデルの可視化
    佐々木 彬 (hikomimo)
    20220128 NLP Hacks
    1

    View Slide

  2. 自己紹介
    ● 佐々木 彬 (ささき あきら)
    ● 株式会社ELYZA所属
    ● 経歴
    ○ 2018年3月: 東北大学乾・岡崎研究室 (現: 乾研究室) 博士後期課程修了
    ○ 2018年4月〜2021年12月: 株式会社リクルート
    ○ 2022年1月〜: 株式会社ELYZA
    ● 専門
    ○ 賛否分類 (Stance Detection)
    ● 趣味
    ○ Kaggle (Master)
    ○ ルービックキューブ (平均13秒、最速8秒くらい)
    ○ DTM (勉強中)
    ○ MCバトル鑑賞 (勉強中)
    2

    View Slide

  3. eccoとは?
    ● ニューラル言語モデルの可視化に特化したOSS [repo]
    ○ 今回の検証ではバージョン 0.1.2を利用
    ● 昨年のACL2021 demo trackにも採択 [paper]
    ● 開発者は以下のような可視化で有名なJay Alammarさんら
    ○ The Illustrated Word2vec
    ○ The Illustrated Transformer
    ○ The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)
    ○ The Illustrated GPT-2 (Visualizing Transformer Language Models)
    ○ How GPT3 Works - Visualizations and Animations
    ● PyDataでもチュートリアルを開催
    ○ Jay Alammar - Take A Look Inside Language Models With Ecco | PyData Khobar
    ● 開発者が英語テキストを対象に各種可視化をしている記事
    ○ Interfaces for Explaining Transformer Language Models
    ○ Finding the Words to Say: Hidden State Visualizations for Language Models
    3

    View Slide

  4. 本LTで可視化する言語モデル
    ● rinna/japanese-gpt2-medium (Hugging Face上でpublic)
    ○ 以降便宜上、このモデル自体を rinnaと呼称
    ● 日本語データで学習されたGPT-2ベースのモデル
    ○ GPT-2自体の説明は以下を参照
    ○ (Radford+, 2018) Language Models are Unsupervised Multitask Learners (PDF)
    ○ The Illustrated GPT-2 (Visualizing Transformer Language Models)
    ● 学習用スクリプト: rinnakk/japanese-pretrained-models
    ● 学習データとしては以下が利用されている
    ○ Japanese CC-100 (2022/01/26 現在503…)
    ○ 日本語Wikipedia
    4

    View Slide

  5. 可視化のための下準備 (1/3)
    ● ※ 今回はGoogle Colaboratoryですべての検証を実施
    ● 必要なライブラリのインストール
    ○ sentencepieceはrinnaで必要なため
    ○ japanize-matplotlibは、日本語可視化の文字化けを避けるため
    ● tokenizer, modelの読み込み
    5

    View Slide

  6. 可視化のための下準備 (2/3)
    ● 元リポジトリのmodel-config.yamlを参照し、GPT-2系の設定を確認
    ○ なお主に英語系のモデルではあるが、この configに記載されているモデルであれば
    以下のようなmodel_configさえ書かずにモデル名指定だけで読み込める
    ● rinnaの場合はtoken_prefixが ▁ となっているようなので、その点だけ修正
    ● 上記設定で言語モデルを読み込み
    6

    View Slide

  7. 可視化のための下準備 (3/3)
    ● 試しに生成させてみると、適切にモデルを読み込めていそうなことを確認
    7
    Wikipedia: Celesteより引用

    View Slide

  8. 予測トークンの可視化 (1/2)
    8
    rinnaは24層のモデルのため 0オリジンで layer=23 を指定し、
    13番目のトークン「変わり」における他トークンの生成
    確率を確認
    Wikipedia: 節分より引用

    View Slide

  9. 予測トークンの可視化 (2/2)
    9
    位置だけを指定すると、全レイヤーの予測を確認できる

    Wikipedia: 節分より引用

    View Slide

  10. トークン予測順位可視化
    10
    Wikipedia: 惑星のさみだれより引用
    各トークンの、各レイヤーにおける出力順位を出力
    下の行ほど深いレイヤーの予測を示している

    View Slide

  11. 11
    拡大するとこのような感じ

    View Slide

  12. 指定した単語の予測順位可視化
    12

    View Slide

  13. Attributionの可視化
    13
    生成された各トークンにカーソルを合わせると、それ以前のどの単語に
    着目して生成したかがスコアで出力される。
    演算方法としてはSaliencyの他にIntegratedGradients、
    InputXGradient、DeepLiftなど、2022/01/26時点だと
    8種類が実装されている模様
    ※ 演算方法次第では生成がだいぶ重くなる印象でした。
      attributionが不要なタイミングでは、 generateの引数に
    attributionを指定しないほうがよさそう?

    View Slide

  14. ニューロン発火の可視化 (1/2)
    14
    Wikipedia: 磁気浮上式鉄道の年表 より引用
    FFNレイヤーに含まれるニューロンの発火状況に対し
    てNMF (非負値行列因子分解
    ) を施し、
    どの因子がどの位置のトークンに反応しているかを描

    View Slide

  15. ニューロン発火の可視化 (2/2)
    15
    西暦や国名に反応?
    電磁気系の単語に反応?

    View Slide

  16. まとめ
    ● eccoによる言語モデル可視化を実施
    ○ 手軽に言語モデルの性質を確認し、言語モデルの「クセ」を解釈できる
    ○ 入力事例ごとに可視化できるため、予想外の出力のデバッグなどにも有用そう
    ● 今後の展望
    ○ モデル改善のサイクルに eccoを取り入れ、研究開発のイテレーションを早められるかも?
    ○ まだまだ開発途中のようで、気になる方は contributeチャンス
    16

    View Slide