Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

半径 3 の円の面積 は?

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

14 「?」には何が入る?

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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」を開催する。'}]

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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 のコードを実行

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

$ 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 のコードを実行

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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.

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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