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

実践:日本語文章生成 Transformers ライブラリで学ぶ実装の守破離 / Introduction of Japanese Text Generation with Transformers

実践:日本語文章生成 Transformers ライブラリで学ぶ実装の守破離 / Introduction of Japanese Text Generation with Transformers

「PyCon JP 2022」での登壇「実践:日本語文章生成 Transformers ライブラリで学ぶ実装の守破離」の発表資料
https://2022.pycon.jp/timetable?id=EEA8FG

Shotaro Ishihara

October 12, 2022
Tweet

More Decks by Shotaro Ishihara

Other Decks in Technology

Transcript

  1. 石原祥太郎
    日本経済新聞社 日経イノベーション・ラボ 主任研究員
    PyCon JP 2022、2022 年 10 月 14 日
    実践:日本語文章生成 
    Transformers ライブラリ
    で学ぶ実装の守破離

    View Slide

  2. 2022 年 8 月、画像生成 AI の衝撃
    2
    https://www.nikkei.com/a
    rticle/DGXZQOUC180Y60
    Y2A910C2000000/

    View Slide

  3. => デモンストレーション
    日本語の文章生成も
    急速に進化中

    View Slide

  4. 4
    ● 講演では、デモンストレーションや図解を交え、
    技術の概要・魅力・実装方法を知る機会を目指す
    ● 録画公開に同意済み、資料も公開済み
    ● 踏み込んだ話については、ぜひ質疑応答や会場内
    での雑談で
    本発表の狙い

    View Slide

  5. 5
    ● 近年の自然言語処理の躍進
    ● Transformers ライブラリによる実装の守破離
    ○ 守:既存のモデルをそのまま使う
    ○ 破:既存のモデルを「ファインチューニング」
    ○ 離:「事前学習」から取り組む
    ● 日本経済新聞社での事例
    本発表の概要

    View Slide

  6. 6
    ● 機械学習(教師あり)とは?
    ● 自然言語処理では、どのような学習が主流?
    技術の概要が分かると、実装の守破離が分かりやすく
    なるはず
    これから説明する技術

    View Slide

  7. 半径 3 の円の面積
    は?

    View Slide

  8. 半径 3 の円の面積
    は?
    => 公式 面積 = 半径 × 半径 × 3.14

    View Slide

  9. 9
    図解してみる
    出力(面積)
    入力(半径)
    ルール(公式)
    処理

    View Slide

  10. 入力された記事の
    要約は?

    View Slide

  11. 11
    要約のためのルール
    要約
    記事の本文
    ルール
    与えられた記事を
    要約するルール
    処理

    View Slide

  12. 12
    要約のためのルール……を書くのは大変
    要約
    記事の本文
    ルール
    与えられた記事を
    要約するルール
    処理

    View Slide

  13. => 機械学習(教師あり学習)
    ルールが分からない
    問いに、我々はどう
    立ち向かうか

    View Slide

  14. 14
    「?」には何が入る?

    View Slide

  15. 15
    図解してみる
    ルール
    入力(x)
    出力(y=f(x))
    モデル
    (x, y) = (0, 3), (1, 5), (2, 7), (3, 9), (4, 11), (5, ?)

    View Slide

  16. [再掲] 入力された
    記事の要約は?

    View Slide

  17. 17
    本文と要約を与えたら何とかなる!?
    ルール
    記事の本文
    要約
    モデル
    与えられた記事を
    要約するルール

    View Slide

  18. 18
    ● 機械学習(教師あり):入力と出力のペアを大量
    に与えることで、いろいろな問題が解ける(ルー
    ルが導出できる)ようになった
    ● 例:画像認識・広告配信など
    機械学習(教師あり)の成果

    View Slide

  19. 19
    ● 機械学習(教師あり):入力と出力のペアを大量
    に与えることで、いろいろな問題が解ける(ルー
    ルが導出できる)ようになった
    ● 課題:自然言語は表現力が高すぎて、入力と出力
    のペアを与えても、十分に学習できなかった
    自然言語処理での課題

    View Slide

  20. 20
    ● アラビア語の記事の本文と要約のペアを与えられ
    た人間は、アラビア語の記事を要約できるように
    なるか?
    ● アラビア語の文法を事前に学習しておきたい……
    直感的な説明

    View Slide

  21. 21
    解決策:事前学習
    ルール
    文法獲得の入力
    文法獲得の出力
    モデル
    大量の文章
    文章を書くための
    汎用的なルール
    大規模言語モデル、基盤モデル

    View Slide

  22. 22
    解決策:ファインチューニング
    ルール
    記事の本文
    要約
    モデル
    与えられた記事を
    要約するルール
    文章を書くための
    汎用的なルール

    View Slide

  23. 23
    大量の文章から、文法獲得のための入力と出力のペア
    を生成できる(自己教師あり学習)
    事前学習の例:穴埋め、続きを当てる
    吾輩 は 猫 で 。 名前 は
    ある
    吾輩 は 猫 ? 。 名前 は
    ある
    吾輩 は 猫 ?

    View Slide

  24. 24
    ● 機械学習(教師あり):入力と出力のペアから、
    ルールを獲得する試み
    ● 自然言語処理では、2 段階での学習が一般的に
    ○ 事前学習
    ○ ファインチューニング
    ● 大規模言語モデル・基盤モデルと呼ばれることも
    まとめ:近年の自然言語処理の躍進

    View Slide

  25. 25
    ● 近年の自然言語処理の躍進
    ● Transformers ライブラリによる実装の守破離
    ○ 守:既存のモデルをそのまま使う
    ○ 破:既存のモデルを「ファインチューニング」
    ○ 離:「事前学習」から取り組む
    ● 日本経済新聞社での事例
    本発表の概要

    View Slide

  26. 26
    実装:Transformers ライブラリ
    https://github.com/huggingface/transformers

    View Slide

  27. 27
    ● 最先端の事前学習済みモデルが利用可能
    ● ファインチューニング済みのモデルや、より手軽
    に使える Pipelines も
    ● 自前のモデルを事前学習・ファインチューニング
    するためのソースコードも整備(Examples)
    Transformers ライブラリ

    View Slide

  28. 28
    ● 守:既存のモデルをそのまま使う
    ● 破:既存のモデルをファインチューニング
    ● 離:事前学習から取り組む
    実装の守破離

    View Slide

  29. 29
    守:既存のモデルを利用
    https://huggingface.co/rinna/japanese-gpt-1b

    View Slide

  30. 30
    import torch
    from transformers import T5Tokenizer, AutoModelForCausalLM
    tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt-1b")
    model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-1b")
    if torch.cuda.is_available():
    model = model.to("cuda")
    守:既存のモデルを利用
    https://huggingface.co/rinna/japanese-gpt-1b

    View Slide

  31. 31
    text = "Pythonは、"
    token_ids = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt")
    with torch.no_grad():
    output_ids = model.generate(token_ids.to(model.device))
    output = tokenizer.decode(output_ids.tolist()[0])
    print(output)
    守:既存のモデルを利用
    https://huggingface.co/rinna/japanese-gpt-1b

    View Slide

  32. 32
    print(output)
    # Pythonは、オープンソースなので特に資格がなくても習得する事ができます。もちろ
    ん、プロのプログラマーでなくても、本やWebサイトを参考に習得する事はできます。
    ただ、最近ではオープンソースのソフトウェアやOSSライブラリは世界中にたくさんあ
    ります。これらをきちんと理解して活用して、より良い開発環境で開発するには、最低
    限以下の4つの知識を知っておくとよいです。・Pythonの活用方法・Pythonの基礎から
    応用・Pythonの進化に関する知識・Pythonを使った複雑な処理に関する知識これらを学
    習していく事で、よりPythonを使い
    守:既存のモデルを利用
    https://huggingface.co/rinna/japanese-gpt-1b

    View Slide

  33. 33
    守:手軽な Pipelines
    https://huggingface.co/docs/transformers/main_classes/pipelines
    https://huggingface.co/csebuetnlp/mT5_multilingual_XLSum
    from transformers import pipeline
    text = "PyCon JP は、Python ユーザが集まり、......"
    pipe = pipeline("summarization", model="csebuetnlp/mT5_multilingual_XLSum")
    pipe_out = pipe(text)
    # [{'summary_text': 'Python とは何なのか? 世界中のユーザーが意見を交わすため、オ
    ンラインで「pyCon JP」を開催する。'}]

    View Slide

  34. 34
    Hugging Face で検索
    https://huggingface.co/

    View Slide

  35. 35
    破:ファインチューニング
    https://github.com/huggingface/transformers/tree/main/examples
    $ python examples/pytorch/summarization/run_summarization.py \
    --model_name_or_path t5-small \
    --do_train \
    --do_eval \
    --dataset_name cnn_dailymail \
    --output_dir /tmp/tst-summarization
    自前データを整形して Examples のコードを実行

    View Slide

  36. 36
    ● もちろん自分で Python コードを書くことも可能
    ● ただし主要な処理は引数で与えられる
    ○ 学習率・バッチサイズ・最大トークン数・検証
    ステップ数など
    破:ファインチューニング
    https://github.com/huggingface/transformers/tree/main/examples

    View Slide

  37. $ python run_mlm_flax.py \
    --output_dir="./nikkei-roberta-base" \
    --model_type="roberta" \
    --config_name="./nikkei-roberta-base" \
    --tokenizer_name="./nikkei-roberta-base" \
    --dataset_name="nikkei"
    37
    離:事前学習から取り組む
    https://github.com/huggingface/transformers/tree/main/examples
    自前データを整形して Examples のコードを実行

    View Slide

  38. 38
    ● データセットの前処理
    ● (たまに)コードの日本語対応
    ● 環境構築(ライブラリのバージョン)
    ● メモリ制約
    ● 計算費用
    ● ハイパーパラメータ調整 など
    実行のための試行錯誤は当然ある

    View Slide

  39. 39
    ● 近年の自然言語処理の躍進
    ● Transformers ライブラリによる実装の守破離
    ○ 守:既存のモデルをそのまま使う
    ○ 破:既存のモデルを「ファインチューニング」
    ○ 離:「事前学習」から取り組む
    ● 日本経済新聞社での事例
    本発表の概要

    View Slide

  40. 40
    ● 「日経電子版」で 1 日約 1000 記事を配信
    ● 記者・編集者は約 1500 人
    ● 内製の開発組織があり、研究開発も推進
    ○ PyCon JP 2022 シルバースポンサー
    ○ https://hack.nikkei.com/slides/
    ○ https://hack.nikkei.com/publications
    日本経済新聞社

    View Slide

  41. 41
    ● 大学新聞での記事執筆・編集経験を活かして、
    現職でデータ分析やサービス開発に従事
    ● 労働生産性の向上と新規の収益構造に関心
    ● 現在は、日経電子版向けの大規模言語モデルに関
    する研究開発を主導
    ○ AWS Japan のプロトタイプ支援
    情報技術を活用した在り方の模索
    https://aws.amazon.com/jp/blogs/news/aws-aiml-jirei-july/

    View Slide

  42. 42
    ● 大規模言語モデルとして「BERT」が 2018 年末に
    発表され話題に
    ● 外部企業の協力を経て 2019 年、日経電子版の記
    事を用いた BERT モデルを構築
    ● ニュース記事の要約などの応用を検証
    日経電子版 BERT 2019

    View Slide

  43. 43
    新型コロナの流行前の
    文章で学習した BERT
    モデルは、コロナ後の
    文章の処理が苦手
    言葉は日々変化
    石原慧人, 石原祥太郎, 白井穂乃 (2021). “BertSumを用いた日本語ニュース
    記事の抽象型要約手法の検討.” 人工知能学会全国大会論文集.

    View Slide

  44. 44
    ● 時期の異なる日経電子版
    記事で構築した 2 つの
    単語分散表現のベクトル
    空間を比較
    ● 「コロナ」の周辺単語が
    コロナ前と以後で変化
    言葉は日々変化
    高橋寛武, 石原祥太郎, 白井穂乃 (2022). “単語分散表現を用いた新型コロナ
    ウイルスによる意味変化検出.” 言語処理学会第28回年次大会発表論文集.

    View Slide

  45. 45
    ● 守:そのまま使えるなら、それで OK
    ● 破:一般公開されている事前学習済みのモデルを
    ファインチューニングすると、個別のタスクに対
    する性能が向上
    ● 離:事前学習から取り組むことで、細かい要望に
    合わせた調整が可能に。性能が向上する場合も。
    守破離と開発コストのトレードオフ

    View Slide

  46. 46
    日経電子版記事の見出し生成タスクで、事前学習から
    始めることで、高い性能(人間の見出しとの一致率)
    日経電子版向けの T5 の性能
    データセットには 2021 年の記事を用い、学習(1〜10 月)・検証(11
    月)・評価(12 月)に分割

    View Slide

  47. 47
    ● 外部 API を使えば良いのでは?
    ○ 解禁前情報を含む記事が存在するため、社内で
    データ処理を完結できるのが望ましい
    ● 一般公開されているモデルに問題があったら?
    ○ 新語や単語の意味変化への対応
    ○ 生成されるべきでない文章の制御
    独自のモデルを作る意義

    View Slide

  48. 48
    ● モデルの出力をそのまま使うのではなく
    ○ 記者・編集者への候補の提示
    ○ 修正や指摘を取り込んで日々改善
    活用・改善のための仕組みづくり
    Shotaro Ishihara, Yuta Matsuda, and Norihiko Sawa (2021).
    Editors-in-the-loop News Article Summarization Framework with
    Sentence Selection and Compression. In Proceedings of the 5th IEEE
    Workshop on Human-in-the-Loop Methods and Future of Work in
    BigData, pp. 3522-24.

    View Slide

  49. 49
    独自のモデルをいつ再学習すべきか?
    Shotaro Ishihara, Hiromu
    Takahashi, and Hono Shirai (2022).
    Semantic Shift Stability: Efficient
    Way to Detect Performance
    Degradation of Word Embeddings
    and Pre-trained Language Models.
    In Proceedings of AACL-IJCNLP
    2022. (to appear)
    https://github.com/Nikkei/seman
    tic-shift-stability

    View Slide

  50. 50
    ● 近年の自然言語処理の躍進
    ● Transformers ライブラリによる実装の守破離
    ○ 守:既存のモデルをそのまま使う
    ○ 破:既存のモデルを「ファインチューニング」
    ○ 離:「事前学習」から取り組む
    ● 日本経済新聞社での事例
    まとめ

    View Slide

  51. 51
    ● 『機械学習エンジニアのためのTransformers』
    (オライリー・ジャパン)
    ● 『BERTによる自然言語処理入門: Transformersを
    使った実践プログラミング』(オーム社)
    ● 『IT Text 自然言語処理の基礎』(オーム社)
    ● 『機械学習工学 (機械学習プロフェッショナルシ
    リーズ)』(講談社)
    更なる学び

    View Slide

  52. 52
    抽出型要約 https://www.nikkei.com/promotio
    n/collaboration/qreports-ai/

    View Slide