2009 年度 修士論文
情報収集の履歴を用いた雑談音声認識の 言語モデル適応
Language model adaptation for chat voice recognition using history of active information gathering
早稲田大学大学院基幹理工学研究科 情報理工学専攻
草野 俊一
Shunichi Kusano
学籍番号 5108B037-8
提出 2010 年 2 月 1 日
指導 白井 克彦 教授
目 次
第1章 序論 1
1.1 はじめに . . . . 1
1.2 本論文の構成 . . . . 3
第2章 音声認識システム 4 2.1 一般的な音声認識システム . . . . 4
2.1.1 音響モデル . . . . 5
2.1.2 言語モデル . . . . 5
2.2 音声認識におけるトピックの限定 . . . . 6
2.2.1 講義音声のためのWEB文書を用いた言語モデルの適応化と語彙選択 6 2.2.2 言語情報と映像情報を統合した隠れマルコフモデルに基づくトピッ ク推定 . . . . 7
第3章 情報収集履歴を用いた言語モデル適応 9 3.1 提案手法 . . . . 9
3.1.1 適応テキストの収集 . . . . 11
3.1.2 言語モデル適応 . . . . 13
3.2 PLSA言語モデル . . . . 13
3.2.1 PLSA modeling . . . . 14
3.2.2 PLSA weighting . . . . 15
3.3 Unigram Scaling . . . . 15
3.4 単語ベクトル . . . . 17
第4章 実験 20 4.1 実験の概要 . . . . 20
4.2 準備 . . . . 22
4.2.1 データ収集・収録 . . . . 22
4.2.2 実験環境 . . . . 22
4.3 標準の環境における音声認識(実験I) . . . . 23
4.4 音声認識実験 . . . . 23
4.4.1 正解スクリプトによる言語モデルの音声認識(実験II) . . . . 23
4.4.2 キーワード検索による適応の音声認識実験(実験III) . . . . 23
4.4.3 閲覧履歴すべてを用いた適応の音声認識実験(実験IV) . . . . 24
i
ii 4.4.4 手動モデリングによる音声認識(実験V) . . . . 24 4.4.5 PLSA言語モデルを用いた音声認識(実験VI) . . . . 25
第5章 結果と考察 28
第6章 まとめ 33
図 目 次
2.1 一般的な音声認識システムの概要 . . . . 8
3.1 提案手法の概要 . . . . 10
3.2 情報収集履歴の利用法 . . . . 12
3.3 単語の加工例 . . . . 16
3.4 PLSA言語モデル作成アルゴリズム . . . . 16
3.5 Unigram Scalingのイメージ . . . . 18
3.6 単語ベクトル作成のイメージ . . . . 19
5.1 Unigram scaling係数αと認識性能 . . . . 29
iii
表 目 次
4.1 対話音声・収録条件 . . . . 27 4.2 PLSAによるunigram作成条件 . . . . 27 5.1 言語モデル作成手法毎の単語正解率(Corr.)・単語正解精度(Acc.) . . . 32
iv
第 1 章 序論
1.1 はじめに
雑談音声認識のためのn-gram言語モデル適応の方法を検討する.雑談に音声認識を適 用した場合,対話ログをデータマイニングすることでユーザの嗜好に合ったした情報提供 を行ったり,対話を活性化させるなどのアプリケーションが期待できる.
ここで雑談とは,自由発話の一形態であり,タスクが限定されていない対話のことであ る.また,雑談のトピックはタスクが限定されている一般の対話に比べ多岐に渡る.
雑談を音声認識する場合,様々な問題がある.言語モデルに関して,トピックの決まっ た対話では言語モデルをトピックに適応させることで認識性能が向上するが,雑談では トピックが多岐に渡るため,それを事前に予想できないという問題がある.従って,例え ば事前に出来るだけ多くのトピックを含むドキュメント群を用意してその中から最適なト ピックを選択するなどの方法が考えられる.
事前にトピックが予想できない音声に対しトピック適応を行った研究として,音声認識 結果から抽出したキーワードによってWeb文書を検索し,検索されたページから言語モ デル適応を行うものがある[1, 2].ここでキーワードとは,発話音声をいったん標準の音 響モデルと言語モデルを用いて仮に認識した結果の中の名詞のうち,出現頻度が高い単語 である.収集したWeb文書を用いて作成した言語モデルを,大規模な学習データを用い て作成した言語モデルにn-gram併合することで適応を行っている.これらの研究では仮 認識を行った結果をもとに言語モデルを作成しているため,誤認識が多い場合や単語辞書 に存在しないキーワードが含まれる場合のトピック適応は困難である.
他にトピック適応に用いるドキュメントの収集や選択には,発話者の事前の活動履歴を 利用する方法が考えられる.森らは情報端末上における日本語仮名漢字変換によるテキス ト入力履歴を言語モデル作成に利用する方法を提案している[3].同様に,発話者による
1
1.1 はじめに 2 情報端末を用いたWeb閲覧などの情報収集内容は,発話者の興味に直結していると考え られる.その履歴を収集することで雑談に登場するトピックをある程度予想できるはずで ある.
本論文では,情報端末から得られた発話者の事前の能動的情報収集の履歴を用いて,ト ピックに応じた言語モデルの適応を行う方法を示し,実験により従来法より音声認識の性 能向上が得られることを示す.
1.2 本論文の構成 3
1.2 本論文の構成
本論文は全 6章で構成されている.第 2 章では現在利用されている一般的な音声認識 システムについて述べる.第 3章では,本研究で提案する情報収集の履歴の取得方法,及 び情報収集の履歴の使用方法,言語モデル適応の手法について述べる.第 4 章では,第 3章で提案した情報収集の履歴の適応の音声認識においての有効性を確認する実験につい て述べる.第 5章では,第 4 章で行った音声認識実験の結果と考察を述べる.第6 章で はまとめと今後の展望について述べる.
第 2 章 音声認識システム
2.1 一般的な音声認識システム
図2.1に一般的な音声認識システムの概要を示す.
一般的な音声認識システムでは,入力音声からスペクトル分析などを行い特徴量を抽出 したものを,デコーダで単語列に変換することを行っている.デコーダーでは,入力音声 X に対する候補単語列W の条件付出現確率P(W|X) を算出して,確率が最大となる単 語列Wˆ を出力する.
Wˆ = argmax
W
P(W|X) (2.1)
この条件付出現確率 P(W|X) を算出する方法としてベイズの定理がある.ベイズの定 理を使うと P(W|X)は以下の式のように表わされる.
P(W|X) = P(X|W)P(W)
P(X) (2.2)
この式において, P(X|W) と P(W) は,それぞれ単語列を仮定した時の入力音声が X である確率,単語列 W が出現する確率であり,既存のアルゴリズムを用いて算出可能 である.音声認識器では出現確率が最大となる単語列を求めればいいので,P(W|X)の 大小関係に影響しない P(X) は省いても問題ない.このことから argmax
W
P(W|X) は以 下の式のように表わすことができる.
argmax
W
P(W|X) =argmax
W
P(X|W)P(W) P(X)
=argmax
W
P(X|W)P(W) (2.3)
4
2.1 一般的な音声認識システム 5 以上により,音声認識器ではP(X|W)とP(W)を算出すればよい.P(X|W)とP(W) を算出するには,それぞれ音響モデルと言語モデルを用いる.
2.1.1 音響モデル
音響モデルでは,単語列が定まった時に入力された特徴量系列が観測される確率を求め る.この確率は観測過程をHMMでモデル化することによって算出されることが一般的で あり,特徴量としてはMel-Frequency Cepstral Coefficients(MFCC)が用いられることが 一般的である.
MFCCは,対数パワースペクトルをリフタリングし,スペクトルの微細構造の影響を 取り除くことによって導出される特徴量であるため,本研究で用いる基本周波数等の情報 は含まれていない.一般的に基本周波数は発話内容とは直接的に関係がないと言われてい るため,この処理は妥当であるが,本研究では,基本周波数が間接的に発話内容と関係が あると考え,それを利用する手段を検討していく.
2.1.2 言語モデル
言語モデルは,単語の並び方の規則を示したモデルで,単語列W が出現する確率を算 出する場合に用いられる.タスクに依存しない一般的な文法をすべてあらわすことは事実 上不可能であることから,統計的手法によって言語モデルが構築されている.この統計的 言語モデルにはN-gramが用いられる.
一般的な音声認識器には,ユニグラム(P(wi)),バイグラム(P(wi|wi−1)),トライグラ ム(P(wi|wi−1, wi−2))が用いられる.このユニグラム,バイグラム,トライグラムの算出 には,以下の式を用いる.
P(wi) = C(wi)
∑
wj
C(wj) (2.4)
P(wi|wi−1) = C(wi−1, wi)
C(wi−1) (2.5)
2.2 音声認識におけるトピックの限定 6
P(wi|wi−2, wi−1) = C(wi−2, wi−1, wi)
C(wi−2, wi−1) (2.6)
ここでの C(w) は学習データ内で単語列 w が出現する回数である.
単語列W = (w1, w2, ..., wn) が出現する確率は,バイグラムを用いると以下の式のよう に算出される.
P(W) =
∏n
k=2
P(wi|wi−1) (2.7)
ここで,単語列 W の中に,学習データに存在しないバイグラムが含まれている場合
P(W) = 0 となり,単語列 W が全く出現し得ないことになってしまう.これを回避する
ために,存在しないバイグラムに対しても確率を付与する平滑化が必要となる.
平滑化の方法としては,未出現バイグラムに対して一定の確率を付与する一定加算平滑 化のほかに,出現バイグラムの確率の一部を削り,それを未出現バイグラムの確率に分配 するback-off smoothing などがある.
2.2 音声認識におけるトピックの限定
雑談対話における音声認識の認識性能を向上させるためにはトピックの限定が必要で ある.
トピックに応じた言語モデル適応を行う従来の研究として,次のものがある.
2.2.1 講義音声のための WEB 文書を用いた言語モデルの適応化と語彙
選択
徳田ら[2]は,キーワードによってWEB文書を検索し,検索されたページから言語モ デル適応を行っている.
キーワードとは,講義音声を一旦標準の音響モデルと言語モデルに基づく認識器を用 いて発話内容を推定したもの(以後これを仮認識と呼ぶ)から抽出したものである.仮認
2.2 音声認識におけるトピックの限定 7 識を行った結果から,名詞の単語出現頻度を算出し,一定の値を超える出現頻度の単語を キーワードとして利用している.
また,このキーワードを基にWeb文書を収集し言語モデルを作成する.選び出された キーワードをWebの検索エンジンにてクエリを送信し,検索結果の上位200ページにつ いてテキスト情報を取得し,N-gram言語モデルを作成している.そして,作成された
N-gram言語モデルと大規模の言語モデルとN-gram併合を行い言語モデル適応を行って
いる.
この研究では仮認識を行った結果を基に言語モデルを作成しているため,音声認識に よって推定されるキーワードの精度,及びキーワードの重要性の問題がある.
すなわち,標準的な言語モデルを用いた音声認識器で仮認識を行っており,本来取得し たいキーワードが正しく認識されるとは限らないため,誤ったキーワードを用いて検索し たWeb文書で言語モデル適応が行われる可能性がある.このような場合は,音声認識の 認識性能に大きく影響を及ぼすため,解決を図る必要がある.
また,出現頻度によりキーワードを選択しており,複数のトピックに共通の単語もキー ワードとなり得る.共通の単語を用いて検索を行うと想定しているトピック以外の文書も 含まれてしまい,ノイズとなる適応モデルが含まれる可能性がある.このような,ノイズ は認識精度に悪影響を及ぼすため,解決を図る必要がある.
2.2.2 言語情報と映像情報を統合した隠れマルコフモデルに基づくトピッ
ク推定
柴田ら[4]は,料理映像を対象とし,発話から作業に関するものを抽出し,HMMを用 いてトピック推定を行なっている.これに加えて,映像情報や種々の言語手がかり・音声 情報も利用し,精度を向上させている.
これは,発話時に行っている作業を特徴量として,その作業に関連するトピックを推定 することで実現している.
しかし,この手法では予め映像とトピックの関係を学習しなければならず,シチュエー ションが限定できない雑談では,映像による特徴量は利用することができず,事前に用意 できる情報を用いて言語モデル適応を行う必要がある.
2.2 音声認識におけるトピックの限定 8
speech
Feature Extraction
Acoustic Model Language Model
Word Sequence Decoder
図 2.1: 一般的な音声認識システムの概要
第 3 章 情報収集履歴を用いた言語モデル 適応
3.1 提案手法
提案手法の概要を図3.1に示す.
本研究の提案手法では,ユーザの能動的情報収集の履歴として,情報端末から取得する ことのできるWeb閲覧履歴とソーシャルブックマーキングサイトのブックマーク情報を 使用し,言語モデル適応を行う.提案手法では大きく「適応テキストの収集」と「言語モ デル適応」の2つの部分で構成される.各々について以下に示す.
9
3.1 提案手法 10
言語 言語言語
言語モデルモデルモデルモデル適応適応適応適応
収集履歴能動的A
PLSA Modeling
PLSA Weighting ASR
親言語モデル
Decoder
AM Adapted
LM
収集履歴能動的B
仮認識 本文
タグ 本文
Unigram Scaling
対話相手 対話相手 対話相手 対話相手
www クローラ
認識結果
データデータ データデータ収集収集収集収集 ユーザ
ユーザユーザ ユーザ
ASR:音声認識器 AM:音響モデル LM:言語モデル 言語
言語言語
言語モデルモデルモデルモデル適応適応適応適応
収集履歴能動的A
PLSA Modeling
PLSA Weighting ASR
親言語モデル
Decoder
AM Adapted
LM
Decoder
AM Adapted
LM
収集履歴能動的B
仮認識 本文
タグ 本文
Unigram Scaling
対話相手 対話相手 対話相手 対話相手
www クローラ
認識結果
データデータ データデータ収集収集収集収集 ユーザ
ユーザユーザ ユーザ
ASR:音声認識器 AM:音響モデル LM:言語モデル
図 3.1: 提案手法の概要
3.1 提案手法 11
3.1.1 適応テキストの収集
トピック適応を行うためには,トピックに関連するデータを収集する必要がある.本提 案手法では,収集するデータとしてWeb履歴及びソーシャルブックマーク情報を用いて いる.これらの利用方法について図3.2に示す.
以下に,能動的に情報収集を行った履歴情報について記す.
Web閲覧履歴
Web閲覧履歴とは,ユーザが情報端末により閲覧したWebページ内のテキスト情報で ある.
適応には,対話開始以前に閲覧したWeb履歴を用いる.Webブラウザの機能にある履 歴情報のURLからWebサイトにアクセスし,本文のテキスト情報を取得した.
ソーシャルブックマーク情報
ソーシャルブックマークとは,ユーザが,あるWebページを他の人にも閲覧してもら いたい,共有したいという意図でWebサイトのURLなどをブックマークとして登録でき るWebサービスで,個々のブックマークには,Webページのタイトル,URL,タグが含 まれる.具体的なサービスの例として「4dk -コミュニティ・ブックマーク[5]」がある.
タグは,対象となるWebページを表す単語の組で,ユーザによって自由に設定できる.
例えば,政治に関するページであれば「政治」や「国会」などの単語が登録される.これ らのタグに関連するページに興味のある人はタグを利用してブックマークを巡回すること ができるというものである.
適応に用いるテキストとして,登録されたURLのWebページ本文と,タグ一つ一つに 関してYahoo検索[6]を用いて検索した結果の上位200位のWebページの文書を用いた.
なお,ブックマークはWeb閲覧と同時に行われるため,これにより登録されるWebペー ジはWeb履歴にも含まれている.
3.1 提案手法 12
WWW クローラ
タグ各々についてWeb検索を行い、検索 上位200ページを取得
政治 経済 携帯
すべてのドキュメントに対し文章を加工し 単語ベクトルを作成する
政治、経済、携帯、ソニエリ、・・・
すべてのWeb閲覧履歴に対し文章 を加工し単語ベクトルを作成する
タグ
本 文 情報収集履歴
図 3.2: 情報収集履歴の利用法
3.2 PLSA言語モデル 13
3.1.2 言語モデル適応
本研究で使用する言語モデル適応手法は,トピックを複数混合モデルでモデル化し,モデ ル間の重みを用いて言語モデルを作成できるPLSA(Probabilic Latent Semantic Analysis, 確率的潜在意味解析)言語モデルである.PLSA言語モデルではUnigramモデルが提供 されるため,これをN-gramモデルに適応させるためにUnigram Scalingを用いている.
また,適応させる単語はトピックに関する単語であるため,名詞のみを対象として加工 する.この加工例を図3.3に示す.
更に,本研究ではWeb文書を扱うため,読み方の登録されていない未知語などの単語 が出現するため,語彙サービス[7]を利用している.
3.2 PLSA 言語モデル
PLSAとは,単語の出現頻度を基に,「トピック」をモデル化する手法である[8, 9].そ のモデル自体は,特定のトピックや話し方を反映させたUnigram言語モデルの複数混合 モデルである.PLSA言語モデルに与えるドキュメントhを反映させた単語wの出現確率 P(w|h)を式(3.1)に示す.
P(w|h) =∑
z∈Z
P(z|h)P(w|z) (3.1)
P(w|z)は単語wに対する内部Unigramモデルzが与える確率である.この内部モデル を潜在モデルと呼ぶ.この潜在モデルはそれぞれが異なるトピックを学習して,目的のド キュメントhに対して最適な混合比P(z|h)で混合することで,目標のトピックに言語モ デルを適応することができる.
PLSA言語モデルを作成するには,予めトピックをモデル化しておき,認識時にドキュ メントを与え適応Unigramモデルを作成する.つまり,トピックをモデル化する「潜在モ デル作成」と発話内容からトピック適応を行い,言語モデルを算出させるための「潜在モ デル間混合比率算出」の2つの過程がある.両者を各々PLSA modelingとPLSA weighting と呼ぶことにする.PLSA言語モデルのアルゴリズムの概要を図3.4に,Pythonプログ ラムを付録に示す.また,これらについて以下に示す.
3.2 PLSA言語モデル 14
3.2.1 PLSA modeling
PLSA modelingとは,PLSA言語モデルにおける潜在モデルを作成するものである.潜
在モデルの作成には複数のトピックを含むドキュメントを用いて学習を行う.
ドキュメントは,単語の頻度を用いた単語空間上に写像することができ,似たトピック 同士のドキュメントは単語空間上で近い位置に存在する.従って,単語空間上で尤度を計 算することで潜在モデルを作成することができる.
学習した潜在モデルと学習データの単語空間との尤度Sは以下の式にて算出される.
S = ∑
w∈W
∑
d∈D
n(d, w) log∑
z∈Z
P(z|d)P(w|z) (3.2)
ここで,dはトピック学習のためのドキュメント,Dはドキュメント集合,wは単語,W は単語集合である.また,n(d, w)はドキュメントdにおける単語wの頻度である.
この尤度Sを最大化することによって潜在モデルを構成する.尤度の最大化の学習は,
以下のTempered EMアルゴリズムによって行う[8].
以下に示すE-stepとM-stepを交互に繰り返して学習を行う.
E-step:
P(k)(z|d, w) = ∑{P(k)(z)P(k)(d|z)P(k)(w|z)}β
z∈Z{P(k)(z)P(k)(d|z)P(k)(w|z)}β (3.3) M-step:
P(k+1)(w|z) =
∑
d∈Dn(d, w)P(k)(z|d, w)
∑
w∈W
∑
d∈Dn(d, w)P(k)(z|d, w) (3.4)
P(k+1)(d|z) =
∑
w∈Wn(d, w)P(k)(z|d, w)
∑
w∈W
∑
d∈Dn(d, w)P(k)(z|d, w) (3.5)
P(k+1)(z) =
∑
w∈W
∑
d∈Dn(d, w)P(k)(z|d, w)
∑
w∈W
∑
d∈Dn(d, w) (3.6)
ここで,(k)とはk回目の更新を表している.また,βは各確率の値を平滑化するための 係数で,学習を行う度に1.0に近づける変数である.
3.3 Unigram Scaling 15
3.2.2 PLSA weighting
PLSA weightingとは,PLSA言語モデルにおける混合比率を算出するものである.PLSA
modelingにて作成された潜在モデルとトピック適応のためのドキュメントを用いて複数
モデルの混合比率を算出する.
混合比の算出は,PLSA modelingと同様に以下の式によって求められる尤度Sを最大 化して行う.
S = ∑
w∈W
n(h, w) log∑
z∈Z
P(z|h)P(w|z) (3.7)
ここで,hとはトピック推定のためのドキュメントである.
尤度最大化には,同様にTempered EMアルゴリズムを使って行う.
以下に示すE-stepとM-stepを交互に繰り返して学習を行う.
E-step:
P(k)(z|h, w) = ∑{P(z)P(h|z)P(w|z)}β
z∈Z{P(z)P(h|z)P(w|z)}β (3.8) M-step:
P(k+1)(h|z) =
∑
w∈Wn(h, w)P(k)(z|h, w)
∑
z∈Z
∑
w∈W n(h, w)P(k)(z|h, w) (3.9)
3.3 Unigram Scaling
Unigram Scalingとは,単一の単語モデルであるUnigramモデルを,単語共起モデルで
あるN-gramに適応する手法である.これは,言語モデル適応を行う際,適応させる言語
モデルがUnigramモデルである場合に用いられる.
Unigramモデルしか持たない言語モデルから,大規模な言語モデル(これを親言語モ
デルと呼ぶ)のUnigramモデルとN-gramモデルを用いて,N-gramモデルの単語共起確 率を定義している.この手法のイメージ図を図3.5に示す.
この言語モデル適応の原理は,親言語モデルと適応モデルのN-gramスコア値の比はUni- gramスコア値の比に近似出来るという考えから算出されるものである.親言語モデルのTri-
gramをP(wi|wi−2, wi−1),UnigramをP(wi),適応モデルのTri-gramをP(wi|h, wi−2, wi−1),Unigram
3.3 Unigram Scaling 16
ソニーエリクソン ソニーエリクソン ソニーエリクソン
ソニーエリクソン が 来年度 来年度 来年度 来年度 上半期 上半期 上半期 上半期 に 新 機種 機種 機種 機種 を 発売 発売 発売 発売 予定 予定 予定 予定
(“ ソニーエリクソン ソニーエリクソン ソニーエリクソン ソニーエリクソン ” , “ 来年度 来年度 来年度 来年度 ” , “ 上半期 上半期 上半期 上半期 ” , “ 機種 機種 機種 機種 ” , “ 発売 発売 発売 発売 ” , “ 予定 予定 予定 予定 ”)
加工加工加工 加工
ソニーエリクソン ソニーエリクソン ソニーエリクソン
ソニーエリクソン が 来年度 来年度 来年度 来年度 上半期 上半期 上半期 上半期 に 新 機種 機種 機種 機種 を 発売 発売 発売 発売 予定 予定 予定 予定
(“ ソニーエリクソン ソニーエリクソン ソニーエリクソン ソニーエリクソン ” , “ 来年度 来年度 来年度 来年度 ” , “ 上半期 上半期 上半期 上半期 ” , “ 機種 機種 機種 機種 ” , “ 発売 発売 発売 発売 ” , “ 予定 予定 予定 予定 ”)
加工加工加工 加工
図 3.3: 単語の加工例
Tempered EM
アルゴリズムE
⇔M
PLSA modeling
Tempered EM
アルゴリズムE
⇔M
PLSA weighting
図 3.4: PLSA言語モデル作成アルゴリズム
3.4 単語ベクトル 17
をP(wi|h),Unigram Scaling係数をαとすると,以下の式によって近似される.
P(wi|h, wi−2, wi−1) =αP(wi|h)
P(wi) P(wi|wi−2, wi−1) (3.10)
3.4 単語ベクトル
単語ベクトル作成のイメージ図を図3.6に示す.
単語ベクトルとは,任意のドキュメントdkに関する単語w= (w1, w2, ..., wn)の頻度を 表現したベクトルn(dk, w)である.ドキュメントdkに存在する単語集合を取得し,すべ ての単語について頻度を計算することで作成する.今回は,名詞のみを対象とする.
単語ベクトルは,ドキュメントを単語空間上に射影したもので,ベクトルを正規化した 場合似た単語の分布を持ったドキュメント同士の点は近い位置に存在する.この性質を利 用して文書のクラスタリングや,今回利用するPLSA言語モデルなどに使われる.
3.4 単語ベクトル 18
親言語モデル 適用モデル
適用モデル
図 3.5: Unigram Scalingのイメージ
3.4 単語ベクトル 19
鳩山首相は27日午前の参院予算委員会で、「省庁の体制 が古くなっている部分があるので、参院選後に省庁全体の あり方を見直していくことが必要だ。大胆な方向を見いだ しながら考えていきたい」と述べ、今夏の参院選後に中央 省庁再編に取り組む考えを表明した。
鳩山 :1, 首相 :1, 午前 :1, 参院 :1, 予算 :1, 省庁 :3, 体制 :1, 部分 :1, 参院選 :2, 全体 :1, 必要 :1, 方向 :1, 今夏 :1, 中央 :1, 再編 :1, 表明 :1
名詞のみを取り出して頻度をカウント
鳩山 , 首相 , 午前 , 参院 , 予算 , 省庁 , 体制 , 部分 , 参院選 , 全体 , 必要 , 方向 , 今夏 , 中央 , 再編 , 表明
( 1, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1)
ドキュメント
=
単語と頻度を組み合わせてベクトルを作成
図 3.6: 単語ベクトル作成のイメージ
第 4 章 実験
4.1 実験の概要
本研究での提案手法の有効性を確かめるために雑談音声の音声認識実験を行った.実験 の評価用のために,能動的情報収集の履歴及び対話音声を収録した(4.2.1節).
以下のような内容で実験を行った.
実験I 標準的な音響モデルおよび言語モデルを用いて音声認識を行い,本研究における 音声認識性能のベースラインを確認した
実験II 認識対象の音声の書き起こしと言語モデルの学習テキストが同じクローズドな条 件で音声認識を行い,言語モデルを適応させた際の音声認識の性能の上限を確認した 実験III 従来研究における,仮認識からキーワードを取得し,クロールさせた結果を言
語モデル適応させた際の,音声認識の認識性能を確認した
実験IV 情報収集におけるWeb閲覧履歴すべてを用いてUnigramを作成し,Unigram
Scalingによって適用させた言語モデルを用いた際の認識性能を確認した
実験V 情報収集のデータによって認識性能を向上させることができるかを確認するため に,学習に用いる文書をトピックによって分類・選択した適応モデルを用いて言語 モデル適応を行い評価した
実験VI 本手法で使用するPLSA言語モデルを作成して,言語モデル適応を行い評価し,
従来手法との比較を行った
テスト用音声に対応する書き起こし文と, 音声認識器Julius[10] によって得られた認 識結果を用いて評価を行った.認識結果,提案手法の認識結果の各々について単語正解率 と単語正解精度を算出して比較した.
20
4.1 実験の概要 21
評価基準
テスト用音声における書き起こし文と, 音声認識器Julius[10] によって得られた認識 結果を用いて評価を行う.Julius の認識結果,提案手法の認識結果の各々について HTK の HResults を用いて単語正解率 (Word Correct) と単語正解精度(Word Accuracy)を算 出して比較する[14].
単語正解率と単語正解精度については以下の式(4.1),(4.2)にて算出される.
Word Correct = N −D−S
N (4.1)
Word Accuracy = N −D−S−I
N (4.2)
N : 全単語数 D: 脱落誤り数 S : 置換誤り数 I : 挿入誤り数
4.2 準備 22
4.2 準備
4.2.1 データ収集・収録
本実験を行うに当たって,対話音声及び,Webの閲覧履歴・ソーシャルブックマーク 登録情報を作成した.収集・収録条件を表4.1に示す.被験者は20代の男子学生2人で,
対話の条件は「最近気になるニュース」という設定で対話を行った.この収録で得られた Web履歴は39ページ,ソーシャルブックマークはアドレス・タイトル・タグで10セット
(内タグは12単語),発話数は326であった.
4.2.2 実験環境
本実験の環境を以下に示す.
• 音声認識器:Julius1
• 音響モデル:日本語話し言葉コーパスに同梱されている「学会+模擬」条件で学習 した音響モデル[11]
• 親言語モデル:CSRC20032のWeb6万語の言語モデル[12]
1音声認識システムの開発・研究のためのオープンソースの 高性能な汎用大語彙連続音声認識エンジン.
高い汎用性を持ち,発音辞書や 言語モデル・音響モデルなどの音声認識の各モジュールを組み替えること で, 様々な幅広い用途に応用できる.
2情報処理学会 音声言語情報処理研究会における連続音声認識コンソーシアム.IPAプロジェクトで開 発された 「日本語ディクテーション基本ソフトウェア」の維持・発展をめざして,2000年度から2002年 度まで(2003年9月まで)活動を行っていた団体.
4.3 標準の環境における音声認識(実験I) 23
4.3 標準の環境における音声認識 ( 実験 I)
目的
標準的な音響モデルと言語モデルを用いて音声認識を行い,収録した音声対話の認識性 能のベースラインを確認することを目的とする.
実験方法
実験環境に示す音声認識エンジン及び音響モデル,言語モデルを用いて音声認識を行う.
4.4 音声認識実験
4.4.1 正解スクリプトによる言語モデルの音声認識 ( 実験 II)
目的
クローズドな環境で音声認識を行い,音声認識エンジンの性能を評価することを目的と する.
実験方法
対話の発話内容の書き起こし文からn-gram言語モデル(n = 3)を作成し,音声認識 実験を行った.N-gramの作成にはpalmkit[13]を用い,形態素解析は??節と同じ条件で 行った.ディスカウント手法にはWitten-Bell discountingを用いている.語彙数は740と なった.
4.4.2 キーワード検索による適応の音声認識実験 ( 実験 III)
目的
関連研究[2]の手法を今回の雑談対話に適応して評価を行うことを目的とする.
本研究との比較を行い,有意性を確かめることを目的とする.
4.4 音声認識実験 24 実験方法
以下の手順に従い実験を行う.
1. 仮認識の結果を用いてTF-IDF法により語彙選択を行う
2. 選択された語をキーワードとしてWeb検索を行い,上位200ページを取得する 3. 取得したページを基にN-gram言語モデルを作成し親言語モデルとN-gram併合を
行う
4.4.3 閲覧履歴すべてを用いた適応の音声認識実験 ( 実験 IV)
目的
トピックを分類せずに言語モデル適応を行い評価することを目的とする.また,閲覧履 歴を用いた場合の語彙のカバー率を調べることを目的とする.
実験方法
以下の手順に従い実験を行う.
1. Web履歴の全てを用いて名詞のUnigram言語モデルを作成する
2. Unigram Scalingにより適応言語モデルを作成する
3. TF-IDF法により,一般的に使われる単語を適応対象から削減する
4. ステミングを行い語彙変化を正規化する
4.4.4 手動モデリングによる音声認識 ( 実験 V)
目的
トピックを手動によって分類した適応モデルを用いて言語モデル適応を行い評価するこ とを目的とする.また,能動的に収集した履歴と認識性能との比較を行うことを目的と する.
4.4 音声認識実験 25 実験方法
以下の手順に従い,実験者1名の手動により発話内容のトピックに近い文書を選択し,
単語unigramを得た.その単語unigramを用いて上記の親言語モデルのunigram scaling を行い言語モデル適応を行った.認識実験の際にはunigram scalingの係数を変化させて 認識性能の比較を行った.
1. Web履歴の中から対話のトピックに関するページを5ページ選択する
2. TF-IDF値が閾値を超える語を選択し,単語unigramを作成する 3. ステミングを行い語彙変化を正規化する
4.4.5 PLSA 言語モデルを用いた音声認識 ( 実験 VI)
目的
本研究で提案する情報収集の履歴を学習データとしたPLSA言語モデルでの音声認識 の評価を目的とする.
実験方法
以下の手順に従い,適応のためのunigramを作成し,その後にunigram scalingにより 言語モデルの適応を行った.Unigram scalingの係数αには4.4.4節で最良の認識性能を得 た際の値を用いた.
1. Table 4.2の各条件のもとで,PLSA modelingおよびPLSA weightingを行い,単語 unigramを得る.
2. ステミングを行い語彙変化を正規化する
ここで,「NIKKEI NET」とはNIKKEI NET[15]からクロールしたドキュメント(9500 ページ),「キーワードクロール」とは従来手法[2]における仮認識結果から得たキーワード を基にクロールしたドキュメント(3400ページ),「タグクロール」とはソーシャルブック マーク情報におけるタグをキーとしてクロールしたドキュメント(2400ページ)である.
4.4 音声認識実験 26 条件Iはキーワードクロールデータを用いる従来手法[2]をPLSA言語モデルに適用し たものである.また,条件IIから条件Vは,PLSA modeling及び PLSA weightingに与 えるデータを各々情報収集履歴を用いたものと用いていないものの2種類,計4種類の条 件を適用したものである.従って,条件Iと条件IIは情報収集履歴を全く使わない条件で あり,従来手法における条件と等価である.
PLSA言語モデルの潜在モデル数を10に設定した.
4.4 音声認識実験 27
表 4.1: 対話音声・収録条件
Web閲覧時間 1時間
ブックマーク作成時間 Web閲覧と同時 閲覧内容 政治・経済・就活 対話時間 10分の対話3セット 対話のトピック 政治・経済・就活
表 4.2: PLSAによるunigram作成条件 条件 PLSA modeling PLSA weighting
条件I NIKKEI NET キーワードクロール
条件II NIKKEI NET 仮認識
条件III NIKKEI NET 閲覧履歴
条件IV タグクロール 仮認識 条件V タグクロール 閲覧履歴
第 5 章 結果と考察
第4章における実験Iから実験VIによって得られた単語正解率と単語正解精度 をまと めたものを 表 5.1に示す.4.4.4節に述べたunigram scaling係数α毎の認識性能を図5.1 示す.
28
29
36 38 40 42 44 46 48 50
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 UnigramScaling係数[logα]
認 識 精 度 [% ]
単語正解率 単語正解精度
ベースライン単語正解率 ベースライン単語正解精度
36 38 40 42 44 46 48 50
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 UnigramScaling係数[logα]
認 識 精 度 [% ]
単語正解率 単語正解精度
ベースライン単語正解率 ベースライン単語正解精度
図 5.1: Unigram scaling係数αと認識性能
30 単語のカバー率は適応前後共に98.44%であった.
適応させることによって新しく出現した単語は対話には多く出現しなかった.しかし,
これはトピックに今回利用した対話の内容が一般的なものであったことが原因とされ,最 新技術に関する内容の対話では単語カバー率の向上が期待される.
閲覧履歴全適応と手動モデリングの結果より,能動的に収集した情報の履歴を用いるこ とで認識性能が向上することが確認された.したがって,本研究で提案するデータを用い た音声認識の性能向上が期待できることがわかった.さらに,閲覧履歴からトピックに応 じた文書を選択することによって認識性能が向上することから,PLSA言語モデルのよう なトピックをモデル化した手法で認識性能の向上が期待できることがわかった.
従来手法における仮認識結果からキーワードを抽出してWWW上のテキストを適応さ せる手法は,認識性能が向上するが,提案する情報収集のデータを用いた場合には及ばな かった.これは,仮認識結果に誤認識があり,抽出したキーワードに誤りがあることが原 因であった.本研究で提案するデータはこのような誤りが発生しにくいということから,
トピック限定に有効であると考えられる.
また,PLSA言語モデルを用いた言語モデル適応によって認識性能の向上が確認でき た.提案手法の性能は従来手法(条件I,条件II)よりも高く,提案手法の有効性が確認 された.
Unigram scalingの係数αによって認識性能の差がみられ,α = 101.9において単語正解 率がベースラインと比較し3 %ほど向上することが確認された.
さらに同手法の認識結果を分析すると,主にトピックの中心となる単語の誤認識が減っ ていた.例えば,標準的な言語モデルを用いた音声認識器の場合「偏向報道」という音声 が「変更構造」と誤認識されていたが,今回の実験では「偏向報道」と正しく認識されて いた.これにより,トピックに関連する語の認識に本手法が有効であったと考えられる.
PLSA modelingに与えるドキュメントがNIKKEI NETのクロールデータであった場合 の認識性能はタグクロールを与えた場合よりも低くなった.これは,NIKKEI NETのク ロールデータにはタグクロールデータより多くのトピックが存在し,今回与えた潜在モ デル数10では適切な単位でのトピックのモデル学習が行えていないことが原因と考えら れる.
31 一方,PLSA modelingにタグによるクロールデータを与えた場合は,タグによるクロー ルデータには限られたトピックしか存在しないため,潜在モデル数10においても,トピッ ク分割が適切になされていたため性能が大きく改善されていたと考えられる.特に,PLSA
weightingにWeb閲覧履歴を与えた場合は,興味のあるトピックを直接反映させているた
め認識性能が最もよくなったと考えられる.
32
表 5.1: 言語モデル作成手法毎の単語正解率(Corr.)・単語正解精度(Acc.)
手法 Corr. (%) Acc. (%) ベースライン 45.47 40.19 正解スクリプト 68.48 58.08 キーワード適応 45.86 40.19 閲覧履歴全適応 45.92 40.63 手動モデリング 48.23 42.63
条件I 46.02 40.82
条件II 46.26 41.13
条件III 46.26 41.06
条件IV 46.65 41.13
条件V 46.73 41.29
第 6 章 まとめ
Web閲覧履歴及びソーシャルブックマーク情報を用いて,トピック適応を行った適応 言語モデルを作成し,能動的情報収集の履歴を反映させた言語モデル適応の方法を提案 した.単語正解率,単語正解精度を用いて本手法の評価を行い,従来研究と比較をした結 果,本研究による手法に有効性があることが分かった.さらに,PLSA言語モデルに与え るドキュメント及び潜在モデル数により認識精度の差が現れることが分かった.
今後の課題として,ドキュメント数と潜在モデル数による認識精度の関係を調べて,よ り性能を向上させることのできるパラメータを設定する必要がある.
PLSA modelingを行う際,潜在モデル数・学習ドキュメント数・語彙数・EMアルゴリ
ズムのループ回数の積の時間オーダーでプログラムの実行が行われるため,潜在モデル数 は10に限定されてしまったが,これでは不十分と考えられる.従って,今後はプログラ ムの再検討を行って,より多くのモデル数を作成したPLSA言語モデルを作成し,認識精 度を確認する必要がある.
33
参考文献
[1] 増村 亮, 伊藤 仁, 伊藤 彰則, 牧野 正三, “WWWを利用したトピック関連語推定に 基づく言語モデル教師なし適応の性能評価,”情報処理学会研究報告, Vol.2009-SLP-79 No.32,pp.1-6,2009.
[2] 徳田 翔,西崎 博光,関口 芳廣,“講義音声認識のためのWEB文書を用いた言語モ デルの適応化と語彙選択,” 音声ドキュメント処理ワークショップ講演論文集 2,pp.
97-104,2008.
[3] 森 信介,前田 浩邦, “利用過程で得られる言語情報を 活用する音声言語処理システ ム,”情報処理学会,NLP若手の会 第4回シンポジウム(2009),2009.
[4] 柴田 知秀,黒橋 禎夫,“言語情報と映像情報を統合した隠れマルコフモデルに基 づくトピック推定,”情報処理学会論文誌 48(6),pp.2129-2139,2007.
[5] 4dk – コミュニティ・ブックマーク: http://4dk.jp/.
[6] Yahoo! JAPAN: http://www.yahoo.co.jp/.
[7] 中野 鐵兵,佐々木 浩,藤江 真也,小林 哲則, “集合知を利用した語彙情報の収集・共 有・管理システム,” 情報処理学会研究報告,音声言語情報処理 2008(46),pp.77-84,
2008.
[8] Thomas Hofmann, “Probabilistic Latent Semantic Analysis,” Uncertainity in Artificial Intelligence, 1999.
[9] 栗山 直人,鈴木 基之,伊藤 彰則, “PLSA言語モデルの学習最適化と語彙分割に関す る検討,” 情報処理学会研究報告2006-SLP-60 ,pp.37-42,2006.
34
35 [10] 河原 達也,李 晃伸,“連続音声認識ソフトウエアJulius,”人工知能学会誌Vol.20,No.1,
pp.41-49,2005.
[11] 南條 浩輝, 河原 達也, 篠崎 隆宏, 古井 貞煕, “音声認識のための音響モデルと言語モ デルの仕様 ver1.0,” 『日本語話し言葉コーパス』マニュアル, 2004.
[12] 連続音声認識コンソーシアム: http://www.lang.astem.or.jp/CSRC/.
[13] 伊藤 彰則, 好田 正紀, “単語およびクラスn-gram 作成のためのツールキット,” 信学 技報, SP2000-106, pp.67-72, 2000.
[14] HTK Book: http://htk.eng.cam.ac.uk/.
[15] NIKKEI NET(日経ネット): http://www.nikkei.co.jp/.
付録
PLSA 言語モデル作成 Python プログラムソースコード
本研究で作成したPLSA言語モデル作成に関するプログラムソースコードを掲載する.
プログラムの構成は以下の通り
• ドライバプログラム:LM maker for PLSA with scipy.py
• 学習プログラム:PLSA train with scipy.py
• 混合比算出プログラム:PLSA mixture with scipy.py プログラムに必要なライブラリは以下の通り
• Python標準ライブラリ
• MeCab0.97
• MeCab ipadic
• MeCab-Python
• Scipy
36
37
ソースコード:LM_maker_for_PLSA_with_scipy.py
#!/usr/bin/env python
# -*- coding: utf-8 -*- import PLSA_train_with_scipy import PLSA_mixture_with_scipy import math
import os
import unicodedata import cPickle train = True mix = True if train:
path = ’data/page’
file_list = os.listdir(path) documents = []
for name in file_list[1:301]:
file = open(’%s/%s’ % (path, name)).read()
file = unicodedata.normalize(’NFKC’, unicode(file)) documents.append(file.encode(’utf-8’))
print ’学習開始’
PLSA_train_with_scipy.get_train(documents, 10, 30, 0.8) print ’学習終了’
if mix:
print ’ミックス’
text = open(’data/CASE19.txt’).read()
PLSA_mixture_with_scipy.get_mixture(text, 100, 0.8) word_list = cPickle.load(open(’out2/word_list’)) list = []
for word in word_list:
if len(word) > 1:
disc = ’%f\t%s’ % (math.log10(PLSA_mixture_with_scipy.get_P_wh(word)), word) list.append(disc)
list.sort()
w = open(’out2/result’, ’w’) cPickle.dump(list, w)
w.close()
38
ソースコード:PLSA_train_with_scipy.py
#!/usr/bin/env python
# -*- coding: utf-8 -*- import MeCab
import os import random import math import cPickle import scipy
encoding = ’utf-8’
root_dir = os.path.dirname(__file__)
mecabrc = os.path.join(root_dir, ’mecabrc’) dicdir = os.path.join(root_dir, ’dic’,’ipadic’)
tagger = MeCab.Tagger(’-r %s -d %s’ % (mecabrc, dicdir))
beta = 0.1 loop = 100 num_z = 3
#p_z[z_idx]
p_z = []
#p_dz[d_idx][z_idx]
p_dz = []
#p_wz[w_idx][z_idx]
p_wz = []
#p_zdw[z_idx][d_idx][w_idx]
p_zdw = []
d = []
dic = {}
word_list = []
def get_word_set(docu):
global word_list word_list = set() for doc in docu:
lines = tagger.parse(doc).decode(encoding).split(’\n’) for line in lines[:-2]:
splt = line.split(’\t’) word = splt[0]
splt = splt[1].split(’,’)
39
part = splt[0]
if part == u’名詞’:
word_list.add(word) word_list = list(word_list) word_list.sort()
result = {}
for idx in range(len(word_list)):
result[word_list[idx]] = idx return result
#
# テキスト情報から単語ベクトルを作成
#
def get_vector(text):
size = len(dic)
result = scipy.zeros(size)
lines = tagger.parse(text).decode(encoding).split(’\n’) for line in lines[:-2]:
splt = line.split(’\t’) word = splt[0]
splt = splt[1].split(’,’) part = splt[0]
if part == u’名詞’:
result[dic[word]] += 1 return result
#
# 各種パラメータの初期化
# 初期値の設定 もっとも単純 一様に確率を分布
#
def initialaize(docu):
global dic, d, p_z, p_dz, p_wz, p_zdw
#create word to index dictionary dic = get_word_set(docu)
#initialize d vector for doc in docu:
d.append(get_vector(doc)) d = scipy.array(d)
#initialize p_z
p_z = scipy.zeros(num_z) for idx in range(num_z):
p_z[idx] = float(random.randint(1, 200)) p_z = p_z / sum(p_z)
40
#initialize p_dz
p_dz = list(scipy.zeros(num_z)) for idx in range(num_z):
c = scipy.zeros(len(d)) for ix in range(len(d)):
c[ix] = float(random.randint(1,200)) p_dz[idx] = c / sum(c)
p_dz = scipy.array(p_dz)
#initialize p_wz
p_wz = list(scipy.zeros(num_z)) for idx in range(num_z):
c = scipy.zeros(len(dic)) for ix in range(len(dic)):
c[ix] = float(random.randint(1,200)) p_wz[idx] = c / sum(c)
p_wz = scipy.array(p_wz)
#initialize p_zdw
p_zdw = list(scipy.zeros(num_z)) for idx in range(num_z):
c = list(scipy.zeros(len(d))) for ix in range(len(d)):
c[ix] = list(scipy.zeros(len(dic))) p_zdw[idx] = c
p_zdw = scipy.array(p_zdw)
#
# PLSAのE-step
#
def E_step():
ccc = list(scipy.zeros(num_z)) for idx in range(num_z):
DZ_t = scipy.mat(p_dz[idx]).transpose() WZ = scipy.mat(p_wz[idx])
Z = p_z[idx]
p_val = scipy.array(DZ_t * WZ * Z) ccc[idx] = pow(p_val, beta)
ccc = scipy.array(ccc) for idx in range(num_z):
p_zdw[idx] = ccc[idx] / sum(ccc)
#
# PLSAのM-step
#
41
def M_step():
len_ndw = sum(sum(d))
n_Bi_P = list(scipy.zeros(num_z)) for idx in range(num_z):
n_Bi_P[idx] = d * p_zdw[idx]
n_Bi_P = scipy.array(n_Bi_P) for idx in range(num_z):
sum_dw = sum(sum(n_Bi_P[idx]))
p_wz[idx] = sum(n_Bi_P[idx]) / sum_dw
p_dz[idx] = sum(n_Bi_P[idx].transpose()) / sum_dw p_z[idx] = sum_dw / len_ndw
def get_yudo():
result = 0.0
for idx in range(len(dic)):
for ix in range(len(d)):
all = 0.0 dev = 0.0
for i in range(num_z):
dev += p_dz[i][ix]
for i in range(num_z):
all += p_wz[i][idx] * p_dz[i][ix] * p_z[i] / dev result += d[ix][idx] * math.log10(all)
return result def save_value():
p_z_out = open(’out2/p_z’, ’w’) cPickle.dump(p_z, p_z_out) p_z_out.close()
p_dz_out = open(’out2/p_dz’, ’w’) cPickle.dump(p_dz, p_dz_out) p_dz_out.close()
p_wz_out = open(’out2/p_wz’, ’w’) cPickle.dump(p_wz, p_wz_out) p_wz_out.close()
p_zdw_out = open(’out2/p_zdw’, ’w’) cPickle.dump(p_zdw, p_zdw_out) p_zdw_out.close()
d_out = open(’out2/d’, ’w’) cPickle.dump(d, d_out) d_out.close()
42
dic_out = open(’out2/dic’, ’w’) cPickle.dump(dic, dic_out) dic_out.close()
word_list_out = open(’out2/word_list’, ’w’) cPickle.dump(word_list, word_list_out) word_list_out.close()
num_z_out = open(’out2/num_z’, ’w’) cPickle.dump(num_z, num_z_out) num_z_out.close()
def get_train(doc, num_class, t_loop, para):
global beta global num_z yudo = -100000.0 num_z = num_class loop = t_loop beta = 0.0
initialaize(doc) min_beta = para beta = min_beta min_range = 0.1
for i in range(loop):
E_step() M_step()
yudo_ = get_yudo()
if yudo_ - yudo < min_range:
beta = min_beta + (1 - min_beta) * float(i + 1) / loop yudo = yudo_
print yudo if i % 10 == 1:
save_value()
print ’%f persent’ % (100.0 * i / loop)
43
ソースコード:PLSA_mixture_with_scipy.py
#!/usr/bin/env python
# -*- coding: utf-8 -*- import MeCab
import os import random import math import cPickle encoding = ’utf-8’
root_dir = os.path.dirname(__file__)
mecabrc = os.path.join(root_dir, ’mecabrc’) dicdir = os.path.join(root_dir, ’dic’,’ipadic’)
tagger = MeCab.Tagger(’-r %s -d %s’ % (mecabrc, dicdir))
beta = 0.8 loop = 100
def initialize(text):
global p_zhw, p_hz, p_zh, n_hw p_zhw = []
p_hz = []
p_zh = []
n_hw = []
load_parameter()
n_hw = get_vector(text) for idx in range(num_z):
c = []
for ix in range(len(dic)):
c.append(0.0) p_zhw.append(c) all = 0.0
for idx in range(num_z):
c = float(random.randint(1,200)) p_hz.append(c)
all += c
for idx in range(num_z):
p_hz[idx] = p_hz[idx] / all p_zh.append(0.0)
def get_vector(text):
size = len(dic) result = []
44
for idx in range(size):
result.append(0)
lines = tagger.parse(text).decode(encoding).split(’\n’) for line in lines[:-2]:
splt = line.split(’\t’) word = splt[0]
splt = splt[1].split(’,’) part = splt[0]
#if part == ’名詞’:
if dic.has_key(word):
result[dic[word]] += 1 return result
def load_parameter():
global p_z, p_dz, p_wz, p_zdw, d, dic, word_list, num_z p_z = cPickle.load(open(’out2/p_z’))
p_dz = cPickle.load(open(’out2/p_dz’)) p_wz = cPickle.load(open(’out2/p_wz’)) p_zdw = cPickle.load(open(’out2/p_zdw’)) d = cPickle.load(open(’out2/d’))
dic = cPickle.load(open(’out2/dic’))
word_list = cPickle.load(open(’out2/word_list’)) num_z = cPickle.load(open(’out2/num_z’))
def E_step():
for idx in range(len(dic)):
all = 0.0
for ix in range(num_z):
all += pow(p_z[ix] * p_hz[ix] * p_wz[idx][ix], beta) for ix in range(num_z):
p_zhw[ix][idx] = pow(p_z[ix] * p_hz[ix] * p_wz[idx][ix], beta) / all def M_step():
all = 0.0
for idx in range(num_z):
for ix in range(len(dic)):
all += n_hw[ix] * p_zhw[idx][ix]
for idx in range(num_z):
c = 0.0
for ix in range(len(dic)):
c += n_hw[ix] * p_zhw[idx][ix]
p_hz[idx] = c / all all = 0.0
for idx in range(num_z):
all += p_hz[idx] * p_z[idx]
for idx in range(num_z):
p_zh[idx] = p_hz[idx] * p_z[idx] / all
45
def get_yudo():
result = 0.0
for idx in range(len(dic)):
all = 0.0 dev = 0.0
for i in range(num_z):
dev += p_hz[i]
for i in range(num_z):
all += p_wz[idx][i] * p_hz[i] * p_z[i] / dev result += n_hw[idx] * math.log10(all)
return result def get_P_wh(word):
result = 0.0
if dic.has_key(word):
label = dic[word]
for idx in range(num_z):
result += p_zh[idx] * p_wz[label][idx]
else:
result = 0.00000000000000001 return result
def get_mixture(text, loop, para):
initialize(text) yudo = -1000.0 min_range = 0.1 min_beta = para
for idx in range(loop):
E_step() M_step()
yudo_ = get_yudo()
if yudo_ - yudo < min_range:
beta = min_beta + (1 - min_beta) * float(idx + 1) / loop
#print ’\t’ * 5, beta yudo = yudo_
謝辞
本研究を遂行するにあたって,御指導をいただきました白井克彦教授には心から感謝い たします.また,本研究を進める上で的確なアドバイスや指導を下さった大川茂樹准教授
(千葉工業大学工学部),村上真准教授(東洋大学工学部)東山三樹夫教授(早稲田大学 国際情報通信研究センター),特に榑松明教授(早稲田大学理工学総合研究センター)に は大変感謝しております.
さらに,小林研究室研究助手の谷口徹さんには大変お世話になりました.修士2年序盤 に研究が行き詰っている時に様々なアドバイスを頂いた上,身近なトラブルにも相談に 乗って頂き,研究を進めることが出来たのは谷口さんのおかげあることは間違いありませ ん.大変感謝しております.
また,助手の宮島さんには,ゼミでの問題指摘や,原稿チェックなどをして頂き大変感 謝しております.
それから同期である小柴さん,菅原さん,植草さん,小川さん,端さん,峰村さんには 共に卒業研究に励む中,良き思い出を作ることができ感謝しています.
ここに書ききれなかった皆さんにも,色々とお世話になりました.深く感謝しており ます.
そして,最後に今日までの学生生活を支援し暖かく見守ってくれた家族に感謝致します.
2010年2月 草野 俊一
46