鋼鐵直男的救世主來了!讓AI告訴你妹子到底是啥意思

多喝熱水。

你別化妝,化妝對身體不好。

男人就該像個男人,女人就要像個女人!

高富帥只是貪圖你的美貌,我這個矮矬窮對你才是真愛。

你居然不知道人工智慧?

你就不怕未來自己被AI奴役嘛?

能給我發個照片嘛?沒有就自拍呀!

你為什麼不愛我?

有人說治療直男癌的最好辦法是找個女朋友,然後女朋友就可以慢慢的調教直男,讓直男浪漫起來。可這不是先有蛋還是先有雞的問題嘛?直男癌患者的女朋友?不存在的啊。

說出來你可能不信,雖然我長得又帥個子又高,每天出門坐上百萬的車(比亞迪K9A),但很長一段時間我都被稱之為"鋼鐵直男"。沒有一個妹子能和我說話超過五分鐘,還記得後來我統計聊天記錄的時候,出現次數最多的詞語是「呵呵」。以前,我聊天的畫風都是這樣的:

最最關鍵的是,我當時覺得我說的都沒毛病啊,這是對妹子的關心呀,妹子回復我也都很積極,怎麼後面就都把我拉黑了呢?而且,你都同意我加你好友了,以後不就發展成老婆了嗎?於是,加一個妹子,被拉黑一個,就這樣過了好多年。我開始意識到這個事情似乎不對呀,是不是我說話的方式有問題?是不是我壓根沒理解妹子的意思?

本著技術改變命運的原則,我決定做一個AI系統,幫我聊天到不至於,至少給我個判斷:妹子說這句話的時候到底是個啥心情?這樣,時間久了,我總能學會怎麼討妹子開心。

模型框架

簡單的說,這就是個文本分類模型。輸入一句話(妹子回復你的消息,如果就回復了兩個字,建議再多加幾條……),模型就會返回一個結果,告訴你說這句話的妹子是開心的還是不開心的。初級模型我就打算做這兩個分類,後面有時間再多弄一些心情狀態。

在人工智慧領域,這種類型的場景都屬於NLP(自然語言處理),簡單的說就是讓機器理解語言(這邊我不會涉及太多技術細節,想深入了解技術的可以點我!)這時候有兩個問題擺在面前:其一是計算機只知道0和1,怎麼理解語言呢?其二是很多話都有歧義,而且和上下文都有關係,這個如何解決?

其實,這正是我要介紹的框架部分:

簡單的說,為了讓計算機懂語言,我們先要把語言轉換成數值,這時候就要用到word2vec這個東西啦(後面會有純技術分享)。然後為了保證計算機在學習的時候能聯繫到上下文,我們要用LSTM這個模型來進行訓練。

數據收集

我們主要收集兩部分的數據,一部分是高興的話,一部分是不高興的話。針對這個模型,最好的數據當然是所有人把聊天記錄都導出,然後人工標註每句話是高興還是不高興。單顯然,這樣做成本太高了,費時費力。於是,我準備了如下數據源,大部分都是通過爬蟲爬來的:

  1. 淘寶、JD、網易嚴選三個不同性質的購物平台評論,一星或者直接差評的都是不開心,五星都是開心。
  2. 單純購物向的數據可能會造成某種偏差,而且有些人說話不會那麼直接,會不帶髒字的罵人、文藝范兒的罵人,所以我去了豆瓣電影,同樣分一星、五星進行爬取。
  3. 當然了,我們的目的是聊天情感分析,最重要的自然是聊天數據了。我本來導出了我和我女朋友的聊天數據,結果都是「么么噠」,「愛你喲」這種字眼,顯然不能分析。於是,我就讓其他小夥伴在實驗室角色扮演~瘋狂模擬情侶聊天……說實話,收集了不少數據(隱私聊天數據就不上傳了)。

訓練模型

訓練模型之前,要對數據做清洗,我們爬的數據會有一些亂碼啊、異常符號這樣的東西,我們是需要用正則過濾掉的。另外,文本模型由於要做文本的向量化處理(one-hot、word2vec等),我們要用jieba先把文本進行分詞,放在一起。然後得到一個詞語字典,包含每個詞語的索引,詞向量以及每個句子所對應的詞語索引。這個過程中用到了兩個比較重要的包:gensim和jieba。

處理完後,我們需要定義一個LSTM網路,和之前做圖片不同,語言模型的網路一般不會特別深,而且多了一個CNN不會用到的Embedding層。其他像dropout、softmax、sigmoid等層也是很常見的。

我就跑了7個Epoch,說實話,GPU就是爽,上個洗手間就跑完了,acc就已經到了0.93。

然後我們看看在測試集上的表現,這邊包含了只針對「高興」的樣本的準確率測試和只針對「不高興」的樣本的準確率測試……代碼和結果如下:

正好,TP的值要低一些,這樣,寧可我們多提煉點話,也不能說錯呀。

實際語言測試

我們知道,測試圖片的時候,讀進來的圖片都會別分解成像素,然後根據訓練好模型的權重進行計算,得到一個值,然後通過閾值判斷是那個值。

文本的也差不多,輸入的句子要先被分詞,然後需要走一下之前的word2vec部分,將文本向量化,然後輸入到模型進行計算,得到一個結果。

每個輸入都要在這兒先處理:

然後通過這個函數進行預測,得到「高興」或者「不高興」

我輸入了「你這個傻逼,別煩我」,「好呀,我也挺想和你一起去看電影的」進行測試,結果如下:

親測效果奇佳~我們也會不斷收集新的數據持續優化這個模型,本來是要做成小程序的,結果微信不讓讀聊天記錄~可以查看我們,自己學會自己做一個。

一起學AIzhuanlan.zhihu.com圖標

或者加入QQ群:587030584

微信公眾號:yiqixue_ai


推薦閱讀:

如何六個月內學會深度學習
基於不平衡樣本的推薦演算法研究
BOW 演算法,被CNN 打爆之前的王者
scikit-learn實戰
機器學習預測地震,信得過嗎?

TAG:深度學習DeepLearning | 人工智慧 | 機器學習 |