Python中的假新聞檢測項目[帶編碼]

已發表: 2020-12-14

曾經讀過一條看似虛假的新聞嗎? 我們都會遇到這樣的新聞文章,並本能地意識到有些事情不對勁。 由於那裡的帖子太多,幾乎不可能區分對與錯。 在這裡,我們不僅在談論虛假的主張和事實要點,而是在語言本身中看起來錯綜複雜的事情。

你有沒有想過如何開發一個假新聞檢測項目? 但是,要找出哪些新聞是假的,哪些不是,並沒有簡單的方法,尤其是現在,隨著新聞在社交媒體上的傳播速度如此之快。 儘管如此,一些解決方案可能有助於識別這些不法行為。

有兩種方法可以聲稱某些新聞是假的:第一,對事實點的攻擊。 第二,語言。 前者只能通過使用自動查詢系統對互聯網進行大量搜索來完成。 這可能是一項艱鉅的任務,尤其是對於剛剛開始使用數據科學和自然語言處理的人來說。

後者可以通過自然語言處理管道和機器學習管道來實現。 這就是我們在 Python 中實現假新聞檢測項目的方式。 這是另一個被認為是自然語言處理問題的機器學習問題。 如果您是初學者並且有興趣了解有關數據科學的更多信息,請查看我們來自頂尖大學的數據科學在線課程。

閱讀: Python 項目理念和主題

這種類型的應用程序有很多數據集,但我們將使用這裡提到的那個 該數據包含大約 7500 多個新聞提要,帶有兩個目標標籤:虛假或真實。 數據集還包含特定新聞的標題。

自然語言處理流程中的步驟如下:

  1. 獲取和加載數據
  2. 清理數據集
  3. 刪除多餘的符號
  4. 刪除標點符號
  5. 刪除停用詞
  6. 詞幹
  7. 代幣化
  8. 特徵提取
  9. TF-IDF 矢量化器
  10. 帶有 TF-IDF 變壓器的計數器矢量化器
  11. 機器學習模型訓練與驗證

在我們開始討論假新聞檢測項目的實現步驟之前,讓我們導入必要的庫:

代碼:

將熊貓導入為 pd
將 numpy 導入為 np
重新進口
導入字符串
從 nltk.corpus 導入停用詞
從 nltk.tokenize 導入 word_tokenize

stop_words = set(stopwords.words( 'english' ))

第一步是獲取數據。 我們已經提供了 CSV 文件的鏈接; 但是,討論生成數據的另一種方法也很重要。

其中一種方法是網頁抓取。 為此,我們需要編寫一個網絡爬蟲並指定您需要從中獲取數據的站點。 但要小心,這種方法有兩個問題。

首先,廢棄許多網站可能是非法的,因此您需要注意這一點。 其次,數據將非常原始。 整個管道將附加一個步驟列表,以將原始數據轉換為可用的 CSV 文件或數據集。 因此,我們使用帶有組織數據的預設 CSV 文件。

但是,如果有興趣,您可以查看 upGrad 的數據科學課程,其中有足夠的可用資源以及對數據工程和網絡抓取的適當解釋。 請務必在此處查看這些內容

這就是我們導入數據集並附加標籤的方式。 請注意我們如何從數據集中刪除不必要的列。 如果需要更高的值,您可以保持這些列。 但現在,我們的假新聞檢測項目只在文本和目標標籤列上運行順利。

代碼:

df_text = pd.read_csv( 'fake_or_real_news.csv' ,編碼= 'latin-1' )
df_text.columns = [ 'id' , 'title' , 'text' , 'label' ] df_text.drop(['id', 'title'], axis=1)

繼續,下一步是清理現有數據。 為什麼這一步是必要的? 至關重要的是要了解我們正在使用機器並教它區分假貨和真實貨品。 現在,我們有文本數據,但計算機處理數字。 因此,首先需要將它們轉換為數字,而在此之前的一步是確保我們只轉換那些理解所必需的文本。

清理管道的第一步是檢查數據集是否包含任何要清除的額外符號。 它可以是網址或任何其他引用符號,例如 at(@) 或主題標籤。 這是代碼:

代碼:

# 刪除網址
text = re.sub( r”http\S+|www\S+|https\S+” , , text, flags=re.MULTILINE)
# 從文本中刪除用戶@引用和'#'
文本 = re.sub( r'\@\w+|\#' , , 文本)

一旦我們刪除它,下一步就是清除其他符號:標點符號。 如果我們考慮一下,標點符號對於理解特定新聞的真實性並沒有明確的輸入。 有時,如果標點符號很多,則新聞可能不是真實的,例如,過度使用感嘆號。

但這些都是極少數情況,需要特定的基於規則的分析。 因此,對於這個假新聞檢測項目,我們將刪除標點符號。 這是如何做到的:

代碼:

text = text.translate(str.maketrans( , , string.punctuation))

下一步是將詞幹到其核心並標記詞。 標記化意味著將每個句子變成單詞或標記的列表。 這是需要附加的兩行代碼:

代碼:

令牌 = word_tokenize(文本)
words = [w for w in tokens if not w in stop_words]

下一步是至關重要的一步。 將令牌轉換為有意義的數字。 此步驟也稱為特徵提取。 對於我們的應用程序,我們將使用 TF-IDF 方法為我們的機器學習管道提取和構建特徵。

TF-IDF 本質上是指詞頻-逆文檔頻率。 正如名稱所暗示的那樣,我們通過其術語頻率以及整個數據集或文檔集合中術語的頻率來收集有關數據集的信息。

TF-IDF 可以很容易地通過混合 TF 和 IDF 的值來計算。 這兩個公式都涉及簡單的比率。

TF = 沒有。 術語出現在文檔中的次數/術語總數。

IDF = log of (總文件數/出現該術語的文件數)

現在 Python 有兩個 TF-IDF 轉換的實現。 第一個是 TF-IDF 矢量化器,第二個是 TF-IDF 轉換器。 不同之處在於轉換器在轉換之前需要一個詞袋實現,而矢量化器將這兩個步驟合二為一。 我們還可以使用計數向量器,它是詞袋的簡單實現。 但是 TF-IDF 在特定數據集上會更好地工作。

以下是 TF-IDF 的實現方式。

代碼:

sklearn.feature_extraction.text導入TfidfVectorizer

tf_vector = TfidfVectorizer(sublinear_tf= True )
tf_vector.fit(df_text[ '文本' ])

下一步是機器學習管道。 就像典型的 ML 管道一樣,我們需要將數據放入 X 和 y。 為此,我們使用 X 作為 TF-IDF 向量化器作為輸出提供的矩陣,該矩陣需要被展平。

我們可以使用 Python 中的 travel 函數將矩陣轉換為數組。 y 值不能直接附加,因為它們仍然是標籤而不是數字。 要將它們轉換為 0 和 1,我們使用 sklearn 的標籤編碼器。

該編碼器將標籤文本轉換為編號目標。 例如,假設我們有一個這樣的標籤列表:['real', 'fake', 'fake', 'fake']

我們本質上需要的是一個像這樣的列表:[1, 0, 0, 0]。 標籤編碼器所做的是,它獲取所有不同的標籤並製作一個列表。 對於我們的示例,列表將是 ['fake', 'real']。

這是相同的實現:

代碼:

X_text = tf_vector.transform(df_text[ 'text' ].ravel())
y_values = np.array(df_text[ 'label' ].ravel())

sklearn導入預處理
le = preprocessing.LabelEncoder()
le.fit(y_values) le.transform(y_values)

完成後,訓練和測試拆分就完成了。 可以通過使用sklearn的預處理包,導入train test split函數來實現。

代碼:

sklearn.model_selection導入train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_text, y_values, test_size= 0.15 , random_state= 120 )

最後一步是使用模型。 有許多好的機器學習模型可用,但即使是簡單的基礎模型也可以很好地用於我們實施假新聞檢測項目 我們首先實現一個邏輯回歸模型。 以下是使用 sklearn 實現的方法。

代碼:

從 sklearn.metrics 導入 accuracy_score

從 sklearn.linear_model 導入 LogisticRegression

模型 = 邏輯回歸(求解器 = 'lbfgs'
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
打印(accuracy_score(y_test,y_predict))

該模型的表現相當不錯。 回歸模型的 92% 準確率相當不錯。 您還可以實現其他可用模型並檢查準確性。

因此,這就是您可以使用 Python 實現假新聞檢測項目的方法。

請注意,這裡有很多事情要做。 NLP 管道尚未完全完成。 還有許多其他可用功能可用於獲得更好的特徵提取。

另請閱讀: Python 開源項目理念

假新聞適應技術的方式,需要越來越好的處理模型。 這些模型將更多地用於自然語言理解,而不是作為機器學習模型本身。 模型還可以根據使用的功能進行微調。 可以使數據集動態適應以使其適用於當前數據。 但這需要一個對當前新聞文章進行詳盡訓練的模型。

因此,如果有更多的數據可用,可以製作更好的模型,並提高假新聞檢測項目的適用性 但內部方案和核心管道將保持不變。 解釋的管道高度適用於您可能想要進行的任何實驗。 隨意嘗試和玩不同的功能。

如果您對學習數據科學以走在快節奏的技術進步的前沿感到好奇,請查看 upGrad 和 IIIT-B 的數據科學執行 PG 計劃,並為未來提升自己的技能。

用 Python 開發假新聞檢測項目需要哪些必備技能?

Python 用於構建假新聞檢測項目,因為它具有動態類型、內置數據結構、強大的庫、框架和社區支持。 在 Python 中開發假新聞檢測項目所需的其他必要技能是機器學習、自然語言處理和人工智能。 對於打算做這個項目的學習者來說,這些技能的知識是必須的。 學習者可以輕鬆地在線學習這些技能。

公司如何使用 Python 的假新聞檢測項目?

由於大多數假新聞都是在社交媒體平台上發現的,因此很難區分真假新聞。 社交媒體平台和大多數媒體公司利用假新聞檢測項目來自動確定正在傳播的新聞是否是捏造的。 除了項目之外,大多數公司還使用機器學習來自動化查找假新聞的過程,而不是依靠人類來完成繁瑣的任務。

python的其他一些實際應用是什麼?

Python 具有廣泛的實際應用程序。 Python 支持跨平台操作系統,這使得使用它開發應用程序更易於管理。 Python 用於為一些世界上最著名的應用程序提供支持,包括 YouTube、BitTorrent 和 DropBox。 Python 經常用於製作創新遊戲。 Python 還用於機器學習、數據科學和人工智能,因為它有助於創建基於存儲數據的重複算法。 在從網站提取大量數據方面,Python 是救命稻草,用戶隨後可以將這些數據用於各種實際操作,例如價格比較、職位發布、研發等。