$30 off During Our Annual Pro Sale. View Details »

実践:日本語文章生成 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 ライブラリ で学ぶ実装の守破離
  2. 2022 年 8 月、画像生成 AI の衝撃 2 https://www.nikkei.com/a rticle/DGXZQOUC180Y60 Y2A910C2000000/

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

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

  5. 5 • 近年の自然言語処理の躍進 • Transformers ライブラリによる実装の守破離 ◦ 守:既存のモデルをそのまま使う ◦ 破:既存のモデルを「ファインチューニング」

    ◦ 離:「事前学習」から取り組む • 日本経済新聞社での事例 本発表の概要
  6. 6 • 機械学習(教師あり)とは? • 自然言語処理では、どのような学習が主流? 技術の概要が分かると、実装の守破離が分かりやすく なるはず これから説明する技術

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

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

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

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

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

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

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

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

  15. 15 図解してみる ルール 入力(x) 出力(y=f(x)) モデル (x, y) = (0,

    3), (1, 5), (2, 7), (3, 9), (4, 11), (5, ?)
  16. [再掲] 入力された 記事の要約は?

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

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

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

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

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

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

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

    は ある 吾輩 は 猫 ? 。 名前 は ある 吾輩 は 猫 ?
  24. 24 • 機械学習(教師あり):入力と出力のペアから、 ルールを獲得する試み • 自然言語処理では、2 段階での学習が一般的に ◦ 事前学習 ◦

    ファインチューニング • 大規模言語モデル・基盤モデルと呼ばれることも まとめ:近年の自然言語処理の躍進
  25. 25 • 近年の自然言語処理の躍進 • Transformers ライブラリによる実装の守破離 ◦ 守:既存のモデルをそのまま使う ◦ 破:既存のモデルを「ファインチューニング」

    ◦ 離:「事前学習」から取り組む • 日本経済新聞社での事例 本発表の概要
  26. 26 実装:Transformers ライブラリ https://github.com/huggingface/transformers

  27. 27 • 最先端の事前学習済みモデルが利用可能 • ファインチューニング済みのモデルや、より手軽 に使える Pipelines も • 自前のモデルを事前学習・ファインチューニング

    するためのソースコードも整備(Examples) Transformers ライブラリ
  28. 28 • 守:既存のモデルをそのまま使う • 破:既存のモデルをファインチューニング • 離:事前学習から取り組む 実装の守破離

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

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

    守:既存のモデルを利用 https://huggingface.co/rinna/japanese-gpt-1b
  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」を開催する。'}]
  34. 34 Hugging Face で検索 https://huggingface.co/

  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 のコードを実行
  36. 36 • もちろん自分で Python コードを書くことも可能 • ただし主要な処理は引数で与えられる ◦ 学習率・バッチサイズ・最大トークン数・検証 ステップ数など

    破:ファインチューニング https://github.com/huggingface/transformers/tree/main/examples
  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 のコードを実行
  38. 38 • データセットの前処理 • (たまに)コードの日本語対応 • 環境構築(ライブラリのバージョン) • メモリ制約 •

    計算費用 • ハイパーパラメータ調整 など 実行のための試行錯誤は当然ある
  39. 39 • 近年の自然言語処理の躍進 • Transformers ライブラリによる実装の守破離 ◦ 守:既存のモデルをそのまま使う ◦ 破:既存のモデルを「ファインチューニング」

    ◦ 離:「事前学習」から取り組む • 日本経済新聞社での事例 本発表の概要
  40. 40 • 「日経電子版」で 1 日約 1000 記事を配信 • 記者・編集者は約 1500

    人 • 内製の開発組織があり、研究開発も推進 ◦ PyCon JP 2022 シルバースポンサー ◦ https://hack.nikkei.com/slides/ ◦ https://hack.nikkei.com/publications 日本経済新聞社
  41. 41 • 大学新聞での記事執筆・編集経験を活かして、 現職でデータ分析やサービス開発に従事 • 労働生産性の向上と新規の収益構造に関心 • 現在は、日経電子版向けの大規模言語モデルに関 する研究開発を主導 ◦

    AWS Japan のプロトタイプ支援 情報技術を活用した在り方の模索 https://aws.amazon.com/jp/blogs/news/aws-aiml-jirei-july/
  42. 42 • 大規模言語モデルとして「BERT」が 2018 年末に 発表され話題に • 外部企業の協力を経て 2019 年、日経電子版の記

    事を用いた BERT モデルを構築 • ニュース記事の要約などの応用を検証 日経電子版 BERT 2019
  43. 43 新型コロナの流行前の 文章で学習した BERT モデルは、コロナ後の 文章の処理が苦手 言葉は日々変化 石原慧人, 石原祥太郎, 白井穂乃

    (2021). “BertSumを用いた日本語ニュース 記事の抽象型要約手法の検討.” 人工知能学会全国大会論文集.
  44. 44 • 時期の異なる日経電子版 記事で構築した 2 つの 単語分散表現のベクトル 空間を比較 • 「コロナ」の周辺単語が

    コロナ前と以後で変化 言葉は日々変化 高橋寛武, 石原祥太郎, 白井穂乃 (2022). “単語分散表現を用いた新型コロナ ウイルスによる意味変化検出.” 言語処理学会第28回年次大会発表論文集.
  45. 45 • 守:そのまま使えるなら、それで OK • 破:一般公開されている事前学習済みのモデルを ファインチューニングすると、個別のタスクに対 する性能が向上 • 離:事前学習から取り組むことで、細かい要望に

    合わせた調整が可能に。性能が向上する場合も。 守破離と開発コストのトレードオフ
  46. 46 日経電子版記事の見出し生成タスクで、事前学習から 始めることで、高い性能(人間の見出しとの一致率) 日経電子版向けの T5 の性能 データセットには 2021 年の記事を用い、学習(1〜10 月)・検証(11

    月)・評価(12 月)に分割
  47. 47 • 外部 API を使えば良いのでは? ◦ 解禁前情報を含む記事が存在するため、社内で データ処理を完結できるのが望ましい • 一般公開されているモデルに問題があったら?

    ◦ 新語や単語の意味変化への対応 ◦ 生成されるべきでない文章の制御 独自のモデルを作る意義
  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.
  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
  50. 50 • 近年の自然言語処理の躍進 • Transformers ライブラリによる実装の守破離 ◦ 守:既存のモデルをそのまま使う ◦ 破:既存のモデルを「ファインチューニング」

    ◦ 離:「事前学習」から取り組む • 日本経済新聞社での事例 まとめ
  51. 51 • 『機械学習エンジニアのためのTransformers』 (オライリー・ジャパン) • 『BERTによる自然言語処理入門: Transformersを 使った実践プログラミング』(オーム社) • 『IT

    Text 自然言語処理の基礎』(オーム社) • 『機械学習工学 (機械学習プロフェッショナルシ リーズ)』(講談社) 更なる学び
  52. 52 抽出型要約 https://www.nikkei.com/promotio n/collaboration/qreports-ai/