目次
動的トピック モデリングと BERTopic を使用して、トランプ大統領のツイートのトピックが時間の経過とともにどのように変化するかを視覚化します。これらのトピックは視覚化され、徹底的に調査されます。
動的トピックモデル
動的トピック モデルを使用すると、ドキュメントのコレクションについて時間の経過に伴うトピックの進化を分析できます。
BERトピックをダウンロード
%%capture
!pip install bertopic
情報処理
import re
import pandas as pd
from datetime import datetime
# Load data
trump = pd.read_csv('https://drive.google.com/uc?export=download&id=1xRKHaP-QwACMydlDnyFPEaFdtskJuBa6')
# Filter
trump.text = trump.apply(lambda row: re.sub(r"http\S+", "", row.text).lower(), 1)
trump.text = trump.apply(lambda row: " ".join(filter(lambda x:x[0]!="@", row.text.split())), 1)
trump.text = trump.apply(lambda row: " ".join(re.sub("[^a-zA-Z]+", " ", row.text).split()), 1)
trump = trump.loc[(trump.isRetweet == "f") & (trump.text != ""), :]
timestamps = trump.date.to_list()
tweets = trump.text.to_list()
tweets[0]
#republicans and democrats have both created our economic problems#
基本的なトピックモデル
BERTopic を使用して動的なトピック モデリングを実行するには、まずすべてのツイートを使用して基本的なトピック モデルを作成する必要があります。現在、これらのツイートのトピックのみに関心があるため、時間的な側面は無視されます。
from bertopic import BERTopic
topic_model = BERTopic(min_topic_size=35, verbose=True)
topics, _ = topic_model.fit_transform(tweets)
次に、最も一般的なトピックを抽出できます。
freq = topic_model.get_topic_info(); freq.head(10)
-1 はすべての外れ値を示し、通常は無視する必要があります。次に、生成される一般的なトピックを見てみましょう。
topic_model.get_topic(4)
トピック間距離プロットを使用して、作成された基礎となるトピックを視覚化できます。これにより、時間をかけてテーマを作成し続ける前に、基本的なテーマで十分であるかどうかを視覚的に判断できます。
fig = topic_model.visualize_topics(); fig
時間の経過に伴うテーマ
動的トピックのモデリング手順を開始する前に、以前に作成したトピックに満足していることが重要です。これらの特定のトピックを動的トピック モデリングの基礎として使用します。
したがって、このステップでは主に、以前に定義されたトピックが時間の経過とともにどのように進化するかを示します。
パラメータに注意する
ドキュメント
これらは私たちが使用しているツイートです
タイムスタンプ
各ツイート/ドキュメントのタイムスタンプ
グローバルチューニング
時刻 t におけるトピックのトピック表現をそのグローバル トピック表現で平均するかどうか
進化チューニング
時刻 t におけるトピックのトピック表現を、時刻 t-1 におけるそのトピックのトピック表現と平均するかどうか
nr_bins
タイムスタンプを入れるビンの数。何千もの異なるタイムスタンプにまたがるトピックを抽出するのは、計算効率が悪くなります。したがって、この値を 20 未満に保つことをお勧めします。
topics_over_time = topic_model.topics_over_time(docs=tweets,
timestamps=timestamps,
global_tuning=True,
evolution_tuning=True,
nr_bins=20)
トピックを時間の経過とともに視覚化する
時間次元が増加するにつれてトピックへのアクセスが難しくなるため、topics_over_time を作成した後、これらのトピックを視覚化する必要があります。
これを行うために、トピックの頻度に基づいて時間の経過に伴うトピックの分布を視覚化します。そうすることで、テーマが時間の経過とともにどのように進化するかを確認できます。必ず任意の点の上にマウスを移動して、時刻 t におけるトピック表現がグローバル トピック表現とどのように異なるかを確認してください。
topic_model.visualize_topics_over_time(topics_over_time, top_n_topics=20)