a级片网址,www.一级毛片,日批国产,中文字幕日韩精品有码视频,黄色毛片免费网站,久久久精品午夜免费不卡,天堂福利视频

您當(dāng)前的位置是:  首頁 > 新聞 > 文章精選 >
 首頁 > 新聞 > 文章精選 >

基于TensorFlow 的神經(jīng)網(wǎng)絡(luò)語言模型

2018-01-04 09:43:34   作者:   來源:CTI論壇   評論:0  點擊:


  當(dāng)前無論是學(xué)術(shù)界還是工業(yè)界,深度學(xué)習(xí)都受到極大的追捧。Google在2015年11月推出開源深度學(xué)習(xí)平臺TensorFlow,由于其靈活性和高效性,不僅促進(jìn)學(xué)術(shù)界的研究進(jìn)程,同時提供了解決大量實際問題優(yōu)秀的工具。普強(qiáng)一直致力于為客戶提供高效精準(zhǔn)的語音識別服務(wù),在語音識別技術(shù)框架中,語言模型是一個最基本的組成模塊,能夠?qū)φZ音識別的準(zhǔn)確率產(chǎn)生重要影響。本文主要介紹深度學(xué)習(xí)在語言模型中的相關(guān)應(yīng)用,以及如何利用TensorFlow平臺產(chǎn)品化上述技術(shù),提高普強(qiáng)語音識別技術(shù)創(chuàng)新性及競爭力。
  人工神經(jīng)網(wǎng)絡(luò)
  人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)是一組大致模仿人類大腦構(gòu)造設(shè)計的計算機(jī)算法或數(shù)學(xué)模型,屬于機(jī)器學(xué)習(xí)(Machine Learning,ML)方法中的一類,適合于處理語音,圖像,文本等數(shù)據(jù),賦予計算機(jī)處理有關(guān)人類認(rèn)知方面問題的能力,如語音識別,圖像識別,自然語言理解等。
  人工神經(jīng)網(wǎng)絡(luò)的基本組成單元稱為一個神經(jīng)元,其結(jié)構(gòu)如下圖所示:
  一般而言,一個神經(jīng)元可以接受多個輸入經(jīng)過一些線性或非線性變換后轉(zhuǎn)化成一個輸出值。神經(jīng)元內(nèi)部的這個變換函數(shù)稱為激活函數(shù)(activation function),常用的激活函數(shù)包括:sigmoid,tanh,RELU等。
  人工神經(jīng)網(wǎng)絡(luò)的神經(jīng)元可以看成一種簡化版的生物神經(jīng)元。我們知道,生物神經(jīng)元通過細(xì)胞體上的樹突接收其他神經(jīng)元的信號,而通過軸突向其他神經(jīng)元傳遞信號;并且通常一個神經(jīng)元有一個至多個樹突,但軸突只有一條。
  顯然,單個神經(jīng)元能夠進(jìn)行的處理和計算能力有限,因此類似生物的大腦,我們可以將許多個的神經(jīng)元連接起來,組成一個更大規(guī)模的網(wǎng)絡(luò),這個網(wǎng)絡(luò)就是人工神經(jīng)網(wǎng)絡(luò),例如下圖中這樣:
  出于計算的考慮,人工神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元不會像生物大腦中那樣隨意的連接,而是形成相對簡單的分層結(jié)構(gòu)。一般的基本組成包括:
  • 輸入層(input layer):每個網(wǎng)絡(luò)中只有一個,處于這一層神經(jīng)元用于接收輸入數(shù)據(jù);
  • 隱藏層(hiddeng layer):每個網(wǎng)絡(luò)可以由零個或多個,這部分神經(jīng)元對輸入進(jìn)行變換,分析和計算;
  • 輸出層(output layer):每個網(wǎng)絡(luò)中只有一個,這一層中的神經(jīng)元對來自隱藏層或輸入層的數(shù)據(jù)進(jìn)行最后的處理,并輸出最終結(jié)果。
  深度學(xué)習(xí)
  深度學(xué)習(xí)(Deep Learning,DL),顧名思義,指的使用是隱藏層的數(shù)目較大的深層神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)為模型的機(jī)器學(xué)習(xí)方法。
  傳統(tǒng)神經(jīng)網(wǎng)絡(luò)主要使用由一個輸入層和一個輸出層組成的淺層網(wǎng)絡(luò),至多在兩層之間添加一個隱藏層。三層以上(包括輸入和輸出層在內(nèi))的系統(tǒng)就可以稱為“深度”學(xué)習(xí)。
  在深度學(xué)習(xí)網(wǎng)絡(luò)中,每一個節(jié)點層在前一層輸出的基礎(chǔ)上學(xué)習(xí)識別一組特定的特征。隨著神經(jīng)網(wǎng)絡(luò)深度增加,節(jié)點所能識別的特征也就越來越復(fù)雜,因為每一層會整合并重組前一層的特征。隨著特征越來越復(fù)雜,它們的抽象度也越來越高,可能會與人類大腦中的某些高層語義概念相對應(yīng),因而,使用這些特征能夠更有利于和認(rèn)知有關(guān)任務(wù)的處理。
  深度的重要性可以在一些圖像識別任務(wù)中直觀的看到,如下圖所展示的人臉識別深度模型:
 。▓D源:Key Concepts of Deep Neural Networks)
  觀察圖片左邊部分,我們可以看到,隨著層數(shù)的增加,神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的特征越來越抽象。網(wǎng)絡(luò)的第一層的特征只是一些簡單紋理,方向等線條,第二層通過第一層得到的線條組成了一些臉部的局部細(xì)節(jié),最終在第三層通過組合上一層的各個局部,形成一幅幅人臉的圖像。
  遞歸神經(jīng)網(wǎng)絡(luò)
  前面我們舉的例子中,神經(jīng)元之間的連接只在相鄰的層之間,并且是單方向的,這種類型的神經(jīng)網(wǎng)絡(luò)統(tǒng)稱為前饋神經(jīng)網(wǎng)絡(luò)(Feed Forward Neural Network)。前饋神經(jīng)網(wǎng)絡(luò)的這種結(jié)構(gòu)特性使得它在處理每個輸入時,是不考慮之前的輸入的,這僅對輸入數(shù)據(jù)點之間是獨立的應(yīng)用有效。而許多實際的應(yīng)用場景,每個輸入點的值會對其他輸入點的值有所依賴。這時,我們需要使用另一種結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),即遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),這種網(wǎng)絡(luò)更適合處理時間序列的輸入數(shù)據(jù),如語音,手寫識別,文本等。
  遞歸神經(jīng)網(wǎng)絡(luò)與前饋神經(jīng)網(wǎng)絡(luò)的主要區(qū)別在于,遞歸神經(jīng)網(wǎng)絡(luò)的神經(jīng)元在前饋神經(jīng)網(wǎng)絡(luò)神經(jīng)元的基礎(chǔ),增加了一條到自身的連接,也就是說,神經(jīng)元上一個時刻的輸出會作為下一時刻的輸入反饋給自身。如圖所示,
  通過這條自反饋連接,RNN把處理過的歷史數(shù)據(jù)都存儲在它的狀態(tài)向量中,并且把它與輸入數(shù)據(jù)一并送給神經(jīng)元處理。由于這部分額外信息的獲取,使得RNN具有更強(qiáng)的記憶和學(xué)習(xí)能力。
  LSTM
  歷史信息使得RNN具備較強(qiáng)的記憶能力,但是同時也使RNN的學(xué)習(xí)過程變得更加困難。
  RNN的學(xué)習(xí)通常使用的是沿時間反向傳播(BackPropagation Through Time,BPTT)算法,這個算法需要多次連乘權(quán)重矩陣,這樣就很容易出現(xiàn)極小或極大的數(shù)值,使得訓(xùn)練不穩(wěn)定,這個問題被稱為梯度消失(vanishing gradients)或梯度爆炸(exploding gradients)問題。
  為解決上述問題,學(xué)者設(shè)計出一種稱為長短期記憶(Long-Short Term Memory,LSTM)的模型。LSTM在RNN神經(jīng)元的基礎(chǔ)上,加入了三個門(gate),對模型的記憶內(nèi)容進(jìn)行精細(xì)的控制。一般使用的LSTM包含三個門:
  • 輸入門(inputgate),控制輸入數(shù)據(jù)權(quán)重;
  • 忘記門(forgetgate),控制歷史信息權(quán)重;
  • 輸出門(outputgate),控制輸出結(jié)果權(quán)重。
  LSTM神經(jīng)元的結(jié)構(gòu),如下圖所示,
  使用LSTM能夠使RNN模型的訓(xùn)練過程更穩(wěn)定,學(xué)習(xí)更有效。
  TensorFlow
  為了加速深度學(xué)習(xí)領(lǐng)域的發(fā)展,2015年11月9日,Google發(fā)布深度學(xué)習(xí)框架TensorFlow并宣布開源。在不到一年時間內(nèi),在GitHub上,TensorFlow就成為了最流行的深度學(xué)習(xí)項目。TensorFlow在圖形分類、音頻處理、推薦系統(tǒng)和自然語言處理等場景下都有豐富的應(yīng)用。
  TensorFlow是一個深度學(xué)習(xí)框架,支持Linux平臺,Windows平臺,Mac平臺,甚至手機(jī)移動設(shè)備等各種平臺。其次,TensorFlow提供了非常豐富的深度學(xué)習(xí)相關(guān)的API,可以說目前所有深度學(xué)習(xí)框架里,提供的API最全的,包括基本的向量矩陣計算、各種優(yōu)化算法、各種卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)基本單元的實現(xiàn)、以及可視化的輔助工具等等。
  TensorFlow的特點包括:
  • 高度的靈活性
  TensorFlow并不僅僅是一個深度學(xué)習(xí)庫,只要可以把你的計算過程表示稱一個數(shù)據(jù)流圖的過程,我們就可以使用TensorFlow來進(jìn)行計算。TensorFlow允許我們用計算圖的方式還建立計算網(wǎng)絡(luò),同時又可以很方便的對網(wǎng)絡(luò)進(jìn)行操作。用戶可以基于TensorFlow的基礎(chǔ)上用Python編寫自己的上層結(jié)構(gòu)和庫,如果TensorFlow沒有提供我們需要的API的,我們也可以自己編寫底層的C++代碼,通過自定義操作將新編寫的功能添加到TensorFlow中。
  • 真正的可移植性
  TensorFlow可以在CPU和GPU上運行,可以在臺式機(jī),服務(wù)器,甚至移動設(shè)備上運行。
  • 多語言支持
  TensorFlow采用非常易用的python來構(gòu)建和執(zhí)行我們的計算圖,同時也支持C++的語言。我們可以直接寫python和C++的程序來執(zhí)行TensorFlow,也可以采用交互式的ipython來方便的嘗試我們的想法。
  • 豐富的算法庫
  TensorFlow提供了所有開源的深度學(xué)習(xí)框架里,最全的算法庫,并且在不斷的添加新的算法庫。這些算法庫基本上已經(jīng)滿足了大部分的需求,對于普通的應(yīng)用,基本上不用自己再去自定義實現(xiàn)基本的算法庫了。
  • 完善的文檔
  TensorFlow的官方網(wǎng)站,提供了非常詳細(xì)的文檔介紹,內(nèi)容包括各種API的使用介紹和各種基礎(chǔ)應(yīng)用的使用例子,也包括一部分深度學(xué)習(xí)的基礎(chǔ)理論。
  語言模型
  語言模型是一種概率模型,它是基于一個語料庫創(chuàng)建,得到每個句子出現(xiàn)的概率。語言模型在語音識別中起到重要的作用,如果沒有語言模型,語音識別的結(jié)果只能是一些發(fā)音正確的詞語或單字,卻不一定能組成有意義的句子。關(guān)于語音識別原理的詳細(xì)介紹,請參見我們的上一篇文章。
  傳統(tǒng)的N-gram語言模型數(shù)學(xué)上表示為:
  上述公式的意義是:一個句子出現(xiàn)的概率等于給定前面的詞情況下,緊接著后面的詞出現(xiàn)的概率。它是通過條件概率公式展開得到。其中條件概率P(w2|w1),P(w3|w1w2),?,P(wt|w1w2?wt?1)就是創(chuàng)建語言模型所需要的參數(shù),每個條件概率的意義解釋為:根據(jù)前面的詞預(yù)測下一個詞的概率。有了這些條件概率參數(shù),給定一個句子,就可以通過以上公式得到一個句子出現(xiàn)的概率。句子的概率越大,說明它越接近自然語言的表達(dá)。
  神經(jīng)網(wǎng)絡(luò)的語言模型則是使用神經(jīng)網(wǎng)絡(luò)來建模句子的概率。將句子中的詞按順序逐個輸入給一個神經(jīng)網(wǎng)絡(luò),在每次得到的輸出中找到下一個詞的概率,最后將句子中所有詞的概率連乘,就得到了這個句子的概率。
  語言模型中下一個詞的概率顯然和之前歷史的詞有非常大的依賴關(guān)系,因此,LSTM比較適合于應(yīng)用在語言模型建模中。
  基于TensorFlow的LSTM語言模型
  根據(jù)以上原理,我們就可以利用TensorFlow來實現(xiàn)LSTM語言模型了。根據(jù)以上原理,我們就可以利用TensorFlow來實現(xiàn)LSTM語言模型了。
  • 模型訓(xùn)練
  首先,掃描語料庫建立字典,并為每個詞編號。
  第二步,需要建立TensorFlow的計算流圖,在其中定義要使用的LSTM模型。這里的使用模型是一個N+2層的LSTM,其中第一層是輸入層,又叫做詞向量矩陣,然后是N層的LSTM隱藏層,最后連接的是輸出層。輸出層的神經(jīng)元個數(shù)與詞典中詞數(shù)相同,每個神經(jīng)元輸出的值就是它所對應(yīng)的詞的概率大小。
  第三步,使用BPTT算法訓(xùn)練模型。這時我們需要優(yōu)化目標(biāo)函數(shù),采用梯度下降逐步更新參數(shù)。
  梯度下降算法最重要的參數(shù)就是學(xué)習(xí)率,需要人工設(shè)置一個合適的值,學(xué)習(xí)率太大容易造成訓(xùn)練過程不穩(wěn)定,太小則會使得學(xué)習(xí)過程太慢。一般而言,我們會在一次訓(xùn)練的過程中,逐步減小學(xué)習(xí)率,最終使得訓(xùn)練收斂。
  將上面所述轉(zhuǎn)化為代碼后,使用TensorFlow運行,我們就可以得到最終的模型。
  • 模型評價
  對于任何一種機(jī)器學(xué)習(xí)模型,我們都需要使用某種方法評價它的好壞。在語言模型領(lǐng)域,使用最多的是一種稱為困惑度(Perplexity,PPL)的指標(biāo)。其基本思想是給測試集的句子賦予較高概率值的語言模型較好,公式如下:
  可以看出,困惑度和概率成反比,概率越高,困惑度越低,語言模型越好。
  使用TensorFlow進(jìn)行模型評估時,代碼和訓(xùn)練時基本一樣,只需要把最后運行的梯度下降的去掉。得到每一個詞的概率后,就可以通過上面的公式計算PPL了。在PennTreeBank(PTB)數(shù)據(jù)集(訓(xùn)練集包含929k個詞)上,不同模型的PPL如下:

模型

PPL

N-gram

141

RNN

123

LSTM

82

 
  顯然,基于神經(jīng)網(wǎng)絡(luò)的模型效果優(yōu)于傳統(tǒng)的Ngram模型,而LSTM模型比RNN更優(yōu)。
【免責(zé)聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題