Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonだけでクロスワードパズルを自動生成 〜自然言語処理・組合せ探索・Webアプリ開発〜

Avatar for Kaito Majima Kaito Majima
October 20, 2023

Pythonだけでクロスワードパズルを自動生成 〜自然言語処理・組合せ探索・Webアプリ開発〜

Avatar for Kaito Majima

Kaito Majima

October 20, 2023
Tweet

More Decks by Kaito Majima

Other Decks in Programming

Transcript

  1. 2 ⾃⼰紹介 n 名前 p ⾺嶋海⽃(まじま かいと) n 所属 p

    ⽇本経済新聞社(2023/4新卒⼊社) Ø ⽇経電⼦版の開発 Ø 2022/6~ インターンとして⾃然⾔語処理の研究 n Pythonと私 p 5年前の⼤学の授業で出会う p 研究‧インターン‧業務などで使⽤
  2. 3 発表⽬的 n PythonだけでのWebアプリ開発の体験を共有 p Pythonの応⽤領域の広さ p Pythonの使いやすさ n 想定する聞き⼿

    p Pythonのライブラリについて広く浅く知りたい⼈ p Pythonでのフロントエンドも含めたアプリ開発に興味がある⼈ p ⾃然⾔語処理、最適化に興味がある⼈
  3. 4 ⽬次 第1部 アプリケーションの概要 n どんなアプリ? n 作成背景 n 実装上の課題

    第2部 アプリケーションの処理 n 全体像 n ⾃然⾔語処理 n パズル⽣成 n Webアプリ表⽰ 第3部 開発者体験 n 環境 n Pythonだけでの開発
  4. 5 ⽬次 第1部 アプリケーションの概要 n どんなアプリ? n 作成背景 n 実装上の課題

    第2部 アプリケーションの処理 n 全体像 n ⾃然⾔語処理 n パズル⽣成 n Webアプリ表⽰ 第3部 開発者体験 n 環境 n Pythonだけでの開発
  5. 7 作成背景 ニュースメディアとパズルの親和性の⾼さ n ニューヨークタイムズ p クロスワードを毎⽇掲載 p パズルの購読者数が100万⼈を突破(全体の10%) p

    2022年に⼈気パズル「Wordle」を買収 n ⽇経新聞 p 毎週⽇曜⽇にクロスワードを掲載 Ø https://vdata.nikkei.com/nikkeithestyle/crossword/ p 2021年にスマホアプリ「⽇経脳活クイズ」をリリース https://vdata.nikkei.com/nikkeithestyl e/crossword/mondai.html?id=0338
  6. 11 課題① クロスワード⾃動⽣成の難しさ n 考慮すべき事項が多い:⼈⼿での作成は職⼈芸 p 単語の配置 p 黒マス配置 p

    各単語のカギ(ヒント) n 数学的にも複雑な問題である(NP困難)ことが知られている n 先⾏研究をそのまま使って今回の⽬的を達成できない p 「パズル⽣成」と「ヒント⽣成」を同時に⾏いたい p ニュース⽤語を多く含めたい
  7. 12 課題① クロスワード⾃動⽣成の難しさ n ChatGPTに聞いてみた パ ケ ツ ト イ

    シ ツ ソ ン タ ク ン キ リ 想定解答 以下の単語を含む4×4マスの クロスワードパズルを作ってください • パイソン • トツクリ • パケツト • ソンタク • ケシン • イシ • タキ • キリ
  8. 13 課題① クロスワード⾃動⽣成の難しさ n ChatGPTに聞いてみた パ ケ ツ ト イ

    シ ツ ソ ン タ ク ン キ リ 想定解答 了解しました。以下に、提供していただいた単語を 含む4x4マスのクロスワードパズルを作成しました。
  9. 14 課題① クロスワード⾃動⽣成の難しさ n ChatGPTに聞いてみた パ ケ ツ ト イ

    シ ツ ソ ン タ ク ン キ リ 想定解答 このパズルは黒マスを⼆つ含みます 黒マスを含むクロスワードパズルを以下に⽰します。
  10. 16 課題③ ニュースメディア特有の問題 n 「ニュース⽤語」の定義が難しい p 固有名詞を全て抜き出せば良い? p ニュースの理解度の確認になる単語は? n

    適切な記事の抽出が難しい p 全ての記事がニュース⽤語とその説明を含むわけではない Ø ヒントの質に関連 p 記事にも鮮度がある
  11. 17 実装上の課題:解決策 n クロスワード⾃動⽣成の難しさ → パズル⽣成は先⾏研究の⼿法を今回の設定に合わせて実装 → ヒント⽣成はルールベース(+⾔語モデル) n ⽇本語としての難しさ

    → ⾃然⾔語処理でどうにかする n ニュースメディア特有の問題 →⾃然⾔語処理でどうにかする+⾃社APIを使⽤ :Python :Python :Python :Python やはりPython…!! Pythonは全てを解決する…!!
  12. 18 どんなアプリ? ニュース⽤語でクロスワードを⾃動⽣成するアプリ n ニュース⽤語は⽇経電⼦版から抽出 p カスタムが可能 Ø 朝刊記事、スポーツ記事、読んだ記事など n

    クロスワードとそれぞれの単語のヒントを⽣成 p アルゴリズムを⾃前で実装 p 詳細は論⽂参照:https://arxiv.org/abs/2308.04688 n 実装は全てPython
  13. 19 ⽬次 第1部 アプリケーションの概要 n どんなアプリ? n 作成背景 n 実装上の課題

    第2部 アプリケーションの処理 n 全体像 n ⾃然⾔語処理 n パズル⽣成 n Webアプリ表⽰ 第3部 開発者体験 n 環境 n Pythonだけでの開発
  14. 20 アプリケーションの全体像 ⽇経電⼦版データ 外部データ ①⾃然⾔語処理 単語&ヒント キシダフミオ: ⽇本の第100代⾸相は? ソゴウ: セブン&アイは9⽉1⽇に

    ◦◦◦‧⻄武の売却を発表した セイセイエーアイ: ⼈間の指⽰に基づき⽂章や 画像を⾃動で⽣成する⼈⼯知能 ‧‧‧ 縦のカギ 横のカギ 1: ------ 1: ------ 2: ------ 2: ------ ヒントつきクロスワード ②パズル⽣成 (⓪外部データ⽤意)
  15. 21 アプリケーションの全体像 ⽇経電⼦版データ 外部データ ①⾃然⾔語処理 単語&ヒント キシダフミオ: ⽇本の第100代⾸相は? ソゴウ: セブン&アイは9⽉1⽇に

    ◦◦◦‧⻄武の売却を発表した セイセイエーアイ: ⼈間の指⽰に基づき⽂章や 画像を⾃動で⽣成する⼈⼯知能 ‧‧‧ 縦のカギ 横のカギ 1: ------ 1: ------ 2: ------ 2: ------ ヒントつきクロスワード ②パズル⽣成 (⓪外部データ⽤意) • requests • re • pykakasi • jaconv • alphabet2kana • alkana • spacy • pytorch • transformers • MeCab • numpy • line-profiler • pandas • streamlit
  16. 22 ⓪ 外部データの⽤意 n ニュース⽤語だけではパズルが埋まらない p 抽出できても数万語程度 p どの組合せでもパズルを作成することができない n

    外部データを⽤いて単語‧ヒントのペアを作成 p Wikipedia:⾒出しと最初の⽂を抽出 p JAQKET:⽇本語QAデータセット n Pythonの役割 p 前処理:読み仮名抽出、単語のフィルタリング等
  17. 23 ① ⾃然⾔語処理 ⼤別すると3つの処理が⾏われている ⽇経電⼦版データ 対象記事データ 出⼒ 単語 ヒント 1:

    記事選定 閲覧履歴や記事に付与されている情報 から記事をフィルタリング 2: 単語抽出 ニュース⽤語を記事内から抽出 3: ヒント⽣成 ニュース⽤語と記事本⽂を⼊⼒としてヒントを⽣成 ex) キシダフミオ ex) ⽇本の100代⾸相は?
  18. 24 ① ⾃然⾔語処理:記事選定 n ニュース⽤語を抽出する記事のフィルタリング p クローズドな社内APIを使⽤ Ø 記事に付与されているデータで記事検索 Ø

    閲覧ログの抽出 p 抽出例 Ø 特定のジャンルの記事(例:スポーツ、経済) Ø 直近1週間の朝刊の記事 Ø 特定のユーザーが閲覧した記事 n 使⽤ライブラリ p requests:API呼び出し
  19. 25 ① ⾃然⾔語処理:単語抽出 n ニュース⽤語を記事内から抽出‧カタカナに変換 p 抽出⼿法(⼀例) Ø 社内APIで記事に紐づくキーワードを取得 Ø

    品詞、本⽂との関連性によるフィルタリング Ø 固有表現抽出(NER) n 使⽤ライブラリ p spacy:品詞の判定 p pykakasi, alphabet2kana, alkana, jaconv, MeCab:カタカナへの変換
  20. 26 ① ⾃然⾔語処理:ヒント⽣成 n ニュース⽤語と記事本⽂を⼊⼒としてヒントを⽣成 p クロスワードのヒントの要件 Ø 解が⼀意に定まる Ø

    ⽂章が短い⽅が⾒栄えが良い p ⽣成⼿法(⼀例) Ø 記事の該当部分を抽出して⽳埋め問題に Ø 機械学習モデルを使⽤:T5, GPT4など n 使⽤ライブラリ p pytorch, transformers:機械学習モデルの使⽤
  21. 27 ② パズル⽣成 n 前提 p ⼊出⼒ Ø ⼊⼒:空のパズル盤⾯‧ニュース⽤語‧外部データの単語 Ø

    出⼒:⽭盾なく⽂字が⼊ったパズル盤⾯ p パズル盤⾯の⼤きさ、黒マスの位置は固定 p ニュース⽤語を最低𝑁個含むパズルを⽣成 キシダフミオ ソゴウ セイセイエーアイ ストライキ クラウド ニーサ … リンゴ ゴリラ ランドセル ルールブツク クリスマス スミレ … ス ト ラ イ キ ー ス ミ レ プ リ ン ト ク ラ ウ ド イ ス ミ キ 空のパズル盤⾯ ニュース⽤語 外部データ クロスワード
  22. 28 ② パズル⽣成 n 処理(概要) p 先述の前提を満たすパズル⽣成を最適化問題として定式化 p 先⾏研究の⼿法を問題設定に適⽤できる形に変形 Ø

    先⾏研究: https://ojs.aaai.org/index.php/SOCS/article/view/18547 Ø アルゴリズムの詳細: https://arxiv.org/abs/2308.04688 Ø バックトラッキングと呼ばれる⼿法の⼀種 n 使⽤ライブラリ p numpy:⼀部の計算の⾼速化 p line-profiler:計算のボトルネックの特定
  23. 30 ②パズル⽣成:Webアプリ表⽰ サイドバー n ⾃動⽣成のパラメーターを⼊⼒ p 黒マス配置 p 記事の取得⽅法 p

    ヒント⽣成⽅法etc.. n ラジオボタン、スライダーなど多様なボタン p 1⾏で実装できる
  24. 36 ②パズル⽣成:Webアプリ表⽰ n Streamlitの特徴 p ⻑所 Ø HTML‧CSSの知識が不要 Ø ⼿軽に動くものが作成できる

    p 短所 Ø 凝ったデザインは難しい Ø 複雑な挙動の実装が難しい n 他のフレームワーク p Gradio:Streamlitと似た使い⽅ができる(機械学習特化) p Django, Flask, Fast API:HTML等と合わせて使う
  25. 37 全体像(再掲) ⽇経電⼦版データ 外部データ ①⾃然⾔語処理 単語&ヒント キシダフミオ: ⽇本の第100代⾸相は? ソゴウ: セブン&アイは9⽉1⽇に

    ◦◦◦‧⻄武の売却を発表した セイセイエーアイ: ⼈間の指⽰に基づき⽂章や 画像を⾃動で⽣成する⼈⼯知能 ‧‧‧ 縦のカギ 横のカギ 1: ------ 1: ------ 2: ------ 2: ------ ヒントつきクロスワード ②パズル⽣成 (⓪外部データ⽤意)
  26. 38 ⽬次 第1部 アプリケーションの概要 n どんなアプリ? n 作成背景 n 実装上の課題

    第2部 アプリケーションの処理 n 全体像 n ⾃然⾔語処理 n パズル⽣成 n Webアプリ表⽰ 第3部 開発者体験 n 環境 n Pythonだけでの開発
  27. 39 当時の環境 n ⽴場 p 学⽣インターン p 稼働:週2,3回 ‧5時間程度 p

    スケジュール感:⼆ヶ⽉後提出のワークショップに間に合わせたい… n スキル p Python:研究で触る程度 p それ以外の⾔語:未経験
  28. 40 Pythonで良かった点 ライブラリの豊富さ n 今回の処理(再掲) p API呼び出し p ⾃然⾔語処理 p

    組合せ探索 p インタラクティブに画⾯表⽰ n 上記の処理を全てPythonで実装 p 学習コストが低く済む p 各処理の連携が楽(importするだけ)
  29. 41 Pythonで良かった点 ⼿軽さ、コミュニケーションコストの低さ n アプリケーションの実装までスピーディーにできる p 「動くもの」を直接共有できる Ø イメージが湧きやすい n

    コミュニケーションコストが低い p 特にデータサイエンス領域での利⽤⼈⼝が多い p 修正‧環境構築が簡単に⾏える
  30. 42 今後の展望 n ⾃然⾔語処理 p まだまだニュース⽤語、ヒントの品質に改善の余地あり Ø ヒントの短⽂化、解の⼀意性の担保、不適切な表現の排除など Ø ⼤規模⾔語モデルの活⽤

    n パズル⽣成 p 黒マスの配置も含めた最適化 Ø ニュース⽤語の割合を増やせる p ⾼速化 p 表⽰の改善 Ø ダークモード対応やパズルの保存など Ø streamlitだと厳しい部分も…
  31. 43 まとめ n Pythonだけでクロスワード⾃動⽣成アプリを作成 p ⽇経電⼦版のデータを⼊⼒ p ニュース⽤語を含むヒントつきクロスワードパズルを出⼒ n 多様な処理をPythonで実装

    p API呼び出し、⾃然⾔語処理、組合せ探索、Webアプリ n 開発者体験は良かった p ライブラリの豊富さ p ⼿軽さ‧コミュニケーションコストの低さ
  32. 45 Appendix: パズルの⽣成速度 n ⾃然⾔語処理 p 現在の実装だと外部データ読み込みがボトルネック(~10秒) p 機械学習モデルを⽤いる場合も時間がかかる n

    パズル⽣成 p 横軸 Ø ニュース⽤語が占める割合(%) p 縦軸 Ø 左:作成成功率 Ø 右:⽣成時間の中央値‧平均値 p 概ね数秒で完了 図:パズル⽣成の作成成功率と⽣成時間