記者|谷磊
近日,在飛馬網主辦的“FMI人工智慧&大資料高峰論壇”上,來自eBay的資料科學家李睿博士以“NLP(自然語言處理)在eBay的技術實踐”為題做了主題分享,主要涵蓋的應用包含:搜尋(Search)、分類器(Classifiers)、命名實體識別(Name Entity Recognition)、機器翻譯(Machine Translation)等。
(eBay Inc. Tech Lead資料科學家李睿)
以下為李睿博士的演講及Q&A實錄,AI科技大本營做了不改變原意的整理:
李睿:大家好,今天給大家分享一些我在美國工作的一些經驗。
背景介紹
首先自我介紹一下,我的本科和碩士是在浙大唸的,相信在座有很多我的校友們。後來到美國去念的博士,博士論文是用模式識別的方式對影像進行分類。畢業後,就到了工業界來做工程師,當時畢業的時候,模式識別專業很難找工作的,跟現在完全不一樣。陸續做過智慧視訊監控,視訊防抖動,車牌識別等工作。
後來大概在2012年的時候,大資料興起了,我發現模式識別終於有用武之地了,於是到了eBay做大資料,到現在已經有5年多了。在eBay主要做一些分類器,這個分類器背後可以想像用了很多自然語言處理的技術,所以這也是我今天的主題。
簡單給大家介紹一下eBay,我相信大家應該對這個名字不陌生。事實上,eBay和亞馬遜一起,算是美國八大電商之一。它跟亞馬遜最大的差別是亞馬遜自營很多商品,我們像淘寶一樣只是一個平臺,給賣家和買家提供交換的平臺,我們沒有自營店,沒有物流。這是1955年一個叫皮埃爾的工程師做的,他週末在家無事可做,就做這麼一個網頁,上去賣的第一件商品,就是家裡一隻壞了的鐳射筆,居然很快就有人買,後來迅速發展的很大規模。
事實上在1997年的時候,eBay想進入中國市場,由於各種原因,eBay自己的定位也有一些問題,最後很遺憾沒有進入到中國市場。
但是在美國,eBay還是一個大家用的比較多的網站,它有三大塊y業務:
-
Marketplace(類似淘寶)
-
電影票銷售
-
分類廣告
不僅在美國,eBay在20多個國家都有網站,每個國家都用自己的語言,這背後是有機器翻譯的技術在支援。它現在有一億多的活躍的使用者,每一季度大概營收是在兩百億美金左右。eBay的總部在灣區,是整個灣區的高科技公司裡面比較早使用大資料的,我們的很多平臺都是業界比較領先的。現在就講講自然語言處理在eBay有哪些具體的運用場合。
NLP在eBay的應用場景
搜尋
在電商上買東西,最重要的功能是搜尋,而搜尋是由自然語言處理作為技術支撐的。
因為一般使用者搜尋的時候輸入的是沒有結構化的一句話,或者短語,怎麼樣使得它結構化?由於整個關鍵詞是有歧異的,比如說在歐洲,有人輸入iphone orange,他不是要搜尋一個橘色的iphone,他是要搜尋一個叫orange的供應商所繫結的iphone。這裡需要結合使用場合和周圍的關鍵詞,才能夠準確的進行搜尋,從而找到使用者想要的東西。
還有搜尋根分類器,在eBay新舊好壞的商品都是可以賣的。搜尋關鍵字裡面,想買一個新東西還是舊東西,怎麼在商品上知道我是賣新的還是舊的,能夠做正確的匹配。
另外有一些個性化的應用,每個人搜尋的目的是不一樣的。比如說我很喜歡看電影,系統從我的購買歷史中,知道我是愛看電影的人;另外一個人愛看書,所以系統針對我的搜尋結果就應該將電影排在前面,針對另一個人就應該將書的結果放在前面。
NER
NER(Name Entity Recognition)是個很重要的組成部分,這裡給大傢俱體講一下。比如說這是一個簡單的eBay的商品,NER的作用是什麼呢?目的是什麼呢?首先它要儘可能把這個標題上每一個單詞,都分成某一個類別,打成一個標籤。
比如說New,需要把它標成一個condition;Apple是一個品牌;iPhone6s是model;16GB能夠識成容量;AT&T Locked 繫結的就是手機供應商,Space Gray 是顏色,Smartphone是類別。
傳統的NER的做法很簡單,每一個詞就是一個物件,這個詞有多長,裡面含有一些什麼樣的字母的組合,以及前後文,出現在句子的開頭或者結尾,裡面是幾個詞,有了這些特徵之後,就可以訓練一個Classifiers,我知道我是在手機類別下面,我可能會分7類,最早很簡單,用的是邏輯迴歸或者線性迴歸。
後來,神經網路興起之後,大家就用詞向量,谷歌做出來的詞向量,使得這些向量可以代表他的語意,而且向量還可以重新加減,發現效果得到了非常大的提升。當然了,這是用谷歌自己的詞向量,不一定適用於電商,後來我們就把自己的商品作為訓練資料,訓練出了自己的詞向量,效能得到了進一步的提升。
後來這幾年,大家都做神經網路,我們也覺得要試一試看,神經網路是不是表現會更好,答案是肯定的。我們訓練出了自己的神經網路,效能得到了進一步的提升。這些NER能夠在各個領域對使用者體驗進行幫助。就像我提到的搜尋,還有機器翻譯,都能夠極大的幫助提升使用者體驗。
還有一個,可以想象,我想淘寶也是一樣的,實際上背後有一個很大的詞典來描述不同的類別。比如說在手機類別下有哪些品牌呢,有蘋果、三星、華為、小米,有什麼型號呢?層出不窮的型號。這個詞典是怎麼產生的呢?在過去詞典肯定都是人手工輸入的。可是手工輸入顯然是效率很低,而且容易出錯的一個方式,怎麼樣能夠自動的去增加詞典裡面的內容?NER可以很大程度的幫助。
Classifiers
還有一大塊是所謂的分類器——Classifiers。作為一個C2C平臺上的新賣家,使用者要賣一樣東西,但不知道賣在哪個門類下,因為eBay在美國的網站上有一萬六千個分類,有賣食品的,有賣日用品的,有賣電子商品的走廊。每個走廊裡面有細分,到手機的走廊,有手機,有充電器,有保護膜,分的非常細。對於一個新的賣家而言,他不知道放在哪一個門類下面,如果放錯了,別人就找不到他的東西。我們希望能夠幫助這些C2C的使用者,使他們將商品放到正確的門類下。
還有一個,雖然系統給他推薦類別了,但是有的人還是可能會點錯,有的乾脆是故意點錯。有這樣的例子,這是一個很常見的,我聽說淘寶也有類似的問題。使用者在手機的門類下面搜尋iphone,大家都想買便宜的,會按價格排序,從低往高一排,發現全是手機殼,這些人希望通過這種方式,讓別人看得到,我們要做的是防止這種情況的發生。我們希望能夠把這些商品找出來,把它們放在正確的門類下,而且對賣家進行警告、懲罰。
要對商品進行分類,分成附件、主機、套裝。比如說這是一個翻頁筆,這是一個麥克風,比如說這是一臺電腦,這是一部手機,這是稱之為產品的類別,為什麼要做這樣的事情呢?比如說使用者剛買了一個手機,是不是應該推薦他買個殼?買個保護膜?買個充電器?這是個性化的推薦,系統會把相關的商品聯絡在一起進行推薦,所以這是為什麼我們要做分類的問題。
剛才提到的,我輸入一個文學作品,到底是買書還是買電影光碟,都是一樣的。還有就是所謂的評價,我們上面有賣幾百萬,上千萬的商品,這個商品的評價好不好,對買家來說我是買華為的P9還是P10呢?要看看評價。有些說賣家出貨太慢,或者說這個賣家包裝的不好,或者這個賣家反饋非常的不及時,或者是有人甚至在上面說髒話,這些都不是真正的產品的評價。這也是一個分類問題,怎麼樣分出真正的評價,或者是關於賣家的評價,甚至是髒話,這就是一個分類問題。
大家可以想象類似的分類問題還有很多種,這裡不一一贅述,我給大家舉兩個實戰的例子。先講類別推薦,剛才提到我們有1萬6千個類別,如果說隨機推薦的話,準確度是很低的。
在過去10年,eBay一直在這個問題上不斷的改進。因為最早的版本非常簡單,我們雖然有1萬6千個類別,類別的分佈是非常不均勻的,10%的商品都是手機,手機事實上是eBay賣的最好的一個類別。可能有0.0001%是賣一些紀念品之類的,分佈非常的不均勻。
當你畫出柱狀圖之後,每一個類別有一個概率,根據這個概率把一個新的商品分到這個門類下去,這樣很傻對不對?實際上有50%的準確度。後來大家發現這個辦法實際是太土了,就做了一步改進。
這是常用的演算法,也是NLP裡面用的很多的一個演算法。它的原理是當使用者輸入賣的產品的標題之後,它把標題做一個搜尋關鍵詞,利用搜尋引擎找到跟這個產品類似的標題。比如找到一百個產品或者五百個產品,就看這些產品分屬於哪些類別,匹配度最高的產品,他就認為這個產品應該列在這個類別裡面。這是最簡單的方法,但是效果還是不錯的,從50%提高到73%的準確度。
因為我們的類別會經常改,每個季度都會有一些增加或者刪減,它會自適應的適應類別的改變。但是它的壞處也是,剛才那些放錯了類別的商品,會使得準確度下降。於是在2015年的時候我們就做了一些改進。
比如說一百個相似產品裡面,它分屬於10個類別,這10個類別,不能簡單的根據哪個類別的商品多就用哪個類別,而是再加了一層邏輯,用原本屬於這些類別的商品,就是一些比較大的,比較多的資料量做的一個統計語言模型,這個也是NLP的一個重要的技術,統計語言模型。做了一個模型之後,重新對這10個領域進行排序。這一步簡單的做法,就使得精確度從73%提高到了81%,這是一個很簡單的演算法。
同樣的,神經網路興起之後,我們也想,這個技術會不會使得它有更好的效能。我們做了一些卷積神經網路,大家以為,最開始的時候主要是用卷積在影像上抽取的特徵,同樣的思路,也可以應用於文字上,做了之後發現效果果然不錯,從81%提高到了90%的精確度。
但是,這個演算法也有問題,有兩個問題:
-
第一,需要很大的宣傳樣本;
-
第二,我們的類別,每個季度都在變,他變的不多,10個,8個。比如說像現在很流行的,小朋友玩的指尖陀螺,這個東西之後增加了一個類別,如果說你就用舊的分類的模型來分類的話,有可能永遠也不能推薦這個類別給賣家了。
它要每次根據類別的轉換,重新訓練模型,需要像KNN一樣有自適應的功能,這也是我這麼多年的一個體會。有的時候好的效能要有代價的,訓練樣本變得複雜,增加了難度,訓練的時間增加了,訓練時間要好幾天,若干星期。
我的理念是,能用簡單的就不要用複雜的,尤其在工業界裡面越複雜系統越容易出錯,除非效能有非常大的提升值得你這麼去做。
還有我剛才提到的,怎麼樣分辨出它是產品本身,或者是它是一個附件,還有它是不是一個套裝?比如說大家看這三個商品,這個紅框框出來的,他們三個都有一個共同的關鍵字——奧林巴斯。它們也有另外相同的關鍵字是型號和鏡頭。可是大家發現,價格差很多,有1099塊的,有100多塊的,有999塊的,為什麼呢?因為第一個是套裝,它是機身加鏡頭,第二個是鏡頭本身。第三個就是裸機身,不難想象,完全不同的東西,價格是一定會有差別的。
我怎麼去用我們的分類器在背後能識別出他們分別是商品本身,或者是套裝,或者是附件呢?給大傢俱體講一下怎麼做的。
來了一個標題,我把它符號化,首先這個標題叫做Red leather case for iPhone7。符號化之後,因為對應的是一個詞典,Red不在詞典裡面,我就把它標成星號, Leather case我把它標成A,for是相當於一個連線詞,就用數字4來替代,iphone 7 是一個型號,它也是一個產品,所以用P。
有了這個之後,我就把它作為一個統計語言模型,說白了,就是算一個概率,第一個字元是星號的概率,第二個字元是A的概率,第三個字元是4的概率,第四個字元是P的概率,做了語言統計模型之後,熟悉統計語言模型的同學就應該知道,其實它要考慮上下文,不能簡簡單單的只看當前詞或者當前符號的概率。統計語言模型裡面就有所謂的,就是我只關心前一個詞,兩個詞的模型,給定前一個字元是A,下一個字元是4的概率。有人可能覺得這兩個詞不夠,我要三個詞,前面是星號A,下一個字是4的概率,這是最簡單的模型的概念,有了這個統計模型之後我們就可以訓練一個分類器了。
大家會想,為什麼要做符號化這一步呢?很多統計語言模型都是用詞本身,好處是什麼?我同樣的模型,可以用在手機的類別下,可以用在照相機的類別下,可以用在電腦的類別下,結構比較相似,符號化之後,它會用同樣的模型適用於不同的情況,這就是它的好處。這就是統計語言模型在NLP分類器的應用。
剛才講到了之前類別的Classifiers,背後用NLP的各種技術來進行支撐,事實上我相信類似的用途,類似的應用在淘寶也好,京東也好,各種電商應該也是有相似的應用,它不只是用於電商,這些分類器可以擴充到其他的領域。比如說在電子支付,或者是銀行信貸這些,就有所謂的反欺詐。反欺詐其實就是一個簡單的分類問題,你的使用者的行為是正常行為或者是不正常行為。
機器翻譯
機器翻譯,也可以應用於非電商的領域,比如說前段時間碰到新華社的朋友,他就說新華社也有類似的,你要把別的國家的稿件翻譯成中文的。事實上這些年,所有語言處理,文書處理背後,其實都是NLP的各種技術在支撐。所以明白了這個自然語言處理的基本技術,你就可以應用在各行各業裡邊。
我的內容就簡單講到這裡。
Q&A環節
問題1:您好,我想問一下剛剛符號化的過程也是一個虛擬的過程還是說是人工標註的呢?
李睿:這個問題很好。你可以做人工標註,我們最開始是做的人工標註。當然你需要有一個詞典,你要知道在手機類別下,有哪些關鍵字是能夠被標註的,有些是詞典裡面沒有的,那麼就不標。所以這個詞典的構造是人工構造的,當然你可以想象,用NER的技術可以做綠標註,然後人工的去調整,都是可以的。
問題2:請問你們做過實時的識別嗎?可能我們計算量不是那麼複雜,能快速的給出一個響應,但是我要是用深度學習,神經網路這個,要快速的對一個物品進行分類的話,可能這個效率會下降很多,不知道你們考慮做過這種場景沒有?還是隻是說離線的?
李睿:沒有。這個當然是線上的,神經網路它訓練的時候肯定是要變得更長,可能訓練好幾個禮拜。關鍵是你在對新來的商品進行分類的時候,不需要訓練,你只是用這個模型做一個估計。這一步,神經網路時長是很快的,貝葉斯也很快,神經網路運算稍微複雜一點,但是也都是在幾十毫秒的量級,不影響實時性的。
問題3:你好,我想問一下,剛剛你講到上下文處理問題,能再講一下嗎?有沒有一些辦法或者演算法?
李睿:一個辦法是,因為他用條件概率,前面出現一個詞,後面出現另外一個詞,事先用訓練樣本把這些概率算出來,之後來了新的樣本的時候,如果發現了同樣的前後文組合,就會把這個概率算進去。
還有一種做法,這就是所謂的統計語言模型,它是一個馬爾可夫鏈的概念,以一個詞一個詞為單位,就看在你的文章中出現這個詞的概率有多少。新的樣本中如果也出現這個詞,就把這個概率用進去,他把兩個詞的短語或者三個詞的短語做成一個單位,把這個概率也算出來,到時候,當新的樣本里出現了兩個字的短語或者三個字的短語的時候,就把這個概率用進去。各種方式都有,看你的訓練樣本的複雜度來決定。