1 of 18

自然言語処理チーム(pkg-nlp-ja)とパッケージ

2015/05/23

野首貴嗣

knok@debian.org/@knok

2 of 18

*NOTICE*

私は専門家ではありません

間違いがあれば容赦なくご指摘ください

3 of 18

pkg-nlp-ja

Debianにおける自然言語処理パッケージの管理

https://alioth.debian.org/projects/pkg-nlp-ja/

4 of 18

管理パッケージ

  • ChaSen
    • dirts (Double Array実装)
  • 辞書
    • ipadic
    • naist-jdic
    • unidic

5 of 18

その他のNLPパッケージ

  • 解析
    • MeCab
    • Juman
  • 変換
    • Anthy (pkg-anthy)
    • KAKASI
    • (mozc)
      • 変換についてはpkg-imeで管理

6 of 18

何ができるか

形態素解析

  • 形態素(単語)を調べる
  • 単語の属性情報を得る
    • 品詞・読み等
      • 辞書に依存

ChaSen, MeCab, Juman

ref: http://www.phontron.com/nlptools.php?lang=ja

7 of 18

応用例

  • 検索エンジン
    • 転置インデックスの作成
    • Groonga, Namazu等
  • 音声合成 (Text-to-Speech)
    • open-jtalk
  • 分かち書き
    • word2vecの下処理
  • かな漢字変換

8 of 18

動作原理

  • 解析対象を確からしい単位で分割
    • 例: 「東京都府中市」
      • x 「東」「京都」「府」「中」「市」
      • o 「東京」「都」「府中」「市」
    • 単純なルールでは処理できない

9 of 18

解析の手がかり

  • マッチする単語の長さ
    • 最長一致(KAKASI)
      • ref: KAKASIの実装と課題
  • 品詞情報の利用
    • 前後に来やすい品詞のつながり
    • 単語のつながり
    • 単語の頻度/スコア
  • 確率
    • 出現率、連接確率

10 of 18

アルゴリズム

  • コスト最小法
    • ChaSen
  • CRF (条件付き確率場)
    • MeCab

ref: 日本語形態素解析入門(pdf)

11 of 18

辞書探索

Common Prefix Search

  • 同じ接頭語を持つデータを高速に検索

アルゴリズム

  • トライ
    • パトリシアトライ
  • Double Array
    • dartsパッケージ

12 of 18

トライ(Trie)

文字単位の木構造

13 of 18

Double Array

  • トライ構造を2つの配列で表現
    • BASE配列 (子ノード番号へのオフセット)
    • CHECK配列 (親ノード番号)
      • 単純な状態遷移表だと疎な配列になる
      • 構築に計算が必要
        • 配列の空き要素を見つける必要がある
        • 動的な更新には向かない

ref: ダブル配列の実装方法

14 of 18

辞書

  • KAKASIDIC(kanwadic)
    • SKKDICベース
  • ipadic
    • ChaSen, MeCab
  • naist-jdic
    • ChaSen, MeCab
  • jumandic
    • MeCab, JUMAN

15 of 18

単語の追加: KAKASI

  • 辞書ファイルの作成(EUC-JP)

  • kakasiコマンドの引数に辞書のパスを追加

# よみ [空白] 漢字

けいさんしょう 経産省

けいざいさんぎょうしょう 経済産業省

$ echo '日本の経産省' | kakasi -w -iutf8 -outf8 ./extdic

日本 の 経産省

$ echo '日本の経産省' | kakasi -w -iutf8 -outf8

日本 の 経 産 省

16 of 18

単語の追加: ChaSen

  • ipadicのソースを取得
  • 追加したい単語の意味に近いものを探す
  • そのエントリーをコピーし、スコアはそのままで単語を修正する
  • ./configure && make

注: スコアを計算するツールが付属していない

17 of 18

単語の追加: MeCab

  1. ChaSenと同じ方法
    • 活用のある品詞はすべて開く必要がある
  2. mecab-cost-trainで正確なコストを算出

18 of 18

参考

自然言語処理ツール

http://www.phontron.com/nlptools.php?lang=ja

日本語で読める自然言語処理のチュートリアルスライドまとめ

http://blog.unnono.net/2015/04/nlp-tutorial.html