1. 程式人生 > >G2P(單詞到音素)的深度學習訓練測試

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

 

最後不得不說,在沒有大規模語料的情況下,準確率還是相當的低。。