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

日本語形態素解析器 SudachiPy の 現状と今後について

WAP
July 06, 2021

日本語形態素解析器 SudachiPy の 現状と今後について

形態素解析は、日本語テキスト処理を支える基本的かつ重要な技術である。 しかし、実応用として製品利用しようとした際,単語単位の不一致や表記揺れなど様々な問題がある。 そこで、我々はこれらの問題を改善するために形態素解析器「Sudachi」および「SudachiPy」を商用利用可能なライセンスのOSSとして公開し、継続的な改善・保守を続けている。 本発表では、中でもSudachiPyを題材に取り上げ,上記の問題を扱うためのSudachiPyの特徴的な機能について紹介する。 また、SudachiPyの現在の開発状況と今後どのような方向を目指して開発を行っているのかについても紹介する。

WAP

July 06, 2021
Tweet

More Decks by WAP

Other Decks in Technology

Transcript

  1. 日本語形態素解析器 SudachiPy の
    現状と今後について
    1

    View Slide

  2. 自己紹介
    2
    はじめに
    山村 崇
    略歴:
    2017 九州工業大学大学院 博士前期課程 修了
    2020 同大大学院 博士後期課程 単位取得退学
    - 複数人対話要約のためのアノテーション付きコーパスを構築
    - 2017年度の言語処理学会年次大会にて言語資源賞を受賞
    2020 株式会社ワークスアプリケーションズ
    2021 株式会社ワークスアプリケーションズ・エンタープライズ
    - 持株会社体制への移行のため
    現在の活動:
    ・現職にて,特定のドメインに特化した分散表現の研究開発を担当
    ・以下の OSS のメンテナー として開発に携わる
    - 日本語単語ベクトル:chiVe
    - 形態素解析器:SudachiPy
    - 同義語展開ツール:chikkarpy
    - Sudachi for Transformers:chiTra
    最近の興味があること:
    ドラム・観葉植物・サイクリング・
    サウナ・家トレ(筋トレ)

    View Slide

  3. ■ はじめに
    □ 自己紹介
    ■ Sudachi とは
    □ 概要,形態素解析とは,製品利用可能の意味
    ■ 開発経緯
    □ 既存の解析器と辞書,なぜ OSS として公開したか?
    ■ 特徴と現在の開発状況
    □ Sudachiの特徴,他システムとの比較
    ■ 今後の開発計画
    □ 同義語検索ライブラリとの連携
    □ ディープラーニングのフレームワークとの連携
    □ 速度向上
    本日のご紹介内容
    3
    はじめに

    View Slide

  4. Sudachi とは

    View Slide

  5. 概要
    ■ 製品利用可能な日本語形態素解析器
    □ Sudachi ファミリー
    ■ Sudachi: Java 実装
    ● 2017年8月にワークス徳島人工知能 NLP 研究所から OSS として公開
    ■ SudachiPy: Python 実装
    ● Java 版 Sudachi の Python版移植(基本的に Sudachi と同じ機能)
    ■ elasticsearch-sudachi
    ● Elasticsearch 向けの Sudachi プラグイン
    5
    Sudachi とは
    ※名称の由来は,酢橘(徳島県の特産品である柑橘類)から

    View Slide

  6. ■ 形態素解析器以外の OSS(Sudachi ファミリー)
    □ chikkar / chikkarpy / elasticsearch-chikkar
    ■ 同義語展開ツール,数万語規模の同義語辞書も公開
    □ chiVe
    ■ 100億語規模の超大規模WEBコーパス NWJCから学習した単語ベクトル
    □ kintoki
    ■ (開発中)係り受け解析器
    概要
    6
    Sudachi とは

    View Slide

  7. 形態素解析とは?
    7
    ■ テキストを形態素単位に分割し,原形や品詞を付与
    □ Segmentation
    ■ テキストを分割
    ■ 「にわとりは飛ばない」 → にわとり / は / 飛ば/ ない
    □ Stemming (Lemmatization)
    ■ 語形を辞書形に
    ■ 飛ば → 飛ぶ
    □ Part-of-speech Tagging
    ■ 品詞を付与
    ■ にわとり(名詞) / は(助詞) / 飛ば(動詞) / ない(助動詞)
    Sudachi とは

    View Slide

  8. ■ 製品利用可能の意味
    □ ライセンス
    ■ Apache-2.0 で公開
    ● 製品に組み込み可能
    ● ✔ Commercial use
    □ 製品で使えるクオリティ
    ■ 精度,性能,機能
    ● 形態素解析以外の機能も搭載
    ■ 継続的なメンテナンス体制
    ● 継続的な更新
    ○ 例)SudachiPy v0.5.2 : 3/26 にリリース
    ● 業務時間を使った GitHub 上の issue や pull request への対応作業
    8
    Sudachi とは
    「製品利用可能」な日本語形態素解析器

    View Slide

  9. 製品利用のための支援
    ■ Sudachi有償サポートサービス

    9
    Sudachi とは

    View Slide

  10. 開発経緯

    View Slide

  11. 製品利用可能な形態素解析器の必要性
    11
    ■ 高品質な業務システムの実現には NLP/AI の技術が必要不可欠
    □ 例:非構造化データからの必要な情報の抽出など
    ■ 様々なドメイン知識(業界・業種の用語)も考慮する必要がある
    □ 製品利用を想定した場合,用途ごとにツールを選択する必要があった
    ■ 解析器
    ● 形態素解析以外の処理が不足しているもの
    ● 実用的な解析速度でないもの
    ■ 辞書
    ● 単語分割ルールが直観的でないもの
    ● ライセンスが OSS 非互換なもの
    ● メンテナンスが停止されているもの
    □ 汎用的なツール(解析器・辞書)があれば効率的なノウハウの共有が可能
    開発経緯

    View Slide

  12. 形態素解析器と辞書の公開
    ■ なぜ OSS として公開したか?
    □ ワークスアプリケーションズの企業理念
    ■ 「企業の生産性」を高め、企業価値の拡大に貢献
    □ 当時の CEO が二つ返事で OK
    □ 形態素解析器への色々な要望が知りたかった
    □ 解析器は廃れる可能性はあるが,言語リソースの活用価値は残るだろう
    12
    開発経緯

    View Slide

  13. ■ よりユーザフレンドリーな開発を意識
    □ 自然言語処理界隈の人 (NLPer) は,Python を扱うことが多い
    ■ Java 版 Sudachi から,Pure Python として実装を移植
    ■ 困ったら,中のソースを容易に見ることができる
    □ pip コマンド一行で辞書と同時にインストール可能
    □ 現在も,使いやすさを意識して開発
    ■ Sudachi 辞書を,プログラム内から指定できるようにアップデート
    ■ 最近でもチュートリアルの拡充などを行っている
    ● https://github.com/WorksApplications/SudachiPy/blob/develop/docs/tutorial.md
    SudachiPy の開発秘話
    13
    開発経緯

    View Slide

  14. 特徴と現在の開発状況

    View Slide

  15. SudachiPy の特徴¹
    ■ 形態素解析とそれに付随する処理を備えたライブラリ
    □ 実用上は,形態素解析以外の処理も必要
    ■ 例えば,新語への対応や文字・単語の正規化が必要な場面は多い
    □ SudachiPy の特徴として,これらの処理に必要な機能を兼ね備えている
    ■ 辞書への新規単語の登録
    ● 多数の収録語彙
    ● 継続的な辞書(Sudachi辞書)の更新
    ■ 前処理・後処理
    ● 入力文への文字正規化
    ● 複数の分割単位の併用
    ■ 読み,表記正規化
    ● 表記正規化情報
    15
    特徴と現在の開発状況
    1) Sudachi(Java版)と SudachiPy(Python版)の機能はほとんど同じです

    View Slide

  16. ■ 現在,公開している Sudachi 辞書では290万語以上を収録
    □ 出典:UniDic 2.1.2,NEologd20171106,内省
    ■ 内省:接辞付きの語句,複合名詞,外来語の言語表記など
    □ 用途に合わせた3種類の辞書を公開
    ■ small : UniDic の収録語とその正規化表記,分割単位を収録
    ■ core : 基本的な語彙(形態素解析として実用的な語彙)
    ● UniDic をベースに会社名,住所,駅名,人名を追加
    ● 人手で,分割情報・コスト・品詞・読みなどを全件整備
    ■ full : 多種多様な固有名詞まで収録(一部未整備のものも含まれる)
    □ 最近の辞書更新で追加された語句 (2021.06.08)
    ■ 接種率,COVAX,デジタル庁,カーボンゼロ,計算科学センター駅
    多数の収録語彙
    16
    特徴と現在の開発状況

    View Slide

  17. SudachiPy での辞書の指定方法
    ■ 最新バージョン(v0.5.2)では,dict_type によって指定可能
    17
    特徴と現在の開発状況

    View Slide

  18. 複数の分割単位の併用
    ■ SudachiPy では,複数粒度の分割が可能
    □ A 単位(短単位) :UniDic の短単位規定とほぼ同じ
    □ B 単位(中単位) :”A 単位 + 接辞”,一部の複合動詞
    □ C 単位(NE単位):複合名詞,固有名称,慣用句など
    18
    特徴と現在の開発状況
    Sudachiによる複数粒度分割の例
    A単位
    カ ン ヌ 国 際 映 画 祭
    カ ン ヌ 国 際 映 画 祭
    カ ン ヌ 国 際 映画 祭
    B単位
    C単位
    ※詳細な定義は,以下の論文を参照
    坂本ら, 形態素解析器『Sudachi』のための大規模辞書開発, 2018.
    用途によって
    欲しい単位は違う

    View Slide

  19. SudachiPy での分割単位の指定方法
    ■ 各種単位(A 単位 / B 単位 / C 単位)で出力や再分割が可能
    19
    特徴と現在の開発状況

    View Slide

  20. 表記正規化
    ■ 同じ意味の単語を一つの表記に統一
    20
    特徴と現在の開発状況
    パターン 入力 表記正規化
    送り仮名の違い 受付,受付け 受け付け
    文字種の違い ひまわり,ヒマワリ 向日葵
    漢字の違い
    (異体字,代用表記,慣用表記)
    藝術
    驚歎
    得用
    芸術
    驚嘆
    徳用
    誤用 シュミレーション シミュレーション
    縮約(くだけた言い方) ~ちゃあ ~ては
    活用 歩か(ない) 歩く
    派生 書ける 書く
    ※詳細な情報は,以下の論文を参照
    坂本ら, 形態素解析器『Sudachi』のための大規模辞書開発, 2018.

    View Slide

  21. SudachiPy での表記正規化
    ■ 解析結果の Morpheme オブジェクトから表記正規化形を取得可能
    21
    特徴と現在の開発状況
    基本的な
    形態素の情報

    View Slide

  22. ■ 必要な機能から優先して開発を進めている
    □ Java 版 Sudachi の方が開発が早かったため,機能が先行している
    ■ SudachiPy 側でまだ実装されていない機能の例
    ● 最新の Sudachi で,括弧内の読み仮名を読み飛ばす機能が追加
    ○ 「徳島(とくしま)へ行(い)く」→徳島(とくしま)/ へ / 行(い)く
    □ 優先度の高い(要望のある)機能から順次対応している
    ■ 最近では同義語情報の追加に伴う更新を重点的に対応(後述)
    開発状況
    22
    特徴と現在の開発状況

    View Slide

  23. 今後の開発計画

    View Slide

  24. ■ SudachiPy の解析結果から同義語を検索できる機能の追加を予定
    □ 先日,同義語展開ライブラリ「chikkarpy」を公開
    ■ トライを利用して効率的に同義語を管理・展開が可能
    ■ ワークス徳島が公開している同義語辞書を利用(ユーザ辞書も作成可能)
    □ SudachiPy の解析結果から同義語を取得できるような機能を追加
    ■ 同義語辞書フォーマットの改良後に公開予定
    1. 同義語検索ライブラリとの連携
    24
    今後の開発計画

    View Slide

  25. 2. ディープラーニングのフレームワークとの連携
    ■ 事前学習済みモデルの公開
    □ 事前学習済みモデルとは
    ■ 大規模なコーパスから言語モデルを学習したモデル
    ■ モデルをタスク毎にチューニングすることで,高精度な解析が可能
    □ 様々なモデルが公開されている
    ■ 例:東北大BERT (Bidirectional Encoder Representations from Transformers)
    □ 現状では,SudachiPy を利用したツールとの親和性は低い
    ■ 主に形態素解析器の特徴の違いや,前処理・分割単位が異なるため
    25
    今後の開発計画

    View Slide

  26. 2. ディープラーニングのフレームワークとの連携
    ■ Sudachi for Transformers (chiTra) の公開
    □ HuggingFace の Transformers 向けのトークナイザ・モデル
    ■ 先日,トークナイザを事前に公開
    ■ 今後,BERT モデルの公開を予定
    26
    今後の開発計画

    View Slide

  27. 3. 速度向上
    ■ 「大規模データ時代に求められる自然言語処理」
    □ SudachiPy の現状
    ■ プログラミング言語的な側面
    ● 基本的に Python で実装(一部のみ Cython 実装)
    ■ 辞書サイズ
    ● 現在も,語彙を拡充して辞書を更新している
    ○ Full辞書の語彙数:2018.8月 / 2,801,739 → 現在 / 2,923,249 (+121,510)
    ● 見出し語や品詞以外にも,分割情報や同義語IDなどのフィールドも存在
    ○ 今後も各語彙のフィールドを追加予定(e.g. 自由記述欄 - Description filed)
    ■ 形態素解析以外の機能
    ● 今後も,必要な機能やプラグインがあれば追加予定
    □ 機能強化と速度向上はトレードオフだが実用に耐えうる速度は維持したい
    27
    今後の開発計画

    View Slide

  28. ■ Rust 実装の Sudachi の開発を開始
    □ コアの実装は Rust で,Python 向けのバインディングを提供
    ■ 補足:HuggingFace の Tokenizers も Rust で実装されている
    □ どれくらい高速化できるか?
    ■ 有志による Rust 版の Python バインディングの実装結果
    ● https://github.com/faisalron/sudachirs-python
    ○ SudachiPy (w/o Cython) と比較して 30 倍
    ○ SudachiPy (w/ Cython) と比較して 8 倍
    □ 7月より,本格的に開発に着手
    ■ 元ワークス徳島の久本 (@sorami) の実装をベースに実装
    3. 速度向上
    28
    今後の開発計画

    View Slide

  29. 本日のご紹介内容
    ■ はじめに
    □ 自己紹介
    ■ Sudachi とは
    □ 概要,形態素解析とは,製品利用可能の意味
    ■ 開発経緯
    □ 既存の解析器と辞書,なぜ OSS として公開したか?
    ■ 特徴と現在の開発状況
    □ Sudachiの特徴,他システムとの比較
    ■ 今後の開発計画
    □ 同義語検索ライブラリとの連携
    □ ディープラーニングのフレームワークとの連携
    □ 速度向上
    29
    まとめ

    View Slide