【18個掲載】Twitter分析に使えるデータセットまとめ

2020年11月17日

AIの研究者や開発者にとって機械学習用の公開データを見つけるのは困難な作業かもしれませんが、オープンソースの一つとしてTwitterデータを利用することもできます。数々の教育機関や研究チーム、個人の研究者などがTwitterから抽出されたツイートのデータを公開しています。感情分析モデレーション、その他の自然言語処理の活用事例に至るまで、Twitterデータは様々な機械学習アルゴリズムの開発に利用されています。 

以下にTwitter解析に利用できる、公開されているTwitterデータセットを20件まとめました。

 

Twitterデータセット

Apple Twitterセンチメント: 大手IT企業Appleに関するツイートから構成されるデータセット。ハッシュタグ #AAPL や @apple などを含むツイートがAppleに対する感情に応じてポジティブ、ネガティブ、ニュートラルに分類されている。 

アベンジャーズ/エンドゲームに関するツイート: ハッシュタグ #AvengersEndgame を含む10,000件のツイートから構成される機械学習用データセット。

Twitterにおけるシャーロッツビル: シャーロッツビルに言及しているツイートやハッシュタグ #Charlottesville を含むツイート150,000件から構成されるデータセット。

フランス語と英語の信頼性コーパス: 情報の信頼性を分析し、誤った情報や噂を検出するために作成されたコーパス。噂に関するフランス語と英語のツイートから構成されている。 

Twitterのカスタマーサポート: Twitterのカスタマーサービス・サポートラインのツイートやリプライツイートを抽出した、大規模なコーパス

トランプ大統領全ツイート: トランプ大統領が投稿した全てのツイートをまとめたデータセット。データは後にTrumpTwitterArchiveに移動されたが、まだアクセス可能。

ゲーム・オブ・スローンズ シーズン8のツイート: ゲーム・オブ・スローンズ シーズン8の各エピソードに対する視聴者の反応を把握するため、各エピソード放映後にゲーム・オブ・スローンズ関連のツイートを抽出して作成したデータセット。 

前処理済みツイート: 感情分析用に前処理を行ったツイートから構成されるソーシャルメディアのシンプルなデータセット。ツイートはポジティブ、ニュートラル、ネガティブに分類されている。

ロシアのトロールツイート: 2016年米国大統領選へのロシアの関与をめぐる調査に伴ってTwitterが削除したロシアのトロールツイート200,000件から構成される。個々のツイートとそれらが投稿されたアカウントの詳細が含まれるデータセット。

センチメント140: 各ツイートからブランド、トピック、製品に関する全体的な感情を検出するツール。学習データは当サイトからダウンロード可能。

SMILE Twitterエモーション: 3,085件のツイートを含む感情分析用のシンプルなデータセット。それぞれのツイートには怒り、嫌悪、幸福、驚き、悲しみなど様々な感情が表現されている。 

Stanford Twitterデータセット: 米スタンフォード大学のSNAPライブラリデータベースからのデータセット。七カ月にわたり2000万人のユーザーから抽出された、4億7600万件のツイートが含まれる。

Twitterで最もフォロワー数の多いユーザー、トップ20: Twitterで最もフォロワー数の多いユーザー20人のツイート52,000件以上を含むデータセット。 リツイートは抽出されていない。

Twitter航空会社センチメント: 米国の主要航空会社に関するツイートがポジティブ、ニュートラル、ネガティブに分類されている。 

Twitter友達: プロフィール画像、フォロワー数、友達の数、アカウント名、ユーザーネーム、ユーザーがフォローしているアカウント、ユーザーの言語、最後の投稿に関する情報、ユーザーが使用したハッシュタグ、ユーザーの最後のツイートのIDなどのユーザー情報が含まれる機械学習用データセット。

Twitterニュースデータセット: Twitterからのニュースイベント5234件とこれらニュースイベントに関するツイートが含まれる。

Twitterユーザーデータ: 20,000行で構成されるTwitterのユーザーデータセット。ユーザー名、ランダムツイート、アカウントプロフィール、画像抽出、位置情報などが含まれる。 

マサチューセッツ大学 Twitterデータセットにおけるグローバルな英語: ツイートの言語を識別する分類子を構築するために作成された、10,000件以上のツイートから構成されるデータセット。各ツイートは英語と英語以外にアノテーションされ、コードスイッチング、言語の曖昧さ、自動生成かどうかなどの情報が含まれる。130カ国からのツイートが抽出されている。 

 

Twitter分析ツール

Twitter分析ツールを導入することによって、マーケティング担当者はフォロワーの傾向やトレンド全般をより把握し、より適切なツイートを配信することができます。公式のTwitter分析ツール(Twitter analytics)と一緒に使い、Twitterデータをより可視化することをお勧めします。ツイッターのフォローツール、投稿や画像抽出など、様々なツールがあります。

Tweroid: 自社アカウントのフォロワーが活動している時間帯を調査できる、Twitter分析ツールです。1時間単位でフォロワーの活動している時間をグラフで表示し、比較することができます。また、フォロワーからのリプライが多い時間帯もわかります。

HottoLink: ターゲットの属性、興味や関心、トレンド、インフルエンサーの特定、Twitterデータと様々案データ(検索、アクセス数、売上など)の相関分析を行ってくれるツールやサービスを提供している。

Arc: TwitterやInstagramなど、SNS上の口コミを抽出し、分析するツールです。国産初のTwitter分析ツールとして2010年4月に発売以来、多くの企業に導入されているようです。

 

Twitterからツイートをスクレイピングするには

Twitterからツイートをスクレイピングすれば、世界中の最新動向を知ったり、ビジネスの見込み客を判定し、最新トレンドのマーケティング価値のデータに基づいた分析ができます。Twitterスクレイピングのツールは、ScrapeStormTwitterScraperなどがありますが、このようなスクレイピングツールをお使いになる前にTwitter API制約をご確認ください。Twitter Developerポータルから開発用アカウントの申請が必要となるでしょう。 

 

Twitterデータの感情分析

ソーシャルメディア分析の中でも研究が盛んな分野の一つがTwitterデータの感情分析です。Twitterは、世界で最も人気のあるソーシャルメディアプラットフォームの一つであり、3億3千万人の月間アクティブユーザーを抱え、毎日5億件のツイートが送信されています。これらのツイートの感情を注意深く分析する(ポジティブ、ネガティブ、ニュートラルに分類するなど)ことによって、特定のトピックに関して人々がどのように感じているのかについて多くを学ぶことができます。

ツイートの感情分析は、マーケティングや政治、行動分析、情報収集など様々な目的に活用できます。例えば、マーケターが製品の発売やマーケティングキャンペーンに対する顧客の反応を分析したり、政党が政策の変更や発表に対する市民の反応を理解したりする上で役立ちます。

とはいえ、Twitterデータの分析は簡単な作業ではありません。毎秒6,000件ほどのツイートが投稿されているのですから膨大な数のTwitterデータが存在します。さらに、人間がツイートの感情を分析するのは簡単ですが、人間による感情分析は拡張可能ではありません。

ここでは、Twitter感情分析用のスケーラブルなシステムを構築し、ソーシャルメディアデータ分析における機械学習の役割を理解することを目指します。ネガティブな感情が含まれるツイートを判別する方法を学びます。そのために、テキスト形式のツイートをポジティブとネガティブに分類する感情分析器を作成します。ここでは、Twitterデータ分析用の分類器を使用しますが、他のソースからのテキストデータの分析にも利用できます。 

まず、Twitterデータの収集から始めましょう。オープンソースの感情分析用Twitterのツイートデータを利用します。このデータセットに含まれる32,000件のツイートのうち、2,000件はネガティブな感情です。 

このデータセットのターゲット変数は‘ラベル’とし、ネガティブなツイートは1、その他のツイートは0に対応させます。ターゲット変数は、「予測したい対象」を指すと考えてください。上記の機械学習の問題を解くため、このデータを使って分類機のトレーニングを行い、新たに入力するどのようなツイートに対しても帰属クラスを予測できるようにします。

下の画像は、このデータのスナップショットです。

テキストデータの前処理

データは通常、様々なソースから取得しているので、多くの場合、多種多様な形式が混在しています。そのため、データクレンジングは前処理に不可欠です。ただし、テキストデータにはしばしば、冗長な言い回しや単語の繰り返しが含まれるため、クリーニングは簡単な作業ではありません。Twitterでは特にその傾向が強いので、テキストデータの前処理がTwitterの感情分析ソリューションに向けた最初のステップになります。

テキスト前処理に含まれる基本的なステップは次の通りです。

  • データクレンジング
  • トークン化
  • 語幹処理(ステミング)

 

データクレンジング

テキストの意味に価値を付加しない単語や文字を削除します。標準的な前処理手法の例は次の通りです。

  • 小文字に変換
  • メンションの削除
  • 特殊文字の削除
  • ストップワードの削除
  • ハイパーリンクの削除
  • 数字の削除
  • 空白の削除

 

英語などでは小文字に変換

テキストを小文字に変換することは、次のような理由から必要不可欠です。「Tweet」や「TWEET」、「tweet」などの語は全て文に同じ価値を加えます。全ての単語を小文字に変換することは、語彙サイズを小さくして次元を削減する上で役立ちます。

def to_lower(word):       result = word.lower()       return result

 

メンションの削除

ツイートではしばしばメンションが使われますが、メンションはツイートの感情の解釈には価値を付加しないので削除できます。メンションは常に「@メンション」の形式で表示されるため、「@」で始まる文字列を削除します。データセット全体でこれを実行するためには、次の関数を利用します。

def remove_mentions(word):       result = re.sub(r"@\S+""", word)       return result

 

特殊文字の削除

このテキスト処理手法は、「万歳」と「万歳!」などの単語を同じように扱うために役立ちます。この段階で全ての句読点を削除します。

def remove_special_characters(word):       result = word.translate(str.maketrans(dict.fromkeys(string.punctuation)))       return result

 

ストップワードの削除

ストップワードは、「the」「a」「an」「is」など、その言語において頻出する単語です。 これらはTwitterデータ分析のために重要な情報を提供しないので削除します。

def remove_stop_words(words):       result = [i for i in words if i not in ENGLISH_STOP_WORDS]       return result

 

ハイパーリンクの削除

次に、データ内のURLを削除します。ツイートにURLが含まれていることは珍しくありませんが、今回のタスクではそれらを分析する必要はありません。

def remove_hyperlink(word):       return re.sub(r"http\S+""", word)

 

トークン化

トークン化とは、トークンと呼ばれる小さな要素にテキストを分割することです。各トークンが特徴量として機械学習アルゴリズムの入力になります。NLTK(Natural Language Toolkit)はデータをトークン化するためのユーティリティ関数を提供します。

from nltk.tokenize import word_tokenizetweets_data['tweet'] = tweets_data['tweet'].apply(word_tokenize)

 

語幹処理(ステミング)

語幹処理(ステミング)とは、トークンから接尾語を削除・置換して単語の語幹または原形を取得する作業です。例えば、「satisfied」「satisfaction」「satisfying」の語幹は「satisfy」であり、これら全てが同じ感情を表します。

Porter Stemmer(ポーターステマー)は広く使用されているステミング手法であり、nltk.stemは、ステミング用のユーティリティ関数である「PorterStemmer」を提供します。

from nltk.stem.porter import PorterStemmerstemmer = PorterStemmer()def stem_words(text):       return " ".join([stemmer.stem(word) for word in text])tweets_data['tweet'] = tweets_data['tweet'].apply(lambda text: stem_words(text))

 

単語埋め込み手法

テキスト形式のデータは大量に存在します。そして、機械にとってテキストの裏側にあるセマンティクスを理解することは難しいので、テキストデータの分析は非常に複雑なタスクです。このステップでは、単語埋め込みを用いて、テキストデータを機械が理解できる形式に変換します。単語埋め込みとは、単にテキスト形式のデータを数値(またはベクトル)に変換する処理のことです。こうすることによって、取得したベクトルを機械に入力として与え、代数の概念を利用してデータを分析できるのです。ただし、この変換を実行すると、データ損失が生じる可能性があることに注意してください。重要なのは、変換とデータ保持のバランスを取ることです。ここで、このステップでよく使用される二つの用語をご紹介しておきましょう。

  • 各テキストデータポイントは文書と呼ばれます。
  • 文書セット全体のことをコーパスと呼びます。

テキスト処理はBag of words、TF-IDF、Word2Vecの手法を用いて行われます。

 

Bag of Words

Bag of Wordsは、一意の単語の辞書を用いて文書をベクトルに変換するシンプルな手法です。これは、以下のようにたった二つのステップで実行できます。

 

辞書の作成

データコーパス内の全ての一意の単語に関するベクトル形式の辞書を作成します。コーパス内の一意の単語の数を‘d’とします。この場合、各単語が次元に対応するので、この辞書ベクトルはd次元のベクトルです。

 

ベクトルの作成

例えば、rᵢの文書に対してvᵢのベクトルを作成する場合、d次元のvᵢは次の二種類の方法で作成できます。

  1. 辞書内の各単語が文書内に出現する回数を表示して、各文書に対応するvᵢを作成します。
  2. 以下の手法を用いて、各文書に対応するvᵢを作成します。
    • 辞書内の各単語が文書内に存在する場合は1
    • 辞書内の各単語が文書内に存在しない場合は0 

この手法は Binary Bag of Wordsと呼ばれます。これで、データコーパス内の一意の単語から成る辞書と各文書のベクトルが作成できました。これらのベクトルは以下の方法で分析することができます。

  • d次元空間にプロットする または
  • ベクトル間の距離を算出して類似度を取得する(ベクトル間の距離が近いほど、類似度が高い)

 

Term Frequency — Inverse Document Frequency(単語の出現頻度ー逆文書頻度)

テキストデータには、単語と文書、コーパスの三つの要素があります。Term Frequency — Inverse Document Frequency(単語の出現頻度ー逆文書頻度:TF-IDF)は、これらの要素の間の関係を利用してテキストデータをベクトルに変換します。Term Frequency(単語の出現頻度)は、単語と文書の間の関係を示し、Inverse Document Frequency(逆文書頻度)は単語とコーパス間の関係を表します。

 

Term Frequency(単語の出現頻度)の算出

Term Frequency(単語の出現頻度)は、 文書 rᵢ内に単語wⱼが出現する確率のことであり、次のように算出されます。

レビュー内の単語の出現頻度が高い場合、その単語がそのレビューで頻繁に使用されていることを示します。レビュー内の単語の出現頻度が低い場合、その単語がそのレビューでめったに使用されていないことを示します。

 

Inverse Document Frequencyの算出

Inverse Document Frequency(逆文書頻度:IDF)は、コーパス全体におけるその単語の出現頻度を示し、次のように算出されます。

逆文書頻度が低い場合、その単語はコーパスに頻繁に出現していることを示します。逆文書頻度が高い場合、その単語はコーパスでめったに使用されていないことを示します。ここで単なる逆数でなく、対数を使っているのは、スケーリングのためです。Term Frequency(単語の出現頻度)は確率であり、とり得る範囲は0から1となります。そのため、この逆数をとると、0から無限大までの値になり、IDFにバイアスが生じる可能性があります。この問題を解決するために対数を使うのは、広く受け入れられている簡単な手法だからです。 レビュー内の単語のTF-IDF = TF(単語,レビュー) * IDF(単語,コーパス)

各文書のベクトルは、各単語のTF-IDFで表されます。TF-IDF値を用いて文書をベクトルに変換することをTF-IDFベクトル化と呼びます。

TF-IDFベクトル化では、次のような単語を重視します。 

  • 文書に頻繁に出現する単語(TFより)
  • コーパス内でめったに使用されない単語(IDFより) 

 

Word2Vec

Bag of WordsとTF-IDFでは、文をベクトルに変換します。一方、Word2Vecでは、単語をベクトルに変換するのでWord2Vecと呼ばれます。Word2Vecは、大量のテキストを含むコーパスを入力として受け取り、通常数百次元のベクトル空間を生成します。コーパス内の一意の単語はそれぞれ空間内のベクトルに対応します。単語ベクトルは、コーパス内の共通のコンテキストを持つ単語が空間内の近い位置になるよう配置されます。例えば、男性から女性へのベクトルは王から女王へのベクトルと並行になります。

 

機械学習モデルにどの単語埋め込み手法を使うべきかについては明確な答えがありません。そのため、ユースケースに基づいて手法を選択します。Bag of Wordsは、文書分類でよく利用され、各単語の出現状況が分類機をトレーニングするための特徴量として利用されます。TF-IDFは、コンテンツのランキング要素としてGoogleなどの検索エンジンで利用されています。Word2vecは、文書の翻訳など多くの情報を必要とする場合に適しています。今回のTwitter感情分析では、単語埋め込み手法として「Bag of Words」を使用することにします。Scikit-learnライブラリがBag of Wordsを実行するための「CountVectorizer」関数を提供しているので、これを用いて前処理済みデータをベクトルに変換します。

from sklearn.feature_extraction.text import CountVectorizerbow=CountVectorizer( min_df=2, max_features=100000)bow.fit(tweets_data['tweet'])tweets_processed =bow.transform(tweets_data['tweet']).toarray()

ロジスティック回帰は、インターネットアプリケーションで広く利用されている教師あり機械学習分類アルゴリズムです。これは、分類問題を解決するための最も単純なアルゴリズムですが、非常に効率的です。今回のTwitterデータ分析では、これを利用して感情の確率を取得します。sklearn.linear_modelを利用すれば、ロジスティック回帰を実装できます。このモデルは、入力データが特定のクラスに属する確率を出力するので、新しいツイートを使ってTwitterデータ感情分析を行うことが可能です。

from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()model.fit(tweets_train, target_train) # training the modelprediction = model.predict_proba(tweets_test) # predicting on the test setprediction_int = prediction[:,1] >= 0.3 # if prediction is greater than or equal to 0.3 then 1 else 0prediction_int = prediction_int.astype(np.int)

 

入力したTwitterデータに対して特定のクラスに属する確率を出力できるTwitter感情分析モデルを構築したあとは、パフォーマンスを判断する方法が必要です。適合率と再現率は分類モデルで最も広く用いられている二つのパフォーマンス指標です。適合率は、関連しているとモデルが判定した全てのインスタンスのうち実際に関連していたインスタンスの割合を示します。これは、結果の有用性を理解するために役立ちます。再現率は、全ての関連インスタンスのうち、モデルが関連インスタンスと判定できた割合を示します。結果の網羅性に関する指標です。

F1値は適合率と再現率の調和平均です。例えば、検索クエリが30ページの結果を表示し、そのうち20ページは関連していましたが、他の関連結果40ページ分を表示できなかったとしましょう。この場合、適合率は20/30、再現率は20/60、F1値は4/9になります。分類問題のパフォーマンス指標にF1値を利用するのは、良い選択でしょう。

from sklearn.metrics import f1_scorefrom sklearn.metrics import confusion_matrix,f1_score, precision_score,recall_scorecf_matrix =confusion_matrix(target_test, prediction_int)tn, fp, fntp = confusion_matrix(target_test, prediction_int).ravel()print("Precision: {:.2f}%".format(100 * precision_score(target_test, prediction_int)))print("Recall: {:.2f}%".format(100 * recall_score(target_test, prediction_int)))print("F1 Score: {:.2f}%".format(100 * f1_score(target_test, prediction_int)))

import seaborn as snsimport matplotlib.pyplot as pltax= plt.subplot()#annot=True to annotate cellssns.heatmap(cf_matrix, annot=True, ax = ax,cmap='Blues',fmt='');# labels, title and ticksax.set_xlabel('Predicted labels');ax.set_ylabel('True labels');ax.set_title('Confusion Matrix');ax.xaxis.set_ticklabels(['Positive''Negative']); ax.yaxis.set_ticklabels(['Positive''Negative']);

 

従来型の機械学習アルゴリズムでF1値が73%であれば、実用化の準備が整っているモデルと言えるでしょう。とはいえ、モデルを改良する方法もいくつかあります。まず、費用はかかりますが、ディープラーニングを利用することができます。また、特徴量を追加したりスペルミスのある単語を削除したりして結果やフィードバックに対応することもできるでしょう。

さらに、これらの結果は学習データに基づいていることをお忘れなく。感情分析モデルを実際のデータに適用するときは、長期にわたってモデルのパフォーマンスを積極的に監視する必要があります。

 

Twitter感情分析の進め方

本記事では、様々なテキスト前処理手法や単語埋め込み手法について学び、前処理済みデータを基にTwitter感情分析分類モデルを実装しました。ソーシャルメディアデータ分析システムの仕組みやモデルの準備・実装に必要な作業についてご理解いただけましたでしょうか。ご紹介したテキスト前処理手法は、テキストデータに広く利用されています。とはいえ、常にこれらの手法全てを実行する必要はありません。課題に基づいて、前処理や埋め込みのステップを慎重に選択することが重要です。このことが感情分析データにおいて大きな役割を果たします。ソーシャルメディアデータ分析の世界、特にTwitterデータ分析では、作業の各ステップにおいてドメイン専門家のサポートがしばしば重要になります。ソーシャルネットワークで用いられている語彙は特定のコミュニティに固有であることが多いので、ドメイン専門家はデータの偏りを回避し、データセットの精度を高めるために役立ちます。また、本記事で解説した概念や手法は様々な自然言語処理問題に適用できます。Twitter感情分析のほかにもチャットボットの構築やテキスト要約、迷惑メール判定、そして翻訳モデルに同じような手法が利用できます。本記事のカスタムデータセットをご自分で試してみたい場合は、こちらからデータをダウンロードしてください。また、完全なコードはGithubをご覧ください。

※ 本記事の一部は2020年11月05日、弊社英語ブログに掲載された寄稿記事に基づいたものです。

 

Twitterデータセットをお探しですか?

お探しのデータセットが見つからない場合は、当社が作成いたします。お客様のニーズに合わせ、Twitter、Facebook、InstagramなどのSNSデータ収集やアノテーションサービスを提供し、AI研究開発をサポートいたします。データサイエンティストや言語学者を含み、100万人のアノテーターが登録されているので、大規模なデータベースの作成なども迅速且つ正確に仕上げます。アノテーターは秘密保持契約に署名することが義務付けられており、データ保護のためにオンサイトスタッフやリモートスタッフを派遣し、アノテーターにお客様ご指定のツールを利用してもらうこともできます。必要に応じて案件に特化した秘密保持契約も作成できるので、データの安全性も保証しております。ご相談・無料トライアルはこちらから。

SNSデータの収集やアノテーションサービスをお探しでしたら、お気軽にお問い合わせください。 無料トライアルもご利用いただけます。

メディア掲載結果

    AI・機械学習の最新情報をお届けします!

    Lionbridge AIのブログで紹介している事例記事やトレンドニュースといったビジネスに役立つ情報はもちろん、オープンデータセット集なども合わせてメール配信しております。