業界現在有哪些比較成熟的基於深度學習(deep learning)的應用?

這裡的業界應用可以是產品、服務、技術方案等,但一定要是成熟的面向大眾的應用,而不是學校里的研究或某網站的開源包。


說一下我了解到的一些情況吧。

1. 圖像

這個是Deep Learning的經典強勢應用領域了,似乎不需要太多介紹。

相關的完整產品應用已經相當之多了,隨便舉幾個例子:

Face++/Sensetime的人臉識別

Google的街景識別

Google/Baidu的OCR翻譯識別

主流電商網站的「以圖搜圖」

深圳碼隆科技[1]的服裝時尚搭配

等等。

2. 語音

這個也是Deep Learning的強勢領域,相關的產品應用也很多了,舉幾個例子:

科大訊飛的語音平台

阿里/百度的語音識別平台(比如應用在客服場景)

思必馳/雲知聲這樣的start-up推出的語音輸入法

出門問問

等等。

3. 文本

這個一直是這兩年學術界和工業界的關注熱點。也能看到一些use case(不像語音和圖像那樣跟傳統方法引比可以獲得巨大的提升,但也會有一定margin的收益),比如

廣告CTR預估(百度、京東[2]和Google[4]都已經應用到線上,也不難找到相關的公開作法資料,前不久攜程組織的技術meetup上,搜狗無線廣告的同學也有一個相關的技術分享[5]比較實在)

廣告的召迴環節(CIKM16上Yahoo!的技術團隊有一篇相關paper[3]里介紹了他們的作法,大抵是基於自已開發的分散式版本的word2vec,對query和廣告進行embedding建模,用於改善broad match的質量,跟論文作者之一確認這篇論文的工作已經在production cluster上運行有兩個Q了)

搜索相關性語義層面改善(WSDM15上百度有一篇tutorial[6]提到了一些具體的作法,我了解到的360和阿里也在嘗試,作法跟百度相似,都是基於微軟的DSSM的變種,不過提升並沒有百度claim的那麼高)。與廣告作法有所區分的是,搜索相關性目前我還沒有了解到端到端基於Deep Learning,而是由DL生成若干維特徵,再使用shallow model根據人工標註數據進行re-train,而廣告則已經可以做到基本端到端的訓練了。造成這種區別的關鍵原因還是業務優化目標的差異性。

機器翻譯(這個是被業界期望相當高的一個應用領域,我二手了解到的信息是Google在準備全面切換到DL-based的機器翻譯系統,百度也在推進類似的事情,阿里的機器翻譯因為面向的領域比較特殊,節奏上不會那麼激進。去年ACL會議上,大家對DL-based機器翻譯所擔心的主要問題(可解釋性/可干預性)已經隨著這一年來的技術進步有了很大的改善,隨著技術的演化進步,我個人感覺機器翻譯這樣的複雜建模場景還是非常有希望被DL主導。

回到這個問題上,我想問這個問題的人,以及關注的人,是期望通過了解到工業界有哪些成熟的應用case,好供自己在實際工作中借鑒參考。我也想沿著這個主題說一下自己的看法。

如果是圖像和語音的應用場景,我想沒有什麼好猶豫的,這是Deep Learning的經典強勢場景,而且有大量的成熟的model資源可以復用,再加上這一年來DL平台技術的進步,使用門檻已經低了很多。一個背景稍好的應屆master、phd,稍加coach,也就可以跑起一個DL的應用流程了。不過,引用某位同學的話「有很多人可以跑DL model,但只是很少人可以去自己設計新的DL model",所以工具的便利性減少了試錯的門檻,但是也要警惕不要因此就認為現有的DL model真就是一個"turn-key" solution,拿來就准能解決問題了(說這個是因為最近看到一些距離一線已經很遠的CEO們在claim DL的入門門檻之低讓他自己都可以掌握,於是開始延伸出一系列演繹有感)

至於文本類的應用場景,我的建議還是要謹慎一些。在資源有餘量的情況下,可以投入嘗試,因為複雜網路確實可以提供shallow網路所沒有的數據擬合建模能力,當然這會對數據量以及算力資源提出比較高的要求。否則,先從傳統的shallow model+feature engineering做起,會更具ROI一些。

具體到應用的時候,除了模型訓練以外,也不可忽略的是線上的布署成本和可解釋性。畢竟DL模型的尺寸以及計算複雜性是顯著高於shallow model的,不過這一兩年來,關於模型壓縮,學術界和工業界也有了不少的探索和進展,比如TensorFlow里的8-bit quantization[10],ICLR16里的best paper之一Deep Compression[7],以及DeepScale和Stanford合作的SqueezeNet[8]以及其他一些研究工作[9]都為解決DL模型的線上serving問題提供了非常好的參考借鑒。再有興趣的,還可以關注一下embedding-vision[11]上的一些資料,因為嵌入式領域是對模型的尺寸、功耗、計算量最為敏感的了。至於可解釋性,我的接觸範圍內能夠看到一些相關的工作(比如香港中文大學的王曉剛做過一些相關的有趣工作[12][13]以及其他人做過的一些NN generationinterpretation[14][15][16][17]的工作----interpretation和generation在我看來往往是一體兩面"What I cannot create, I do not understand"),但個人感覺,這些工作給人的感覺是很interesting,但距離工業界所期望的可解釋性還有一定的距離。所以在可解釋性要求很高的應用場景,要麼是將DL以feature的方式融合到shallow model里,要麼是需要自己花費相當多的精力去做可解釋性所需的rd工作。

References:

[1]. 碼隆科技 – Malong Tech

[2]. 包勇軍. 京東電商廣告和推薦系統的機器學習系統實踐. 2016年第七屆中國資料庫技術大會.

[3]. Erik Ordentlich. Network–Efficient Distributed Word2vec Training System for Large Vocabularies. CIKM, 2016.

[4]. Jeff Dean. Distributed Machine Learning and Matrix Computations. NIPS workshop, 2014.

[5]. 舒鵬. 深度學習在搜狗無線索廣告中的應用. 攜程深度學習技術Meetup, 2016.

[6]. 朱凱華. Baidu Search: Challenges we face, Experiences we learned. WSDM, 2015.

[7]. Song Han. Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding. ICLR16.

[8]. Forrest N. Iandola. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and &<0.5MB model size. Arxiv, 2016.

[9]. Song Han. Learning both Weights and Connections for Efficient Neural Networks. Arxiv, 2015.

[10]. How to Quantize Neural Networks with TensorFlow

[11]. Embedded Vision Alliance

[12]. Xiaogang Wang. Sparsifying Neural Network Connections for Face Recognition. CVPR, 2016.

[13]. Xiaogang Wang. Deeply learned face representations are sparse, selective, and robust. CVPR, 2015.

[14]. Aravindh Mahendran. Understanding Deep Image Representations by Inverting Them. Arxiv, 2015.

[15]. Jiwei Li. Visualizing and Understanding Neural Models in NLP. Arxiv, 2015.

[16]. Anh Nguyen. Deep Neural Networks are Easily Fooled: High Confidence Predictions for Unrecognizable Images. CVPR, 2015.

[17]. Harvard NLP. Visual Analysis of Hidden State Dynamics in Recurrent Neural Networks. Arxiv, 2016.


不邀自來~

交易欺詐對電子商務帶來了巨大的威脅,AI研習社邀請了來自清華大學交叉信息研究院博士後、物理學博士王書浩分享介紹了基於循環神經網路的交易欺詐檢測系統——時間偵探(CLUE),他重點講解了電商欺詐檢測這一場景下的三個主要技術難點:非平衡樣本學習、實時檢測系統、增量模型更新。

以下為他的分享內容,點擊查看更多往期回顧:

很高興在這裡與大家分享我們跟京東金融合作的一篇論文,這篇論文已經被ECML-PKDD2017接收。我們的工作一句話就可以概括,即通過深度學習的方法來進行電商欺詐的檢測。我想講的更多的是從工業落地的角度,去建立一套完整的系統來解決問題。

研究背景

首先介紹一下背景。在電商網站裡面,我們經常會遇到兩種欺詐。

  • 第一種欺詐是指用戶的賬戶被竊取了,竊取者可能還會得到用戶的支付密碼,之後他很有可能登錄這個用戶的賬戶進行一些欺詐活動,比如說會購買一些商品進行變現,間接的把用戶賬戶里的餘額取走。
  • 第二種是現在黑市上可以買到一些假的卡片,比如說假的信用卡,如果這個人能夠註冊一個新的賬戶,然後把卡綁定到他的賬戶名下,他就可以使用這個卡來買商品,然後把商品進行變現。

這兩種欺詐有一個共同點,即欺詐用戶都會進行商品的購買和變現。這些欺詐用戶的行為是不是有一些共同的特點,是否可以通過一種手段去觀察整個瀏覽路徑?我們通過交易之前發生的一系列的動作,可以判斷出這個用戶到底是正常用戶還是被懷疑為欺詐的用戶。

上面這個表左邊展示的是正常用戶的瀏覽路徑,可以看到這個用戶最後買了一個128G的wifi版玫瑰金iPad Pro,整個瀏覽路徑非常有規律。對於欺詐用戶而言,看右邊這兩個用戶,從統計上來說有兩個比較鮮明的特點。

  • 第一個是用戶非常簡單粗暴,購買的都是一些虛擬物品,因為虛擬物品可以隨時變現。
  • 第二個是用戶的瀏覽行為沒有邏輯性,他首先訪問京東,然後搜索蘋果,瀏覽了一堆蘋果的商品,但可以看到瀏覽的這些商品沒有太大的關聯性,我們系統中會記錄這是一次欺詐行為。

整個系統的中文名叫做時間偵探,時間是指觀察用戶在整個瀏覽序列裡面的時序數據,然後用深入學習的辦法來對它進行建模。我們所能拿到的數據就是京東上產生的用戶的瀏覽歷史,再加上我們的系統去觀察,之後系統會給出對整個瀏覽行為的風險判定,我們得到的其實是風險評分。處於用戶隱私角度的考慮,我們的瀏覽歷史裡面沒有關於這個用戶ID的任何信息。

技術挑戰

一個非常直接的挑戰首先是我們拿到的樣本是一個非常不平衡的樣本,這就是所謂的非平衡樣本的學習問題。從上面這幅圖中可以明顯看到欺詐用戶和正常用戶的佔比大概是千分之一, 非常小。在研究過程裡面,我們固定了千分之一的欺詐佔比,又稱異常佔比。異常佔比小的問題會對系統的學習造成很大的干擾。

第二個非常嚴峻的問題就是訪問量太大了。京東現在有超過2.2億的活躍用戶,單就PC端來說,每天session的數目大概都是在千萬的量級,真正發生交易的session數目大概也有百萬量級。這個系統其實只看發生交易的session,一天大概要處理掉百萬的訪問,這對系統壓力是非常大的。

在欺詐領域還有一個非常有意思的現象。欺詐其實是人產生的,既然有人在,整個欺詐行為就會隨時間發生變化。上面這幅圖裡展示的就是欺詐用戶喜歡購買的商品。比如在1月份可以看到欺詐用戶特別喜歡2號商品,但隨著時間發展,到10月份時,這些用戶對2號商品就沒那麼感興趣了。我們的系統需要去適應用戶行為的改變,我們需要周期性的對模型進行不斷的更新。

建模方法

接下來講對這個問題的建模方法。我們文章裡面只是做了一個欺詐檢測,但出現的建模方法同樣可以用在商品推薦或是商品建模等其他領域,包括用戶畫像。

細化我們面臨的問題。上圖展示的是用戶在京東的整個瀏覽行為序列,首先訪問主頁,他可能會看一些促銷頁,然後可能會看一些列表頁,然後瀏覽各種商品,最後進行結算。可以注意到在整個URL裡面,商品列表頁和商品的詳情頁是最難編碼的。

我們的伺服器在用戶每次點擊的時候都會記錄下這些信息,比如用戶IP,訪問了哪個URL,包括用戶瀏覽器、操作系統的信息。對這些信息進行編碼之後就可以讓機器去學習。

怎麼進行編碼?其實模型輸入的並不是原始信息,在實際操作過程中需要用一些方法來把這些信息變成機器能夠認識的信息。我們採用的方法比較簡單。可以先忽略URL,進行One-Hot編碼。One-Hot編碼指的是在一個向量裡面只有一位是1,其他的位都是0。

在用戶瀏覽行為里有一個非常重要的信息叫停留時間,停留時間比較難獲取,我們採用了統計上比較符合常理的做法——把下一個頁面點擊的時間和上一個頁面點擊的時間減一下,然後認為是用戶在這個頁面上整體停留時間。

對URL的編碼我寫了兩種編碼方式,在URL裡面很多頁面都可以歸為Category或Item這兩個門類。商品的列表頁和詳情頁實在太龐大了,如果用one-hot編碼將是一個非常大的數目。

京東上商品的瀏覽特別符合非常陡峭的冪律分布,我們可以對採集到session裡面的大部分瀏覽行為進行item編碼,如果瀏覽的商品沒出現在編碼過的item裡面,我們就單獨進行編碼。

我們編碼採用的方式是Item2Vec,這種方法的思路和Word2Vec一樣,Word2Vec相當於把出現在相同語境下的詞之間的距離進行最小化。Item2Vec是先給這個商品賦一個隨機向量,然後根據商品在不同語義中出現的情況,對我們賦的向量進行優化。我們在研究中採用了一個25位的向量,能覆蓋大概90%我們所研究的商品。上表展示的就是Item2Vec的一個結果。

我們來看一個更為廣泛的例子,隨機在三個品類裡面找出若干個商品,然後進行Item2Vec編碼再進行降維。我們採用了汽車用品、手機和附件、個人護理這三個類別。可以看到這三種類型的商品在這個二維的空間裡面比較明顯的被分割到三個不同的區域,這說明Item2Vec的有效性還是很強的。我們做的Item2Vec編碼參考的完全是用戶的瀏覽行為,沒有跟商品的標題做語意上的匹配。

我們可以把URL的編碼劃分成三部分,第一部分是URL的類型,第二部分是category,第三部分是item Vector。我們把所有用戶的點擊行為做完了編碼之後,每一次點擊都可以得到一個編碼後的向量,用戶的整個瀏覽行為就可以看成一個向量的組合,最後我們再從數據表裡面去找這個session是正常的還是被舉報過的。

還有一個問題需要解決。在訓練神經網路的時候,每一個session的長度都可能是不固定的,可能第一個session的點擊數是六個,第二個session的點擊數只有三個,那麼怎麼來處理這種不相等的問題?首先我們確定一個最大點擊數目,在文章中我們設置這個數目為50,也就是說從checkout的頁面往前數50個點擊,進行一個截取之後,然後把長度沒有達到50的後面全都補0。在取最後結果的時候,一定要在checkout位置去取,如果在最後一個位置取的話,會出現錯誤。

最後把這些送到RNN裡面學習。我們在研究裡面採用的框架是TensorFlow,所用到的東西都是TensorFlow定義好的。我們採用的是如上圖LSTM的結構,可以採用多層的LSTM結構。

如何解決技術難題

接下來講一下怎麼去解決剛才說的那些技術難題。

第一是解決非平衡樣本問題。在這個工作裡面採用兩個比較簡單的方法,第一個方法是從數據的層面,我們直接把正常用戶的數目隨機減去4/5。對於欺詐用戶,我們沒有做任何操作。在訓練數據里原來的佔比是1‰,經過採樣之後把數目調整到5‰。在驗證集和測試集上還是保持原來1‰的佔比。

在模型層面,我們採用Thresholding法,它的思路非常簡單。我們的模型是一個二分類問題,要麼欺詐,要麼正常,模型輸出的是一個連續變數,如果更偏重於1,我們認為它是欺詐用戶的可能性更大。

第二個問題就是如何解決龐大的訪問量,我們整個系統的架構如上圖所示。架構分成兩部分,下面是訓練,上面是進行預測,訓練採用的是Tensorflow,預測用了Tensorflow Serving的開源模塊。下面是模型進行滾動更新的部分,更新後的模型會送到上面,然後會有QA模塊進行決定是否切換掉現有的模型。

我們有兩種模型更新的辦法——全量數據更新和增量數據更新。全量數據的好處在於每次模型優化能夠達到一個比較好的結果,增量數據的好處是不需要把歷史數據全都拿過來。從時間上來看,增量更新會比較節省時間和計算資源,我們在這個研究裡面採用的是增量更新的辦法。

研究成果展示

最後給大家展示一下我們研究的一些結果。

對於非平衡樣本問題,用PR曲線能有效的看出模型性能。圖中是初期的一個結果,現在的準確率比圖中高很多。採用4-64的性能最好。

我們還有一個更詳細的表,固定recall是30%,異常佔比為1‰。可以看到隨著層數的增加,性能還是有一些增加的,但是隨著unit數目的增加,在有些地方可能就會產生一些過擬合。

如上圖,通過跟傳統的一些方法的對比也展示了RNN的優越性。

我們也做了一些實驗來對比增量模型更新與全量模型更新。我們把數據分成若干時間段,然後用下一個時間段來測試當前時間段模型的性能,橙色線是初始的模型,我們只用第一個時間段的數據訓練好模型,後面不進行優化,可以看到橙色線跟另外兩條線的差距越來越大,也即隨著用戶行為的變化,第一個時間段訓練的模型越來越不能在實際中使用了。

結果展示

最後展示的是我們做的比較有意思的一個結果。這幅圖裡用戶的行為可以比較明顯的區分出來。例如右上角,這部分樣本表示在session裡面沒有發現用戶在瀏覽商品,而直接進行了付款,這是為什麼?因為我們並沒有把用戶從第一個商品瀏覽到最後全部採集下來。後續我們把用戶的瀏覽行為拼接起來,找到之前的session,這樣的話性能會更好。


深度學習實際的應用挺多的,因為都在back-end運行,對普通消費者來說是透明的或者說無關的。舉兩個語音識別/私人助手方面的產品為例子:

1. Amazon Echo:可以識別你的聲音,具有放歌,回答問題,管理日曆,購物等功能。

2. Google Now:裝載在手機上的私人助手應用,可以問問題得到特定的答案,如推薦,導航,調用應用等等。


很多,只是一般人感覺不到而已。

比如google的圖片搜索,靠深度學習來識別網上收集來的圖;facebook、instagram每張上傳的照片都會經過兩個convnet來識別人和物。只是用戶不知道,也沒必要知道背後用的究竟是什麼技術。

深度學習的性質就決定了他不會有直接面對用戶的應用,而是作為圖像識別、語音識別等相關應用背後的核心技術來提升用戶體驗。

以後你會見到更多用到深度學習的應用,但他們都不會把「深度學習」這種不明覺厲的字眼直接拋給一般用戶,最多只會說「我們用了最先進的XX識別技術,準確率達到XX%」


作者:九五要當學霸

鏈接:知乎專欄

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

你是不是看煩了各種各樣對於深度學習的報導,卻不知其所云?我們要來改變這個問題。

有趣的機器學習 前六章已更新!點此查看第一章:最簡明入門指南、第二章:用機器學習【製造超級馬里奧】的關卡、第三章:圖像識別【鳥or飛機】第四章:用深度進行【人臉識別】第五章:使用深度學習進行【語言翻譯】和 序列的魔力第六章:如何用深度學習進行【語音識別】

我們都知道並且喜歡使用Google翻譯,這個網站可以瞬時翻譯100種不同的人類語言,就好像有魔法一樣。他甚至存在於我們的手機和智能手錶上面:(知乎無法上傳太大的GIF,看圖請戳原文)

Google翻譯背後的科技被稱為機器翻譯。它改變了世界,在本來根本不可能的情況下讓(不同語言的)人們完成了溝通。

但我們都知道,在過去的15年里,高中學生已經使用Google翻譯...額 ...協助他們完成他們的西班牙語作業。這已經不是新聞了…?

事實證明,在過去兩年,深度學習已經完全改寫了我們的機器翻譯方法。那些對語言翻譯一無所知的深度學習研究人員正在利用一個個相對簡單的機器學習解決方案,來打敗世界上最好的專家建造的語言翻譯系統。

這一突破背後的技術被稱為序列到序列學習sequence to sequence learning。這是一項非常強大的技術,被用於解決許多種類的問題。在我們看到它如何被用於翻譯之後,我們還將學習這個演算法是怎樣用來編寫AI聊天機器人和描述圖片的。

我們開始吧!

讓計算機翻譯

那麼我們該如何編寫代碼,才能讓計算機翻譯人類的語言呢?

最簡單的方法,就是把句子中的每個單詞,都替換成翻譯後的目標語言單詞。這裡有一個簡單的例子,把西班牙語逐字翻譯成英語:

我們只是用匹配的英語單詞替換每個西班牙單詞。

這很容易實現,因為你所需要是一本字典來查找每個單詞的翻譯。但結果並不好,因為它忽略了語法和上下文的聯繫。

因此,下一件你可能要做的事,就是開始添加特定語言規則以改進結果。例如,你可能將兩個常用詞翻譯為片語。你可能互換名詞和形容詞的順序,因為他們在西班牙語中以相反的順序出現:

這真的有效!如果我們就繼續添加更多的規則,直到我們可以應對每一部分語法,我們的程序應該就能夠翻譯任何句子了,對吧?

這就是最早的機器翻譯系統的工作原理。語言學家提出了許多複雜的規則,並逐一編程實現。一些世界上最聰明的語言學家在冷戰期間辛勤努力了多年,才創建出了一些更容易理解俄羅斯人交流的翻譯系統。

不幸的是,這種套路只對簡單問題適用,比如說像天氣預報這樣結構簡單的文檔。它對於真實世界的文字來說並不可靠。

問題是,人類語言並不總是遵循固定的規則。人類語言充滿了各種特殊情況,區域差異,或者乾脆就不按套路出牌(#‵′)凸。我們說英語的方式更多地受到幾百年前入侵的人的影響,而不是由坐下來定義語法規則的人。

利用統計數據使計算機更好地翻譯

在基於規則的系統失效之後,一些新的翻譯方法被開發出來了,他們基於概率和統計的模型而不是語法規則。

建造一個基於統計的翻譯系統需要大量的訓練數據,其中完全相同的文本被翻譯成至少兩種語言。這種雙重翻譯的文本稱為平行語料庫parallel corpora。18世紀的科學家以同樣的方式在羅塞塔石碑上面從希臘語中找出埃及象形文字。(譯者註:羅塞塔石碑,高1.14米,寬0.73米,製作於公元前196年,刻有古埃及國王托勒密五世登基的詔書。石碑上用希臘文字、古埃及文字和當時的通俗體文字刻了同樣的內容,這使得近代的考古學家得以有機會對照各語言版本的內容後,解讀出已經失傳千餘年的埃及象形文之意義與結構,而成為今日研究古埃及歷史的重要里程碑)以同樣的方式,計算機可以使用平行語料庫猜測如何將文本從一種語言轉換為另一種語言。

幸運的是,有很多雙重翻譯的文本已經存在在世界的各個角落。例如,歐洲議會將其訴訟程序翻譯成21種語言。因此,研究人員經常使用這些數據來幫助建造翻譯系統。

訓練數據通常令人興奮!但這只是無數條政府文件而已...

用概率的思維思考

統計翻譯系統的根本不同,在於它們試圖生成不止一個精確的翻譯。相反,他們生成成千上萬種可能的翻譯,然後他們按照可能最正確的給這些翻譯排名。他們通過與訓練數據的相似性來估計有多「正確」。以下是它的工作原理:

第1步:將原始句子分成塊

首先,我們將我們的句子分成簡單的塊,每一塊都可以輕鬆翻譯:

第2步:找到每一塊的所有可能的翻譯

接下來,我們將翻譯每塊文字,我們將通過尋找我們資料庫中所有人類翻譯過的相同詞塊來完成我們的翻譯。

要著重注意的是,我們不只是在一本簡簡單單的翻譯字典中查找這些詞塊。相反,我們看到是真實的人在真實的句子中如何翻譯這些相同的詞。這有助於我們捕獲到在不同語境中所有不同的表達方式:

即使最常見的短語也有很多種可能的翻譯

這些可能的翻譯中的有一些會比其他翻譯更頻繁地使用。根據我們訓練數據中每個翻譯出現的頻率,我們可以給它設定一個分數。

例如,有人說「Quiero」更多的時候是指「我想要」而不是「我嘗試」。所以,我們可以使用我們訓練數據中 「Quiero」被翻譯成「我想要」的頻率,給「我想要」這個翻譯更多的權重。

第3步:生成所有可能的句子,找到最有可能的那句

接下來,我們將使用這些詞塊的每種可能翻譯來組合生成一堆可能的句子。

從第二步中列出的翻譯過的詞塊中,我們可以通過不同組合方式生成將近2,500個不同的句子。下面是一些例子:

I love | to leave | at | the seaside | more tidy.

I mean | to be on | to | the open space | most lovely.

I like | to be |on | per the seaside | more lovely.

I mean | to go | to | the open space | most tidy.

但在真實世界中,因為有不同的語序和詞塊分解方法,所以實際上有更多可能的詞塊組合:

I try | to run | at | the prettiest | open space.

I want | to run | per | the more tidy | open space.

I mean | to forget | at | the tidiest | beach.

I try | to go | per | the more tidy | seaside.

現在需要掃描所有這些生成的句子,找到那個聽起來「最像人話」的句子。

為此,我們將每個生成的句子與來自英語書籍和新聞故事的數百萬個真實句子進行比較。我們擁有的英語文本越多越好。

我們採用這種可能的翻譯:

I try | to leave | per | the most lovely | open space.

很可能沒有人用英語寫過這樣的句子,所以它不會與我們的資料庫任何句子非常相似。我們給這個可能的翻譯設定一個低概率的得分。

但看看下面這個可能的翻譯:

I want | to go | to | the prettiest | beach.

這個句子和我們的訓練集中的句子很類似,所以它將獲得一個高概率的得分。

在嘗試過所有可能的句子之後,我們會選擇那個,既是最有可能的詞塊翻譯,又與真實英語句子最相似,的句子。

我們最後的翻譯將是「I want | to go | to | the prettiest | beach.

我想去最漂亮的海灘。」不錯!

有里程碑意義的統計機器翻譯

當有足夠多的訓練數據的時候,統計機器翻譯系統的性能要優於基於語言規則的系統。 Franz Josef Och基於這些想法並做出了改進,並在21世紀初使用它們構建了Google翻譯。機器翻譯終於可以被全世界使用。

早期的時候,基於概率翻譯的「愚蠢」方法居然比語言學家設計規則系統做的更好,這讓每個人都感到驚訝。這導致了80年代的時候,研究人員會(有點刻薄的)說:

「每當我炒了一個語言學家魷魚的時候,我的翻譯準確度就會上升。」 Frederick Jelinek

統計機器翻譯的局限性

雖然統計機器翻譯系統效果還不錯,但是他們難於構建和維護。每一對需要翻譯的新語言,都需要專業人士對一個全新的多步驟「翻譯流水線」進行調試和修整。

因為構建這些不同的流水線需要做太多工作,所以我們必須進行權衡。如果你要用Google翻譯把喬治亞語翻譯成泰盧固語(印度東部德拉維拉語言),那麼作為一個中間步驟,它必須先翻譯成英語。因為並沒有太多喬治亞到泰盧固語的翻譯需求,所以在這一對語言上投入太多並沒有太大意義。相比於英語翻譯到法語,它可能會使用一個更低級的「翻譯流水線」。

如果我們能讓計算機為我們做所有令人討厭的開發工作,這不更好么?

讓電腦翻譯的更好——無需昂貴的專家們

機器翻譯的核心是一個黑盒系統,它通過查看訓練數據,自己就可以學習如何翻譯。使用統計機器翻譯,人們仍然需要建立和調整多步驟的統計模型。

2014年,KyungHyun Cho的團隊取得了突破。他們發現了一種應用深度學習來構建這種黑盒系統的方法。他們的深度學習模型採用平行語料庫,並使用它來學習如何在無任何人為干預的情況下在這兩種語言之間進行翻譯。

兩個宏偉的方法使這成為可能 - 循 環神經網路和編碼。通過巧妙地結合這兩個想法,我們可以建立一個能夠自學的翻譯系統。

循環神經網路

我們已經在第2章討論過了循環神經網路,讓我們快速回顧一下。

一個常規(非循環)神經網路是泛型機器學習演算法,接收一序列數字並計算結果(基於先前的訓練)。神經網路可以用作一個黑盒子,來解決很多問題。例如,我們可以基於房子的屬性,使用神經網路來計算房屋的近似價格:

但是像大多數機器學習演算法一樣,神經網路是無狀態(Stateless)的。你輸入一序列數字,神經網路計算並輸出結果。如果再次輸入相同的數字,它總是計算出相同的結果。它沒有進行過的計算的記憶。換句話說,2 + 2總是等於4。

一個循環神經網路(Recurrent Neural Network或簡稱RNN)是一個稍微改進過的神經網路的版本,區別是RNN先前的狀態是可以被當做輸入,再次帶入到下一次計算中去。這意味著之前的計算結果會更改未來計算的結果!

人類痛恨他:一個黑科技就讓機器變得更聰明!

我們為什麼要這樣做?無論我們上次計算結果是什麼,2 + 2不應該總是等於4么?

這個技巧允許神經網路學習數據序列中的規律。例如,基於句子的前幾個詞,你可以使用它來預測句子中下一個最有可能的單詞是什麼:

實現智能手機輸入法的「自動更正」的方法之一

當你想要學習數據中的規律時,RNN將會非常有用。因為人類語言其實只是一個大而複雜的「規律」,自然語言處理的各個領域越來越多地使用RNN。

如果你想了解更多關於RNN,你可以閱讀第2章,我們使用了RNN來生成一本海明威寫作風格的假書,然後使用同一個RNN生成了超級馬里奧兄弟的遊戲關卡。

編碼

我們需要回顧的另一個想法是編碼Encoding。在第4章中作為臉部識別的一部分,我們談到了編碼。為了解釋編碼,讓我們稍作調整,了解一下如何用電腦區分兩個人。

當你試圖用電腦區分兩張臉時,你從每張臉收集不同的測量值,並與其他臉部比較這些測量值。例如,我們可以測量耳朵的大小或眼間的間距,比較兩個圖片的測量值以確定他們是否是同一個人。

你可能已經從觀看熱門影視劇CSI當中對這個想法耳熟能詳了(知乎無法上傳太大的GIF,看圖請戳原文)。

把面部特徵轉換為一系列測量值的想法就是編碼的例子之一。我們獲取到原始數據(面部圖片),並將其轉換為代表這張臉的一系列測量值(編碼)。

但是像我們在第4章中看到的,我們不必提出一個具體的面部特徵列表來測量我們自己。相反,我們可以使用神經網路,讓它自動從面部生成測量值。找出哪些測量值能夠區分兩個相似的人,計算機在這方面比我們做的更好:

這些是由神經網路產生的面部特徵測量值,訓練後的該神經網路可以保證不同的數字代表了不同人的面部。

這是我們的編碼。它讓我們用簡單的東西(128個數字)代表非常複雜的東西(一張臉的圖片)。現在比較兩張臉更加容易了,因為我們只需要比較這128個數字而不是比較整張臉的圖像。

你猜怎麼著?我們可以用句子做同樣的事情!我們可以把任何一個句子表達成一系列獨特的編碼:

這一序列數字代表的是英語句子「有趣的機器學習!」。不同的句子將由不同的數字集表示。

為了生成這個編碼,我們將句子輸入到RNN中,一次一個詞。最後一個詞處理之後的最終結果,就將是表示整個句子的數值:

因為RNN具有記憶功能,能夠記住處理過得每個詞,所以它計算的最終編碼表示句子中的所有詞。

棒極了,所以現在我們有一種方法來把一個整個句子表示成一組獨特的數字!我們不知道編碼中的每個數字是什麼意思,但這並不重要。只要每一句話都能由一組獨特的數字標識出來,那麼我們就不需要準確地知道這些數字是如何生成的。

讓我們開始翻譯吧!

好的,所以我們知道怎樣使用RNN去個一句話編碼並生成一組獨特的數字。它有什麼用呢?事情從這兒開始變得酷炫了!

如果我們使用兩個RNNs並將它們首尾相連呢?第一個RNN可以給句子生成編碼。然後,第二RNN遵循相反的邏輯,解碼得到原始句子:

當然,編碼然後再解碼並得到原始語句並沒有太大用處。但是如果(這裡是問題的關鍵),我們訓練第二個RNN,使它解碼成西班牙語而不是英語,這會怎樣?我們可以使用平行語料庫訓練數據來訓練它:

就像這樣,我們有一個通用的方法,將一序列英語單詞轉換成同樣的西班牙語單詞序列!

這是一個強有力的想法:

l 這種方法主要受限於你擁有的訓練數據量和你可以投入的計算機生產力。機器學習研究人員僅僅在在兩年前發明了這個方法,但它已經表現的和統計機器翻譯系統一樣好了,而後者花了20年時間才開發完善。

l 這不依賴於任何關於人類語言規則的了解。演算法自己計算出這些規則。這意味著你不需要專業人士來調整「翻譯流水線」的各個步驟,計算機為你把這個做好了。

l 這種方法適用於幾乎任何種類的序列到序列sequence-to-sequence問題!而且事實證明,許多有趣的問題都實際上是 序列到序列的問題。繼續閱讀了解其他你可以做的酷炫的事!

注意,我們忽略了一些處理真實數據會碰到的問題。例如,如何處理不同長度的輸入和輸出?這還需要一些額外的工作(請參見bucketing和padding)。非常用詞翻譯也是一個問題。

構建你自己的序列到序列翻譯系統

如果你想建立自己的語言翻譯系統,這兒有一個包括可以在英語和法語之間翻譯的TensorFlow的demo。然而,這並不是給膽小鬼或預算有限的人準備的。這仍然是一項新技術,並且資源有限。即使你有一台帶有高級顯卡的高級電腦,可能也需要連續一個月的時間來訓練你自己的語言翻譯系統。

此外,序列到序列語言翻譯技術正在及快速地改進,以至於難以跟上。許多最近的改進(如添加註意機制attention mechanism或上下文跟蹤tracking context)顯著改善了翻譯結果,但這些發展太過前沿,以至於他們甚至還沒有維基百科頁面。如果你想做認真的去做任何序列到序列學習,隨著技術的發展,你需要持續保持更新,。

序列到序列模型的無窮力量

那麼,我們還能用序列到序列模型做什麼呢?

大約一年前,Google的研究人員表示,你可以使用序列到序列模型來建造AI機器人。這個想法是如此簡單,並且令人震驚的是,它真的有效。

首先,他們獲取了一些Google員工和Google技術支持小組之間的聊天記錄。然後他們訓練了序列到序列模型,其中輸入的句子就是僱員的問題,而技術支持團隊的回復是該句子的「翻譯」。

當用戶與機器人進行交互時,他們將使用該系統「翻譯」每個用戶的消息以獲得機器人的響應。

他們最終得到的是一個半智能機器人,(有時)可以回答真正的技術支持問題。下面是一部分用戶和機器人之間的對話示例:

人:連接被拒絕或類似的東西

機器:我可以知道你連接的網路連接的版本嗎?

人:我不確定我知不知道

機器:是網路連接提示任何用戶證書?

人類:是的

機器:你現在在家還是在工作?辦公室?

人:我在家

機器:試試這個。 goto &頁面,然後輸入您的姓名和密碼

人類:完成

機器:嘗試使用&登錄,然後檢查其是否正常工作

人類:是的,現在它在工作!

機器:棒極了。還有什麼我可以幫助你的?

他們還試圖建立一個基於數百萬部電影字幕的聊天機器人。他們的想法是,使用電影角色之間的對話作為一種訓練機器人像人一樣說話的方式。輸入句子是一名角色的一句話,「翻譯」是另一名角色在對話里回應他的內容:

他們得到了很有意思的結果。機器人不僅僅像一個人,更是顯示出了一點點智能化:

人類:我的名字是david。我的名字是什麼?

機器:david。

人:我的名字是約翰。我的名字是什麼?

機器:約翰。

人類:你是領導還是追隨者?

機器:我是領導者。

人類:你是追隨者還是領導者?

機器:我是領導者。

這只是可能性的開始。我們將不局限於將一個句子轉換成另一個句子,同樣,我們製作一個圖像到序列的模型,它可以將圖像轉換為文本!

Google的另一個團隊通過將第一個RNN替換為卷積神經網路(如我們在第3章中所了解的那樣)。這允許輸入是圖片而不是句子,其餘的工作基本相同:

就像這樣,(只要我們有很多很多的訓練數據)我們就可以把圖片變成單詞!

Andrej Karpathy把這個想法進行了拓展,以構建一個通過分別處理圖像的多個區域,來詳細描述圖像的系統:

Andrej Karpathy論文中的圖片

這個想法使得我們可以構建一個,能夠按照奇怪的要求找到特定圖片的圖片搜索引擎:

例子來自image sentence ranking visualize

甚至有研究人員正在研究相反的問題,僅僅基於文本描述產生一個完整的圖片!

從這些例子,你可以開始想像的各種可能性。 到目前為止,序列到序列應用在從語音識別到計算機視覺各個領域。 我猜,明年會有更多的應用。

如果您想更深入地了解序列到序列模型和翻譯,以下是一些推薦的資源:

  • Richard Socher』s CS224D Lecture— Fancy Recurrent Neural Networks for Machine Translation (video)
  • Thang Luong』s CS224D Lecture — Neural Machine Transation (PDF)
  • TensorFlow』s description of Seq2Seq modeling
  • The Deep Learning Book』s chapter on Sequence to Sequence Learning(PDF)


學霸君,利用深度學習技術做到細分領域效果第一,將近兩千萬用戶,每天千萬拍照搜題請求,還在不斷增加中。。


據我所知,現在很多商用語音識別的聲學模型都是用深度學習做的,甚至很多公司都是基於學校的開源包進行再開發,比如有JHU開發的Kaldi就是帶有深度學習功能的語音識別開源庫,包括雲之聲在內的很多語音識別公司都有在用。


強行mark一下

1. 更加成熟的產業級的應用,可能還需要更好的軟硬體結合,或者說,需要硬體實體的支持,比如機器人上,或者集成DL晶元的push;

2. 剛性需求這種東西,單純技術本身想獨立成為剛性需求,真的需要時機,pagerank現在算是剛性的嗎;

3. 套用一句爛大街的化,下一個巨頭公司,應該是AI領域的。那麼,我想在這個時空維度下,AI領域創業公司的核心技術,可能還是會與DL一脈演算法有千絲萬縷的聯繫。

加油吧,努力分一杯羹。


ios10的更新日誌:

本機昨天更新的時候找不到了,隨便在網上截了個圖:

以及上手效果:

照片太丑就不放粗來了


了解到的 國內地平線機器人還有格林深瞳在做相關的技術推廣


http://www.faceplusplus.com


教育產業,生產博士


掃描全能王


圖像識別,這個最基礎,然後什麼小冰啊,小娜啊,然後很多的語音識別軟體,都算是DL的應用,這些基本都是在大公司裡面了,或者是其他系的創業公司,再有就是大學實驗室裡面了,不過有一個BOT大賽,報名還有udacity的優惠券,我覺得還挺不錯的


推薦閱讀:

強化學習演算法都需要建立一個類似Qtable的表格嗎?
如何通過machine learning的手法預測 Google 下一個要關閉的服務是什麼?
如何評價DeepMind的DNI?
語音識別對單個聲學模型需要做 viterbi beam嗎?
語言學研究對機器的語音識別或者語音輸出有實質性的幫助嗎?

TAG:人工智慧 | 機器學習 | 神經網路 | 深度學習DeepLearning |