閱讀931 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【雲棲TechDay有問必答】NLP技術的應用及思考

2017年4月22日在雲棲TechDay第35期,阿裏巴巴iDST 自然語言處理部總監上乘帶來題為“NLP技術的應用及思考”,現場一問一答張顯了專家專業理論和技術實踐的落地。這期是聽到“論文”一詞最多,本期有問必答第一個問題很典型的應用場景。

NLP技術的應用及思考(演講全文整理)https://yq.aliyun.com/articles/78031?spm=5176.8091938.0.0.utD2Ny

No1.我有兩個問題,我現在的工作在處理“文摘”,根據一篇長文章整理出短的摘要內容。第一個問題是目前阿裏的AliNLP平台,能不能提供一些Tool?第二個問題是在整理文摘時,如上乘提到語言的最大特點是因人而異,一篇很長的文章,文科生看和理科生看,整理的摘要需要不一樣,如果想做到因人而異的摘要內容有什麼建議或方法?有一些開源的工具的都是針對英文的,如何解決?

阿裏巴巴iDST上乘:文摘肯定需要很多底層的分析,如能夠把一個句子像我們剛講的電商領域的語料分析一樣,做到很深度的分析,會對整理文摘是有幫助的。可以找到一些開源工具做嚐試,AliNLP平台暫時還沒有對外開放。第二個問題,做文摘傳統的思路有兩種,第一種是句子摘取,如一個文章裏麵有100個句子,一個一個去分析哪一個句子最重要的,每次選擇最重要的一個句子出來,選擇兩三句出來,放在一起看成一個摘要,這是比較簡單的做法,甚至都不需要關注流利度的問題。更好一種方式叫做理解式的文摘,是需要把文章真正的讀懂,然後生成一些新的句子,句子完整的在整個平台裏麵是沒有出現過的,這其實是很困難的。現在這方麵有些很多人在探索,做一些深度學習的叫End2End Learning,可以去搜索這樣的文章有很多學習了解下。最近今年的ACL2017裏麵有很多文章在探討這個問題,實際上需要找一些深度學習的框架,嚐試一些開源的工具。把原文作為一個輸入,文摘作為一個輸出,自己構建大量的pairs,學習怎麼做出來做一些新嚐試,這是一種思路。現在很多工具都可以搭建這樣的方法,但它的缺點是,分析出來的句子可能讀起來並不通順,或者說講什麼完全不知道,有這種可能。前麵這個摘取式的,雖然說結果不能理解全篇的內容,但它是可讀的,可讀性非常強,所以現在商用的文摘係統全是前麵這種方法,在做一些流利度的改寫這樣就更好了。
對於理科生和文科生輸出不同摘要,涉及到一個文摘個性化的算法。可以找文科生和理科生來寫不同的文摘,對比他們的文摘有什麼樣的風格,把這個風格用模型的方式抽象出來,再把這個模型的能力放入到深層算法裏麵,會使得文摘具有多樣性。還有一種方式,對文章的每一個句子,判斷它究竟是文科生關注的句子還是理科生關注的句子。這種情況下在摘取的時候做些適當性的差異,也可以做出個性化摘要的效果。這個問題其實是很難的問題,剛才我們講了文摘也是自然語言處理的四大AI完全問題之一,真正解決是不可能的,隻能是做一些模擬和嚐試。大家可以多找一些論文讀一讀,還是有很多很好的解決方法。
有好幾個平台的開源工具有針對中文的可以去做一些研發,可以嚐試哈工大已經開源的LTP(語言技術平台),還有比如分詞上可以嚐試ICTClass等等這樣的平台。它們都是開源的,但是沒有辦法去做很深度的定製,最本質的解決方案還是要去學習算法怎麼做?自己去開發,或者不斷優化底層的算法。

No2.我的問題可能跟今天分享的內容關係不大,想請教一下老師能力上的一個問題,剛才看到有一個很有趣的例子:搜索詞,可能一開始從搜索詞變成一個毫無理解能力的非自然語言詞。比如說看過的一些美劇,可能是句未來的話,有時候不管從語音上麵還是文字上麵還是發表的內容中,有各種各樣的監控,這樣可能會不會導致一種行為,可能是對實事的判斷或者是有些想法的問題,可能會變成非自然語言的表達,用其他的方式表達會造成這樣的現象,對於這個方麵有些什麼看法?

阿裏巴巴iDST上乘:這個問題很有挑戰性,剛才講了語言會變化,某一些人對於某一類特殊的場景會用某一些特殊的官方語言來表達,其他話會相對比較自然,假設對話的兩個都是淘寶的賣家,一起討論標題怎麼寫。也許會將一些例子,討論過程中其他話就會比較正常,但混在一起對話,機器再去理解就會很困難。對於這種場景有一個比較初步的解決方法,做一些片斷式的場景判斷。關於英文,比如電影的字幕,它一定是分場景的,一段一段的對話。這段講逛街,那段講買衣服、講吃東西,要做場景一段一段切分判斷之後,再用內部的場景結合這個具體的算法,具體的適配算法去解決這樣的問題。這是一種解決的方案。但是最終極的解決方案,我們要對兩個人聊天的淘寶賣家所涉及的話題,通常會有一些什麼樣場景的細分,要做很深度的理解,然後用統一模型去解決。如果逐漸細分,細分到一定程度它是永無止境的,就像做分治算法一樣,分治到一定程度,做太細就做不了了,這個問題其實很難,回頭我們可以再當麵探討一下。

No3實體關係挖掘在AliNLP平台是否有研究過,深度學習在這個裏麵有沒有一些結合的應用?

阿裏巴巴iDST上乘:實體關係挖掘是知識圖譜構建中很核心的一個問題,其實已經做了很多嚐試,但今天沒有講到。實體關係挖掘主要分為兩個步驟來做,第一就是先要識別出來,句子裏麵有什麼樣的實體,第二就是人和實體之間的關係怎麼識別?前一個問題是需要建一個實體庫,用基於規則的方式去做處理。第二個要構建一些實體識別的訓練語料,用模型的方式解決,利用模型和規則的方式做融合,才會使得實體識別做的能足夠好。對關係層麵需要對這兩種實體之間的某一些關係,最好先做預定義,比如先定義有幾十種關係,每一種關係大概的Pattern是什麼樣子?或者說每一種關係的大概的那個就是它關係兩個實體之間的context是什麼,再做訓練模型進行訓練,這樣可以做到一定的效果,深度學習對於實體關係學習是非常重要的。可以關注一下ACL,ACL有一個開源的一個論文庫叫ACL Anthology,裏麵有上萬篇論文搜索下,裏麵有很多論文在探討此問題:實體關係之後在深度學習上怎麼做?所謂深度學習無外乎是說,把context做representition的表示之後,向量化以便使context更加的語義化,然後在實體關係判別過程當中,不管是層次化的分類還是多分類,逐級二分類的方式來做,在做特征構建和分類算法的時候,使用深度學習去做特征表示,還是用深度學習去做最終的端到端的學習,都可以做嚐試。也可以用fasText去試一試,也可以用DNN,或者RNN、CNN等等,LSTM、還有GRU等等。

No4.目前深度學習在context上的向量化表示,跟傳統的word to vector,它是淺層的神經網絡,差別有多大?word to vector表示出來的已經有一些語義,深度的用DNN、RNN、LSTM這些差異又有多大?是否有研究過能提升多少?

阿裏巴巴iDST上乘:好問題,其實word to vector本身也是深度學習中的一種很好的嚐試,在整個自然語言處理裏麵,最早引入深度學習就是從word to vector開始的,裏麵有幾種比較經典的算法.更深入的事情,word to vector會出現這樣一種問題,比如說”蘋果”這個詞,如果用word to vector測定出來結果,向量表示它是唯一的,但是都知道“蘋果”有多種意思,可能是水果,可能是品牌名稱,向量究竟是傾向於表示品牌還是表示水果呢?有些人已經在探索一種方式,對word to vector出來的結果還要考慮它的語義類別,在不同的語義類別上有不同的vector,這可以做的更細。但是這種更細的做法並不是用了lstm或者RNN去做的,而是把問題描述成一個新的框架,在裏麵加入一些新的考慮。用分類的方法來做,如果說要一刀切,比如要用錘子找釘子的思路去做,現在有了RNN的錘子,能不能把word to vector的錘子換掉?其實不可以的,它是不同的工具,工具一定是有能力範疇的,最好從問題的本質出發,把向量表示的學習的方式做的更好,這方麵在中科院何世柱老師做了很深入的研究,可以搜索調他講的報告,可以去做一些分析。阿裏巴巴也在做這方麵的探索,用哪一種表示做的更好?現在比較好的一種表示方法是DSSM,它考慮的是更多此類信息,而且動態化。比單純的word to vector要考慮的更深入一點,模型之間本身沒有優劣之分,word to vector目前也是整個自然語言處理領域裏麵深度學習最好用的工具,它很容易上手,但確實因為太容易上手了,使得它更深入去定製就相對困難一點,大家可以做多的嚐試,DSSM是微軟最早發明的,裏麵也有很好的論文和工具。

** NO.5分享中所講的語料庫,同義詞、近義詞庫還有字典,這些字典是怎麼得出來的呢?**

阿裏巴巴iDST上乘:各種各樣的同義詞、上下位、語義詞庫,還有情感詞庫怎麼得來的?首先算法,假設我們今天什麼都沒有,從零開始做,首先根據業務至少拍腦袋想出來一些詞,想出來的詞可以作為種子,用bootstrap的算法,或者用自動擴展的思路去搭建詞庫,比如說應該知道種子詞在什麼上下文或者什麼樣的意思,可以先把上下文片斷拿出來,把種子詞替換成一個X。然後X形成的pattern,在更大的海量語料庫裏麵再做新一輪的抽取,抽取出來某種關係,大量的X,然後出現Y、Z,然後再把Y、Z擴展出來若幹詞,再放到另外新一輪的語料中進行迭代,擴展出來很多pattern。pattern和種子詞一輪一輪的迭代,就會出現大量的信息。但是隨著迭代增多後,會使得擴展的質量變差,這時要找一個threshold,找個平衡點。確認好平衡點後才會使得最終詞庫的質量比較高,但如果要商用的話,一定要一條一條查看一遍,否則一旦某一條有錯誤會給造成很大的損失,這是第一種做法。
第二種做法也可以找專業的專家來編輯,要保證效果足夠好,確實要雇傭幾個專業人士天天處理這個事。這方法看起來比較笨,但是有比較好的效果。但是在處理的過程中開發人員可以做各種各樣的工具,來輔助把這個事情越做越快、越做越好,甚至形成一個產品。可以再去做任何事情,隻要做類似的事情,都可以就按照這個方法找幾個人快速的做這完事情。很多人正在做這種事情,以翻譯為例,翻譯現在最火爆的市場不是自動翻譯,是人工輔助機器翻譯,找一堆人來幫助機器快速的翻譯,或者機器翻譯好之後人工怎麼快速的校對,類似的思路可以做很多嚐試。現在網上也有很多開源的辭典可以用,可以把它們當做一個很好的輸入再擴展,這個一定要結合自己的領域來定製,這是最快的方式。要一蹴而就或者直接拿過來就可以用,目前幾乎是不可能的。

點擊查看更多雲棲TechDay的往期視頻:https://yq.aliyun.com/edu/lessonTagSearch/cid_695-tagid_13553?spm=5176.8643059.740229.6.6LaMOR

最後更新:2017-05-19 14:05:53

  上一篇:go  《Spring Boot官方指南》(二)入門(二)
  下一篇:go  《Spring Boot官方指南》(二)入門(一)