Submit Search
Upload
Lispmeetup #45 Common Lispで音声合成
•
6 likes
•
2,489 views
Satoshi imai
Follow
Lispmeetup #45 Common Lispで音声合成
Read less
Read more
Software
Report
Share
Report
Share
1 of 22
Download now
Download to read offline
Recommended
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Satoshi imai
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
Shuyo Nakatani
High performance python computing for data science
High performance python computing for data science
Takami Sato
numpyの魅力
numpyの魅力
__106__
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
Yuki Nagai
Introduction to Chainer and CuPy
Introduction to Chainer and CuPy
Kenta Oono
Real world lisp
Real world lisp
秀俊 伊藤
Recommended
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Satoshi imai
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
明日使える超高速Ruby - RXbyak (Mitaka.rb #5)
Shuyo Nakatani
High performance python computing for data science
High performance python computing for data science
Takami Sato
numpyの魅力
numpyの魅力
__106__
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
CVPR2015読み会 "Joint Tracking and Segmentation of Multiple Targets"
Yuki Nagai
Introduction to Chainer and CuPy
Introduction to Chainer and CuPy
Kenta Oono
Real world lisp
Real world lisp
秀俊 伊藤
CuPy解説
CuPy解説
Ryosuke Okuta
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
Mr. Vengineer
深層学習フレームワークChainerとその進化
深層学習フレームワークChainerとその進化
Yuya Unno
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
NumPy闇入門
NumPy闇入門
Ryosuke Okuta
二階堂愛と二階堂藍の違いについて
二階堂愛と二階堂藍の違いについて
show you
クリスマス?
クリスマス?
sasenomura
My code
My code
俊 中村
Numpy scipy matplotlibの紹介
Numpy scipy matplotlibの紹介
Tatsuro Yasukawa
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
Tom Hayakawa
Tcl/Tkクイック入門
Tcl/Tkクイック入門
nyaocat
M1 gp
M1 gp
亮介 小林
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
Masaki Matsushita
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
__ytoku
A Multiple Pairs Shortest Path Algorithm 解説
A Multiple Pairs Shortest Path Algorithm 解説
Osamu Masutani
論文紹介 "DARTS: Differentiable Architecture Search"
論文紹介 "DARTS: Differentiable Architecture Search"
Yuta Koreeda
[DLHacks]Comet ML -機械学習のためのGitHub-
[DLHacks]Comet ML -機械学習のためのGitHub-
Deep Learning JP
Common Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
t-sin
LibreOfficeの最新動向 in OSC 2015 Hiroshima
LibreOfficeの最新動向 in OSC 2015 Hiroshima
Masataka Kondo
More Related Content
What's hot
CuPy解説
CuPy解説
Ryosuke Okuta
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
Mr. Vengineer
深層学習フレームワークChainerとその進化
深層学習フレームワークChainerとその進化
Yuya Unno
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
NumPy闇入門
NumPy闇入門
Ryosuke Okuta
二階堂愛と二階堂藍の違いについて
二階堂愛と二階堂藍の違いについて
show you
クリスマス?
クリスマス?
sasenomura
My code
My code
俊 中村
Numpy scipy matplotlibの紹介
Numpy scipy matplotlibの紹介
Tatsuro Yasukawa
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
Tom Hayakawa
Tcl/Tkクイック入門
Tcl/Tkクイック入門
nyaocat
M1 gp
M1 gp
亮介 小林
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
Masaki Matsushita
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
__ytoku
A Multiple Pairs Shortest Path Algorithm 解説
A Multiple Pairs Shortest Path Algorithm 解説
Osamu Masutani
論文紹介 "DARTS: Differentiable Architecture Search"
論文紹介 "DARTS: Differentiable Architecture Search"
Yuta Koreeda
[DLHacks]Comet ML -機械学習のためのGitHub-
[DLHacks]Comet ML -機械学習のためのGitHub-
Deep Learning JP
What's hot
(20)
CuPy解説
CuPy解説
TensorFlow XLA とハードウェア
TensorFlow XLA とハードウェア
深層学習フレームワークChainerとその進化
深層学習フレームワークChainerとその進化
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
NumPy闇入門
NumPy闇入門
二階堂愛と二階堂藍の違いについて
二階堂愛と二階堂藍の違いについて
クリスマス?
クリスマス?
My code
My code
Numpy scipy matplotlibの紹介
Numpy scipy matplotlibの紹介
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Pythonデータ分析 第3回勉強会資料 8章
Pythonデータ分析 第3回勉強会資料 8章
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
Tcl/Tkクイック入門
Tcl/Tkクイック入門
M1 gp
M1 gp
Rubyで実はwritev(2) が使われているはなし
Rubyで実はwritev(2) が使われているはなし
C++のビルド高速化について
C++のビルド高速化について
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
PARI/GPの話 @ Ph/shh/bin CTF勉強会LT
A Multiple Pairs Shortest Path Algorithm 解説
A Multiple Pairs Shortest Path Algorithm 解説
論文紹介 "DARTS: Differentiable Architecture Search"
論文紹介 "DARTS: Differentiable Architecture Search"
[DLHacks]Comet ML -機械学習のためのGitHub-
[DLHacks]Comet ML -機械学習のためのGitHub-
Similar to Lispmeetup #45 Common Lispで音声合成
Common Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
t-sin
LibreOfficeの最新動向 in OSC 2015 Hiroshima
LibreOfficeの最新動向 in OSC 2015 Hiroshima
Masataka Kondo
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
t-sin
Debian tokyo-20150224-01
Debian tokyo-20150224-01
Yuji IMAI
先取り Go1.5
先取り Go1.5
Preferred Networks
Lisp tutorの開発について
Lisp tutorの開発について
Hiroki Noguchi
日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ
Shin Ohno
Similar to Lispmeetup #45 Common Lispで音声合成
(7)
Common Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
LibreOfficeの最新動向 in OSC 2015 Hiroshima
LibreOfficeの最新動向 in OSC 2015 Hiroshima
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
Debian tokyo-20150224-01
Debian tokyo-20150224-01
先取り Go1.5
先取り Go1.5
Lisp tutorの開発について
Lisp tutorの開発について
日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ
More from Satoshi imai
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
Satoshi imai
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Satoshi imai
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Satoshi imai
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Satoshi imai
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Satoshi imai
More from Satoshi imai
(7)
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup #45 Common Lispで音声合成
1.
Common Lispで音声合成 Satoshi Imai
/ 今井 悟士 Twitter: @masatoi0 Github: masatoi
2.
これまでの発表 ● #29: 線形分類器cl-online-learningの実装 –
http://www.slideshare.net/masatoi0/lispmeetup29-c lonlinelearning ● #39: ディープラーニング用ライブラリMGLの紹介 – http://www.slideshare.net/masatoi0/lispmeetup-39 -mgl
3.
今回の目標 ● ディープラーニングの応用として音声合成(テキスト読 み上げ)を試みる → 未完! –
ここまでの成果物: https://github.com/masatoi/cljtalk ● DNN音声合成の全体の流れを把握する – Common Lispで実装するために必要な道具を揃える ● 音素アライメント → Julius、segmentation-kit ● 音声分析合成 → WORLD、cl-libworld ● メル周波数ケプストラム(MFCC) → libfftw3
4.
色々なTTSシステム ● 波形接続型音声合成 (VOICEROID (結月ゆかり
etc)) – 小さい音声の素片を連結して合成する ● 統計的音声合成 – HMM (CeVIO (さとうささら etc)、 Open JTalk) ● HMM(隠れマルコフモデル)を使うもの – DNN ● 単純なFFNNを音声に適用 (簡単!) – LSTM-RNN (Googleテキスト読み上げ) ● 再帰型ニューラルネット – Wavenet (DeepMind) ← new!
5.
色々なTTSシステム ● 統計的音声合成 – HMM – DNN –
LSTM-RNN – Wavenet ● ボコーダーを介さず直接音声を予測する ● 畳み込みニューラルネットで自己回帰(自分の予測を入力の一 部として与える) ● ボコーダーを使う 生の音声ではなく、音声を少数のパラメータ に変換してそれを予測する 再合成時に劣化する
6.
ボコーダー(音声分析合成) ● 生の音声からパラメータを取り出したり再合成したりする ● WORLD – C++の音声分析合成ライブラリ ●
cl-libworld – https://github.com/masatoi/cl-libworld – Common Lisp用のラッパーをCFFIで実装した – WORLDのコードを丸抱えして、require時にLakeでビルドする
7.
基本周波数(F0) 音の高さ パワースペクトル 周波数毎の強さ 声道(口の形)を表す 非周期性指標 声のかすれ具合
8.
メル周波数ケプストラム ● まだパラメータ数が多いのでもっと圧縮したい ● メルフィルタバンク – 人間の耳にとって重要な周波数帯のスペクトルを重点的に 取るためのフィルタ
9.
メル周波数ケプストラム ● まだパラメータ数が多いのでもっと圧縮したい ● メルフィルタバンク ● スペクトルにメルフィルタバンクを掛けて対数変換する かけてから 対数変換
10.
メル周波数ケプストラム ● 離散コサイン変換(DCT)する – 低周波帯に情報が集まる ●
上の方は切ってもいい! → 13次元でカット ● ここまでやったもの: メル周波数ケプストラム係数(MFCC) – DCTはCのライブラリFFTWを使う(CFFIでラップ) DCT DCT の逆変換
11.
MFCCから音声まで戻す ● DCTの逆変換は無劣化でできる (上を切らなければ) ●
それからexpをかける ● 元のスケールに戻して、スプライン補間をかける スケール変換 スプライン補間 exp
12.
MFCCから音声まで戻す ● スプライン補間 – データ点の間を三次曲線で滑らかに繋ぐ – データ数のサイズの逆行列を計算する必要があるが、三重対角行 列なのでO(N)でできる
13.
DNNの出力データを作る ● 非周期性指標はDCTで5次元まで圧縮する ● F0が1次元、スペクトルが13次元、非周期性指標が5次元で1フレーム当たり19 次元の特徴量になる
14.
入力データを作る ● 音素アライメント – テキストデータと音声から音素の開始時間と終了時間を 推定する – Juliusのsegmentation-kitが使える 0.0000000
0.0925000 silB 0.0925000 0.2625000 a 0.2625000 0.4125000 i 0.4125000 0.5225000 u 0.5225000 0.5825000 e 0.5825000 0.7525000 o 0.7525000 0.7825000 silE あいうえお
15.
入力データを作る ● 音素アライメント – テキストデータと音声から音素の開始時間と終了時間を 推定する 0.0000000 0.0925000
silB 0.0925000 0.2625000 a 0.2625000 0.4125000 i 0.4125000 0.5225000 u 0.5225000 0.5825000 e 0.5825000 0.7525000 o 0.7525000 0.7825000 silE
16.
入力データを作る ● 音素をフレームに割り当てる – 一つのフレーム毎の特徴量 ● どの音素に属しているか?
→ 38次元のバイナリ特徴 ● その音素の継続時間(duration) 1→ 次元の実数 ● その音素が割り当てられているフレームの中で何番目か → 1次元の整数
17.
DNNの構造 “Deep Learning in
Speech Synthesis” [H.Zen, 2013] T個のフレームの特徴量を一列に並べてDNNの入出力とする
18.
MGLとは ● Common Lisp用の機械学習ライブラリ ● ディープラーニングの割と最近の手法までカバー ●
MGL-MATという行列演算ライブラリを使う – cl-cuda、LLA(Lisp Linear Algebra)によって高速化 ● cl-cudaがQuicklispに入ったことによりMGL-MATもQuicklispから入 るようになった!
19.
MGLで回帰問題を解く ● 回帰のやり方はドキュメントが無いのでMGLのソースと格闘する ● まず簡単な2次元→1次元の関数を近似する 元の関数
近似結果 (defun rastrigin (xlist) (let ((n (length xlist))) (+ (* 10 n) (loop for xi in xlist summing ( (* xi xi) (* 10 (cos (* 2 pi xi))))))))
20.
MGLで回帰問題を解く ● build-fnnマクロでネットワークの構造を指定してオブジェクトを生成 – 入力層2次元、1200次元の隠れ層が3層、出力層1次元 –
隠れ層の活性化関数はReLU、出力層の活性化関数は恒等写像、誤差関数は 二乗誤差 (defparameter fnnregression (buildfnn (:class 'regressionfnn :maxnstripes 100) ; バッチサイズ100 ;; Input Layer 2次元 (inputs (>input :size 2)) (f1activations (>activation inputs :name 'f1 :size 1200)) (f1 (>relu f1activations)) (f2activations (>activation f1 :name 'f2 :size 1200)) (f2 (>relu f2activations)) (f3activations (>activation f2 :name 'f3 :size 1200)) (f3 (>relu f3activations)) (predictionactivations (>activation f3 :name 'prediction :size 1)) ;; Output Lump: squareddifference 1→ 次元 (prediction (>loss (>squareddifference (activationsoutput predictionactivations) (>input :name 'targets :size 1)) :name 'prediction))))
21.
DNN音声合成のためのモデルを作る ● 一度にDNNに与えるフレーム数Tを20とする ● 入力40*20=800次元、出力19*20=380次元 ● しかしこれで学習してみると数値計算エラー! (defparameter fnn (buildfnn (:class 'regressionfnn :maxnstripes 100) ;; Input Layer (inputs (>input :size 800)) (f1activations (>activation inputs :name 'f1 :size 512)) (f1 (>relu f1activations)) (f2activations (>activation f1 :name 'f2 :size 512)) (f2 (>relu f2activations)) (f3activations (>activation f2 :name 'f3 :size 512)) (f3 (>relu f3activations)) (predictionactivations (>activation f3 :name 'prediction :size 380)) ;; Output Lump: >squareddifference (prediction (>loss (>squareddifference (activationsoutput predictionactivations) (>input :name 'targets :size 380)) :name 'prediction))))
22.
まとめ ● 音声合成のための特徴量を揃えたが肝心のDNNの学習に失敗 – 出力が多次元のより単純な回帰問題で学習の進行を観察する ● 入力の特徴量もアクセントやイントネーションを無視しているので、テキ ストを分析してこれらの情報を付与するようにしたい –
さらにユーザが簡単にアクセントなどを調整するためのGUIを用意 ● CFFIでCのライブラリが簡単に呼べるのでライブラリ不足は感じない – 今回はWORLDとFFTWのラッパーを書いた
Download now