你有沒有過這種體驗?標(biāo)題挺吸引人,點進去看是廣告,剛想評論心儀文章,評論區(qū)已經(jīng)被噴子占領(lǐng)。類似這樣的不良社區(qū)氛圍非常傷害大家的閱讀體驗。例如美團收購摩拜的事件,一篇販賣焦慮的文章《摩拜創(chuàng)始人套現(xiàn)15億背后,你的同齡人,正在拋棄你》掃蕩了朋友圈,但同樣的事件,在知乎上“怎么看待美團收購摩拜”的問題下,高贊回答都是客觀理性的分析,讀者在評論區(qū)的互動也異?;钴S卻不是對立攻擊。
為什么知乎上還能有這樣的理性討論?客觀、理性和專業(yè)的用戶、回答者是關(guān)鍵,而用戶愿意在知乎而非其他平臺客觀討論的基礎(chǔ),則是其社區(qū)環(huán)境、崇尚專業(yè)和友善的氛圍所決定的,這也正是知乎對比其他平臺的最大優(yōu)勢之一。
隨著AI 時代來臨,算法被廣泛用于內(nèi)容推薦和廣告變現(xiàn)上,算法推薦對內(nèi)容氛圍的破壞正在引發(fā)業(yè)界擔(dān)憂和反思。近期,快手和今日頭條就因為“算法應(yīng)當(dāng)有怎樣的價值觀”而廣受輿論關(guān)注,4月9日下午,今日頭條等四款應(yīng)用遭遇全網(wǎng)下架處理。
同樣是算法,全行業(yè)都在研究用戶喜好,拼命推薦內(nèi)容,而知乎似乎更關(guān)注內(nèi)容生產(chǎn)的本身,將算法大規(guī)模應(yīng)用于社區(qū)氛圍的管理,以生產(chǎn)出有價值和對用戶有幫助的內(nèi)容。知乎通過開發(fā)“悟空”、“瓦力”等算法機器人7X24小時管理社區(qū)氛圍,譬如,“瓦力”每天處理內(nèi)容近萬條,對于舉報上來的不友善內(nèi)容,0. 3 秒內(nèi)進行處理。這個速度在整個行業(yè)都是名列前茅的。
知乎也決心加強技術(shù)能力的建設(shè),在技術(shù)圈,今年知乎大力招募算法人才的消息已經(jīng)不脛而走,明顯已開始發(fā)力。而知乎在大眾和互聯(lián)網(wǎng)圈的品牌效應(yīng)也是驚人,身邊不少技術(shù)朋友表現(xiàn)出了興趣。下面我們可以從知乎技術(shù)團隊發(fā)布的專欄了解下這家公司的算法思路和應(yīng)用,這幾篇文章詳細(xì)介紹了知乎算法是如何通過識別垃圾廣告導(dǎo)流信息,處理人身攻擊類內(nèi)容,或是識別答非所問等方面來維護平臺氛圍和內(nèi)容質(zhì)量的,其中不少思路值得業(yè)內(nèi)工程師們借鑒。(以下內(nèi)容知乎技術(shù)授權(quán)“吳懟懟”發(fā)布,如有不妥之處歡迎指正討論)
以下為Quote
算法在社區(qū)氛圍的應(yīng)用(一):識別垃圾廣告導(dǎo)流信息
近期,我們發(fā)現(xiàn)社區(qū)內(nèi)出現(xiàn)了垃圾廣告的導(dǎo)流內(nèi)容,影響用戶體驗,破壞認(rèn)真、專業(yè)和友善的社區(qū)氛圍。為了解決這種情況,我們進行了大量努力和探索。最開始在識別導(dǎo)流信息上采用的是干擾轉(zhuǎn)換+正則匹配+匹配項回溯的方式進行異常導(dǎo)流信息的識別與控制,取得了很好的效果。
但是我們發(fā)現(xiàn),隨著我們處理這些內(nèi)容的同時,他們正在逐步增加導(dǎo)流信息的各種變體,常見的有以下幾種方式:第一種變體是導(dǎo)流前綴的變化,如 QQ 導(dǎo)流前綴變化成企鵝,「騰順」等等;第二變體是不使用前綴,如退款 123377281;第三種變體是導(dǎo)流中隨機插入非特殊字符,如 319xxxx053xxxx7178。我們對這些變體進行了收集整理和分析。
通過對典型導(dǎo)流樣本的分析,我們發(fā)現(xiàn)盡管導(dǎo)流信息變體在不斷演化,但是它們所在的上下文變化并不明顯。因此,我們嘗試通過序列標(biāo)注的方式來識別導(dǎo)流內(nèi)容,提高算法的識別準(zhǔn)確度。
模型
常用的序列標(biāo)注算法,有 HMM、CRF、RNN、BILSTM-CRF 等。BILSTM-CRF 在多個自然語言序列標(biāo)注問題(NER、POS)上都表現(xiàn)優(yōu)秀,同時,通過實驗,我們也發(fā)現(xiàn) BILSTM-CRF 表現(xiàn)優(yōu)于其他模型。
網(wǎng)絡(luò)結(jié)構(gòu)
BILSTM-CRF 模型結(jié)構(gòu)如下圖所示。
第一層為 Embedding 層,將輸入文本轉(zhuǎn)換為詞向量表示。
第二層為雙向 LSTM 層。LSTM 具有強大的序列建模能力,能夠捕捉長遠(yuǎn)的上下文信息,同時還擁有神經(jīng)網(wǎng)絡(luò)擬合非線性的能力。相比單向的 LSTM,雙向 LSTM 不僅能夠利用以前的上下文信息,還能利用未來的上下文信息。
第三層為一個全連接層。作用是將上一層的輸出,映射為 [T,C] 的向量,T為輸入序列長度,C為標(biāo)簽數(shù)量。輸出的也就是每個 timestep 對應(yīng)的狀態(tài) score。
最后一層為 linear-chain CRF 層。CRF 計算的是一種聯(lián)合概率,優(yōu)化的是整個序列(最終目標(biāo)),而不是將每個時刻的最優(yōu)拼接起來。在 CRF 層,使用 viterbi 解碼算法從狀態(tài) score 和轉(zhuǎn)移矩陣中解碼得到輸出狀態(tài)序列。
BILSTM-CRF 模型同時結(jié)合了 LSTM 和 CRF 的優(yōu)點,使得其在序列標(biāo)注任務(wù)上具有極強的優(yōu)勢。
CRF
從上述網(wǎng)絡(luò)結(jié)構(gòu),可知要優(yōu)化的目標(biāo)函數(shù)由最后一層決定。
通常給定一個線性鏈條件隨機場 ,當(dāng)觀測序列為 時,標(biāo)簽序列為 的概率可寫為
是否包含前后綴?
訓(xùn)練模型之前,我們需要標(biāo)記訓(xùn)練數(shù)據(jù)。
標(biāo)記訓(xùn)練數(shù)據(jù)的一個問題是,是否要包含導(dǎo)流信息的前后綴。如「加V:xxxxxx」,是否需要包含「加V」。通常情況下,答案應(yīng)該是不包含,因為我們的實體是微信號,「加 V」不屬于我們要識別的實體。
但是,我們在實驗過程中發(fā)現(xiàn),如果不加前后綴,模型會把大量的英文單詞,或者字母數(shù)字組合,標(biāo)記為導(dǎo)流內(nèi)容。原因是,作為中文社區(qū),英文單詞出現(xiàn)頻率很低,同時大部分導(dǎo)流信息都是字母數(shù)字組合,從而使得模型出現(xiàn)錯誤。
針對這種情況,我們在處理數(shù)據(jù)時,將導(dǎo)流信息的前后綴也作為實體的一部分,有效的降低了上述問題出現(xiàn)的概率。
實體編碼
序列標(biāo)注模型另一個需要注意的問題是,實體編碼的格式。常用的序列實體編碼方式有IO、BIO、BMEWO三種。
IO 編碼是最簡單的編碼,它將屬于類型X的實體的序列元素標(biāo)記為 I_X,不屬于任何實體的序列元素標(biāo)記為 O。這種編碼存在缺陷,因為它不能代表彼此相鄰的兩個實體,因為沒有邊界標(biāo)簽。
BIO 編碼是當(dāng)前實體編碼的行業(yè)標(biāo)準(zhǔn)。它將表示實體的 I_X 標(biāo)簽細(xì)分為實體開始標(biāo)簽 B_X和實體延續(xù)標(biāo)簽 I_X。
BMEWO 編碼進一步區(qū)分實體結(jié)束元素 E_X 和實體中間元素令 M_X,并為單元素實體添加一個全新的標(biāo)簽 W_X。
上述三種編碼的示例,如下所示:
Tokens | IO | BIO | BMEWO |
我 | O | O | O |
的 | O | O | O |
微 | I_WX | B_WX | B_WX |
信 | I_WX | I_WX | M_WX |
: | I_WX | I_WX | M_WX |
x | I_WX | I_WX | M_WX |
x | I_WX | I_WX | E_WX |
。 | O | O | O |
綜合考慮,我們選擇 BIO 編碼,一是滿足我們對于導(dǎo)流信息的區(qū)分,二是其標(biāo)記方式相對通用。
效果
在實驗階段,分別將 HMM、BILSTM、BIGRU、BILSTM-CRF 做了一系列的對比,將表現(xiàn)比較好的 BILSTM-CRF 放在線上與原本的 Base 模型進行 AB 實驗。從結(jié)果上來看,寬深度學(xué)習(xí)模型在線下/線上都有比較好的效果。線上實驗結(jié)論如下:
模型 | 召回率 | 準(zhǔn)確率 |
BASE | 88.14% | 82.23% |
BILSTM-CRF | 90.48% | 90.12% |
后續(xù)的改進
為了提高模型的效果,我們需要使用更多的訓(xùn)練數(shù)據(jù),構(gòu)造更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),使用更多的超參數(shù)設(shè)置訓(xùn)練模型。然而,不斷增加的模型尺寸和超參數(shù)極大地延長了訓(xùn)練時間。很明顯,計算能力已經(jīng)成為了模型優(yōu)化的主要瓶頸。相比 CNN 和 Attention 等操作,LSTM 仍然不太適應(yīng)多線程 /GPU 計算,訓(xùn)練速度偏慢,不能充分利用GPU的并行計算優(yōu)勢。因此,我們還在嘗試 SRU 等RNN 加速方案,希望在模型效果損失不大的情況下,提高模型的訓(xùn)練速度。
我們當(dāng)前采用的是Char-based model,Char-based model在一個優(yōu)勢在于利用詞元(lemmas)和形態(tài)學(xué)信息(morphological information ),能更好的處理導(dǎo)流內(nèi)容內(nèi)部結(jié)構(gòu),如手機號的組成。另一方面,Word-based model 更多的利用詞語信息,詞語比字具有更高的抽象等級,通常正確率會更高。我們希望通過訓(xùn)練一個新的分詞模型的方式,使得在保持處理導(dǎo)流內(nèi)容內(nèi)部結(jié)構(gòu)的情況下,構(gòu)建 Word-based model。
算法在社區(qū)氛圍的應(yīng)用(二):深度學(xué)習(xí)在不友善文本識別中的應(yīng)用
此前,我們常常收到知友們的反饋說「好煩哦,TA 又不友善了」、「我要舉報 XX,TA 在評論區(qū)又開始杠上了」、「這種辱罵他人的人,你們都不處理嗎?」等等。今年年初,我們開始嘗試用深度學(xué)習(xí)算法輔助審核人員處理不友善問題,經(jīng)過近三個月的探索和嘗試,目前該算法第一版已經(jīng)上線,并且取得相對不錯的效果。
知乎不友善文本識別應(yīng)用的場景和策略
目前,瓦力識別不友善的算法已經(jīng)應(yīng)用在知友們的舉報和社區(qū)實時產(chǎn)生的內(nèi)容中。針對這兩種內(nèi)容的不同場景和特點,我們采用了不同的處理策略:
●舉報內(nèi)容的處理策略
瓦力有效地提升了我們的舉報處理效率和響應(yīng)速度。目前,我們每天約收到知友們近 25,000 條舉報。在這些舉報中,大約有 7,000 條是關(guān)于不友善的內(nèi)容。模型訓(xùn)練階段,我們利用經(jīng)過人工標(biāo)注的舉報內(nèi)容進行模型訓(xùn)練。線上預(yù)測階段,如果模型預(yù)測某條內(nèi)容屬于不友善的概率x 大于閾值 p_abuse,瓦力會在 0.3 秒間完成判斷并直接刪除,內(nèi)容被處理后,知友們也會收到相應(yīng)的私信通知;如果模型預(yù)測該內(nèi)容屬于非不友善類型的概率 x 大于閾值 p_friend,則認(rèn)為該內(nèi)容屬于非不友善內(nèi)容,那么該舉報會被忽略;不滿足以上條件的內(nèi)容,我們會進行多次人工審核判斷,人工審核后的判斷標(biāo)準(zhǔn)也會用于下一輪模型的迭代和升級。
我們重視每一個舉報,并根據(jù)舉報內(nèi)容增強瓦力可識別的范圍和準(zhǔn)確度,還會每日人工復(fù)核知友們的舉報,針對可能存在不同處理意見的舉報,會根據(jù)規(guī)范與實際的應(yīng)用場景多次復(fù)審。在這里,我們也非常感謝知友們的每一次舉報,感謝大家與我們一起并肩維護社區(qū)氛圍,我們也正是在知友們的舉報中逐漸形成統(tǒng)一的判斷標(biāo)準(zhǔn)。
●全量內(nèi)容的處理策略
我們會對每天新產(chǎn)生的內(nèi)容進行全量審核,每天可以實時攔截處理 3,000 條內(nèi)容。在實際的操作過程中,我們發(fā)現(xiàn)全量內(nèi)容有如下兩個特點使其不能跟舉報內(nèi)容共用模型和策略:
●不友善樣本和非不友善樣本分布非常不均衡;
●詞語分布和舉報內(nèi)容有區(qū)別。比如,舉報內(nèi)容中包含「SB、NC」之類的臟詞的基本屬于不友善類型;但是在全量內(nèi)容中臟字、臟詞可能出現(xiàn)在影視作品討論、陳述自己的經(jīng)歷等場景等非不友善內(nèi)容中,例如:坑到你頭皮發(fā)麻?!遏敯嘀巧潭傥濉?/p>
由于數(shù)據(jù)不均衡、數(shù)據(jù)排查標(biāo)注成本較高和上述數(shù)據(jù)的分布特點,全量內(nèi)容模型要做到準(zhǔn)確率 98% 以上非常困難,因此我們根據(jù)人工審核量,選擇一個適宜的閾值,在保證每天召回量的基礎(chǔ)上,維持召回內(nèi)容的處理準(zhǔn)確率到 80% 以上,并將召回的內(nèi)容進行人工審核。
知乎社區(qū)不友善文本識別系統(tǒng)基本框架
目前,不友善內(nèi)容處理系統(tǒng)架構(gòu)如下圖所示(以知友舉報內(nèi)容識別識別系統(tǒng)為例,全量內(nèi)容識別系統(tǒng)與其類似)
我們在選擇模型時在小批量數(shù)據(jù)集上對比了 lstm 模型、svm 和樸素貝葉斯模型,lstm 模型表現(xiàn)最好,因此我們的模型優(yōu)化工作主要集中在深度學(xué)習(xí)模型上。
●詞向量
將詞用「詞向量」表示是深度學(xué)習(xí)模型處理 NLP 問題的關(guān)鍵一步,我們的系統(tǒng)中使用 Google 提出的 word2vec 詞向量模型,訓(xùn)練數(shù)據(jù)采用來自知乎社區(qū) 300 多萬條真實的提問、評論、回答數(shù)據(jù),內(nèi)容涉及娛樂、政治、新聞、科學(xué)等各個領(lǐng)域,詞向量維度采用 128 維,訓(xùn)練模型窗口大小 5。
Word2vec 的原理和使用方法這里就不做過多介紹了,有興趣的可以閱讀文獻[1],Python 版本實現(xiàn)的可以參考 gensim官方文檔。
●text-cnn
TextCNN 是利用卷積神經(jīng)網(wǎng)絡(luò)對文本進行分類的算法,2014 年由 Yoon Kim 提出(見參考[3])。 TextCNN 的結(jié)構(gòu)比較簡單,其模型的結(jié)構(gòu)如下圖:
Embedding Layer——該層將輸入的自然語言編碼成 distributed representation,我們的模型該層使用 word2vec 預(yù)先訓(xùn)練好的詞向量,同時該層設(shè)置為 trainable。
Convolution Layer——這一層主要是通過卷積,提取文本的 n-gram 特征,輸入文本通過 embedding layer 后,會轉(zhuǎn)變成一個二維矩陣,假設(shè)文本的長度為 |T|,詞向量的大小為 |d|,則該二維矩陣的大小為 |T|x|d|,接下的卷積工作就是對這一個 |T|x|d| 的二維矩陣進行的。卷積核的大小一般設(shè)為 n x |d|,n 是卷積核的長度,|d| 是卷積核的寬度(LP 中通常取詞向量的維度)。我們的模型中 n 取 [2,3,4,5]4 個值,每個值固定取 128 個 filter。
Max Pooling Layer——最大池化層,對卷積后得到的若干個一維向量取最大值,然后拼接在一塊,作為本層的輸出值。如果卷積核的 size=2,3,4,5 每個 size 有 128 個 filter,則經(jīng)過卷積層后會得到 4x128 個一維的向量,再經(jīng)過 max-pooling 之后,會得到 4x128 個 scalar 值,拼接在一塊,最終得到一個 512x1 的向量。max-pooling 層的意義在于對卷積提取的 n-gram 特征,提取激活程度最大的特征。
Fully-connected Layer——將 max-pooling layer 后再拼接一層,作為輸出結(jié)果。實際中為了提高網(wǎng)絡(luò)的學(xué)習(xí)能力,可以拼接多個全連接層。
Softmax——根據(jù)類別數(shù)目設(shè)定節(jié)點數(shù),我們不友善文本識別項目是二分類問題,設(shè)置一個節(jié)點,激活函數(shù)選擇 sigmoid。
●Bi-LSTM
CNN 最大問題是固定 filter_size 的視野,無法建模更長的序列信息,自然語言處理中更常用的是 RNN,因為 RNN 能夠更好的表達(dá)上下文信息。在文本分類任務(wù)中,由于語句過長,會出現(xiàn)梯度消失或梯度爆炸的問題,基本的RNN網(wǎng)絡(luò)難于處理語言中的長程依賴問題,為了解決這個問題,人們提出了 LSTM 模型。我們在對比 LSTM 和 Bi-LSTM 效果后選擇了 Bi-LSTM,Bi-LSTM 從某種意義上可以理解為可以捕獲變長且雙向的「n-gram」信息。圖 3 是 Bi-LSTM 用于分類問題的網(wǎng)絡(luò)結(jié)構(gòu),黃色的節(jié)點分別是前向和后向RNN的輸出,示例中的是利用最后一個詞的結(jié)果直接接全連接層 softmax 輸出了。我們的實際使用的網(wǎng)絡(luò)結(jié)構(gòu)在全聯(lián)接層之后加了一層 dropout 層,dropout 輸出接 sigmoid 二元分類層。RNN、LSTM、BI-LSTM 可以參考文獻[4]。
我們參考論文 A C-LSTM Neural Network for Text Classification 來實現(xiàn) CNN-LSTM 文本分類模型,模型的網(wǎng)絡(luò)結(jié)構(gòu)如下所示(該圖直接來自論文)
效果
舉報的內(nèi)容
知友舉報內(nèi)容不管是直接刪除還是直接忽略,都要求算法有較高的準(zhǔn)確率(本文準(zhǔn)確率沒有特別說明的情況下指 precision),經(jīng)過對比不同模型的評測效果,目前線上選用模型和準(zhǔn)確率、召回率如下:
策略 | 模型 | 準(zhǔn)確率 | 召回率 |
舉報評論直接刪除 | bi-lstm | 98.78% | 82.83% |
舉報評論直接忽略 | bi-lstm | 97.85% | 85.79% |
舉報回答直接忽略 | bi-lstm | 99.13% | 77.84% |
全量內(nèi)容
經(jīng)過模型調(diào)優(yōu)和對比不同模型的評測效果,目前線上使用的模型和準(zhǔn)確率、召回率如下:
策略 | 模型 | 準(zhǔn)確率 | 召回率 |
評論不友善召回 | text-cnn | 85.83% | 72.58% |
回答不友善召回 | cnn-lstm | 83.45% | 75.77% |
后續(xù)工作
我們會利用更多數(shù)據(jù)模型,嘗試更復(fù)雜定神經(jīng)網(wǎng)絡(luò)并進行語義分析。通過分析實際操作中的 bad case 可以發(fā)現(xiàn),有些文本帶有臟字、臟詞但并不屬于不友善類別,同時也存在一些很隱晦的不友善內(nèi)容,主要有以下三類:
●影視、社會熱點事件討論中,評價影視作品中的人物或者熱點事件當(dāng)事人,例如:這個視頻難道不是貨車司機的錯,有時候又想去延安路龍翔橋附近斑馬線前停一天車,MDZZ 規(guī)定。
●陳述自己等經(jīng)歷,例如:我當(dāng)時竟然信了,覺得當(dāng)時的自己就是 FJ 。
●詼諧詞語或反語,例如:你真聰明,連這都不會;有哪些人工 ZZ 發(fā)明。
我們會繼續(xù)嘗試用深度學(xué)習(xí)做語義分析,對文本進行語義角色標(biāo)注(見參考文獻[6]),抽取句子的施事者(Agent)、受事者(Patient)、客體及其對應(yīng)的描述詞;通過語義相似度構(gòu)建語義詞典;將語義信息融合到我們的不友善文本識別模型中。
參考文獻:[1]https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf
[2] https://radimrehurek.com/gensim/models/word2vec.html
[3]https://arxiv.org/abs/1408.5882
[4]https://blog.csdn.net/zzulp/article/details/79379960
[5]https://arxiv.org/pdf/1511.08630.pdf
[6] Chinese semantic role labeling with shallow parsing
算法在社區(qū)氛圍的應(yīng)用(三): 機器學(xué)習(xí)在答非所問識別上的運用
跳繩的好處有哪些?可以鍛煉哪些肌肉?
A:心肺功能比之前有提高。
B:有助于提高身體的乳酸閾值。
C:有助于提高身體的協(xié)調(diào)性。
D:謝謝,我去買了跳繩。
請問,以上哪個答案是答非所問?
現(xiàn)在,瓦力可直接識別并處理該題中的答非所問內(nèi)容。
我們鼓勵認(rèn)真、專業(yè)的分享,期待每一次討論都能碰撞出更多有價值的信息,并希望每一個用心的回答都能夠得到好的展示,為他人帶來更多幫助。但是,我們也發(fā)現(xiàn)在社區(qū)中出現(xiàn)了答非所問類的內(nèi)容,影響知友們獲取有價值內(nèi)容的效率。
為了更好地識別答非所問類內(nèi)容,我們采用了多種模型,包括傳統(tǒng)的機器學(xué)習(xí)模型和比較新的深度學(xué)習(xí)模型。通過前期對語料的分析,我們發(fā)現(xiàn)語言用詞、作者歷史行為、知友對內(nèi)容的反饋信息等都具有比較明顯的區(qū)分度,因而我們嘗試使用特征工程和傳統(tǒng)機器學(xué)習(xí)方法實現(xiàn)了瓦力識別答非所問的第一版模型,并達(dá)到了一個相對不錯的效果。
Random Forest
隨機森林 (Random Forest) 是樹模型里兩個常用模型之一(另一個是 Gradient Boosting Decision Tree)。顧名思義,就是用隨機的機制建立一個森林,森林由多棵分類樹構(gòu)成。當(dāng)新樣本進入時,我們需要將樣本輸入到每棵樹中進行分類。打個形象的比喻,知乎森林召開議會,討論
@劉看山
到底是狗還是北極狐(看山,我知道你是北極狐的,手動捂臉逃...),森林中的每棵樹都獨立發(fā)表了自己對這個問題的觀點,做出了自己的判斷。最終劉看山是狗還是北極狐,要依據(jù)投票情況來確定,獲得票數(shù)最多的類別就是這片森林對其的分類結(jié)果。如同圖一所示意境。
樣本
通過訓(xùn)練語料和業(yè)務(wù)數(shù)據(jù),進行特征工程,提取出了以下三類特征:
●回答和問題的文本特征:如二者的詞向量、詞向量相似度、關(guān)鍵詞相似度、話題相似度等;
●回答的統(tǒng)計特征:如回答的贊同、反對、評論、舉報等是用戶對其的交互特征;
●回答作者的統(tǒng)計特征:正向行為,如關(guān)注、回答、提問、評論、舉報等,負(fù)向行為,如回答被贊同、被反對、被感謝、被舉報等。
同時,通過歷史積累、用戶標(biāo)注、策略生成產(chǎn)生出了訓(xùn)練樣本集,然后用以上特征類別表示出每條樣本。
分類樹
使用隨機有放回抽樣選取每棵樹的訓(xùn)練樣本,隨機選取 m 個特征 (m < 總特征數(shù)) 進行無限分裂生長,成長為能獨立決策的樹。
投票決策
通過建好的多棵分類樹,對新的樣本進行決策投票,獲得最終的分類結(jié)果。
對于 Random Forest 的實現(xiàn),有很多優(yōu)秀開源的實現(xiàn),在實際中我們封裝了 Spark 中的 Random Forest 完成了模型的迭代。最終取得了 Precision 97%,Recall 58% 左右的不錯結(jié)果。
細(xì)心的知友可能注意到了,我們的特征里有一類特征是與時間和回答的暴光有關(guān)的,即回答和作者的統(tǒng)計特征。為此我們在現(xiàn)有模型的基礎(chǔ)上分析了這類特征的時間累積效果,如圖二所示。從圖中可以看到,經(jīng)過一天的統(tǒng)計特征累積,Precision 達(dá)到了 90%,但 Recall 只有 40%,可以說這一天時間對于 40% 的答非所問有了比較充分的特征積累以支撐對其的準(zhǔn)確判斷。而隨時間的增加,基本上 Precision 和 Recall 都有提升。但并不是時間越長,提升越多。
最終我們結(jié)合產(chǎn)品應(yīng)用層面和算法閾值,分別選出兩個時間點,一方面犧牲 Recall 快速識別處理一部分答非所問的回答,另一方面允許一定的處理延時,保證了大量的 Recall,大大凈化了回答區(qū)域的無關(guān)內(nèi)容。
傳統(tǒng)機器學(xué)習(xí)的一個核心內(nèi)容就是特征工程,包括特征提取、特征選擇等。
●特征提?。簭脑紨?shù)據(jù)出發(fā)構(gòu)造出特征,通常包括業(yè)務(wù)和對語料的統(tǒng)計分析。
●特征選擇:從提取出的候選特征中挑選出有用的特征。
但特征工程總是會耗費比較多的時間,而且在答非所問的識別中一些時間相關(guān)的特征,還延長了處理周期,不利于快速處理。而廣為流傳的深度學(xué)習(xí),能自動對輸入的低階特征進行組合、變換,映射到高階的特征,這也促使我們轉(zhuǎn)向深度學(xué)習(xí)進行答非所問的識別。
深度學(xué)習(xí)興起于圖像識別,其過程可以引用圖三[1] 大致描繪,輸入特征,經(jīng)隱藏層逐層抽象、組合,最后經(jīng)輸出層得出識別結(jié)果。
相較于圖片天然的像素表征,可以直接輸入到深度神經(jīng)網(wǎng)絡(luò)里,文本需要進行向量化后方可作為網(wǎng)絡(luò)的輸入。關(guān)于「詞向量化」的精彩描述可以參考[2]。此處我們抽取了知乎社區(qū) 1000 多萬真實的文本信息,包括問題、回答、文章、評論等數(shù)據(jù),利用 Facebook 開源的 FastText 訓(xùn)練了 256 維的詞向量和字向量。對于 FastText 的原理和用法此處不作詳細(xì)闡述,感興趣的朋友可以參考[3]。
CNN 網(wǎng)絡(luò) (Convolutional Neural Network)
我們模型的網(wǎng)絡(luò)結(jié)構(gòu)基本上采用了 Severyn[4] 提出的網(wǎng)絡(luò)結(jié)構(gòu),但在一些細(xì)節(jié)上做了些改動,比如圖四中的 CNN-answer/question, 我們結(jié)合了 Wide & Deep[5] 的思想,以提取更為豐富的語義信息。
Embedding Layer——該層利用預(yù)訓(xùn)練好的 FastText 詞向量將原始詞序列表達(dá)成詞向量序列
Convolutional Layer——此層主要通過卷積操作,同時捕獲類似于 N-Gram 特征(但同 N-Gram 還是有差異的)。我們的模型選取了 [2, 3, 4, 5, 6] 5 個卷積核寬度,為每個卷積核配置了 64 個 filter
Pooling Layer——池化層,對經(jīng)過卷積操作提取的特征進行 Sampling。此處我們采用了 K-Max-Average pooling,對卷積層提取的特征,選擇出激活程度 top-K 的特征值的平均值作為 pooling 的結(jié)果
Feature Join & Fully connected Layer——將前述幾層獲得的特征,以及額外信息進行融合,作為最終的特征輸出,以便于最后的決策判斷。實際上,我們在 Fully Connection 后面加了 3 層 Dense Layer,以提高網(wǎng)絡(luò)的表達(dá)能力。
Softmax——將最后的特征轉(zhuǎn)換成二分類決策概率。
最終訓(xùn)練好該模型,在驗證集上達(dá)到了 Precision 78%, Recall 80% 的效果。Recall 雖有比較大的提升,但 Precision 并沒有前文描述的 Random Forest 的方法好。
效果
目前,答非所問幾個模型都上線到了知乎產(chǎn)品的諸多場景下,如反對、舉報、專項清理等。每天清理約 5000 條新產(chǎn)生的「答非所問」內(nèi)容,以及此前現(xiàn)存的 115 萬條「答非所問」內(nèi)容。
參考文獻:
[1] Breaking it down: A Q&A on machine learning
[2] 詞向量和語言模型
[3] FastText
[4] Learning to rank short text pairs with convolutional deep neural networks
[5] Wide & Deep Learning for Recommender Systems
- 美媒聚焦比亞迪“副業(yè)”:電子代工助力蘋果,下個大計劃瞄準(zhǔn)AI機器人
- 微信零錢通新政策:銀行卡轉(zhuǎn)入資金提現(xiàn)免手續(xù)費引熱議
- 消息稱塔塔集團將收購和碩印度iPhone代工廠60%股份 并接管日常運營
- 蘋果揭秘自研芯片成功之道:領(lǐng)先技術(shù)與深度整合是關(guān)鍵
- 英偉達(dá)新一代Blackwell GPU面臨過熱挑戰(zhàn),交付延期引發(fā)市場關(guān)注
- 馬斯克能否成為 AI 部部長?硅谷與白宮的聯(lián)系日益緊密
- 余承東:Mate70將在26號發(fā)布,意外泄露引發(fā)關(guān)注
- 無人機“黑科技”亮相航展:全球首臺低空重力測量系統(tǒng)引關(guān)注
- 賽力斯發(fā)布聲明:未與任何伙伴聯(lián)合開展人形機器人合作
- 賽力斯觸及漲停,汽車整車股盤初強勢拉升
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。