Pythonのsklearnを使ってフェイクニュース検出器を実装する方法

スポンサーリンク

こんにちわ 今日は、一般的な機械学習アルゴリズムを使って、Pythonでフェイクニュース検出器を作成します。

スポンサーリンク

1. モジュールのインポート

他のプロジェクトと同じように、このプロジェクトの最初のステップは、同様にモジュールをインポートすることです。

今回はNumpy、Pandas、itertoolsを使用します。

そのためのコードは以下の通りです。

1
2
3
4
5
6
7
import numpy as np
import pandas as pd
import itertools
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

2. データの読み込み

では、ここにあるフェイクニュース検出用のcsvファイルからデータを読み込んでみましょう。

最初の5行を表示するコードは以下のとおりです。

1
2
data=pd.read_csv('news.csv')
data.head()

CSVファイルはPythonのコードと同じフォルダにあることを確認してください。

次に、先ほど読み込んだデータからラベルを抽出し、最初の5つのラベルを印刷しましょう。

1
2
lb=df.label
lb.head()

3. 学習データとテストデータの作成

最終的なモデル/分類器にデータを渡す前に、データをテストデータとトレーニングデータに分割する必要があります。

1
x_train,x_test,y_train,y_test=train_test_split(data['text'], lb, test_size=0.2, random_state=7)

データの分割には「80-20」ルールを使用し、80%のデータをトレーニングデータに、残りの20%をテストデータに使用します。

4. Tfidf-Vectorizer と PassiveAggressiveClassifier の実装

Tfidf-Vectorizerを使って、テキスト配列を TF-IDF 行列に変換します。

  1. TF (Term Frequency)。ある単語がテキスト中に出現する回数を表す。
  2. IDF (Inverse Document Frequency): 逆文書頻度。ある単語がデータ全体の中でどれだけ重要であるかを示す指標です。

その後、PassiveAggressiveClassifierを適用し、学習データにデータを当てはめる。

この分類器は各反復の後に損失を更新し、同様に重みベクトルにも若干の変更を加える。

最後に、テストデータについて予測を行い、テストデータに対するモデルの精度を計算します。

その結果、テストデータに対して90%以上の精度を得ることができました。

以下はそのコードです。

1
2
3
4
5
6
7
8
9
10
11
tfidf_vectorizer=TfidfVectorizer(stop_words='english', max_df=0.7)
tfidf_train=tfidf_vectorizer.fit_transform(x_train)
tfidf_test=tfidf_vectorizer.transform(x_test)
 
pac=PassiveAggressiveClassifier(max_iter=50)
pac.fit(tfidf_train,y_train)
 
y_pred=pac.predict(tfidf_test)
score=accuracy_score(y_test,y_pred)
 
print("Accuracy: ",round(score*100,2),"%")

まとめ

本日は、Pythonを用いて、多くのニュースデータを含むデータセットからフェイクニュースを検出することを学びました。

検出はTfidfVectorizerとPassiveAggressiveClassifierを使用して行いました。

その結果、90%以上の精度を得ることができ、とても驚いています。

フェイクニュース検出器を気に入っていただけたでしょうか?もっと詳しく知りたい方はこちら

タイトルとURLをコピーしました