愛酒人士應該都知道,選紅酒是個需要大量知識儲備的技術活——產(chǎn)地、年份、包裝、飲用場合,每個元素的變化都會對口感產(chǎn)生一定的影響。
TowardsDataScience上一位作者(同時也是輕度葡萄酒飲用者)用一組Kaggle的數(shù)據(jù)集撰寫了一個可以幫忙在網(wǎng)上選紅酒的AI小程序。
該數(shù)據(jù)中包含對葡萄酒的評論,葡萄酒評級(以分數(shù)衡量),以及從WineEnthusiasts網(wǎng)站提取的其他相關信息。他通過訓練一個機器學習模型,實現(xiàn)了根據(jù)基于文本分析預測葡萄酒質(zhì)量。
數(shù)據(jù)集按照日期被劃分為兩組數(shù)據(jù)文件。一組作為訓練集,把一組作為測試集。
以下是整個訓練過程,一起看看。
目標:訓練一個機器學習模型,實現(xiàn)基于文本分析的葡萄酒質(zhì)量預測
WineEnthusiast的用戶會對葡萄酒評分,1表示最差,100表示最好。不幸的是,傳到網(wǎng)站上的都是正面評論,所以數(shù)據(jù)集里分數(shù)值只分布在80-100之間。
這意味著我們所用的這套數(shù)據(jù)并不能很好反應我們在探索的問題。因此,基于這套數(shù)據(jù)所建立的模型只適用于評論較好的酒。在進行分析之前,我們還是得先預習一些圈內(nèi)基本知識。通過從閱讀葡萄酒網(wǎng)站及一些相關資源,我找到一種自認為不錯的分級方案,按照評分進行分級。如下所示。

對于一個最終用戶(白話說就是買葡萄酒的),評分就是他們想要傳達的信息。如果我們按照上述劃分形式,我們就能既減少了葡萄酒信息維度又能保留住質(zhì)量相關信息。
重要決定:我把這個問題定義為一個傾向性分析問題,基于用戶評價判斷葡萄酒屬于Classic(典藏酒)、Superb(豪華酒)、Excellent(酒中上品)、Very Good(優(yōu)質(zhì)酒)、Good(好酒)及Acceptable(湊合吧)中的哪個等級。
實現(xiàn):探索式分析
在這步中,我們會一點點深入理解數(shù)據(jù)。數(shù)據(jù)探索能夠給我們帶來更多解決問題的靈感。數(shù)據(jù)集中除了評論和評分,還有其他信息,如葡萄酒價格、品類(葡萄品種)及產(chǎn)地等。

數(shù)據(jù)預覽
我們可以把上述的其他信息也引入作為特征參數(shù),這樣就能構建出一個更全面的模型來預測葡萄酒質(zhì)量。為了將文字描述與其他特征結合起來進行預測,我們可以創(chuàng)建一個集成學模型(文本分類器就是集成在內(nèi)的一部分);也可以創(chuàng)建一個層級模型,在層級模型中,分類器的輸出會作為一個預測變量。
出于此目的,我們僅研究一下評論與葡萄酒評分之間的關系。
全面地查看數(shù)據(jù)完整性
評分和評論描述這兩列數(shù)據(jù)是完整的。前文提到過,葡萄酒的評分相對都比較高。所以,以我的經(jīng)驗看來,價格也會比較高。

data.describe()的輸出結果

data.info()的輸出結果
查看文本數(shù)據(jù)
評論的內(nèi)容看似來都很清晰。沒有出現(xiàn)任何語法和拼寫錯誤,而且評論的言語都比較簡潔。請看示例:
這款由純葡萄釀制的精品干紅來自奧克維爾酒莊,并在木桶中足足陳釀3年。當如紅櫻桃汁般的果味遇上濃烈的焦糖味,再在精致柔和的單寧的作用下,并散發(fā)著微微薄荷香,真是令人垂涎。綜合從釀造開始至今的各項數(shù)據(jù),它還值得再存放幾年使其越陳越香,推薦品嘗時間2022年-2030年。
還是得有一定的葡萄酒知識才能完全讀懂一些評論。上述示例中,“單寧”是一種能使得葡萄酒口感很干的一種成分。
下圖中我能看到這些常用術語的出現(xiàn)頻率。

最常出現(xiàn)的詞就是“Wine”,出現(xiàn)頻率超過了0.025%
分類前的準備工作
所以,我們可以通過評分,將評論和我們所分的等級關聯(lián)起來。但不巧的是,我們的數(shù)據(jù)并不是很平衡。
沒有落在第4級內(nèi)的評論,大部分評論都落在第1-3級中。數(shù)據(jù)分布不均雖然是個問題,但還是可以通過細分類別或者設置類別權重來處理??墒?,某個類別完全沒數(shù)據(jù),這可得好好想想辦法了。
重要決定:我把第5級和第4級合成一級,這里評分在94-100中的評論就都在這個級別里了。
有必要清洗文本數(shù)據(jù)嗎?
我們可以考慮一下要不要對葡萄酒的評論信息進行清洗或者標準化。做不做這事主要取決于我們所使用的學習算法。如果我們想把每條評論轉(zhuǎn)化成一個向量并作為一對一分類器的輸入,那就得花大量的時間進行文本的標準化處理。另一種方式,如果以多向量的形式順序處理文本內(nèi)容,就用不著過多的標準化了。
順序處理文本(通常每個單詞都有對應的向量,且對應關系都很明確)有利于詞義消歧(一個單詞有多種含義)和識別同義詞。因為評論都是關于葡萄酒的,其中所提到的專業(yè)術語語境基本一致,所以我不太在意詞義消歧和識別同義詞的問題。但是由于評論的內(nèi)容都比較正面,我當心一對一分類器很難區(qū)分出相鄰兩個類別之間的微妙差異。
重要決定:我要使用遞歸神經(jīng)網(wǎng)絡模型,把每條評論轉(zhuǎn)化為向量序列傳到模型中進行預測。這樣我也就保留了文本的原始形式。
相較于使用TF-IDF等方式將文本轉(zhuǎn)為詞向量傳到一對一分類器中,我所選的就會一定更優(yōu)嗎?這并不好說。不過,這可以留到以后試試再作比較。
文本向量化
基于神經(jīng)網(wǎng)絡的單詞向量化通??梢允褂脀ord2vec、GloVe和fastText。對此,我們可以選擇使用自己定義的詞向量映射模型或是預先訓練好的模型。由于我們要處理的文本沒有異常語意,所以我們直接使用訓練好的詞向量模型來理解文字即可。
重要決定:使用預先訓練好的詞向量模型。
但是該使用哪種詞向量映射模型?首先排除掉fastText方案,因為它是通過對單詞的n-gram等級求和來構建詞向量的。而我們處理的文本中不太可能包含標準單詞表以外的詞匯(沒有拼寫錯誤、俚語、縮寫),所以fastText這種方案沒什么優(yōu)勢。
重要決定:使用訓練好的GloVe詞向量。
我們可以下載一些已經(jīng)訓練好的詞向量。我選用已經(jīng)標記好的Common Crawl數(shù)據(jù)集,它包含大量詞匯且區(qū)分大小寫,名為300d的詞向量包含300個維度。
在加載預先訓練好的嵌入之前,我們應該定義一些固定的參數(shù),另外還需下載一些必備的庫文件以及將類別進行one-hot化編碼。
分割訓練集和驗證集
即使我們已經(jīng)有了指定的測試集,我們也最好把訓練數(shù)據(jù)分為訓練集和驗證集,因為這有助于調(diào)參。
我將使用Keras庫中的text_to_sequences函數(shù)來保留文本中的單詞序列。同時,每個單詞會根據(jù)預先訓練好的詞向量模型映射為詞向量。不足100(max_len)個單詞的序列會填充到100個,超過100(max_len)個單詞的序列只截取100個,這樣學習算法的輸入向量長度就一致了。
如果文本中出現(xiàn)了生僻的單詞(沒在訓練好的詞向量模型中),它們會被設定為0向量。
注:如果有大量單詞不在模型的詞庫中,那我們得找個更智能的方式來初始化這些單詞。
訓練分類器
由于文本的內(nèi)容通常比較短,我將選擇使用GRU網(wǎng)絡,而不用LSTM。這樣,文本內(nèi)容越短,我們對內(nèi)存的開銷就越少,而且GRU還能使學習算法效率更高。
我還會使用到早停法,這種方式可以通過驗證集的準確率來判斷是否要繼續(xù)訓練網(wǎng)絡。當驗證集的準確率在幾次訓練后呈現(xiàn)為持續(xù)下降,早停法就會生效以停止訓練。該方法還會將最有權重保存為“checkpoint”(就是本例中的model.h5),當準確度提升后還會更新權重。使用早停法,我們大可對網(wǎng)絡進行多次訓練,而不必擔心出現(xiàn)過擬合。
patience這個參數(shù)可以理解為一個閾值,用來判斷是否要提前結束訓練。patience=3,意味著如果對全樣本進行3次訓練后仍沒有減少損失函數(shù),則執(zhí)行早停。
遞歸神經(jīng)網(wǎng)絡的結構比較簡單。其結構里依次包含著有50個神經(jīng)元的雙向GRU層、池化層、全連接層、dropout層。雙向則意味著網(wǎng)絡能按照單詞出現(xiàn)的正序和逆序都進行學習。
分類器還需優(yōu)化一下對準確率這個指標的定義。因為準確率無法辨別出人類兩種誤判中的差別。對于人的判斷而言,把0級酒預測為4級酒可能比把0級酒預測為1級酒要糟糕得多。對神經(jīng)網(wǎng)絡的判斷而言,卻看不出差別。在未來的實踐中,可以設計一個指標來反映兩者的關系。
是時候評估模型了——祭出我們的測試集
準確率高達64%!
請看下圖中的混淆矩陣。從矩陣中,數(shù)值以百分比的形式反映出我們樣本數(shù)據(jù)中的數(shù)據(jù)不平衡。

必須記住的是,由于數(shù)據(jù)樣本中關于葡萄酒的評論都比較正面,所以這個分類器僅適用于評價較好的葡萄酒。如果未來能拿到一些不一樣數(shù)據(jù)來嘗試,結果想必也會很有意思。
-
模型
+關注
關注
1文章
3810瀏覽量
52253 -
機器學習
+關注
關注
67文章
8560瀏覽量
137201 -
數(shù)據(jù)集
+關注
關注
4文章
1240瀏覽量
26259
原文標題:如何在網(wǎng)上選到一瓶心儀的紅酒?通過文本分析預測葡萄酒的質(zhì)量
文章出處:【微信號:BigDataDigest,微信公眾號:大數(shù)據(jù)文摘】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
50多種適合機器學習和預測應用的API,你的選擇是?(2018年版本)
pyhanlp文本分類與情感分析
NLPIR平臺在文本分類方面的技術解析
改進粒子群優(yōu)化神經(jīng)網(wǎng)絡的葡萄酒質(zhì)量識別
基于深度神經(jīng)網(wǎng)絡的文本分類分析
融合文本分類和摘要的多任務學習摘要模型
訓練一個機器學習模型,實現(xiàn)了根據(jù)基于文本分析預測葡萄酒質(zhì)量
評論