• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 文章精選 >
     首頁(yè) > 新聞 > 文章精選 >

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

    2018-01-04 09:43:34   作者:   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


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

    模型

    PPL

    N-gram

    141

    RNN

    123

    LSTM

    82

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

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 甘孜县| 盐池县| 大新县| 长沙市| 娄烦县| 乐业县| 岑巩县| 民乐县| 潞西市| 南涧| 苗栗县| 江城| 靖边县| 永济市| 山西省| 正定县| 保定市| 陈巴尔虎旗| 枞阳县| 青浦区| 盐池县| 东乌珠穆沁旗| 南宁市| 怀柔区| 广丰县| 鹤庆县| 札达县| 宝清县| 叙永县| 伊宁市| 客服| 抚松县| 海林市| 读书| 馆陶县| 红河县| 兴海县| 白沙| 盈江县| 大悟县| 调兵山市| http://444 http://444 http://444 http://444 http://444 http://444