0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Fake News? Fake Tweet?

Last updated at Posted at 2020-09-01

Fake News!

トランプ氏が大統領に就任して以降、様々なニュースに対しこのように言及し批判することが多いですよね。

Twitterでも活動的で中にはアグレッシブな投稿も。

このようにメディアに対しFakeと攻撃的な言動を取っている一方、当の本人のツイートの信憑性がどれくらいあるかもまた疑問であることも事実。

そこで今回は機械学習の技術を用いてトランプ氏のツイートがTrueかFakeかを検証していきます。

今回行うこと

Kaggleというサイトにアクセスし、Fake and real news dataset Classifying the newsというページからニュースのデータセットを使ってトランプ氏が就任して以降のニュースの真偽を判定するモデルを作成します。

次に、Trump Tweets Tweets from @realdonaldtrumpにあるデータから大統領就任以降のツイートを抽出、TrueとFakeがどれくらいの比率で判定されたかを図にします。

【重要】記事の内容につき注意事項

今回「トランプ氏のツイート」という切り口から機械学習に取り組みましたが

政治的な意図など全くなく機械学習のアウトプットで今回トランプ氏のツイートを切り口にしているだけであり、これからお伝えする検証結果もFakeでブーメランとなる可能性が十分にあるということをご承知の上お読みいだだけますようお願い致します。

TrueかFakeはあくまで計算上の結果なので本当はどうなのかを保証するものでは全くないですし、特定の立場の方を指示したり批判したりするために記事を書いたわけではありませんのでご注意いただきますようお願い致します。

Step1:ニュースのデータをモデル作成用に前処理

最初のステップとしてFake and real news dataset Classifying the newsにあるデータセットを前処理にモデル作成できる形に整えていきます。

import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import datetime as dt

import warnings
warnings.filterwarnings('ignore')

from sklearn.preprocessing import LabelEncoder

次に該当するページのcavファイルを読み込んでいきます。

fake = pd.read_csv("Fake.csv")
true = pd.read_csv("True.csv")

該当するページでは正しいものとそうでないものをFakeとTrueの2つのファイルに分けられています。

コラムと型を見ていきましょう。

fake.columns
Index(['title', 'text', 'subject', 'date'], dtype='object')

fake.dtypes
title      object
text       object
subject    object
date       object
dtype: object

true.columns
Index(['title', 'text', 'subject', 'date'], dtype='object')

true.dtypes
title      object
text       object
subject    object
date       object
dtype: object

どちらのファイルにもTrueかFakeかを直接示すものがないことがわかります。

そこを明記した上で1つにまとめます。

fake["Reality"] = 0
true["Reality"] = 1
#新たにRealityを作成。Fakeを0、Trueを1にする。

df = pd.concat([fake, true], axis=0)
df = df.reset_index(drop=True)

df.isnull().sum()
title      0
text       0
subject    0
date       0
Reality    0
dtype: int64

df.head()

#もともとあったどちらのファイルも欠損はありませんでした。分量が多くなりすぎるので省略していますが事前にしっかり確認しておくことが大切です。

|title|text|subject|date|Reality|
|:-----------|------------:|:------------:|:------------:|:------------:|:------------:|
|0|Donald Trump Sends Out Embarrassing New Year’...|Donald Trump just couldn t wish all Americans ...|News|December 31, 2017|0
|1|Drunk Bragging Trump Staffer Started Russian ...|House Intelligence Committee Chairman Devin Nu...|News|December 31, 2017|0
|2|Sheriff David Clarke Becomes An Internet Joke...|On Friday, it was revealed that former Milwauk...|News|December 30, 2017|0
|3|Trump Is So Obsessed He Even Has Obama’s Name...|On Christmas day, Donald Trump announced that ...|News|December 29, 2017|0
|4|Pope Francis Just Called Out Donald Trump Dur...|Pope Francis used his annual Christmas Day mes...|News|December 25, 2017|0

df.tail()
  title text subject date Reality
44893 'Fully committed' NATO backs new U.S. approach... BRUSSELS (Reuters) - NATO allies on Tuesday we... worldnews August 22, 2017 1
44894 LexisNexis withdrew two products from Chinese ... LONDON (Reuters) - LexisNexis, a provider of l... worldnews August 22, 2017 1
44895 Minsk cultural hub becomes haven from authorities MINSK (Reuters) - In the shadow of disused Sov... worldnews August 22, 2017 1
44896 Vatican upbeat on possibility of Pope Francis ... MOSCOW (Reuters) - Vatican Secretary of State ... worldnews August 22, 2017 1
44897 Indonesia to buy $1.14 billion worth of Russia... JAKARTA (Reuters) - Indonesia will buy 11 Sukh... worldnews August 22, 2017 1

以上から同一ファイル内でTrueとFakeが両方あることを確認できました。

subjectというものがあるので見てみましょう。もしトランプ氏とまず関係ないものがあればそのニュースはカットします。

df["subject"].unique()
array(['News', 'politics', 'Government News', 'left-news', 'US_News',
       'Middle-east', 'politicsNews', 'worldnews'], dtype=object)
#トランプ関係はどのジャンルでも関わる可能性が高いのでここでは考えないことにします。

次に日付を分離してみます。

df = pd.concat([df['title'], df['text'], df['subject'],df["date"]\
                .str.extract('(?P<Month>.*) (?P<Day>.*), (?P<Year>.*)',expand=True),df["date"],df["Reality"]], axis=1)
df.head()

|title|text|subject|Month|Day|Year|date|Reality|
|:-----------|------------:|:------------:|:------------:|:------------:|:------------:|------------:|------------:|------------:|
|0 |Donald Trump Sends Out Embarrassing New Year’... |Donald Trump just couldn t wish all Americans ... |News |December |31 |2017 |December 31, 2017 |0
|1 |Drunk Bragging Trump Staffer Started Russian ... |House Intelligence Committee Chairman Devin Nu... |News |December |31 |2017 |December 31, 2017 |0
|2 |Sheriff David Clarke Becomes An Internet Joke... |On Friday, it was revealed that former Milwauk... |News |December |30 |2017 |December 30, 2017 |0
|3 |Trump Is So Obsessed He Even Has Obama’s Name... |On Christmas day, Donald Trump announced that ... |News |December |29 |2017 |December 29, 2017 |0
|4 |Pope Francis Just Called Out Donald Trump Dur... |Pope Francis used his annual Christmas Day mes... |News |December |25 |2017 |December 25, 2017 |0

これで日付もうまく分離できたように見えましたが問題が。

df.isnull().sum()
title       0
text        0
subject     0
Month      45
Day        45
Year       45
date        0
Reality     0
dtype: int64

ここでうまくいってない日があるようです。うまくいっている部分と切り分けて確認をしていきます。

nonull = df.dropna()
nonull.isnull().sum()
title      0
text       0
subject    0
Month      0
Day        0
Year       0
date       0
Reality    0
dtype: int64
null = df[df.isnull().any(axis=1)]
#ここでうまくいっていないもののみを確認。
null.head()
  title text subject Month Day Year date Reality
9050 Democrat Senator Warns Mueller Not To Release ... According to The Hill, Democrat Senator Bob Ca... politics NaN NaN NaN 19-Feb-18 0
9051 MSNBC ANCHOR Flabbergasted at What Texas Teach... If we protect every other government building ... politics NaN NaN NaN 19-Feb-18 0
9052 WATCH: SNOWFLAKES ASKED Communist Party Platfo... Ami Horowitz is fantastic! Check out this man ... politics NaN NaN NaN 19-Feb-18 0
9053 JUST IN: BADASS GENERAL JOHN KELLY Shoved Chin... Just one more reminder of why President Trump ... politics NaN NaN NaN 18-Feb-18 0
9054 DOJ’s JEFF SESSIONS Opens Investigation Into W... Thank goodnesss Jeff Sessions is moving on fin... politics NaN NaN NaN 18-Feb-18 0
null = null.drop(["Month", "Day", "Year"], axis=1)
#ここで改めて年月日を作り直す
null = null.reset_index(drop=True)
null.head()

|title |text |subject |date |Reality
|:-----------|------------:|:------------:|------------:|------------:|------------:|
|0 |Democrat Senator Warns Mueller Not To Release ... |According to The Hill, Democrat Senator Bob Ca... |politics |19-Feb-18 |0
|1 |MSNBC ANCHOR Flabbergasted at What Texas Teach... |If we protect every other government building ... |politics |19-Feb-18 |0
|2 |WATCH: SNOWFLAKES ASKED Communist Party Platfo... |Ami Horowitz is fantastic! Check out this man ... |politics |19-Feb-18 |0
|3 |JUST IN: BADASS GENERAL JOHN KELLY Shoved Chin... |Just one more reminder of why President Trump ... |politics |18-Feb-18 |0
|4 |DOJ’s JEFF SESSIONS Opens Investigation Into W... |Thank goodnesss Jeff Sessions is moving on fin... |politics |18-Feb-18 |0

終わりの部分も見てみましょう。

null.tail()

|title |text |subject |date |Reality
|:-----------|------------:|:------------:|------------:|------------:|------------:|
|40 |https://fedup.wpengine.com/wp-content/uploads/...| https://fedup.wpengine.com/wp-content/uploads/...| Government News| https://fedup.wpengine.com/wp-content/uploads/... |0
|41 |https://fedup.wpengine.com/wp-content/uploads/...| https://fedup.wpengine.com/wp-content/uploads/...| Government News| https://fedup.wpengine.com/wp-content/uploads/... |0
|42 |Homepage |[vc_row][vc_column width= 1/1 ][td_block_trend...| left-news| MSNBC HOST Rudely Assumes Steel Worker Would N... |0
|43 |https://fedup.wpengine.com/wp-content/uploads/...| https://fedup.wpengine.com/wp-content/uploads/...| left-news| https://fedup.wpengine.com/wp-content/uploads/... |0
|44 |https://fedup.wpengine.com/wp-content/uploads/...| https://fedup.wpengine.com/wp-content/uploads/...| left-news| https://fedup.wpengine.com/wp-content/uploads/... |0

日付がURLになっているものまで出てきています。他の情報までURLとなっているのでそういったものは除外しましょう。

日付が〇〇-〇〇-〇〇と表記されているものが多いのでそこから手をつけていきます。

null_dates = null["date"].str.extract('(?P<Day>.*)-(?P<Month>.*)-(?P<Year>.*)',expand=True)
null_dates.dtypes
Day      object
Month    object
Year     object
dtype: object

null_dates
#年月日を分離したがそれでもうまくいってないものを見ます。分量が多くなりすぎてしまうので該当しない部分は「省略」します。
  Day Month Year
省略  省略  省略  省略
35 https://100percentfedup.com/served-roy-moore-v... commander soldier/
36 https://100percentfedup.com/video-hillary-aske... some pie/
37 https://100percentfedup.com/12-yr-old-black-co... from left/
38 NaN NaN NaN
39 NaN NaN NaN
40 NaN NaN NaN
41 NaN NaN NaN
42 NaN NaN NaN
43 NaN NaN NaN
44 NaN NaN NaN

該当箇所が最後の方だったので該当箇所を見ていきます。

null["date"].tail(10)
35    https://100percentfedup.com/served-roy-moore-v...
36    https://100percentfedup.com/video-hillary-aske...
37    https://100percentfedup.com/12-yr-old-black-co...
38    https://fedup.wpengine.com/wp-content/uploads/...
39    https://fedup.wpengine.com/wp-content/uploads/...
40    https://fedup.wpengine.com/wp-content/uploads/...
41    https://fedup.wpengine.com/wp-content/uploads/...
42    MSNBC HOST Rudely Assumes Steel Worker Would N...
43    https://fedup.wpengine.com/wp-content/uploads/...
44    https://fedup.wpengine.com/wp-content/uploads/...
Name: date, dtype: object

最早日付自体が滅茶苦茶になっていることがわかります。

該当箇所を削除します。

null = null[:-10]
null_dates = null_dates[:-10]

日付のおかしな部分は削除したものの日付を同じ形にし就任前のものを削除するという課題が残っています。

続けて取り組んでいきましょう。

#月の表記
df["Month"].unique()
array(['December', 'November', 'October', 'September', 'August', 'July',
       'June', 'May', 'April', 'March', 'February', 'January', nan, 'Dec',
       'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'Apr', 'Mar', 'Feb',
       'Jan'], dtype=object)

null_dates["Month"].unique()
array(['Feb'], dtype=object)

null_dates["Month"] = "February"
#FebのみなのでFebruaryに合わせます。
#年の表記
null_dates["Year"].unique()
array(['18'], dtype=object)

null_dates["Year"] = "2018"
#18のみなので2018に統一
null_filled = pd.concat([null['title'], null['text'], null['subject'],\
                null_dates["Month"],null_dates["Day"], null_dates["Year"],null["date"],\
                null["Reality"]], axis=1)
#nullとnull_datesを整える
table = pd.concat([nonull, null_filled], axis=0)
table = table.drop("date", axis=1)
#これで日付の形式を統一できた
table = table.reset_index(drop=True)
#ここでインデックスを順序通りにする
#subject
le = LabelEncoder()
encoded = le.fit_transform(table['subject'].values)
decoded = le.inverse_transform(encoded)
table['subject'] = encoded
#直接関係はないがsubjectを数字に変換しておく
#月の統一
table["Month"].unique()
array(['December', 'November', 'October', 'September', 'August', 'July',
       'June', 'May', 'April', 'March', 'February', 'January', 'Dec',
       'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'Apr', 'Mar', 'Feb',
       'Jan'], dtype=object)

table["Month"] = table["Month"].map({'December':12, 'November':11, 'October':10, 'September':9, 'August':8, 'July':7,
       'June':6, 'May':5, 'April':4, 'March':3, 'February':2, 'January':1, 'Dec':12,
       'Nov':11, 'Oct':10, 'Sep':9, 'Aug':8, 'Jul':7, 'Jun':6, 'Apr':4, 'Mar':3, 'Feb':2,
       'Jan':1})
#型変換
table.dtypes
#Day,Yearがobjectになってるので直す
title      object
text       object
subject     int64
Month       int64
Day        object
Year       object
Reality     int

table["Day"] = table["Day"].astype("int64")
table["Year"] = table["Year"].astype("int64")

table.dtypes
title      object
text       object
subject     int64
Month       int64
Day         int64
Year        int64
Reality     int64
dtype: object
table.isnull().sum()
title      0
text       0
subject    0
Month      0
Day        0
Year       0
Reality    0
#これで欠損値の問題は解決

ここまで型変換や表記の統一などを続けて行ってきました。

最後にトランプ氏が就任した2017年1月20日以前のニュースはカットします。

そのためdatetimeを用います。

dates = table[["Year", "Month", "Day"]]

dates = pd.to_datetime(dates)
dates.head()
0   2017-12-31
1   2017-12-31
2   2017-12-30
3   2017-12-29
4   2017-12-25
dtype: datetime64[ns]
news = pd.concat([table, dates], axis=1)
news = news.rename(columns={0: 'dates'})
news = news[["text", "dates", "Reality"]]
news[news["dates"] > dt.datetime(2017,1,20)]
#大統領が就任する前はすべてカット
news = news.drop("dates", axis=1)
news.head()
#これで完成。
  text Reality
0 Donald Trump just couldn t wish all Americans ... 0
1 House Intelligence Committee Chairman Devin Nu... 0
2 On Friday, it was revealed that former Milwauk... 0
3 On Christmas day, Donald Trump announced that ... 0
4 Pope Francis used his annual Christmas Day mes... 0

これでトランプ氏就任以降のニュースとその真偽をまとめたものが完成しました。

最後にcsvファイルに保存し次のステップに進んでいきましょう。

news.to_csv("news_for_learning.csv", index=False)

Step2:トランプ氏のツイートのデータを判定用に前処理

次にTrump Tweets Tweets from @realdonaldtrumpから大統領就任以降のツイートを抽出していきます。

データを読み込み中身を見てみましょう。

import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import datetime as dt

import warnings
warnings.filterwarnings('ignore')

trump = pd.read_csv("trumptweets.csv")

trump.head()
  id link content date retweets favorites mentions hashtags geo
0 1698308935 https://twitter.com/realDonaldTrump/status/169... Be sure to tune in and watch Donald Trump on L... 2009-05-04 20:54:25 500 868 NaN NaN NaN
1 1701461182 https://twitter.com/realDonaldTrump/status/170... Donald Trump will be appearing on The View tom... 2009-05-05 03:00:10 33 273 NaN NaN NaN
2 1737479987 https://twitter.com/realDonaldTrump/status/173... Donald Trump reads Top Ten Financial Tips on L... 2009-05-08 15:38:08 12 18 NaN NaN NaN
3 1741160716 https://twitter.com/realDonaldTrump/status/174... New Blog Post: Celebrity Apprentice Finale and... 2009-05-08 22:40:15 11 24 NaN NaN NaN
4 1773561338 https://twitter.com/realDonaldTrump/status/177... "My persona will never be that of a wallflower... 2009-05-12 16:07:28 1399 1965 NaN NaN NaN
trump.dtypes
id             int64
link          object
content       object
date          object
retweets       int64
favorites      int64
mentions      object
hashtags      object
geo          float64
dtype: object

様々な内容がありますがここではdate(日付)とcontent(内容)のみを使うことになります。

日付をdatetimeに直していきます。

trump['Date'] = pd.to_datetime(trump['date'])
trump[trump["Date"] > dt.datetime(2017,1,20)]

これで大統領就任前のツイートはすべて消去しました。

content以外のデータは削除しTruthとPercentageという新しい項目を追加します。

モデルを作成し検証をする際、TruthにTrueかFakeかの結論、Percentageに計算結果の可能性を格納します。

trump = trump[["content"]]
trump["Truth"] = "Unknown"
#これで内容はcontentとTruthのみに。真偽判定の結果はTrueとFakeの文字型で。
trump["Percentage"] = 0
#パーセンテージも追加しておく
trump = trump.reset_index(drop=True)
#ここでインデックスを順序通りにする
trump.head()
  content Truth Percentage
0 Be sure to tune in and watch Donald Trump on L... Unknown 0
1 Donald Trump will be appearing on The View tom... Unknown 0
2 Donald Trump reads Top Ten Financial Tips on L... Unknown 0
3 New Blog Post: Celebrity Apprentice Finale and... Unknown 0
4 "My persona will never be that of a wallflower... Unknown 0

これで必要な情報だけに絞り込めたので新たなcsvファイルに保存します。

trump.to_csv("trump_for_judging.csv", index=False)

次のステップでモデル作成に取り組んでいきます。

Step3:ニュースのデータを基にモデル作成

必要なcsvファイルは一通り揃ったので今度はニュースの判定をするモデルを作っていきます。

ここでは単純ベイズ分類器を利用します。

import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split

from nltk.classify import NaiveBayesClassifier
from nltk.classify.util import accuracy as nltk_accuracy

import pickle

news = pd.read_csv("news_for_learning.csv")
#Step1で作成したcsvファイル

今回はTrueとFakeそれぞれでリストを作成しそれぞれに該当する単語を辞書形式で格納していきます。

Fake =[]
Fact = []

for text, reality in zip(news['text'], news['Reality']):
    line = text.split(" ")
    dic = {}
    if reality == 0:
        for word in line:
            dic[word] = True
        ireru = (dic, 0)
        Fake.append(ireru)
    else:
        for word in line:
            dic[word] = True
        ireru = (dic, 1)
        Fact.append(ireru)

これでそれぞれのリストに単語を格納できました。

例えばFake[0]と出力させるだけでも膨大な量の単語が出てくるのでここでは省略します。

それでは訓練データとテストデータを作成しへと繋げていきます。ここではデータの9割を訓練に利用します。

threshold = 0.9
num_fake = int(threshold * len(Fake))
num_fact = int(threshold * len(Fact))

features_train = Fake[:num_fake] + Fact[:num_fact]
features_test = Fake[num_fake:] + Fact[num_fact:]

classifier = NaiveBayesClassifier.train(features_train)
print('Accuracy of the classifier:', nltk_accuracy(classifier, features_test))
Accuracy of the classifier: 0.9585746102449889

精度を見ると95%以上でかなり高いことがわかります。どういった単語がカギを握るのか見ていきましょう。

N = 15
print('Top ' + str(N) + ' most informative words:')
for i, item in enumerate(classifier.most_informative_features()[:N]):
    print(str(i+1) + '. ' + item[0]) 

Top 15 most informative words:
1. (Reuters)
2. -
3. -
4. screenshot
5. Image:
6. MOSCOW
7. BERLIN
8. screengrab
9. Images
10. Editing
11. WASHINGTON
12. Kurdistan
13. corrects
14. racists
15. Image

このように見ると記号や地名、中にはracistといったものが重要となることがわかります。

最後にモデルを保存しましょう。

filename = 'model_for_trump.sav'
pickle.dump(classifier, open(filename, 'wb'))

これで保存完了です。

Step2でこれまで記述してきたコードに続き以下のコードを実行しニュースをコピペすると真贋判定が出ます。

冒頭でも言及したようにあくまで計算上の結果であり本当にそうなのかという保証はできないのであくまで自己責任でお願いします。

def extract_features(words):
    return dict([(word, True) for word in words])
    print(dict([(word, True) for word in words]))
#先程のリストと同じ形式で辞書を格納させる

#文章をその場で入力したものを見る
input_review = input()
print("Fact Check:")
#extract_features(input_review)
print("\nNews Text:",input_review)
features = extract_features(input_review.split())
print(features)
probabilities = classifier.prob_classify(features)
predicted_truth = probabilities.max()
if predicted_truth == 0:
    answer = "Fake News!!!"
else:
    answer = "True News!!!"
print("Predicted Answer:", answer)
print("Probability:", round(probabilities.prob(predicted_truth), 2))

Step4:モデルを用いてツイートの真偽を検証

最後のステップではいよいよトランプ氏のツイートの検証をしていきます。

ファイルやライブラリの読み込みから始めていきましょう。

import pandas as pd
import pickle

trump = pd.read_csv("trump_for_judging.csv")
#トランプのツイートをロードする
classifier = pickle.load(open('model_for_trump.sav', 'rb'))
# 保存したモデルをロードする

import matplotlib.pyplot as plt
import seaborn as sns
#最後に真偽の比率を確認する

次に真贋判定をする関数を作成します。これは前のステップの最後のコードに少し手を加えたものです。

def FactCheck(event):   
    global answer
    global percentage
    line = event.split(" ")
    dic = {}
    for word in line:
        dic[word] = True
    probabilities = classifier.prob_classify(dic)    
    predicted_truth = probabilities.max()
    percentage = round(probabilities.prob(predicted_truth))
    if predicted_truth == 0:
        answer = "Fake"
    else:
        answer = "True"
    return answer

ここでは各ニュースに対する判定結果をTrueとFakeの二択とし、どれくらいの可能性でその判定が出ているかの数値も出力できるようにしています。

これから判定作業を行いそれぞれの結果を先程読み込んだcsvファイルに書き込んでいきます。

for i, v in trump.iterrows():
    FactCheck(v["content"])
    trump.at[trump.index[i], 'Truth'] = answer
    trump.at[trump.index[i], 'Percentage'] = percentage

trump.head()
  content Truth Percentage
0 Be sure to tune in and watch Donald Trump on L... Fake 1
1 Donald Trump will be appearing on The View tom... Fake 1
2 Donald Trump reads Top Ten Financial Tips on L... Fake 1
3 New Blog Post: Celebrity Apprentice Finale and... Fake 1
4 "My persona will never be that of a wallflower... True 1
これでツイートに対し判定結果と数値を出すことができました。

それでは真贋の比率をグラフにしてみましょう。

f,ax=plt.subplots(1,2,figsize=(18,8))
trump['Truth'].value_counts().plot.pie(explode=[0,0.1],autopct='%1.1f%%',ax=ax[0],shadow=True)
ax[0].set_title('Truth')
ax[0].set_ylabel('')
sns.countplot('Truth',data=trump,ax=ax[1])
ax[1].set_title('Truth')
plt.show()

trump.describe()

image.png

  Percentage
count 41122.0
mean 1.0
std 0.0
min 1.0
25% 1.0
50% 1.0
75% 1.0
max 1.0

Trueが13.6%。ツイートのうち約7回に6回がFakeという結果でした。

また、全ツイートのパーセンテージが1、つまり100%正しいという計算結果が出ていたようでした。

終わりに

今回Kaggleにあるニュースの真贋を明記したファイルを用いてモデルを作成しトランプ氏のツイートの真贋判定を行いました。

その結果同氏のツイートの約7回に6回がフェイクの可能性が高いという結果が出ました。

パーセンテージのところですべて1と出てしまうのはどうしてなのかが疑問点なので検証していくつもりです。

初めでも述べましたがこれはあくまで計算上の結果なのでこの検証結果が事実と合致するという保証はできません。

また、特定の政治的立場に立ち誰かを擁護したり批判する意図はないので改めてご理解いただけると幸いです。

長い記事になりましたが最後まで読んでくださりありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?