「テキスト分析の未来を明らかにする BERTを使用したトレンディなトピックモデリング」
BERTを使用したトレンディなトピックモデリング
イントロダクション
機械学習と自然言語処理において非常に効果的な手法は、トピックモデリングです。テキストのコーパスは、文書のコレクションの例です。この手法は、そこに現れる抽象的な主題を見つけることを目的としています。この手法は、テキストのコーパスの潜在的な構造を明らかにし、即座には見えないテーマやパターンを明らかにします。
数千ものツイートなどの大量のドキュメントの内容を分析するために、トピックモデリングアルゴリズムはテキストのパターンを見つけるために統計的な技術に依存しています。これらのアルゴリズムは、ドキュメント内の頻度や単語の共起を調べた後、いくつかの主題に論文を分類します。その結果、内容はより整理されて理解しやすくなり、データの潜在的なテーマやパターンを認識しやすくなります。
潜在ディリクレ割り当て(LDA)、潜在的意味解析、非負値行列因子分解などがトピックモデリングのいくつかの従来の手法です。しかし、このブログ記事では、トピックモデリングにBERTを使用しています。
詳細情報:トピックモデリングのための潜在ディリクレ割り当て(LDA)を使用する
- 「責任ある生成AIのための3つの新興プラクティス」
- ソフトウェア開発の進化:ウォーターフォールからアジャイル、デボップスそして更に先へ
- 「4つの方法で、生成AIがフィールドサービスオペレーションを革新する:潜在的な利用方法の探索」
学習目標
以下は、BERTを使用したトピックモデリングのワークショップの学習目標のリストです:
- トピックモデリングの基礎とNLPでの使用方法を理解する
- BERTの基礎とドキュメントの埋め込みの作成方法を理解する
- BERTモデルにテキストデータを準備するために前処理を行う
- [CLS]トークンを使用してBERTの出力からドキュメントの埋め込みを抽出する
- クラスタリング手法(K-meansなど)を使用して関連する資料をグループ化し、潜在的な主題を見つける
- 生成されたトピックの品質を評価するために適切な指標を使用する
この学習目標の助けを借りて、参加者はBERTを使用したトピックモデリングの実践的な経験を得ることができます。この知識を活用して、彼らは大規模なテキストデータの中から隠れたテーマを分析し、抽出する準備をすることができます。
この記事はData Science Blogathonの一環として公開されました。
データの読み込み
これはオーストラリア放送協会のコンテンツであり、Kaggleで8年以上にわたり利用可能になっています。2つの重要な列が含まれています:publish_date:記事の公開日(yyyyMMdd形式)と、headline_textの英語訳。これがトピックモデルが使用する知識です。
import pandas as pd
# データセットを読み込む
data = pd.read_csv('../input/abc-news-sample/abcnews_sample.csv')
data.head()
# ヘッドラインテキストの長さを含む新しい列を作成する
data["headline_text_len"] = data["headline_text"].apply(lambda x : len(x.split()))
print("最も長いヘッドラインの単語数:{}".format(data.headline_text_len.max()))
# 長さの分布を可視化する
import seaborn as sns
import matplotlib.pyplot as plt
sns.displot(data.headline_text_len, kde=False)
for idx in data.sample(3).index:
headline = data.iloc[idx]
print("ヘッドライン #{}:".format(idx))
print("公開日: {}".format(headline.publish_date))
print("テキスト: {}\n".format(headline.headline_text))
トピックモデリング
この例では、BERTトピックの主要な要素と、強力なトピックモデルを構築するために必要な手順について説明します。
詳細情報:Pythonにおけるトピックモデリングの初心者ガイド
トレーニング
BERTトピックの初期化が最初に行われます。ドキュメントは英語ですので、言語は英語に設定されています。複数の言語をサポートするモデルを使用する場合は、”language”の代わりにlanguage=”multilingual”を使用します。
また、トピックの確率も計算されます。ただし、これは巨大なデータセット(> 100,000ドキュメント)を扱う場合には、BERTトピックの処理速度を著しく低下させる可能性があります。モデルの速度を向上させるため、この機能をオフにすることもできます。
import warnings
warnings.filterwarnings("ignore")
!pip install bertopic
%%time
from bertopic import BERTopic
model = BERTopic(verbose=True,embedding_model='paraphrase-MiniLM-L3-v2', min_topic_size= 7)
headline_topics, _ = model.fit_transform(data.headline_text)
モデルの初期化中にメッセージが表示されないようにするには、VerboseをTrueに設定します。最速かつ最適なパフォーマンスのトレードオフを持つsentence transformerモデルは、paraphrase-MiniLM-L3-v2です。Min_topic_sizeは7に設定していますが、デフォルトの数は10です。値が増えると、クラスタやテーマの数が減少します。
トピックの抽出と表現
freq = model.get_topic_info()
print("トピックの数: {}".format( len(freq)))
freq.head()
上記のテーブルの主要な3つの列には、54のトピックがサイズ/カウントの降順でリストされています。
- 外れ値は-1と指定され、トピック番号で識別されます。これらの問題は価値を提供しないため、避けるべきです。
- 「count」という用語は、トピックの単語数を指します。
- トピックは、与えられた名前nameで知られています。
各トピックの上位語とそれに付随するc-TF-IDFスコアを取得することができます。スコアが高いほど、その時間はケースに関連しています。
a_topic = freq.iloc[1]["Topic"] # 1番目のトピックを選択 model.get_topic(a_topic) # 単語とそのc-TF-IDFスコアを表示
このトピックからは、すべての用語が消防士に関連する意味を持っていることがわかります。
トピックの可視化
トピックの可視化を使用すると、各トピックについてさらに詳しく学ぶことができます。BERTopicから参照される可視化オプションには、用語の可視化、間熱帯距離マップ、トピックの階層クラスタリングなどが含まれます。
1. トピックの用語
c-TF-IDFスコアを使用して、各トピックの重要な用語の棒グラフを作成することができます。これにより、問題を視覚的に比較する面白い方法が提供されます。以下は、トピック6に関連する可視化の例です。
model.visualize_barchart(top_n_topics=6)
トピック1は犯罪に関連しており、トップのフレーズは「man, charged murder jail over」です。その後のトピックも同じ分析に簡単につながることができます。水平バーは、トピックに対してより関連性があるほど長くなります。
2. トピック間距離マップ
潜在ディリクレ配分のLDAvisライブラリに詳しい方にとっては、このライブラリのユーザーは、各トピックに関連する単語とスコアを表示する対話型ダッシュボードにアクセスできます。BERTopicは、そのvisualize_topics()メソッドによって同様のことを達成し、さらにトピック間の距離を提供します(距離が短いほどトピックは関連性が高い)。
model.visualize_topics()
3. トピックの階層を可視化する
インタディスタンストピックダッシュボードで近いトピックがあることがわかります。頭に浮かぶのは、トピックの数を減らす方法です。幸いなことに、これらのトピックを階層的に配置することができます。トピックの関連性を理解しやすくするための可視化フレーバーが用意されています。
model.visualize_hierarchy(top_n_topics=30)
デンドログラムの最初のレベル(レベル0)を見ることで、似た色のトピックがグループ化されていることがわかります。
- トピック7(健康、病院、メンタル)と14(死亡、崩壊、殺害)は近くにあるため、組み合わされています。
- トピック6(農家、農場、農民)と16(牛、羊、肉)は同様に分類される必要があります。
- これらの詳細は、トピック同士が比較される理由をユーザーに理解させるのに役立ちます。
トピックの検索
トピックモデルをトレーニングした後、find_topicsメソッドを使用して、与えられたクエリワードやフレーズと意味的に関連するトピックを検索することができます。たとえば、「政治」と関連するトップ3のトピックを検索することができます。
# 類似したトピックを3つ選択
similar_topics, similarity = model.find_topics("politics", top_n = 3)
- similar_topics内のトピックのインデックスは、類似度が高い順にリストされています。
- 類似度の降順で評価が表示されます。
similar_topics
most_similar = similar_topics[0]
print("最も類似したトピック情報: \n{}".format(model.get_topic(most_similar)))
print("類似度スコア: {}".format(similarity[0]))
明らかなことは、明確に政治に関連する「選挙」、「トランプ」、「オバマ」といったフレーズが、最も類似性のあるトピックを表していることです。
モデルのシリアライズとロード
モデルの結果に満足したら、次の手順に従って追加の分析のために保存することができます:
%%bash
mkdir './model_dir
# モデルを以前に作成したフォルダに「my_best_model」という名前で保存します
model.save("./model_dir/my_best_model")
# シリアライズされたモデルをロードします
my_best_model = BERTopic.load("./model_dir/my_best_model")
my_best_model
結論
BERTを使用したトピックモデリングは、テキストデータの隠れたトピックを特定するための効果的な方法です。BERTは最初にさまざまな自然言語処理のアプリケーションのために開発されましたが、ドキュメントの埋め込みとクラスタリングの手法を用いてトピックモデリングにも使用することができます。以下は、この記事のキーポイントです:
- トピックモデリングの重要性は、事業者が大量の非構造化テキストデータの基になるテーマやパターンを理解することを支援し、洞察に富んだ情報を得て、明確な意思決定をすることを可能にします。
- BERTはトピックモデリングの従来の手法ではありませんが、潜在的なテーマを特定するために重要なドキュメントの埋め込みを提供することができます。
- BERTは、[CLS]トークンの出力から意味データを削除することで、ドキュメントの埋め込みを作成します。これらの埋め込みは、ドキュメントに密なベクトル空間表現を提供します。
- BERTを用いたトピックモデリングは、新たな研究や技術の進展によってパフォーマンスが向上していく領域です。
全体的に、BERTを使用したトピックモデリングの習得により、データサイエンティスト、研究者、アナリストは、大規模なテキストコーパスから基になるテーマを抽出し分析し、洞察に富んだ結論と明確な意思決定を行うことができます。
よくある質問と回答
この記事で表示されるメディアはAnalytics Vidhyaの所有物ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles