深度解讀谷歌SyntaxNet:全新TensorFlow自然語言處理模型

2021-01-11 雷鋒網

今年夏天,雷鋒網(公眾號:雷鋒網)將在深圳舉辦一場盛況空前的「全球人工智慧與機器人創新大會」(簡稱GAIR)。大會現場,雷鋒網將發布「人工智慧&機器人Top25創新企業榜」榜單。目前,我們正在四處拜訪人工智慧、機器人領域的相關公司,從而篩選最終入選榜單的公司名單。如果你的公司也想加入我們的榜單之中,請聯繫:2020@leiphone.com。

圖片來源:spaCy

編者註:spaCy是一個免費開原始碼庫,Matthew Honnibal是spaCy公司創始人及CTO。他在本科時學習語言學,從未想到未來自己會成為程式設計師。Honnibal獲得雪梨大學計算機科學PHD學位並進行研究員工作後,在2014年離開學術界開始編寫spaCy。本文中,Hobbibal深度解讀了谷歌的自然語言處理模型。

上周,谷歌開源了其基於人工智慧系統Tensorflow的自然語言解析模型分析庫SyntaxNet。在過去的兩年時間裡,谷歌研究人員利用這個分析庫發布了一系列神經網絡分析模型。自從SyntaxNet發布以來,筆者就一直關注它,當然也一直也期待這個軟體能夠開源。不過,本文嘗試圍繞本次開源的相關背景做一些探討,比如本次開源有什麼新料,開源又有何重要意義?
在自然語言文本處理庫中(比如spaCy),SyntaxNet提供了非常重要的模型。如果你把自然語言處理的概念」縮小」一點,就會意識到,這種你正在關注的技術可以拓展計算機的應用範圍。即便是現在,你依然無法編寫軟體去控制一輛汽車,也無法用你的語氣來回復電子郵件,更無法用軟體來分析客戶反饋,或為規避重大商業風險去監測全球新聞。誠然,自然語言處理無法操控無人駕駛汽車,但等下先,語言是人類最與眾不同的能力,人類已經不可避免地掌握了這種技能,但是自然語言處理技術也很優秀,我們甚至難以預測它的潛力。谷歌搜索就是一種自然語言處理應用,所以你會發現這項技術其實已經在改變世界。不過,在筆者看來,自然語言處理還有很大發展空間。

 在更大的價值鏈裡,SyntaxNet其實算是一種較低級別的技術,它就像是一個改良的鑽頭,鑽頭本身無法給你石油,石油本身無法給你提供能量和塑料,能量和塑料本身也無法自動形成某種產品。但如果整個價值鏈的瓶頸是石油開採效率,那麼大幅提高鑽頭技術(雖然是一種底層技術)也是非常重要的。

 在筆者看來,在自然語言處理中語法解析就是一個瓶頸技術,如果它有四、五年時間做優化改進,將會對自然語言處理產生巨大影響。現在你可能會說,我之所以覺得這是個問題,是因為這項技術正從學術研究轉變為商業化應用。但我所能說的就是,這其實是一種逆轉因果關係:正是因為我理解問題的重要性,所以我投入其中,而不是相反。

 好了,我知道即便某個技術遇到瓶頸,但也無法否定其重要性。SyntaxNet如何向前邁一大步呢?如果你已經在Stanford CoreNLP中使用了神經網絡模型,那麼可以肯定的是,你正在使用的其實是一種算法,在設計層面上這種模型和算法其實是完全一致的,但在細節上卻不一樣。使用spaCy語法解析模型也是如此。從概念上講,SyntaxNet的貢獻可能會讓人覺得沒那麼大,畢竟它主要用於試驗,優化和改進。然而,如果谷歌不做這項工作,可能就沒有人會去做。可以說,SyntaxNet為神經網絡模型打開了一扇窗,人們從中看到了一個充滿各種想法創意的美麗風景,研究人員也正忙於探索這一切。當然啦,行業內也會有一種偏見,認為SyntaxNet會讓研究人員看上去(感覺上)更聰明。可能,我們最終會有一個非常準確的語法分析模型,但是這個模型無法實現正確的假設(當然在系統設計的角度準確性是十分重要的),繼而導致未來神經網絡模型的發展越來越慢。在CoreNLP模型說明推出後的六個月,首個SyntaxNet論文才發布出來,他們使用了更大的網絡,更好的激活函數,以及不同的優化方法,不僅如此,SyntaxNet還應用了更具原則性的定向搜索方法,進而取代了目前更多工作。使用 LSTM模型可以實現同樣準確的並行工作,而不是按照SyntaxNet論文裡描述的那樣,同時發布前饋網絡。

 SyntaxNet用來做什麼?

 SyntaxNet語法解析器可以描述一個句子的語法結構,幫助其他應用程式理解這個句子。自然語言會產生很多意想不到的歧義,人們通常可以利用自己的知識過濾掉那些產生歧義的。舉個大家比較喜歡的例子:

 他們吃了加鳳尾魚的披薩(They ate the pizza with anchovies)

                                             

圖片來源:spaCy

正確的語法分析是將「with」和「pizza」聯繫在一起,也就是他們吃了加鳳尾魚的披薩;

圖片來源:spaCy

而不正確的語法分析是將「with」和「eat」聯繫在一起,他們和鳳尾魚一起吃了披薩。


圖片來源:spaCy

如果你想要更形象地感受這個技術,不妨可以看下我們的displaCy demo,或是看一個簡明的,基於規則方法的例子,去了解語法樹是如何計算出來的。「單詞與單詞」關係熟也可以用來識別一些簡單的語法語義,這樣可以便於擴展形成「單詞包」技術(比如word2vec,它是一個將單詞轉換成向量形式的工具。可以把對文本內容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文本語義上的相似度。)舉個例子,我們解析去年Reddit論壇上的每一個評論,相比於嚴格限制空格分割單詞的方法,使用word2vec顯然更有幫助,因為後者可以分析短語,實體和單詞生成一個很不錯的概念圖。

 SyntaxNet是一個訓練和運行句法依賴解析的模型庫。這個模型可以較好地權衡語義分析速度和準確度。可能是為了顯得更時髦些,谷歌給這個模型起了個很酷的名字——Parsey McParseface。希望他們能夠繼續延續這種時髦的命名方式,我覺得未來應該有個更好的方式,讓模型發展時間軸顯得更清楚一些,自然語言處理技術也應如此。

 SyntaxNet帶來多大進步?

 雖然打上了「當今世界上最準確的語義分析」標籤,但Parsey McParseface其實只比最近的相關語義分析研究領先了一點點而已,如今的語義分析模型使用了更加複雜的神經網絡架構,但有更多限制性的參數調整。因此,很多相似的技術也將不再會局限在學術圈。另一方面,如果你關心這種模型是否能夠實實在在做一些事情,那麼現實可能會讓你有些失望了,目前這些技術還無法真正去「做事」。自從去年SyntaxNet論文發布之後,筆者本人一直在斷斷續續的研究神經網絡模型spaCy,但是效果並不太好,我們想要讓spaCy便於安裝,我們想要它在單CPU上快速運行,我們還想要它保持多線程,不過所有這些要求目前都很難實現。

 對於語義分析基準,Parsey McParseface在每秒600個單詞的速度下,準確度可以超過94%。同樣地,spaCy每秒識別1.5萬字的精準度為92.4%。這個準確度可能聽上去不是很高,但對於應用程式來說,其實已經算非常好的了。

 任何預測系統,通常最重要的考慮因素就是基準預測的差異,而不是絕對進度。一個預測天氣的模型,今天和昨天的準確度可能是一樣的,但是它不會增加任何價值。關於依存關係語法分析,大約80%的依賴關係都很簡單明確,這意味著,一個只正確預測那種依附關係的系統正在注入少量額外信息,這種能力不是只查看每個單詞就能做到的,而是要考慮詞和詞之間的關係。

 總而言之,我認為在目前人工智慧的大趨勢下,Parsey McParseface是一個非常好的裡程碑。重要的是,它可以實現多快的速度,以及能實現多麼先進的自然語言處理技術。我覺得以前有很多想法不能實現,但是肯定會有那一刻的到來,一瞬間所有都變得可行了。

 下一步是什麼?

 最讓我興奮的是,通過Parsey McParseface模型設計,自然語言處理技術有了一個非常清晰的方向,這時你可能會說:「好的,如果它有作用就太好了。」2004年,語義分析領域的領軍人物之一 Joakim Nivre表示,這種類型的語法解析器可以一次性讀句子,繼而減少錯誤理解。它適用於任何狀態表達,任何行為集合,任何概率模型架構。舉個例子,如果你解析一個語音識別系統的輸入,你可以讓語法解析器優化語音識別器,在基於句法環境下猜測對方要說的話。如果你使用知識庫,那麼可以擴展狀態表達,使其中包含你的目標語義,讓它學習語法。

 聯合模型和半監督學習一直是自然語言理解研究最完美的體現。從來沒有人懷疑它們的優點——但是如果沒有一個具體的方法,這些技術也只是陳詞濫調罷了。很明顯,理解一個句子需要正確地拆分單詞,但這樣做會帶來很多問題,更難以找到一個滿意的解決方案。此外,一個自然語言理解系統應該可以利用現有的大量未標註文本,這同樣需要不同類型的模型支持。我認為,針對上述兩個問題,一個過渡的神經網絡模型能夠給出答案。你可以學習任何架構,你看到的文本越多,你學習的就越多,而且神經網絡模型也不需要添加任何新參數。

 顯然,我們想要在Parsey McParseface和spaCy模型之間構建一座橋梁,這樣在spaCy應用程式接口的支持下,你才能使用更加準確的模型。不過,對於任何單獨用例,讓這種技術真正發揮作用總是會出現一些變數。特別是每一個應用程式中總會存在不同類型的文本,如果數據模型能調整到域,準確度才能夠有實質提升,比如一些完整編輯的文本,像財務報告,你必須要讓語義分析模型把「市值」這個詞考慮成決定性指標,才能更好地理解全文;但是如果在理解Twitter上的推文時,你讓語義分析模型將「市值」理解成決定性指標,通常是沒有什麼意義的。

 我們的目標就是要提供一系列預先訓練模式,去解決這一問題,讓語義分析模型適應不同的語言和風格。我們也有一些令人非常興奮的想法,儘可能輕鬆地幫助每個用戶訓練屬於自己的自定義模型。我們認為,在自然語言處理中,算法總是衝在最前面,而數據往往滯後。我們希望解決這個問題。

 

via spaCy

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 谷歌剛發布的深度學習動態計算圖工具TensorFlow Fold是什麼?
    一般而言,大部分的深度學習項目都需要對模型的訓練數據進行一定程度的預處理。在這個過程中,各種不同規模和結構的輸入數據(例如不同解析度的圖片數據)將被裁剪成相同的維度和尺寸,然後被壓入棧,等待模型訓練階段的批處理流程。
  • 深度解讀TensorFlow,了解它的最新發展!
    TensorFlow.js 可以為開發者提供高性能的、易於使用的機器學習構建模塊,允許研發人員在瀏覽器上訓練模型,或以推斷模式運行預訓練的模型。TensorFlow.js 不僅可以提供低級的機器學習構建模塊,還可以提供高級的類似 Keras 的 API 來構建神經網絡。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    選自builtin作者:Vihar Kurama機器之心編譯參與:吳攀、杜偉谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。為了幫助開發這些架構,谷歌、Facebook 和 Uber 等科技巨頭已經為 Python 深度學習環境發布了多款框架,這讓人們可以更輕鬆地學習、構建和訓練不同類型的神經網絡。本文將詳細介紹和比較兩種流行的框架: TensorFlow 與 PyTorch。
  • TensorFlow 資源大全中文版
    – 使用卷積神經網絡基於視頻中的物品、地點等來搜索、過濾和描述視頻使用TensorFlow來轉換莎士比亞作品和現代版本的英語 – 實現莎士比亞作品和現代版本的英語的單語轉換聊天機器人 – 一個基於深度學習的聊天機器人colornet – 使用神經網絡給灰度圖像著色圖像生成器 – Show and Tell算法實現Attention
  • Tensorflow 全網最全學習資料匯總之Tensorflow 的入門與安裝【2】
    《TensorFlow學習筆記1:入門》連結:http://www.jeyzhang.com/tensorflow-learning-notes.html本文與上一篇的行文思路基本一致,首先概括了TensorFlow的特性,然後介紹了graph、session、variable 等基本概念的含義,以具體代碼的形式針對每個概念給出了進一步的解釋
  • 關於TensorFlow,你應該了解的9件事
    TensorFlow 下載地址:https://www.tensorflow.org/install/TensorFlow 初始教程:https://www.datacamp.com/community/tutorials/tensorflow-tutorial
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    TensorFlow Serving 是應用於機器學習模型的靈活的高性能服務系統,而 NVIDIA TensorRT 則是一個用以實現高性能深度學習推理的平臺,將二者相結合後,用戶可以輕鬆地實現最佳性能的 GPU 推理。
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    她在 Insight 工作的時候,在安卓系統上用 TensorFlow 部署了一個 WaveNet 模型。本文詳細介紹了部署和實現過程。對於個人和公司來說,存在許多狀況是更希望在本地設備上做深度學習推斷的:想像一下當你在旅行途中沒有可靠的網際網路連結時,或是要處理傳輸數據到雲服務的隱私問題和延遲問題時。
  • 作為TensorFlow的底層語言,你會用C++構建深度神經網絡嗎?
    /configure現在我們要創建接收 TensorFlow 模型代碼的文件。請注意,第一次構建需要花費很長一段時間(10-15 分鐘)。非核心的 C++ TF 代碼在 /tensorflow/cc 中,這是我們創建模型文件的位置,我們也需要 BUILD 文件讓 bazel 可以構建模型。
  • 玩轉TensorFlow?你需要知道這30功能
    如果你關心如何使模型保持最新並監控它們,那麼你可以了解一下這個產品、看看它的論文。地址是:tensorflow.org/tfx/?https://www.tensorflow.org/tfx/data_validation/?hl=zh-cn4)TFX -TensorFlow 變換同樣地,你可能希望用於重新訓練的數據也能被自動進行預處理:對特定特性進行歸一化、將字符串轉換為數值等。Transform 不僅可以對單個樣本進行這些操作,還能批處理數據。
  • 終於來了,TensorFlow 新增官方 Windows 支持
    在谷歌的支持下,TensorFlow 已成為 GitHub 上最受歡迎的機器學習開源項目。同時,谷歌也在 TensorFlow 框架中進行過各類研究、開源了其中一些項目,這些研究涉及到自然語言處理、機器翻譯、圖像描述、圖像分類等等。谷歌在開發者博客上寫到:「原生的 Windows 版 TensorFlow 是自開源以來,我們工作的重中之重。
  • TensorFlow極簡教程:創建、保存和恢復機器學習模型
    在代碼的後半部分,數據需要通過佔位符饋送(feed)入模型。第二點變化是,因為我們的數據量是巨大的,在給定的任意時間我們僅將一個樣本數據傳入模型。每次調用梯度下降操作時,新的數據樣本將被饋送到模型中。通過對數據集進行抽樣,TensorFlow 不需要一次處理整個數據集。
  • 谷歌開放GNMT教程:如何使用TensorFlow構建自己的神經機器翻譯系統
    GitHub 連結:https://github.com/tensorflow/nmt機器翻譯,即跨語言間的自動翻譯,是機器學習社區最活躍的研究領域。在機器翻譯的眾多方法中,序列到序列(sequence-to-sequence,seq2seq)模型 [1, 2] 近期獲得巨大成功。
  • 從系統和代碼實現角度解析TensorFlow的內部實現原理|深度
    摘要2015年11月9日,Google發布深度學習框架TensorFlow並宣布開源,並迅速得到廣泛關注,在圖形分類、音頻處理、推薦系統和自然語言處理等場景下都被大面積推廣。TensorFlow系統更新快速,官方文檔教程齊全,上手快速且簡單易用,支持Python和C++接口。
  • 谷歌發布TensorFlow Lattice:得益於先驗知識,提升模型泛化能力
    雷鋒網(公眾號:雷鋒網) AI科技評論消息,近日另外,比起之前頂尖的單調性學習模型,這些新的TensorFlow點陣estimator 能增加0.1% -- 0.4%的準確度。動手建立模型你或許想要用更深的點陣網絡進行實驗,或者利用部分單調函數(作為深度神經網絡或其他TensorFlow架構的一部分)來進行研究。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。於是,很多開發者就問了,TensorFlow如此受歡迎,如果想入門學習它,要選擇哪本書呢?
  • TensorFlow入門簡介,新手請看這裡!
    TensorFlow是跨平臺的,它幾乎可以運行在所有平臺上,比如GPU、CPU、移動和嵌入式平臺,甚至是張量處理單元[Tensor Processing Units (TPUs)]。谷歌推出過一款AlphaGo人工智慧圍棋程序,其工作原理就是基於「深度學習」,並且是第一個擊敗人類職業選手的人工智慧程序。
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    深度學習,尤其是對抗生成網絡 GAN,已經被成功應用在超分任務上,比如 SRGAN 和 ESRGAN 都可以生成比較真實的超分圖片。那麼在本文裡,我們將介紹一下如何使用TensorFlow Hub上的一個預訓練的 ESRGAN 模型來在一個安卓 app 中生成超分圖片。最終的 app 效果如下圖,我們也已經將完整代碼開源給大家參考。
  • TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比
    Julia: http://github.com/malmaud/TensorFlow.jlNode.js: http://github.com/node-tensorflow/node-tensorflowR: http://github.com/rstudio/tensorflowTensorFlow 也有內置的 TF.Learn 和 TF.Slim
  • 程式設計師1小時完成深度學習Resnet,谷歌tensorflow多次圖像大賽冠軍
    首先採用1*1卷積進行深度降維,減少殘差模塊在深度上的計算量,第二層3*3layer和之前的模塊功能一樣,提取圖像特徵,第三層1*1layer用於維度還原。那麼問題又來了,既然已經經過了3*3卷積,那輸出維度怎麼會一樣呢?