まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【G検定】音声処理と自然言語処理分野 その1

どうも、カタミチです。

さて、画像処理の節の次は、音声処理と自然言語処理ですね。こちらもホットな分野ですよねー。早速見てみましょう!

データの扱い方

世の中には、時系列データが溢れていますね。時系列データと聞くと容易にイメージはつくんですが、共通してどんな特徴がある?と聞かれると詰まってしまいます。これに対する答えは、「ある時刻の状態が、それ以前の時刻の状態の影響を受けている」です。確かに!と思いました。

この時系列データを適切に扱うためには、データは時間軸に沿って入力すべきですし、ネットワークそのものにも、時間情報を反映できるような仕組みが必要です。

音声データの扱い

音声は本来、空気の振動が波状に伝わるものであり、時間とともに連続的に変化するアナログなデータです。これをコンピュータで扱うには離散的なデジタルデータに変換する必要があります。この変換処理をA-D変換と呼びます。音声はパルス符号変調という方法でデジタルデータに変換されることが一般的です。

音声信号は、時々刻々と変化するため、そこに含まれる周波数成分も変化していきます。このため、非常に短い時間ごとに周波数解析を行う必要があるのですが、これを高速に行うことができる手段として高速フーリエ変換FFTが広く使われています。

音は、「高さ」「長さ」「強さ」「音色」という属性を持っており、このうち「音色」が音の違いを認識するうえで重要な属性です。「音色」の違いは周波数スペクトルにおけるスペクトル上の緩やかな変動(スペクトル包絡)の違いと解釈することが多く、これを求めることが重要となります。これを求めるためのデファクトスタンダードとなっているのがメル周波数ケプストラム係数(MFCC)を用いる方法です。

スペクトラム包絡を求めるといくつかの周波数でピークを迎えることが分かりますが、このピークをフォルマントと呼び、フォルマントのある周波数をフォルマント周波数と呼びます。

音声認識を行うモデルとして長い間、標準的に用いられているのが隠れマルコフモデル(HMM)です。HMMは、音素ごとに学習しておきます。

単語を認識する際にはあらかじめ定義された単語と音素列の対応辞書により音素列に変換し、音素列に従ってHMMを連結することでモデル化します。

音声データに関する話はここまでのようです。独特な考え方や用語はありましたが、最低限知っておきたいことの全体量はそんなに多くなかったですかね。

テキストデータの扱い

テキストデータを扱う場合、様々な単位が考えられますが、ひとまず単語を単位として扱うことを考えましょう。すると、ある文字列は複数個の単語を並べたものとして表現できます。これを単語n-gramと呼びます。n=1の場合をユニグラム、n=2をバイグラム、n=3をトライグラムと呼びます。

次に、単語を単位として文や文書などを表現することを考えます。文や文書に出現する単語の集合として表現することを考えます。Bag-of-Words(BoW)

BoWでは、単語がバラバラに保存されており、出現順序の情報は失われてしまいます。このため、局所的な出現順序が重要な意味を持つ場合に、n-gramとBoWを組み合わせたBag-of-n-gramsを利用することもあります。

単語をニューラルネットワークで扱う場合、文字列ではなくベクトルとして入力する必要があります。典型的な方法は、各単語に異なる整数値を順に割り当てるID化です。このIDに相当するベクトルの次元の値だけが1で他が0になっているワンホットベクトルに変換します。

大量の文書をそれぞれBoWのベクトルで表現し、これをすべて並べていくと、行列のような形になります。このように文書集合を行列で表現すると、線形代数を用いて様々な分析を行ったり、情報を圧縮したりといったことが可能になります。また、コサイン類似度を計算することによって、文書間の類似度を計算することも簡単にできるようになります。

また、単語の重要度のようなものを計算する手法のひとつに、TF-IDFがあります。これは、各文書の単語ごとに計算され、TFとIDFをかけ合わせたものになります。TFは、1つの文書内での単語の出現割合で、IDFはある単語が出現する文書の割合の逆数の対数です。TF-IDFは、1文書内での出現回数が多く、出現する文書の数が少ない単語ほど大きな値となるため、TF-IDFの値が大きさがある程度その単語の重要度を表していると考えることができます。

それにしても、英語なんかだと単語と単語の切れ目が明確なので良いんですが、日本語だと分かりづらいですよねー。このあたり、日本語特有の試行錯誤があるんだろうなぁ、と思いますねー。

単語埋め込み(word embedding)

ワンホットベクトルは、その性質上非常に高次元であるという特徴があり、局所表現と呼びます。局所表現では単語同士の意味の近さを考慮するといったことができないため、連続的で情報が密であり次元数が低いベクトルに変換することを考えます。このような単語の表現を分散表現単語埋め込みと呼びます。…なんだか、局所表現と分散表現の言葉の定義が逆の方がイメージが近いんですが、きっと、数学的理論が分かるとしっくりくるんでしょうねー。とりあえず今はそういうものだと思っておくことにします。

単語の分散表現を得る代表的な手法にword2vecがあります。これは、「単語の意味は、その周辺の単語によって決まる」という分布仮説と呼ばれる言語学の主張をニューラルネットワークとして実現したものです。

word2vecには、スキップグラムCBOWという2つの手法があります。スキップグラムとは、ある単語を与えて周辺の単語を予測するモデルであり、CBOWはその逆で周辺の単語を与えてある単語を予測するモデルです。

word2vecの延長線上にあるfastTextというライブラリがあります。word2vecからの変更点は、単語埋め込みを学習する際に単語を構成する部分文字列の情報も含めることです。これによって、訓練データには存在しない単語であっても単語埋め込みを計算したり、活用する単語の語幹と語尾を分けて考慮したりすることを可能にしました。

word2vecやfastTextでは、得られる分散表現が各単語1つだけであり、多義性を持つ単語を正しく扱うことができませんでした。そこで新たにELMoと呼ばれる、文脈を考慮した分散表現をえる手法が提案されました。

なるほど、とりあえずこのELMoを使っておけばいいんですかねー。しかしそもそも、入力された大量のテキストを使ってどんなタスクを行いたいか?ということになりますよね。画像や音声に比べて、テキストデータを使ったタスクはイメージがしにくいです。何となく、テキストマイニングマーケティングに活かす…みたいな文脈で語られる感じですかねー。

ということで

ざっと見てきましたが、とりあえずこの節は音声処理と自然言語処理の紹介…という感じなんですかねー。次節以降でどんな内容になっていくのか…?とりあえず突き進んでいきますかねー。

ではまた。

勉強に使ってる書籍はこちら↓
深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版