Slide 1

Slide 1 text

「巨人の肩の上」 で自作ライブラリ を作る技術 石原祥太郎 (日本経済新聞社) PyCon JP 2024、2024 年 9 月 28 日

Slide 2

Slide 2 text

特定の目的に向けて既存 技術を調査し、自作の Python ライブラリを実 装・評価する一連の流れ を紹介 2 「巨人の肩の上」で自作ライブラリ https://speakerdeck.com /upura/pyconjp2024

Slide 3

Slide 3 text

①要件の確認 ②既存ライブラリ・文献の調査 ③方針の策定 ④実装・性能評価・改善 3 開発手順

Slide 4

Slide 4 text

①要件の確認 ②既存ライブラリ・文献の調査 ③方針の策定 ④実装・性能評価・改善 4 開発手順

Slide 5

Slide 5 text

大学新聞で編集長などを経て、 日本経済新聞社に入社。現在は 研究開発部門で、独自の大規模 言語モデルの構築に従事。 5 現在のお仕事

Slide 6

Slide 6 text

> 実践:日本語文章生成  Transformersライブラリで学 ぶ実装の守破離 https://2022.pycon.jp/timetable/?id=EEA8FG 6 PyCon JP 2022

Slide 7

Slide 7 text

7 国際会議 INLG 2024 (9/23-27) で発表 ● 日経電子版で学習した大規模 言語モデル (GPT-2) の暗記を 分析した研究 [論文] ● 日本科学未来館で開催

Slide 8

Slide 8 text

8 大規模言語モデルの構築 事前学習用のテキスト データ (新聞記事) 事前学習・ 事後学習

Slide 9

Slide 9 text

9 大規模言語モデルの特徴 事前学習用のテキスト データ (新聞記事) 2日の東京市場で日経平均株価の 下落幅が2200円を超え、前日の 米国株に続きアジアや欧州にも 調整が広がった。 日経平均2216円安 下げ幅歴代 2位 米景気下振れ警戒 緩和頼 み脱却へ途上, 日経電子版, 2024 年8月2日. https://www.nikkei.com/article /DGKKZO82545690T00C24A8 MM8000/

Slide 10

Slide 10 text

10 大規模言語モデルの特徴 事前学習用のテキスト データ (新聞記事) 2日の東京市場で日経平均株価の 下落幅が2200円を超え、前日の 米国株に続きアジアや欧州にも 調整が広がった。 いつ?

Slide 11

Slide 11 text

11 何が問題? 日経平均株価の下げ幅が歴代2位 だったのはいつ? 2日です ?????????

Slide 12

Slide 12 text

12 実現したいこと 事前学習用のテキスト データ (新聞記事) 2024年8月2日の東京市場で日経 平均株価の下落幅が2200円を超 え、前日の米国株に続きアジア や欧州にも調整が広がった。 公開日を 用いて復元

Slide 13

Slide 13 text

新聞記事から時間表現を抽出し 日付を特定し省略を補完 ● 入力:テキスト、公開日時 ● 出力:補完されたテキスト 13 題材となる自作ライブラリ

Slide 14

Slide 14 text

大規模言語モデルの事前学習用 のテキストは大量のため、一定 の性能で高速処理できることが 望ましい 14 自作ライブラリの要件

Slide 15

Slide 15 text

①要件の確認 ②既存ライブラリ・文献の調査 ③方針の策定 ④実装・性能評価・改善 15 開発手順

Slide 16

Slide 16 text

16 要件を踏まえ既存の取り組みを調査 ● 社内で共有するなど、有識者に質問 ● 一つの文献を起点に、芋づる式に探索 ● X などで、定期的に情報収集 ● 「車輪の再開発」を避ける 既存ライブラリ・文献の調査

Slide 17

Slide 17 text

時間情報表現を抽出・規格化 ❯ print(TimexParser().parse("彼は2008 年4月から週に3回のジョギングを、朝8時 から1時間行ってきた")) 17 既存ライブラリ①:ja-timex

Slide 18

Slide 18 text

時間情報表現を抽出・規格化 ❯ [] 18 既存ライブラリ①:ja-timex

Slide 19

Slide 19 text

汎用言語モデルに基づく統合的解析器 ❯ kwja --text "日本サッカー協会は27日、 来年2、3月にホームで開催する男女の日 本代表と北朝鮮代表との試合会場が東京・ 国立競技場に決まったと発表した。" 19 既存ライブラリ②:KWJA

Slide 20

Slide 20 text

汎用言語モデルに基づく統合的解析器 ❯ + 21D <体言><修飾><時間> 27 にじゅうしち 27 名詞 6 数詞 7 * 0 * 0 日 にち 日 接尾辞 14 名詞性名詞助数辞 3 * 0 * 0 "代表表記:日/にち 準内容語 カテゴリ:時間" <基本句-主辞> 20 既存ライブラリ②:KWJA

Slide 21

Slide 21 text

ja-timex の README やドキュメントを起 点に、芋づる式に ● 引用している/されている文献を調査 ● Connected Papers などでも関連研究を 調査 21 既存文献の調査

Slide 22

Slide 22 text

①要件の確認 ②既存ライブラリ・文献の調査 ③方針の策定 ④実装・性能評価・改善 22 開発手順

Slide 23

Slide 23 text

ja-timex の「実装方針」を参考に、時間 情報表現の抽出と、省略の補完の処理を 分けて考えるべきと判断 ● 抽出:ja-timex にお任せ ● 補完:独自実装のため性能評価が必要 23 方針の策定

Slide 24

Slide 24 text

24 KWJA (などの大規模言語モデル) は性能 面で優れているが、実行時間や費用がか かるため、今回は不採用に ● ChatGPT など商用 API も同様 ● ja-timex はルールベースで軽量 不採択の理由

Slide 25

Slide 25 text

①要件の確認 ②既存ライブラリ・文献の調査 ③方針の策定 ④実装・性能評価・改善 25 開発手順

Slide 26

Slide 26 text

26 1. ライブラリとして実装開始 2. いくつかの記事を手動で変換 3. 規則性を見い出しテストケースを作成 4. テストが通るように実装を追加し、必 要に応じて全体をリファクタリング 「テストファースト」で実装・評価・改善

Slide 27

Slide 27 text

27 ライブラリとして実装開始 ● ディレクトリのルートに setup.py ● pip install -e . で編集モードでインス トール https://packaging.python.org/en/latest/gui des/distributing-packages-using-setuptools /

Slide 28

Slide 28 text

● プロジェクト名を付けると気分が乗る ● 最初は入出力だけを定義することに ❯ from jarote import by_rote ❯ … ❯ by_rote(text, reference_datetime) 28 jaROTE (Reproducing Omitted Time Expressions for Japanese)

Slide 29

Slide 29 text

29 1. 入力のテキストに対して ja-timex を実 行し、時間情報表現を抽出 2. それぞれに対し、入力の公開日時を参 照して、省略があれば書き換えを実施 3. 書き換えを反映したテキストを返す jaROTE の内部処理

Slide 30

Slide 30 text

30 ● 「日本経済新聞記事オープンコーパス」 の 96 記事を対象に Spreadsheet に入 出力の組を列挙 ● 泥臭く取り組みながら、要件を精緻化し ていく 最終的に実現したい処理を手動で実行

Slide 31

Slide 31 text

31 ● たとえば、年に関する文字列を具体的 な数値に変換するケースでまとめ上げ ● テスト用ライブラリ pytest で、出力 と期待する結果の一致を確認 規則性を見い出し、テストケースを作成

Slide 32

Slide 32 text

● 当然、最初は不一致でテストが失敗 ● テストが通るように実装を進めていく ● 必要に応じて全体をリファクタリング 32 テストが通るように実装を追加

Slide 33

Slide 33 text

33 ● 実装と性能評価が同時並行で完了 ● テストケースを見ると処理が分かりや すい ● 一方、初期の開発コストは大きくなる 「テストファースト」の特徴

Slide 34

Slide 34 text

● 特定の目的に向けて既存技術を調査し 自作の Python ライブラリを実装・評価 する一連の流れを紹介 ● 手順は①要件の確認②既存ライブラリ ・文献の調査③方針の策定④実装・性 能評価・改善ーーから成る 34 本発表のまとめ

Slide 35

Slide 35 text

35 ● 開発論の具体的な議論 (「テスト ファースト」「テスト駆動開発」など) ● jaROTE で時刻表現の省略を補完した テキストは、大規模言語モデルにとっ て価値がある? 本発表で話さなかったこと

Slide 36

Slide 36 text

● 「巨人」の知見 (ja-timex や KWJA、 過去の発表文献など) に改めてお礼申 し上げます ● jaROTE もその一部になれるよう、鋭 意開発を進めていきます 36 謝辞