Slide 1

Slide 1 text

神田峻介, 赤部晃一, 後藤啓介(LegalOn Technologies Research) 小田悠介(東北大学 データ駆動科学・AI 教育研究センター) 最小コスト法に基づく形態素解析における CPU キャッシュの効率化 NLP2023 (3/13–3/17)

Slide 2

Slide 2 text

2 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 最小コスト法による形態素解析 ❏ 形態素ラティスを構築し、最小コスト経路を探索することで形態素列を得る ❏ MeCabやSudachiなどで利用されているアルゴリズム 最小コスト法の時間的ボトルネック ❏ 木構造探索や行列参照など頻繁なランダムアクセス ❏ 辞書の肥大化に伴うCPUキャッシュ効率の低下 ❏ ipadic-neologd (2020-09-10): 形態素辞書 約460万エントリ ❏ unidic-cwj (v3.1.1): 連接行列 15388×15626 = 459 MiB 本研究の貢献 ❏ 参照の局所性の良いデータ構造の提案 ❏ キャッシュ効率化により40%程度の高速化を達成 ❏ Rust製形態素解析器 Vibrato を開発 https://github.com/daac-tools/vibrato 背景と貢献 ※unidic-mecab v2.1.2では68MiB程度 ※ipadic-mecab v2.7.0では40万程度

Slide 3

Slide 3 text

3 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 以下の2ステップにより入力文から形態素列を得るアルゴリズム 1. 入力文に現れる形態素をノードとしたグラフ構造(形態素ラティス)を構築 2. 形態素本体や並びの出現しやすさを表したコストの和が最小となる経路を探索 最小コスト法による形態素解析 入力文「元気になった」の例

Slide 4

Slide 4 text

4 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 最小コスト法の時間的ボトルネックは以下の2つのランダムアクセス ❏ 辞書引き:トライ木の探索による形態素列挙 ❏ ダブル配列を使えば定数時間だが、各探索は配列上のランダムアクセス ❏ 連接コスト参照:連接表アクセスによる参照 ❏ 単純な行列を使うので定数時間だが、ランダムアクセス 肥大化したモデルでは、これらのランダムアクセスがボトルネックになる ➔ それぞれに参照の局所性の良いデータ構造を設計し高速化 高速化の方針

Slide 5

Slide 5 text

5 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 最小コスト法の時間的ボトルネックは以下の2つのランダムアクセス ❏ 辞書引き:トライ木の探索による形態素列挙 ❏ ダブル配列を使えば定数時間だが、各探索は配列上のランダムアクセス ❏ 連接コスト参照:連接表アクセスによる参照 ❏ 単純な行列を使うので定数時間だが、ランダムアクセス 肥大化したモデルでは、これらのランダムアクセスがボトルネックになる ➔ それぞれに参照の局所性の良いデータ構造を設計し高速化 高速化の方針

Slide 6

Slide 6 text

6 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 入力文に現れる辞書エントリはトライ木の共通接頭辞検索により列挙 ❏ 多くの形態素解析器はトライの表現にダブル配列を採用 ❏ 定数時間でエッジの探索を実現 エッジの探索は配列上のランダムアクセス ❏ 辞書のサイズが大きくなるとキャッシュミスがボトルネックに! 辞書引きのキャッシュ効率化:背景と問題点

Slide 7

Slide 7 text

7 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 従来法:文字列をバイト列として表現 ❏ 汎用性、実装の容易さが理由 提案法:文字列をUnicodeのコードポイント列として表現 ❏ 木の高さを抑えランダムアクセスを削減 辞書引きのキャッシュ効率化:改善案

Slide 8

Slide 8 text

8 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 最小コスト法の時間的ボトルネックは以下の2つのランダムアクセス ❏ 辞書引き:トライ木の探索による形態素列挙 ❏ ダブル配列を使えば定数時間だが、各探索は配列上のランダムアクセス ❏ 連接コスト参照:連接表アクセスによる参照 ❏ 単純な行列を使うので定数時間だが、ランダムアクセス 肥大化したモデルでは、これらのランダムアクセスがボトルネックになる ➔ それぞれに参照の局所性の良いデータ構造を設計し高速化 高速化の方針

Slide 9

Slide 9 text

9 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 連接コスト:形態素ラティスのエッジのコスト ❏ 左側と右側のノードの文脈IDでアクセスされる連接表に格納される 連接表のキャッシュ効率化:背景と問題点 unidic-cwj (v3.1.1) では連接表が巨大:15,388 × 15,626 = 459 MiB ➔ 頻繁なアクセスによるキャッシュミスが重大なボトルネック

Slide 10

Slide 10 text

10 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 頻繁に使用されるコストが配列の先頭に集まるように文脈IDをマッピング ❏ 頻度順に若い文脈IDを割り当て直す ❏ 頻繁に使用されるコストが密集し参照の局所性が改善 ❏ 頻度は訓練コーパスを解析し算出 連接表のキャッシュ効率化:改善案 ※訓練コーパス:BCCWJ 1.5万中上位40件の 使用率が50%

Slide 11

Slide 11 text

11 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 文章コーパス:BCCWJ v1.1 ❏ マッピングの訓練:コアデータ6万文 ❏ 解析速度の評価:サブコーパスからランダムに抽出した10万文 実験環境 ❏ Intel Core i9-12900K @3.2–5.2GHz CPU (L1d: 640 KiB, L2: 14 MiB, L3: 30MiB) ❏ 64 GiB RAM プログラミング言語 ❏ Rust (rustc v1.63.0) 実験設定

Slide 12

Slide 12 text

12 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. ❏ 辞書引きの効率化(文字単位トライ)によりIPADICで10%程度高速化 ❏ 連接表の効率化(IDマッピング)によりUniDicで20–40%程度高速化 ❏ L1-load missも全体的に削減 ❏ (ただし辞書引きやコスト参照以外の処理も含まれており、パートごとに詳細な分析も必要) 提案手法の分析 辞書引きの効率化 +連接表の効率化

Slide 13

Slide 13 text

13 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 均衡コーパスとドメイン特化なコーパスを使った場合で解析速度に差はあるかを調査 ❏ BCCWJサブコーパスの13カテゴリについて、1万文ずつを評価用にサンプル ❏ 各カテゴリについて、以下の方法でマッピングを訓練し解析速度を比較 ❏ 均衡データ:BCCWJコアデータ1万文で訓練 ❏ カテゴリ別:各カテゴリの評価用データについて5分割交差検証 文脈ID頻度算出の訓練データに関する調査 解析時間に大きな差は無い ➔ 均衡データから訓練したマッピングを一 つ持っておけば十分 (詳細な解析は論文の付録参照)

Slide 14

Slide 14 text

14 当該資料の利用により直接または間接に生じた損害や損失等について、株式会社 LegalOn Technologiesは一切の責任を負いません。 ©LegalOn Technologies, Inc. all rights reserved. 提案法を組み込んだRust製形態素解析器 ❏ 解析結果がMeCab互換 ❏ 解析精度を犠牲にしない圧縮オプションもサポート(C2-1の発表) ❏ Python Wrapperもあります (https://github.com/daac-tools/python-vibrato) ❏ ダブル配列の実装も切り分けて公開してます (https://github.com/daac-tools/crawdad) 形態素解析器 Vibrato (https://github.com/daac-tools/vibrato) IPADICで 2.1x 高速 UniDicで 2.3x 高速