Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 謝辞