圖片來源:spaCy
編者注:spaCy是一個免費開源代碼庫,Matthew Honnibal是spaCy公司創(chuàng)始人及CTO。他在本科時學(xué)習(xí)語言學(xué),從未想到未來自己會成為程序員。Honnibal獲得悉尼大學(xué)計算機科學(xué)PHD學(xué)位并進行研究員工作后,在2014年離開學(xué)術(shù)界開始編寫spaCy。本文中,Hobbibal深度解讀了谷歌的自然語言處理模型。
上周,谷歌開源了其基于人工智能系統(tǒng)Tensorflow的自然語言解析模型分析庫SyntaxNet。在過去的兩年時間里,谷歌研究人員利用這個分析庫發(fā)布了一系列神經(jīng)網(wǎng)絡(luò)分析模型。自從SyntaxNet發(fā)布以來,筆者就一直關(guān)注它,當(dāng)然也一直也期待這個軟件能夠開源。不過,本文嘗試圍繞本次開源的相關(guān)背景做一些探討,比如本次開源有什么新料,開源又有何重要意義?
在自然語言文本處理庫中(比如spaCy),SyntaxNet提供了非常重要的模型。如果你把自然語言處理的概念”縮小”一點,就會意識到,這種你正在關(guān)注的技術(shù)可以拓展計算機的應(yīng)用范圍。即便是現(xiàn)在,你依然無法編寫軟件去控制一輛汽車,也無法用你的語氣來回復(fù)電子郵件,更無法用軟件來分析客戶反饋,或為規(guī)避重大商業(yè)風(fēng)險去監(jiān)測全球新聞。誠然,自然語言處理無法操控?zé)o人駕駛汽車,但等下先,語言是人類最與眾不同的能力,人類已經(jīng)不可避免地掌握了這種技能,但是自然語言處理技術(shù)也很優(yōu)秀,我們甚至難以預(yù)測它的潛力。谷歌搜索就是一種自然語言處理應(yīng)用,所以你會發(fā)現(xiàn)這項技術(shù)其實已經(jīng)在改變世界。不過,在筆者看來,自然語言處理還有很大發(fā)展空間。
在更大的價值鏈里,SyntaxNet其實算是一種較低級別的技術(shù),它就像是一個改良的鉆頭,鉆頭本身無法給你石油,石油本身無法給你提供能量和塑料,能量和塑料本身也無法自動形成某種產(chǎn)品。但如果整個價值鏈的瓶頸是石油開采效率,那么大幅提高鉆頭技術(shù)(雖然是一種底層技術(shù))也是非常重要的。
在筆者看來,在自然語言處理中語法解析就是一個瓶頸技術(shù),如果它有四、五年時間做優(yōu)化改進,將會對自然語言處理產(chǎn)生巨大影響?,F(xiàn)在你可能會說,我之所以覺得這是個問題,是因為這項技術(shù)正從學(xué)術(shù)研究轉(zhuǎn)變?yōu)樯虡I(yè)化應(yīng)用。但我所能說的就是,這其實是一種逆轉(zhuǎn)因果關(guān)系:正是因為我理解問題的重要性,所以我投入其中,而不是相反。
好了,我知道即便某個技術(shù)遇到瓶頸,但也無法否定其重要性。SyntaxNet如何向前邁一大步呢?如果你已經(jīng)在Stanford CoreNLP中使用了神經(jīng)網(wǎng)絡(luò)模型,那么可以肯定的是,你正在使用的其實是一種算法,在設(shè)計層面上這種模型和算法其實是完全一致的,但在細節(jié)上卻不一樣。使用spaCy語法解析模型也是如此。從概念上講,SyntaxNet的貢獻可能會讓人覺得沒那么大,畢竟它主要用于試驗,優(yōu)化和改進。然而,如果谷歌不做這項工作,可能就沒有人會去做??梢哉f,SyntaxNet為神經(jīng)網(wǎng)絡(luò)模型打開了一扇窗,人們從中看到了一個充滿各種想法創(chuàng)意的美麗風(fēng)景,研究人員也正忙于探索這一切。當(dāng)然啦,行業(yè)內(nèi)也會有一種偏見,認為SyntaxNet會讓研究人員看上去(感覺上)更聰明??赡?,我們最終會有一個非常準確的語法分析模型,但是這個模型無法實現(xiàn)正確的假設(shè)(當(dāng)然在系統(tǒng)設(shè)計的角度準確性是十分重要的),繼而導(dǎo)致未來神經(jīng)網(wǎng)絡(luò)模型的發(fā)展越來越慢。在CoreNLP模型說明推出后的六個月,首個SyntaxNet論文才發(fā)布出來,他們使用了更大的網(wǎng)絡(luò),更好的激活函數(shù),以及不同的優(yōu)化方法,不僅如此,SyntaxNet還應(yīng)用了更具原則性的定向搜索方法,進而取代了目前更多工作。使用 LSTM模型可以實現(xiàn)同樣準確的并行工作,而不是按照SyntaxNet論文里描述的那樣,同時發(fā)布前饋網(wǎng)絡(luò)。
SyntaxNet用來做什么?
SyntaxNet語法解析器可以描述一個句子的語法結(jié)構(gòu),幫助其他應(yīng)用程序理解這個句子。自然語言會產(chǎn)生很多意想不到的歧義,人們通常可以利用自己的知識過濾掉那些產(chǎn)生歧義的。舉個大家比較喜歡的例子:
他們吃了加鳳尾魚的披薩(They ate the pizza with anchovies)
圖片來源:spaCy
正確的語法分析是將“with”和“pizza”聯(lián)系在一起,也就是他們吃了加鳳尾魚的披薩;
圖片來源:spaCy
而不正確的語法分析是將“with”和“eat”聯(lián)系在一起,他們和鳳尾魚一起吃了披薩。
圖片來源:spaCy
如果你想要更形象地感受這個技術(shù),不妨可以看下我們的displaCy demo,或是看一個簡明的,基于規(guī)則方法的例子,去了解語法樹是如何計算出來的。“單詞與單詞”關(guān)系熟也可以用來識別一些簡單的語法語義,這樣可以便于擴展形成“單詞包”技術(shù)(比如word2vec,它是一個將單詞轉(zhuǎn)換成向量形式的工具??梢园褜ξ谋緝?nèi)容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文本語義上的相似度。)舉個例子,我們解析去年Reddit論壇上的每一個評論,相比于嚴格限制空格分割單詞的方法,使用word2vec顯然更有幫助,因為后者可以分析短語,實體和單詞生成一個很不錯的概念圖。
SyntaxNet是一個訓(xùn)練和運行句法依賴解析的模型庫。這個模型可以較好地權(quán)衡語義分析速度和準確度??赡苁菫榱孙@得更時髦些,谷歌給這個模型起了個很酷的名字——Parsey McParseface。希望他們能夠繼續(xù)延續(xù)這種時髦的命名方式,我覺得未來應(yīng)該有個更好的方式,讓模型發(fā)展時間軸顯得更清楚一些,自然語言處理技術(shù)也應(yīng)如此。
SyntaxNet帶來多大進步?
雖然打上了“當(dāng)今世界上最準確的語義分析”標簽,但Parsey McParseface其實只比最近的相關(guān)語義分析研究領(lǐng)先了一點點而已,如今的語義分析模型使用了更加復(fù)雜的神經(jīng)網(wǎng)絡(luò)架構(gòu),但有更多限制性的參數(shù)調(diào)整。因此,很多相似的技術(shù)也將不再會局限在學(xué)術(shù)圈。另一方面,如果你關(guān)心這種模型是否能夠?qū)崒嵲谠谧鲆恍┦虑?,那么現(xiàn)實可能會讓你有些失望了,目前這些技術(shù)還無法真正去“做事”。自從去年SyntaxNet論文發(fā)布之后,筆者本人一直在斷斷續(xù)續(xù)的研究神經(jīng)網(wǎng)絡(luò)模型spaCy,但是效果并不太好,我們想要讓spaCy便于安裝,我們想要它在單CPU上快速運行,我們還想要它保持多線程,不過所有這些要求目前都很難實現(xiàn)。
對于語義分析基準,Parsey McParseface在每秒600個單詞的速度下,準確度可以超過94%。同樣地,spaCy每秒識別1.5萬字的精準度為92.4%。這個準確度可能聽上去不是很高,但對于應(yīng)用程序來說,其實已經(jīng)算非常好的了。
任何預(yù)測系統(tǒng),通常最重要的考慮因素就是基準預(yù)測的差異,而不是絕對進度。一個預(yù)測天氣的模型,今天和昨天的準確度可能是一樣的,但是它不會增加任何價值。關(guān)于依存關(guān)系語法分析,大約80%的依賴關(guān)系都很簡單明確,這意味著,一個只正確預(yù)測那種依附關(guān)系的系統(tǒng)正在注入少量額外信息,這種能力不是只查看每個單詞就能做到的,而是要考慮詞和詞之間的關(guān)系。
總而言之,我認為在目前人工智能的大趨勢下,Parsey McParseface是一個非常好的里程碑。重要的是,它可以實現(xiàn)多快的速度,以及能實現(xiàn)多么先進的自然語言處理技術(shù)。我覺得以前有很多想法不能實現(xiàn),但是肯定會有那一刻的到來,一瞬間所有都變得可行了。
下一步是什么?
最讓我興奮的是,通過Parsey McParseface模型設(shè)計,自然語言處理技術(shù)有了一個非常清晰的方向,這時你可能會說:“好的,如果它有作用就太好了。”2004年,語義分析領(lǐng)域的領(lǐng)軍人物之一 Joakim Nivre表示,這種類型的語法解析器可以一次性讀句子,繼而減少錯誤理解。它適用于任何狀態(tài)表達,任何行為集合,任何概率模型架構(gòu)。舉個例子,如果你解析一個語音識別系統(tǒng)的輸入,你可以讓語法解析器優(yōu)化語音識別器,在基于句法環(huán)境下猜測對方要說的話。如果你使用知識庫,那么可以擴展狀態(tài)表達,使其中包含你的目標語義,讓它學(xué)習(xí)語法。
聯(lián)合模型和半監(jiān)督學(xué)習(xí)一直是自然語言理解研究最完美的體現(xiàn)。從來沒有人懷疑它們的優(yōu)點——但是如果沒有一個具體的方法,這些技術(shù)也只是陳詞濫調(diào)罷了。很明顯,理解一個句子需要正確地拆分單詞,但這樣做會帶來很多問題,更難以找到一個滿意的解決方案。此外,一個自然語言理解系統(tǒng)應(yīng)該可以利用現(xiàn)有的大量未標注文本,這同樣需要不同類型的模型支持。我認為,針對上述兩個問題,一個過渡的神經(jīng)網(wǎng)絡(luò)模型能夠給出答案。你可以學(xué)習(xí)任何架構(gòu),你看到的文本越多,你學(xué)習(xí)的就越多,而且神經(jīng)網(wǎng)絡(luò)模型也不需要添加任何新參數(shù)。
顯然,我們想要在Parsey McParseface和spaCy模型之間構(gòu)建一座橋梁,這樣在spaCy應(yīng)用程序接口的支持下,你才能使用更加準確的模型。不過,對于任何單獨用例,讓這種技術(shù)真正發(fā)揮作用總是會出現(xiàn)一些變數(shù)。特別是每一個應(yīng)用程序中總會存在不同類型的文本,如果數(shù)據(jù)模型能調(diào)整到域,準確度才能夠有實質(zhì)提升,比如一些完整編輯的文本,像財務(wù)報告,你必須要讓語義分析模型把“市值”這個詞考慮成決定性指標,才能更好地理解全文;但是如果在理解Twitter上的推文時,你讓語義分析模型將“市值”理解成決定性指標,通常是沒有什么意義的。
我們的目標就是要提供一系列預(yù)先訓(xùn)練模式,去解決這一問題,讓語義分析模型適應(yīng)不同的語言和風(fēng)格。我們也有一些令人非常興奮的想法,盡可能輕松地幫助每個用戶訓(xùn)練屬于自己的自定義模型。我們認為,在自然語言處理中,算法總是沖在最前面,而數(shù)據(jù)往往滯后。我們希望解決這個問題。