(2)コスト推定,関連技術

今日の内容
自然言語処理
Natural Language Processing
第5回
2014/10/22
• 形態素解析(2)コスト推定,関連技術
– 形態素解析のためのコスト推定
• 単語 N-gram
• Markov モデルに基づくコスト推定
• 隠れ Markov モデル(HMM)に基づくコスト推定
– 形態素解析ツール紹介: MeCab
芝浦工業大学 工学部 情報工学科
– 形態素解析の関連技術: かな漢字変換,音声認識
杉本 徹
– 第2回課題: 形態素解析ツールを使ってみよう
復習: 接続コスト最小法
• 各単語および単語どうしの接続にコストを課す.
合計コストが最小の単語分割を求めるのが目標
形態素解析のためのコスト推定
文 S = w1 w2 … wk (wi: 単語)
cost(w1 w2 … wk) =
cost(w1) + cost(w2) + … + cost(wk) +
cost(w1,w2) + cost(w2,w3) + … + cost(wk-1,wk)
• 単語コスト cost(w)
– 単語 w の出現頻度が小さいほど大きな値とする
• 接続コスト cost(w, w’)
– 単語 w と w’ が接続しにくいほど大きな値とする
前回説明した解析例
7(8)
12(25)
日本
出発
1
5
1
1
(36)
3(33)
10(22) 3(12) 7(22) 10(40)
3
8
1
文頭
を
出
発 5 する
文末
8(9) 3 本
3
1 日 8(20) 1
14(39)
3
3
3 本
発する
• 赤線の経路が最小コストの経路(解析結果)となる
前回の宿題
• 単語辞書,単語コスト,接続コストが以下のように
与えられるとき,「すもももももです」 という文を
コスト最小法によって形態素解析しなさい.
• 単語辞書・コスト
表層形
品詞
コスト
すもも
名詞
12
もも
名詞
12
も
助詞
です
助動詞
接続コスト
左\右 名詞 助詞 動詞 助動詞 文末
文頭
1
10
5
10
-
名詞
3
1
5
5
10
助詞
1
5
3
10
8
4
動詞
3
3
3
1
3
4
助動詞
3
3
10
3
1
1
単語コスト・接続コストの設定
• 直感に基づき手作業で設定するのは大変
コーパスにおける単語や単語連鎖の出現頻度
に基づき,適切なコストを導出する(統計的手法)
1. Markov モデル ← 単語 N-gram
2. 隠れMarkov モデル(HMM)
単語 N-gram データの例
• Google Web 日本語 N-gram
– Google がクロールした Web ページに含まれる
日本語文を形態素解析し,1-gram ~ 7-gram の
出現回数を集計・記録したもの
– 約200億文,2550億単語
1-gram(続き)
情報
商品
ページ
ブログ
表示
検索
利用
サイト
コメント
登録
・・・
約5.4億
約5.1億
約3.5億
約3.3億
約3.3億
約2.9億
約2.5億
約2.4億
約2.3億
約2.2億
・・・
単語 N-gram
• 文中に連続して出現する単語の N個組
(w1, w2, …, wN)
• 例: 「ラーメンを食べる」 という文において
– 1-gram (unigram) (ラーメン),(を),(食べる)
– 2-gram (bigram) (ラーメン,を),(を,食べる)
– 3-gram (trigram) (ラーメン,を,食べる)
• 与えられたコーパスにおける N-gram (w1, w2,
…, wN) の出現回数を C(w1, w2, …, wN) で表す
1-gram
の
に
を
は
て
が
た
で
と
し
・・・
約125億
約65億
約62億
約55億
約55億
約50億
約44億
約40億
約32億
約31億
・・・
1-gram(続き)
ラーメン
野菜
ケーキ
カレー
うどん
寿司
フルーツ
チョコレート
ステーキ
アイスクリーム
・・・
約2000万
約2000万
約1500万
約1400万
約1200万
約800万
約600万
約500万
約300万
約200万
・・・
2
2-gram
ラーメン 屋
ラーメン を
ラーメン の
ラーメン は
ラーメン が
ラーメン 店
ラーメン と
ラーメン に
ラーメン 食べ
ラーメン しょうゆ
・・・
3-gram
約180万
約140万
約130万
約80万
約70万
約50万
約50万
約40万
約40万
約40万
・・・
N-gram 確率
• N-1 個の単語 w1, w2, …, wN-1 がこの順で出現
するという条件の下で,その次に単語 wN が来る
条件付き確率 P(wN|w1, w2, …, wN-1)
• コーパスに基づく N-gram 確率の最尤推定
C(w1, w2, …, wN-1, wN)
P(wN|w1, w2, …, wN-1) =
C(w1, w2, …, wN-1)
※ 最尤推定: 標本データ(コーパス)の生起確率を
最大化するように確率モデルのパラメータ値を決める
1-gram 確率(続き)
ラーメン
野菜
ケーキ
カレー
うどん
寿司
フルーツ
チョコレート
ステーキ
アイスクリーム
・・・
0.000077
0.000077
0.000061
0.000054
0.000049
0.000032
0.000022
0.000019
0.000011
0.000007
・・・
ラーメン を 食べ
ラーメン を 食べる
ラーメン を 検索
ラーメン を 注文
ラーメン を 含む
ラーメン を 作っ
ラーメン を 作る
ラーメン を 中心
ラーメン を 食す
ラーメン を 頼ん
・・・
約43万
約8万
約6万
約5万
約4万
約3万
約2万
約1万
約1万
約1万
・・・
1-gram 確率
の
に
を
は
て
が
た
で
と
し
・・・
0.049
0.025
0.024
0.021
0.021
0.020
0.017
0.016
0.013
0.012
・・・
2-gram 確率
ラーメン 屋
ラーメン を
ラーメン の
ラーメン は
ラーメン が
ラーメン 店
ラーメン と
ラーメン に
ラーメン 食べ
ラーメン しょうゆ
・・・
0.089
0.070
0.064
0.040
0.036
0.026
0.025
0.021
0.021
0.019
・・・
3
3-gram 確率
ラーメン を 食べ
ラーメン を 食べる
ラーメン を 検索
ラーメン を 注文
ラーメン を 含む
ラーメン を 作っ
ラーメン を 作る
ラーメン を 中心
ラーメン を 食す
ラーメン を 頼ん
・・・
単語 N-gram モデル
0.31
0.06
0.05
0.04
0.03
0.02
0.01
0.01
0.01
0.01
・・・
N-gram モデルは近似
• 例: w1 = 「ラーメン」 w2 = 「を」 w3 = 「食べる」
P(w1, w2, w3) = P(w1)×P(w2|w1)×P(w3|w1,w2)
0.0000003
0.00008
0.07
0.06
– 1-gram モデル
P(w1, w2, w3) = P(w1) × P(w2) × P(w3)
0.0000000001
0.00008
0.02
0.00008
– 2-gram モデル
P(w1, w2, w3) = P(w1) × P(w2|w1) × P(w3|w2)
0.000000003
0.00008
0.07
0.0006
• 近似としては N の値が大きいほど良いが,N≧4 だとコーパ
ス中の各 N-gram の出現回数が減り,出現確率の推定値の
信頼性が低くなるため,応用では N = 2, 3 がよく用いられる
再掲: 接続コスト最小法
• 各単語および単語どうしの接続にコストを課す.
合計コストが最小の単語分割を求めるのが目標
文 S = w1 w2 … wk (wi: 単語)
cost(w1 w2 … wk) =
cost(w1) + cost(w2) + … + cost(wk) +
cost(w1,w2) + cost(w2,w3) + … + cost(wk-1,wk)
• 単語コスト cost(w)
– 単語 w の出現頻度が小さいほど大きな値とする
• 接続コスト cost(w, w’)
• 言語の確率モデルの一種であり,文中の各単語の
出現確率は直前の N-1 個の単語の組み合わせに
依存して決定する(N-1重Markov過程)と見なす
• 例: 1-gram モデル
(文中の各単語の出現確率は,直前の単語に依存しない)
P(w1, w2, …, wk) = P(w1)×P(w2)×…×P(wk)
• 例: 2-gram モデル
(単語の出現確率は,直前の1単語に依存して決まる)
P(w1, w2, …, wk) = P(w1)×P(w2|w1)×P(w3|w2)
×…×P(wk|wk-1)
Markovモデルに基づく形態素解析
• 解析結果候補の中から,単語N-gramモデルにより
求められる確率が最大の候補を選ぶ
• 2-gram モデルの場合
文 S = w1 w2 … wk (wi: 単語)
P(w1, w2, …, wk) = P(w1)×P(w2|w1)×P(w3|w2)
×…×P(wk|wk-1)
この式の値が最大となる解析候補を選ぶ
Markovモデルと接続コスト最小法の関係
• コーパスから最尤推定により得られる 2-gram 確率
を用いて,接続コストを以下のように設定する
cost(w, w’) = -log P(w’|w)
このとき,
cost(w1,w2) + cost(w2,w3) + … + cost(wk-1,wk)
= -log P(w2|w1)-log P(w3|w2)-…-log P(wk|wk-1)
= -log (P(w2|w1)×P(w3|w2)×…× P(wk|wk-1))
つまり,単語列 w1 w2 … wk の接続コストの和の最小化は
生起確率の最大化とほぼ一致する
– 単語 w と w’ が接続しにくいほど大きな値とする
4
続き
隠れMarkovモデルに基づく形態素解析
• 形態素解析結果の候補の中から,HMM によって
求められる確率が最大の候補を選ぶ
• 言語の隠れMarkovモデル
(Hidden Markov Model, HMM)
– 文中の各単語 wi は,Markov過程に従い遷移する(観測
不可能な)内部状態 tj から確率的に生成されると考える
• 文 S = w1 w2 … wk (wi: 単語) に対し,
k
P(w1, w2, …, wk) = Π P(ti|ti-1) P(wi|ti)
i=1
– 内部状態 tj として,通常は品詞を考える
= P(t1)×P(t2|t1)×…×P(tk|tk-1)
×P(w1|t1)×…×P(wk|tk)
p..
内部状態
(品詞)
q1
出力
(単語)
t
p12 2 p..
t1
t
p13
p34 4
t3
p35
t
q2 q3
5
q4
この式の値が最大となる解析候補を選ぶ
• 品詞2-gram確率の最尤推定 P(ti|ti-1) = C(ti-1, ti) / C(ti-1)
• 品詞ごとの単語出現確率の最尤推定 P(wi|ti)=C(wi, ti)/C(ti)
w1 w2 w3 w4
例
HMM と接続コスト最小法の関係
• w1 = 「ラーメン」 w2 = 「を」 w3 = 「食べる」
P(ラーメン, を, 食べる)
= P(名詞) × P(助詞|名詞) × P(動詞|助詞)
×P(ラーメン|名詞)×P(を|助詞)×P(食べる|動詞)
例えば P(助詞|名詞) は,名詞の次の語が助詞である確率
P(ラーメン|名詞) は,任意に選んだ名詞が「ラーメン」である確率
P(名詞)
名詞
P(ラーメン | 名詞)
助詞
P(助詞 | 名詞)
このとき,単語列 w1 w2 … wk の単語コストと接続コストの和
の最小化はHMMにおける生起確率の最大化とほぼ一致する
動詞
P(動詞 | 助詞)
を
食べる
例: 短い文章からの接続コスト推定
重ね着
名
する
動
を
助
し
動
て
助
暖房
名
を
助
ウォームビズ
が
助
1日
名
スタート
し
動
名
名
名
に
助
た
。
控えめ
助動
国内
名
で
助
稼働
名
する
動
原子力
発電所
名
名
中
名
環境省
電力
名
使用
名
を
助
抑えよ
う
名
は
助
動
助動
と
助
室温
名
を
助
20度
名
に
助
保つ
動
よう
名
に
助
呼びかけ
て
助
いる
動
。
動
cost(w)
= -log P(w|t)
cost(w, w’) = -log P(t’|t)
(t, t’ は単語 w, w’ の品詞)
P(食べる | 動詞)
P(を | 助詞)
ラーメン
• コーパスから最尤推定により得られる確率を用いて,
単語コストと接続コストを以下のように設定する
が
助
品詞間の接続コストの推定
• 文章中の出現回数
C(t, t’)
ない
形容
出典:読売新聞 2013/11/1
左\右 名詞 助詞 動詞 助動詞 文末
文頭
2
名詞
4
助詞
7
動詞
3
助動詞
• cost(t, t’)
= -log P(t’|t)
C(t, t’)
= -log
C(t)
11
2
6
2
2
1
1
1
左\右 名詞 助詞 動詞 助動詞 文末
文頭
0
∞
∞
∞
∞
名詞
2.1
0.6
3.1
∞
∞
助詞
0.9
∞
1.1
∞
∞
動詞
1.4
2
∞
2
3
助動詞
∞
1
∞
∞
1
5
形態素解析ツールの例
• MeCab (工藤拓,2006~)
形態素解析ツールの紹介
– 条件付き確率場(CRF)を用いたコスト推定
– ChaSen より高速に動作
• ChaSen (奈良先端大,1997~)
– HMM を用いた単語コスト・接続コストの自動推定
• JUMAN(京都大,1993~)
– 単語コスト・接続コストは人手で設定
– MeCab, ChaSen と異なり,益岡・田窪文法に基づく辞書を使用
– 代表表記や意味情報など,出力される単語情報が充実
• Yahoo! 日本語形態素解析API
– Web 上で形態素解析を実行できる Web サービス
MeCab の特徴
MeCab のインストール方法
詳しくは,MeCab のホームページ参照
• オープンソースの形態素解析ツール
• 解析手法
–
–
–
–
接続コスト最小法(単語コスト+接続コスト)
条件付き確率場(CRF)を用いたコスト推定
Viterbi アルゴリズムを用いた解探索
辞書検索は,Trie構造をダブル配列で実装
• 辞書,コーパスに依存しない汎用の設計
– 異なる品詞体系をもつ複数の辞書に対応
– ユーザが用意したコーパスからのコスト推定も可能
• Windows
– MeCab のホームページからバイナリパッケージ(辞書
内蔵)をダウンロードしてインストール
– 学情の環境では不可
• UNIX
– ソースコードと辞書をダウンロードし,ホームページの
説明を参考に,それぞれコンパイル,インストールする
– インストール時の設定により,学情のUNIXサーバにも
インストール可能(次ページ以降で説明)
参考: 学情UNIXサーバでのインストール手順
• 一般ユーザは学情システムのシステムディレクトリにソフトウェア
をインストールする権限がないため,インストール先をデフォルト
のシステムディレクトリから自分のホームディレクトリ内の適当な
場所(今回の説明では,ホームディレクトリ下の usr という名前の
ディレクトリとする)に変更してインストール処理を実行する
手順1 まず mecab-0.996.tar.gz を適当なディレクトリへダウンロードする
手順2 ダウンロードしたディレクトリに移動し,以下のコマンドを順に実行
tar zxfv mecab-0.996.tar.gz
cd mecab-0.996
./configure --prefix=$HOME/usr --with-charset=utf8
make
make check
make install
続き
手順3 次に,辞書をインストールする.mecab-ipadic-2.7.0-(略).tar.gz
をダウンロードし,以下のコマンドを順に実行する
tar zxfv mecab-ipadic-2.7.0-(略).tar.gz
cd mecab-ipadic-2.7.0-(略)
./configure --prefix=$HOME/usr (次の行に続く)
--with-charset=utf8 (次の行に続く)
--with-mecab-config=$HOME/usr/bin/mecab-config
make
make install
手順4 インストールが終わったので,MeCab を起動する
~/usr/bin/mecab
※ ~/usr/bin を環境変数 PATH に追加しておくと楽
6
MeCab の使い方
• MeCab を起動し,解析したい文を標準入力から入力する
入力文
品詞(4階層)
ラーメンを食べた。
ラーメン 名詞,一般,*,*,*,*,ラーメン,ラーメン,ラーメン
を
助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ
動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
た
助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。
記号,句点,*,*,*,*,。,。,。
EOS
% mecab
形態素解析の関連技術
• かな漢字変換
• または,解析したい文章を1文ずつ行に区切ってテキストファイ
ルに保存し,そのファイル名を引数として MeCab を実行する
• 音声認識
• コマンドオプションなどの詳細は,MeCab ホームページまたは
ヘルプを参照
かな漢字変換
参考: 確率的言語モデル
• 入力:ひらがな列 → 出力:かな漢字列
• 任意の単語列 w1, w2, …, wk に対して,その単語列
が実際に使用される(出現する)確率を割り当てる
例: P(太郎, は, 大学生, です) = ?
P(太郎, は, 芝浦工大, の, 三年生, です) = ?
• 確率的言語モデルの例
「きょうはあめ」 → 「今日は雨」?「京は飴」?
• 変換手法
– 2文節最長一致法 (ATOK など)
• 文の先頭から,連続する2文節の長さの和が最長の候補を選んで
進めていく
– コスト最小法 (MS-IME など)
• 単語コストと接続コストの和が最小の候補を選ぶ
• Viterbi アルゴリズムによる探索
☆単語 N-gram モデル
1-gram モデル
P(w1, w2, …, wk) = P(w1)×P(w2)×…×P(wk)
2-gram モデル
– 統計的手法
• 事後確率が最大の単語列を求める
P(w1, w2, …, wk) = P(w1)×P(w2|w1)×…×P(wk|wk-1)
参考文献: 「日本語入力を支える技術」 徳永,技術評論社
音声認識
統計的手法に基づくかな漢字変換
問題: 入力ひらがな列 X に対する事後確率 P(W|X)
が最大となる単語列 W を見つける
• Bayesの法則により
P(W | X ) 
• 入力:音声信号 → 出力:単語列
「豊洲の天気」
P( X | W )  P(W )
P( X )
• 近年は,統計的手法が主流
なので,P(X|W)×P(W) が最大となる W を見つけ ればよい
– P(X|W) 単語列 W の読みが X である確率
– P(W)
単語列 W が出現する確率
• 分類
– 単語認識 vs 連続音声(単語列)認識
– 特定話者 vs 不特定話者
7
統計的手法に基づく音声認識
問題: 入力音声 X に対する事後確率 P(W|X)
が最大となる単語列 W を見つける
• Bayesの法則により
P( X | W )  P(W )
P(W | X ) 
P( X )
なので,P(X|W)×P(W) が最大となる W を見つけ ればよい
– P(X|W) 単語列 W の音声(の特徴量)が X である確率
(音響モデルの確率)
– P(W)
単語列 W が発言される確率(言語モデルの確率)
音声認識システムの構成
入力音声
音声分析
X
単語辞書
音響モデル
P(X|W)
探索
P(W)
P(W|X) ∝ P(X|W)・P(W)
言語モデル
認識結果 W = argmax P(W|X)
レポート課題
第2回課題
形態素解析ツールを使ってみよう
• まず,異なる文体の文章を2つ(それぞれ100文字以上)
自由に選ぶ.これをテキストA,テキストBと呼ぶ
– 新聞記事,ブログ,twitter,小説など
• テキストAとテキストBを同じ形態素解析ツール(MeCab
を推奨するが,それ以外も可)で解析する
– 複数文からなるテキストを解析する際,1文ずつに分けて形態素
解析ツールに与える
• 解析結果を分析する
分析1:自分の目でチェックして,解析の誤りがないか確認する
分析2:テキストA,テキストBそれぞれにおける各品詞の出現割合
(例:テキストAの全単語中△□%が名詞)を求めて,比較する
レポートの形式,期限,提出方法
• 形式: 電子ファイル(MS Word の doc/docx,またはPDF)
• 内容構成: レポートの内容に,下記の①②③④を
含めること
①方法の説明
②選んだ文章と,ツールによる解析結果
③分析結果 (必要に応じて表やグラフを用いる)
④結果についての考察
• 期限: 11月11日(火)
• 提出方法: 電子メールで杉本宛(sugimoto@~)
8