クラウド・テクノロジー活用部会活動報告
実践機械学習システム 音声編
2016年9月16日

先端IT活用推進コンソーシアム
クラウド・テクノロジー活用部会
富士通株式会社 松井 唯
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

機械学習の背景• 機械学習では画像や自然言語に対する処理が盛ん• 画像分野• Googleの猫• 画像＋言語• 画像からの説明文生成

People play soccer※この発表は個人の見解であり、所属する組織の公式見解ではありません
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

2

音響分野における機械学習• 音響分野では音声認識に対する適用が研究• Siri• Google音声認識• ロボット対話

ご用件は何でしょう

クラウド化により大量のデータを処理可能となり性能向上

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

3音響分野における機械学習• 機械学習（特にDeepLearningの領域）では画像や自然言語に対する処理が盛ん• 音声認識の分野も研究• 「音声認識（文字の書き起こし）」以外の機械学習は注目度が低い

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

4音声認識以外の適用先• 環境音識別– ライフログ管理
就寝TVを視聴

人混みを歩行

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

5音声認識以外の適用先• 危険音認識– 子供，老人見守り

泣き声を検知し両親に連絡

一人暮らしのお年寄りが倒れた音を家族に連絡
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

6音声認識以外の適用先• 話者識別ただいまお父さんですね鍵を開けます

ただいま．．．

• その他にも– 音声合成，機械異常検査，音楽分類，感情分析
etc…
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

7

今回の実施内容• 機械学習の足がかりとして音声をプログラムで取り扱う必要• 機械学習と親和性の高いpythonでの音声の取り扱いをクラウド・テクノロジー活用部会で実践してみました

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

8

デモ• 声でドアの鍵を開けるシステム
まではいたらなかったので• 言っている合言葉があっていて，話者がそれっぽいかを判定するシステム

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

9

音声処理の流れ
1. 音声入力↓
2. 特徴量抽出↓3. 機械学習(共通部分)(分野ごとに多様)

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

10ソースコード
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

from scikits.talkbox.features import mfcc
import sys
import numpy as np
from scipy.io.wavfile import readimport mathargvs = sys.argv
def calc_mfcc(data, fs):mfcc_data, trush, trush = mfcc(data, nwin=256, nfft=512,fs=fs,nceps=13)
meanceps = np.zeros(mfcc_data[0].size)for mc in mfcc_data:
meanceps += mc
return meanceps/mfcc_data[0].size
def build_model(datas):
mue=np.zeros(len(datas[0]))sigma=np.zeros(len(datas[0]))for d in datas:
mue = mue+d
mue = mue/len(datas)
for d in datas:
sigma = sigma+(mue-d)*(mue-d)sigma = sigma/len(datas)
return mue, sigma
def gausian(x,mue,sigma):delda = 0.001
return 1/math.sqrt(2*math.pi*sigma+delda)*(math.exp(-1*pow(x-mue,2)/(2*sigma+delda)))Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

インポート

特徴量抽出

機械学習
モデル学習

11ソースコード
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.

def Likelihood_average(ary):
ave=0
for n in ary:ave+=nreturn n/len(ary)def ditect(model_mue,model_sigma,target):likelihood = []for i in range(len(target)):likelihood.append(gausian(target[i],model_mue[i],model_sigma[i]))return Likelihood_average(likelihood)def judge(val):
if val > -2:print "Open"else:
print "Close"
if __name__ == '__main__':mfccs = []fnames = ['hirake5.wav','hirake2.wav','hirake3.wav','hirake4.wav']
target = argvs[1]for fname in fnames:
fs, data = read(fname,'rb')
mfccs.append(calc_mfcc(data, fs))mue, sigma = build_model(mfccs)
trush, t_data = read(target,'rb')t_mfcc = calc_mfcc(t_data, fs)
val=math.log10(ditect(mue, sigma, t_mfcc))
judge(val)

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

機械学習
認識部分

入力等
メイン部分

12

計算フロー
1. モデル構築用ファイル読み込み
2. 特徴量抽出3. モデル構築
4. 被判定ファイル読み込み
5. 特徴量抽出6. モデルを使って尤度を算出
7. 尤度から最終判定

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

13

今回のデモの内部処理• 入力：scipy• 特徴量抽出：scikits.talkbox• 機械学習(自作)

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

14

音声の入力• C言語などではメモリ確保やファイルオープン，開放など大変• Pythonの場合は一行で記述可能– scipy.io.read(ファイル名)

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

15特徴量抽出• MFCC（メル周波数ケプストラム係数）– 一般的に音声認識に用いられる特徴量– 人間の聴覚に基づいた特徴• 計算手順1. FFT
2. 高域強調
3. メル軸射影
4. フィルタバンク処理
5. 離散コサイン変換
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

16特徴量抽出• scikits.talkboxを使うと• 計算手順
1. ceps, mspec, spec = scikits.talkbox.feature(input, nwin=256, nfft=512, fs=fs, nceps=13)
入力データ

分析パラメータ

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

出力次元数17

機械学習• ４つの音声ファイルを元にMFCC算出• １３次元それぞれに正規分布に従うモデルを学習• 入力音声に対する尤度を計算• ここはまだまだ工夫の余地がある

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

18

今回のデモの内部処理• 入力や前処理はライブラリが行ってくれる• 難しく，工夫のしがいがある学習部分だけを頑張れば良い• 一番難しいところ– 環境構築：windows上でpythonを行うとライブラリが動かなかったり非常に困難
Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

19

まとめ• 音声認識以外でも音の機械学習の余地が多い• 音声の特徴量にはMFCCが使用されている• 実践機械学習を元に声を認識してみた• 音声入力や特徴量抽出はpythonを使えば簡単

Copyright © 2016 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

20