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

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

27c753b680ef466749c9d043e05b11fa?s=47 Akira Sasaki
February 04, 2022

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

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

27c753b680ef466749c9d043e05b11fa?s=128

Akira Sasaki

February 04, 2022
Tweet

Other Decks in Research

Transcript

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

  2. 自己紹介 • 佐々木 彬 (ささき あきら) • 株式会社ELYZA所属 • 経歴

    ◦ 2018年3月: 東北大学乾・岡崎研究室 (現: 乾研究室) 博士後期課程修了 ◦ 2018年4月〜2021年12月: 株式会社リクルート ◦ 2022年1月〜: 株式会社ELYZA • 専門 ◦ 賛否分類 (Stance Detection) • 趣味 ◦ Kaggle (Master) ◦ ルービックキューブ (平均13秒、最速8秒くらい) ◦ DTM (勉強中) ◦ MCバトル鑑賞 (勉強中) 2
  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
  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
  5. 可視化のための下準備 (1/3) • ※ 今回はGoogle Colaboratoryですべての検証を実施 • 必要なライブラリのインストール ◦ sentencepieceはrinnaで必要なため

    ◦ japanize-matplotlibは、日本語可視化の文字化けを避けるため • tokenizer, modelの読み込み 5
  6. 可視化のための下準備 (2/3) • 元リポジトリのmodel-config.yamlを参照し、GPT-2系の設定を確認 ◦ なお主に英語系のモデルではあるが、この configに記載されているモデルであれば 以下のようなmodel_configさえ書かずにモデル名指定だけで読み込める • rinnaの場合はtoken_prefixが

    ▁ となっているようなので、その点だけ修正 • 上記設定で言語モデルを読み込み 6
  7. 可視化のための下準備 (3/3) • 試しに生成させてみると、適切にモデルを読み込めていそうなことを確認 7 Wikipedia: Celesteより引用

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

    節分より引用
  9. 予測トークンの可視化 (2/2) 9 位置だけを指定すると、全レイヤーの予測を確認できる … Wikipedia: 節分より引用

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

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

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

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

    attributionが不要なタイミングでは、 generateの引数に attributionを指定しないほうがよさそう?
  14. ニューロン発火の可視化 (1/2) 14 Wikipedia: 磁気浮上式鉄道の年表 より引用 FFNレイヤーに含まれるニューロンの発火状況に対し てNMF (非負値行列因子分解 )

    を施し、 どの因子がどの位置のトークンに反応しているかを描 画
  15. ニューロン発火の可視化 (2/2) 15 西暦や国名に反応? 電磁気系の単語に反応?

  16. まとめ • eccoによる言語モデル可視化を実施 ◦ 手軽に言語モデルの性質を確認し、言語モデルの「クセ」を解釈できる ◦ 入力事例ごとに可視化できるため、予想外の出力のデバッグなどにも有用そう • 今後の展望 ◦

    モデル改善のサイクルに eccoを取り入れ、研究開発のイテレーションを早められるかも? ◦ まだまだ開発途中のようで、気になる方は contributeチャンス 16