cntopicは、
中国語と英語の両方をサポートする、シンプルで使いやすいldaトピックモデルです。このライブラリはgensimとpyLDAvisに基づいており、ldaトピックモデルと視覚化機能を実装しています。
この記事のビデオ説明はステーションBにアップロードされています(今夜レビューされます)。Dengの
ステーションBアカウント:Dengと彼のpython
インストール
pip install cntopic
これを使用して、すべての人にシナリオを紹介します。ニュースデータを収集し、ニューステキストに対応するニュースカテゴリの収集を忘れたとします。手動でラベルを付けると、非常に手間がかかります。現時点では、ldaトピックモデルを使用して、データ内の法則を洞察し、ニュースにn種類のトピックグループがあることを確認できます。このようにして、ldaモデルはデータtopic_1、topic_2、topic_3 ...、topic_nに自動的に注釈を付けます。
私たちの研究者の仕事量は、topic_1、topic_2、topic_3 ...、topic_nの解釈に限定されています。
ldaトレーニングプロセスは大きく分けられます
- ファイルを読む
- データを準備する
- ldaモデルをトレーニングする
- ldaモデルを使用する
- ldaモデルの保存とインポート
1.ファイルを読み取ります。
ここではニュースデータを使用します。10のカテゴリがあり、各カテゴリは1000のデータで、
「ファッション」、「ファイナンス」、「テクノロジー」、「教育」、「家具」、「スポーツ」、「時事」、「ゲーム」、「不動産」、「エンターテインメント」
import pandas as pd
df = pd.read_csv('chinese_news.csv')
df.head()
ラベル配布
df['label'].value_counts()
ホーム1000
ファッション1000
不動産1000
時事1000
教育1000
ゲーム1000
ファイナンス1000
エンターテインメント1000
スポーツ1000
テクノロジー1000
名前:ラベル、dtype:int64
2.準備データ
一般的な準備データは次のとおりです。
- 単語のセグメンテーション、データのクリーニング
-
モジュール要件に従って編成されたデータの形式は、
scikit-learnに記載されています。 - 英語のテキストは単語のセグメンテーションを必要とせず、そのまま渡します。
- 中国のテキストは最初にセグメント化してから、スペースで区切られた英語の文字列に並べ替える必要があります。「私は中国が大好き」のような形
import jieba
def text2tokens(raw_text):
#将文本raw_text分词后得到词语列表
tokens = jieba.lcut(raw_text)
#tokens = raw_text.lower().split(' ') #英文用空格分词即可
tokens = [t for t in tokens if len(t)>1] #剔除单字
return tokens
#对content列中所有的文本依次进行分词
documents = [text2tokens(txt)
for txt in df['content']]
#显示前5个document
print(documents[:5])
Walker '、' Connecticut '、' University '、' Head Coach '、' Jim '、' Cahon '、...]、 [' Praise '、' One '、' Pure '、' Point Guard '、'そして、「、」、「私たち」、「スコアリング」、「シングルゲーム」、「42」、「今までに」、「シングルゲーム」、「17」、「アシスト」、...]] 3。 ldaモデルのトレーニングでは、正式にcntopicモジュールを使用してLDAトピックモデル分析を開始します。手順は次のとおりです
ここでは、n_topics = 10に従ってldaトピックモデルを構築します。通常、n_topicsは、最適なn_topicsを見つけるために何度も実験する必要があります。
動作中、出力フォルダはコードが配置されているフォルダに生成されます。
- dictionary.dict辞書ファイル
- lda.model.xxx複数のldaモデルファイル。xxxは
上記のコードは時間がかかります。プログラムが完了するまでしばらくお待ちください〜
import os
from cntopic import Topic
topic = Topic(cwd=os.getcwd()) #构建词典dictionary
topic.create_dictionary(documents=documents) #根据documents数据,构建词典空间
topic.create_corpus(documents=documents) #构建语料(将文本转为文档-词频矩阵)
topic.train_lda_model(n_topics=10) #指定n_topics,构建LDA话题模型
<gensim.models.ldamulticore.LdaMulticore at 0x158da5090>
4. LDAモデルの使用
上記のコードは約5分間実行され、LDAモデルがトレーニングされています。
これで、LDAを使用して、次のようないくつかのことを実行できます。
4.1ドキュメントの準備ドキュメント
を取得するための「ゲームスポーツは本当に面白い」という単語セグメンテーション処理があるとします。
document = jieba.lcut('游戏体育真有意思')
document
['Game'、 'Sports'、 'True'、 'Interesting']
4.2ドキュメントに対応するトピックを予測するには
、トピックモデルを使用して、ドキュメントに対応するトピックを確認します。
topic.get_document_topics(document)
[(0、0.02501536)、
(1、0.025016038)、
(2、0.28541195)、
(3、0.025018401)、
(4、0.025018891)、
(5、0.025017735)、
(6、0.51443774)、
(7、0.02502284)、
(8、0.025015472)、
(9、0.025025582)]
ldaトピックモデルはn_topics = 10に従ってトレーニングされ、トピックがドキュメントの予測に制限されている場合、結果はこれらの10トピックのタプルと対応する確率のリストになります。
最も高い確率はトピック6であり、確率は0.51443774であることがわかります。
したがって、ドキュメントはトピック6であると大まかに考えることができます。
4.3各トピックと対応する機能ワードの関係を示します
が、各ドキュメントにトピックnであることを伝えるだけで、トピックnが何を表しているのかまだわからないため、各トピックnに対応する機能ワードを確認する必要があります。
topic.show_topics()
[(0、
'0.042 "ファンド" +0.013 "市場" + 0.011 "投資" +0.009 "会社" +0.005 "アップ" +0.004 "株式" +0.004 "不動産" +0.004 "インデックス" + 0.004 "住宅価格" + 0.004 "2008" ')、
(1、
' 0.010 "China" + 0.007 "Immigration" + 0.006 "Project" + 0.005 "Development" + 0.005 "Representation" + 0.005 "Economy" + 0.005 "Government" + 0.005 "Land" + 0.004 "policy" + 0.004 "problem" ')、
(2、
' 0.014 "competition" + 0.009 "them" +0。008 "チーム" + 0.007 "リバウンド" + 0.006 "US" + 0.005 "プレーヤー" + 0.005 "プレーオフ" + 0.005 "時間" + 0.005 "ヒート" + 0.005 "シーズン" ')、
(3、
'0.013 "us" + 0.013 "one" + 0.009 "self" + 0.009 "this" + 0.007 "no" + 0.007 "them" + 0.006 "can" + 0.006 "yes" + 0.006 "a lot" + 0.006 "Reporter" ')、
(4、
' 0.020 "movie" + 0.010 "director" + 0.009 "weibo" + 0.008 "movie" + 0.006 "audience" + 0.006 "one" + 0.005 "self" + 0.005 "box office" + 0.004 "写真" + 0.004 "エンターテインメント" ')、
(5、
' 0.018 "学生" +0.015 "海外留学" +0。008 「大学」+0.008「はい」+0.006 「機能」+0.006「ピクセル」+0.006 「写真」+0.006「採用」+0.005 「学校」+0.005「適用」)、
(6、
'0.007 "player" + 0.006 "Fengshen" + 0.006 "mobile" + 0.006 "online" + 0.006 "the" + 0.006 "game" + 0.005 "Chen Shuibian" + 0.005 "activity" + 0.005 "to" + 0.005 "a "')、
(7、
' 0.009 "情報 "+0.009 "試験 "+0.009 "ゲーム "+0.007 "仕事 "+ 0.007 "モバイル "+ 0.006 "レベル4および6 "+0.006 "候補 "+0.005 "開発 "+ 0.004 "はい" +0.004 "オーバーロード" ')、
(8、
' 0.015 "私たち" + 0.011 "エンタープライズ" + 0.011 "製品 "+0.010 "市場 "+0.009 "家具 "+0.009 "ブランド "+0.008 "消費者 "+0.007 "産業 "+0.007 "中国 "+ 0.007 " 1 "')、
(9、
'0.012 「ゲーム」+0.011「プレーヤー」+0.010 「はい」+0.008「マッチ」+0.008 「アクティビティ」+0.006「ファッション」+0.005 「OL」+0.004「取得」+0.004 「タスク」+0.004「モバイル」 ')]
上記のトピックnと特徴語によれば、各トピックnの内容を大まかに解釈することができます。
4.4トピックの分布
ここで、データセット内のさまざまなトピックnの分布を知りたいと思います。
topic.topic_distribution(raw_documents=df['content'])
9 1670
1 1443
0 1318
5 1265
4 1015
2 970
8 911
3 865
7 307
6 236
名前:トピック、dtype:int64
データには10のカテゴリがあり、それぞれが1000です。ただし、現在のLDAトピックモデルは、テキスト内のいくつかの手がかりに基づいているだけであり、n_topics = 10に従って分割した場合の効果は悪くありません。
完璧な状況は、各トピックnが1000に近く、トピック9が多すぎて、トピック6と7が少なすぎることです。
ただし、一部のトピックには交差点があり、間違いを犯しやすいことにも注意する必要があります。
- 金融、不動産、時事
- スポーツエンターテインメント
- ファイナンス、テクノロジー
など
要約すると、現在のモデルは悪くなく、パフォーマンスは許容範囲内です。
4.5視覚化(不安定な機能)
現在、裸眼で受け入れることができるトピックは10個しかありませんが、トピックが多すぎる場合でも、トレーニング結果を科学的に判断するために視覚化ツールを使用しています。
これはtopic.visualize_lda()を使用します。
topic.visualize_lda()
実行後
コードが配置されているフォルダーの出力フォルダーでvis.htmlファイルを見つけ、右クリックブラウザーで開きます。
視覚化機能が不安定で、vis.htmlを開くことができません。Haihanを願っています
左右に2つの大きなエリアがあります
- 左側のトピック分布は、円が大きいほどトピックが多く、円は4つの象限に分散しています。
-
右側のトピックに対応する特集ワードは、上から下に向かって重みがどんどん低くなっています。
左側に注意することが重要です。 - 円を4つの象限に均等に分散させることをお勧めします。円がすべて限られた領域に集中している場合、モデルは十分にトレーニングされません。
- 円と円の交点を少なくすることをお勧めします。交点が多すぎる場合は、n_topicsの設定が大きすぎるため、小さく設定する必要があります
。5。ldaモデルの保存とインポート
ldaトピックモデルのトレーニングは、トレーニング済みモデルを保存しないと特に遅くなります。 、実際に私たちの生活とコンピュータの計算能力を浪費しています。
幸いなことに、cntopicはデフォルトですべての人のモデルを保存します。ストレージアドレスは出力フォルダーにあります。モデルをインポートする方法を知っているだけで済みます。
ここにインポートする必要のあるモデルが2つあります。
今すぐ使用する手順を試してみましょう。前のモデルと区別するために、ここではtopic2と名付けます。
topic2 = Topic(cwd=os.getcwd())
topic2.load_dictionary(dictpath='output/dictionary.dict')
topic2.create_corpus(documents=documents)
topic2.load_lda_model(modelpath='output/model/lda.model')
パート4に戻って、LDAモデルの関連機能を試すことができます。