G2P(單詞到音素)的深度學習訓練測試
音素提取是語音識別中的一塊重要內容。
G2P(Grapheme-to-Phoneme),英文意思是字素到音素,使用迴圈神經網路(recurrent neural network,RNN) 和LSTM( long short-termmemory units),來實現從英文單詞到音素的轉化。LSTM序列到序列模型(LSTM sequence-to-sequencemodel)已經被成功地應用到許多專案中,這些應用包括機器翻譯,字素轉因素等等。
Github上的G2P是基於Google開源深度學習系統TensorFlow實現的,所以在執行之前要先安裝TensorFLow。
一、TensorFlow安裝
安裝TensorFLow的方法有很多種,可以用Pip、Virtualenv、Anaconda、Docker以及從原始碼安裝。這裡選擇 Virtualenv,因為使用 Virtualenv可以將Tensorflow所需要的各種依賴安裝到指定的資料夾中,而不改變系統中原有的各種庫的版本。
使用 Virtualenv安裝分為一下幾步:
1、安裝Pip 和 Virtualenv:
$ sudo apt-get installpython-pip python-dev python-virtualenv
2、設定Virtualenv工作的資料夾為~/tensorflow:
$ virtualenv--system-site-packages ~/tensorflow
3、啟用工作環境,然後使用Pip將TensorFLow安裝在~/tensorflow中:
$source ~/tensorflow/bin/activate
(tensorflow)$ #命令列變成了這樣
#使用Pip安裝,這裡安裝只使用CPU的版本
/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-\ linux_x86_64.whl
此時出現了問題:
OSError:[Errno 2] 沒有那個檔案或目錄:'/usr/local/lib/python2.7/dist-packages/setuptools-18.1-py2.7.egg'
解決方法,解除安裝已經有的setuptools:
pip uninstall setuptools
再安裝一下,成功:
安裝TensorFlow之後,又出現問題:
importtensorflow 後,出現段錯誤segment fault
解決方法:
(1)解除安裝一些python庫:
sudo pip uninstall six wheel numpy scipysckit-image scikit-learn protobuf
(2)重新安裝:
(3)成功:
>>>import tensorflow
>>>
二、下面是G2P的執行方式:
1、在github上下載G2P檔案:
在sourceforge上下載一個已經訓練好的模型:
2、執行G2P最簡單的方式是使用命令列進行互動的方式:
$: pythong2p.py --interactive --model ~/Work/g2p-seq2seq-cmudict
其中~/Work/g2p-seq2seq-cmudict是上一步下載的已經訓練好的模型檔案所在路徑。
測試:
4、訓練G2P模型
訓練G2P模型需要一個人工標註的字典:
下載並解壓後,裡面有個名字為cmudict.dic.train的檔案,這個就是我們需要的字典,裡面有大概11萬個單詞,每一行放置一個單詞及其對應的因素。具體如下圖:
然後根據這個字典就可以訓練模型了,用法如下:
$:python g2p.py --train train_dictionary.dic --model model_folder_path
其中 train_dictionary.dic就是之前下載的字典,model_folder_path為訓練好後的模型儲存的位置。
訓練模型的語句中,還有一些引數可供選擇:
--max_steps:訓練迭代的次數(預設情況下 maxsteps=0,此時模型會不停的迭代, 直到訓練效果不能再好為止)。
--size:神經網路的節點數目(預設情況下 size=64),在實驗中發現,size=512 會擁有更好的結果,但是size=512時訓練時間會變長。
--num_layers:神經網路的層數(預設情況下num_layers=2),如果訓練集很小 的話,可以設定num_layers=1, 當num_layers=3時會得到更好的結果
python ~/Work/g2p-seq2seq-master/g2p_seq2seq/g2p.py--train cmudict.dic.train --test cmudict.dic.test --num_layers 2 --size 512 --model~/Work/model1 --max_steps 0
同時還可以檢視一個模型的識別準確率,用法如下:
$:pythong2p.py --evaluate test_dictionary.dic --model model_folder_path
同其中test_dictionary.dic
最後不得不說,在沒有大規模語料的情況下,準確率還是相當的低。。