在本文中,作者利用一個“真假新聞”的數(shù)據(jù)集和一個NaiveBayes分類器,成功開發(fā)了一個文本分類模型,該模型能夠根據(jù)文本中的內(nèi)容信息迅速判斷文章的真假。
“還沒等真話準(zhǔn)備好,謊話就已經(jīng)跑遍大半個世界了?!?/p>
——溫斯頓丘吉爾
自2016年美國總統(tǒng)大選以來,“假新聞”就一直是政界的主導(dǎo)性話題。很多政治權(quán)威人士稱,政治偏見和不實的新聞報道對選舉結(jié)果產(chǎn)生了極大的影響。然而,斯坦福大學(xué)和紐約大學(xué)研究者們則對此言論表示懷疑。但不論如何,不實的新聞報道的確是利用了Facebook等社交媒體在網(wǎng)絡(luò)上得到了廣泛傳播。
l“什么是假新聞?”
“假新聞”指的是那些具有明顯誤導(dǎo)性的新聞。但最近,社交媒體和社交用語的發(fā)展正在改變這一定義?,F(xiàn)在,有些人會用“假新聞”這個詞來反駁那些有悖于他們觀點的事實,最突出的例子就是美國總統(tǒng)特朗普。因此,這樣一個定義非常模糊的詞語其實是很容易被惡意使用的。
數(shù)據(jù)科學(xué)界已經(jīng)采取了實際行動來應(yīng)對“假新聞”的挑戰(zhàn)。最近出現(xiàn)了一種Kaggle風(fēng)格的競賽,叫做“假新聞挑戰(zhàn)”;Facebook也正采用人工智能將虛假的新聞報道從用戶信息中過濾掉。事實上,打擊虛假新聞實際上是一個非常典型的文本分類任務(wù),需要的解決問題也十分簡單,即開發(fā)一個能夠分辨新聞?wù)婕俚哪P汀?/p>
而這也正是我打算要做的事情。我收集了一些新聞報道作為模型開發(fā)的數(shù)據(jù)庫,這些新聞報道有真有假,魚龍混雜。為了開發(fā)能夠辨別文章真假的模型,我還在訓(xùn)練中利用了一個NaiveBayes分類器。
l數(shù)據(jù)收集
我的訓(xùn)練數(shù)據(jù)包括“真新聞”和“假新聞”,數(shù)據(jù)收集的流程也分為真、假兩個部分,其中假新聞的收集非常簡單。Kaggle曾發(fā)布了一個假新聞的數(shù)據(jù)集,該數(shù)據(jù)集中包括了發(fā)表于2016年大選期間的一萬三千篇新聞報道,因此假新聞的來源完全可以從這個數(shù)據(jù)集中獲取。
然而,真新聞的獲取就困難多了。為了獲得真實可靠的新聞報道,我使用了一個叫做“AllSides”的網(wǎng)站。這個網(wǎng)站是專門發(fā)布政界的新聞報道和評論文章,因此其新聞的真實性相對有保證。AllSides網(wǎng)站上的文章都是按照主題(環(huán)境、經(jīng)濟(jì)、生育等)和政治偏向(左派、右派和中間派)劃分的。之所以使用AllSides,是因為這個網(wǎng)站能讓我從眾多政見不同的媒體報道中,直接獲得上千篇相對真實的文章報道。除此之外,AllSides還支持下載文章全文,而《紐約時報》就不行了。經(jīng)過一段時間的數(shù)據(jù)收集,我最終收集到了5279篇“真新聞”。這些“真新聞”都是2015至2016年間,發(fā)表于紐約時報、華爾街日報、美國國家公共電臺等媒體機(jī)構(gòu)的。
最終版的數(shù)據(jù)集總共包含了10558篇新聞報道,有著文章標(biāo)題、完整的文章內(nèi)容以及文章真假的標(biāo)簽。所有的數(shù)據(jù)內(nèi)容可點擊鏈接查看此github。
l目標(biāo)和期望
一開始我就知道這項建模任務(wù)很難做到盡善盡美。實際上,我們的任務(wù)就是開發(fā)一個辨別真假新聞的分類器,并且將開發(fā)過程中獲得的新發(fā)現(xiàn)用于建立更完備、準(zhǔn)確的模型。最初,我認(rèn)為辨別真假新聞其實跟檢測垃圾郵件差不多。
開發(fā)一個基于countvectorizer(計算詞匯的數(shù)量)的模型,或是“tfidf矩陣”(計算詞匯在數(shù)據(jù)集的其他文章中的使用頻率)的模型只能達(dá)到這種效果。這兩種模型一般會忽視“詞匯排序”和“全文布局”這些重要的因素,比如字?jǐn)?shù)相同的兩篇文章很有可能表達(dá)的是完全不同的內(nèi)容。我并不指望我的模型能熟練地處理文字重疊的新聞報道,比起這個,我更希望能夠從這個建模過程得到一些有價值的見解和經(jīng)驗。
l建模
由于這個模型是關(guān)于文本分類的,所以我使用了一個NaiveBayes分類器。
組建這樣一個模型真正需要做的是轉(zhuǎn)換文本(“countvectorizer”VS“tfidfvectorizer”)和選擇文本類型(標(biāo)題或全文),所以我需要處理四對重新配置的數(shù)據(jù)集。
下一步是給“countvectorizer”或“tfidfvectorizer”選擇最優(yōu)參數(shù),實際上就是用一些最常用的單詞或短語、小寫、刪除停頓詞(比如the、when、there)等。
為了更高效地測試多參數(shù)及其參數(shù)組合的性能,我使用了Sci-kitLearn的“網(wǎng)格搜索”功能。了解更多關(guān)于算法參數(shù)調(diào)優(yōu)的方法,請點擊文字查看教程。
經(jīng)過“網(wǎng)格搜索”的測試,我發(fā)現(xiàn)“countvectorizer”和全文的訓(xùn)練更適合我的模型?!癱ountvectorizer”的最優(yōu)參數(shù)是“非小寫”、“雙詞短語”,詞語在文本庫中出現(xiàn)的最優(yōu)頻率是三次。
正如我在前文中提到的,我對這個模型的期望并不高。因此這個模型最終的輸出結(jié)果好的讓我驚訝,甚至有些疑惑。模型的交叉驗證準(zhǔn)確度是91.7%,召回值為92.6%,AUC值為95%。
以下是該模型的ROC曲線圖:
如果讓我在這個曲線圖上選一個閥值,我會選FPR在0.08左右、TPR在0.90左右的閥值。因為在這個點上FPR和TPR的權(quán)衡是相等的。
l結(jié)果及總結(jié)
這些分值其實并不是最重要的,對模型性能的真正考驗讓它辨別非訓(xùn)練數(shù)據(jù)集中的新聞報道。
在假新聞數(shù)據(jù)集中剩下的5234篇新聞報道中,模型能夠正確識別出其中的88.2%,這個數(shù)字比我的交叉驗證準(zhǔn)確度低了3.5%,但在我看來這已經(jīng)相當(dāng)不錯了。
我曾做過這樣的假設(shè):模型很難對新聞報道進(jìn)行分類。事實證明,我的假設(shè)是錯的。
盡管我開發(fā)的這個模型看起來還不錯,但是考慮到任務(wù)的復(fù)雜性,這很可能只是表象。
為了更好地理解,我們先看看數(shù)據(jù)中“最假”和“最真”的詞。
我利用了從“數(shù)據(jù)學(xué)院”的KevinMarkham借來一項技術(shù),在新聞報道數(shù)據(jù)集中找到了“最假”和“最真”詞。
這項工作是由一個兩列、10558行(文本庫中的詞數(shù))的表格開始的。第一列代表某個詞在一篇“假新聞”中出現(xiàn)的次數(shù),第二列代表某個詞在一篇“真新聞”中出現(xiàn)的次數(shù)。用某詞在“假新聞”中出現(xiàn)的總次數(shù)除以“假新聞”的篇數(shù),“真新聞”也是同樣的操作。
然后,我新建了一列用于表示“假新聞”和“真新聞”的比值(假新聞/真新聞)。為了避免結(jié)果中出現(xiàn)條件錯誤(除數(shù)不能為零),我給所有數(shù)據(jù)值都加了1。這個比值確實能夠比較直觀地表示一個詞究竟有多“真“或者有多“假”,但這絕對不是最完美的。邏輯很簡單,如果一個詞出現(xiàn)在好多篇“假新聞”里,而只出現(xiàn)在少數(shù)的幾篇“真新聞”中,那么這個詞的比值就會非常大。
以下是在我的數(shù)據(jù)集中排行前二十的“最假詞”和“最真詞”。
這兩個圖表反映出的結(jié)果讓人非常疑惑——“最假詞”表中包含了一些典型的網(wǎng)絡(luò)用語,比如PLEASE,Share,Posted,html,還有一些根本不存在的詞,比如“tzrwu”。而“最真詞”主要是政論性文章中的高頻詞、政客的名字,這些詞占了60%。這20個詞語中7個有都是政客的名字。這就引發(fā)了一個問題:政治性文章更有可能是真的嗎?當(dāng)然不是,這些政論性文章中有很多都散布著關(guān)于政客的不實傳言。
這個建模過程還存在一個問題——這些話題會出現(xiàn)很大程度的重疊,正如我們在上面看到的,某個詞在“真新聞”里出現(xiàn)的頻率不如在“假新聞”中出現(xiàn)的頻率高,并不一定意味著包含這個詞的文章就一定是虛假的,這只能表示該詞在假新聞里更常見。
事實上,這些新聞報道的選取非常具有主觀性。模型使用的“真新聞”數(shù)據(jù)是我選的,“假新聞”是由DanielSieradski組建的“BSDetector”選的。所以在決定這些新聞報道的真假方面已經(jīng)有很強的主觀性了。政客名字之所以能進(jìn)入“最真詞”排行榜,是因為“真新聞”數(shù)據(jù)庫中的文章大多都是政治新聞報道,而且這些新聞報道的確是相對可靠的新聞來源。
總之,盡管一個標(biāo)準(zhǔn)的NaiveBayes文本分類模型的確能夠為解決社交媒體發(fā)布不實消息的問題提供一些思路,但是從專業(yè)的角度看,還是應(yīng)該采用一個更強大的深度學(xué)習(xí)工具來抗擊假新聞和不實的言論。
分辨真假新聞給數(shù)據(jù)科學(xué)界帶來了一個全新的挑戰(zhàn)。在大多數(shù)機(jī)器學(xué)習(xí)任務(wù)中,各個類別的區(qū)分界限都是很明確的,但在這個案例中,真假新聞的界限非常模糊。這個案例再次證明了數(shù)據(jù)科學(xué)界的一個概念——有時候,對數(shù)據(jù)的敏感度和熟悉度甚至比模型和工具還重要。