PyCon JP 2024

「巨人の肩の上」で自作ライブラリを作る技術
2024-09-28 , 20F Track2

本発表では、特定の目的に向けて既存技術を調査し、自作のPythonライブラリを実装・評価する一連の流れを紹介します。具体的な事例として、講演者が実際の業務で自作した「ニュース記事のテキストから時間表現を抽出し、省略を補完し正確な日付を特定する」ライブラリを取り上げます。手順は①要件の確認②既存ライブラリ・文献の調査③方針の策定④実装・性能評価・改善ーーから成ります。それぞれ、何をどう考えて実行したかを説明し、得られた教訓を共有します。Pythonの偉大なるエコシステムの中で、自分自身がやりたいこと・やるべきことを見定め、開発を進めていく一例として、皆さまの参考になればと考えています。


「Pythonで◯◯を実現したいが、既存ライブラリでは少しだけ要件に合わない」。そんな状況に直面した経験がある方も多いのではないでしょうか? 本発表では、既存ライブラリを拡張して自作ライブラリを作ろうと試みる場面を題材にします。

自作ライブラリの開発は、多くの手順を含む奥深い作業です。しかし、具体的に何をどのように考えれば良いのかは自明でなく、過去の知見を共有している事例は多くありません。

本発表では、講演者の実際の業務を例に、特定の目的に向けて既存技術を調査し、自作のPythonライブラリを実装・評価する一連の流れを紹介します。作成したのは「ニュース記事のテキストから時間表現を抽出し、省略を補完し正確な日付を特定する」ライブラリです。たとえば、2024年10月1日に公開された記事内の「PyCon JP 2024が27〜29日に開催された」というテキストを「PyCon JP 2024が2024年9月27〜2024年9月29日に開催された」と書き換えます。

具体的には、既存ライブラリの「ja-timex」を拡張し、自作ライブラリ「jaROTE (Reproducing Omitted Time Expressions for Japanese)」を開発しました。開発の手順は①要件の確認②既存ライブラリ・文献の調査③方針の策定④実装・性能評価・改善ーーから成ります。本発表では、それぞれの手順について、何をどう考えて実行したかを説明し、得られた教訓を共有します。

Pythonの偉大なるエコシステムの中で、自分自身がやりたいこと・やるべきことを見定め、開発を進めていく一例として、皆さまの参考になればと考えています。

本講演の講師は、事業会社の研究開発部門に在籍し、Pythonを用いて日々開発を進めています。業務の中では、学術論文の調査・執筆も担当しています。Pythonでの開発作法だけでなく、既存ライブラリや文献を調査しながら「巨人の肩の上」で新規の提案をする考え方についても言及します。

本発表の構成は以下のとおりです。

  • 導入(8min)
    • 新聞記事を用いた大規模言語モデルの開発
    • 新聞記事内では、時に時間表現が省略されている(例:「PyCon JP 2024が27〜29日に開催された」)
    • 省略された時間表現は、大規模言語モデルにとって親切ではない(例:「PyCon JP 2024はいつ開催された?」という質問に答えるには情報が足りない)
  • 作成した自作ライブラリのデモ
    • pip install 可能な自作ライブラリと、streamlit ライブラリによるデモサイト
    • 記事の公開日を用いて、省略された時間表現を補完する(例:公開日「2024年10月1日」の場合「PyCon JP 2024が27〜29日に開催された」を「PyCon JP 2024が2024年9月27〜2024年9月29日に開催された」に)
  • 自作ライブラリの開発手順(20min)
    • ①要件の確認
      • 手作業で入出力を定義してみる(例:自分で数件の新聞記事に対して期待する出力結果を作成する)
      • 計算資源や実行時間の制約を考える(例:大規模言語モデル向けのテキストは膨大で、実行時間は短い方が望ましい)
  • ②既存ライブラリ・文献の調査
    • 既存文献の調査(時間表現の抽出と、省略の補完の処理を分けて考えると良さそう)
      • 参考文献リストは下記に掲載
    • 既存ライブラリの調査
      • 時間表現の抽出のためのライブラリ
      • 今回採用した「ja-timex
      • 今回は採用しなかった「KWJA
      • 今回は採用しなかった「ChatGPT」などの大規模言語モデル
  • ③方針の策定
    • ①の要件を踏まえて、正規表現で高速に動作する ja-timex を採用
    • KWJA や大規模言語モデルは優れているが、実行時間がかかるため、今回は不採用に
    • 時間表現を ja-timex で抽出した後、省略を補完する部分のみを自前で実装するという方針に
  • ④④実装・性能評価・改善
    • setup.py によるライブラリ化
    • ①で手作業で定義した入出力を用いて、テストケースを作成
    • pytest ライブラリを用いて、テストファースト開発を進める
    • 実装は、テスト駆動開発の中で挙動を評価
    • 性能は「日本経済新聞記事オープンコーパス」で評価
    • 今後改善すべき箇所や方針についても報告
  • まとめ (2min)

参考文献リスト:


Why did you choose this topic?:

自作ライブラリの開発は、多くの手順を含む奥深い作業です。「Pythonで◯◯を実現したいが、既存ライブラリでは少しだけ要件に合わない」。そんな状況に直面した経験がある方も多いのではないでしょうか? しかし、具体的に何をどのように考えて開発を進めれば良いのかは自明でなく、過去の知見を共有している事例は多くありません。本発表で自作ライブラリ開発の一例や得られた教訓を示すことで、皆さまの参考になればと考えています。

Knowledges and know-how the audience can get from your talk:
  • 既存ライブラリを拡張して自作ライブラリを作るための方法論の一例
  • 事業会社におけるPythonの活用事例
Prior knowledges speakers assume the audience to have:

参加者には最低限、Pythonの基礎的な文法を理解し、環境構築や新規ライブラリの導入を自力で実行できる程度の知識を要求します。大規模言語モデルや自然言語処理など、自作ライブラリの題材に関連する個別の話題については、必要に応じて概要を簡潔に解説する予定です。背景知識を有しているほうがより理解しやすいと思いますが、必須ではありません。

Audience experiment:

Intermediate

Language of presentation:

日本語

Language of presentation material:

日本語

See also: 発表資料

日本経済新聞社の研究開発部署「日経イノベーション・ラボ」で、上席研究員として独自の大規模言語モデルに関する研究開発などに従事。国内外の学会で学術論文も発表している。国内外での国内外の機械学習コンテストで入賞経験を持ち、『PythonではじめるKaggleスタートブック』『Kaggleに挑む深層学習プログラミングの極意』の執筆や、勉強会の主催・登壇など、積極的な情報発信にも努めている。2020年、国際ニュースメディア協会の若手表彰「30 Under 30 Awards and Grand Prize」でアジア太平洋部門の最優秀賞を受賞。