cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

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トレーニングプロセスは大きく分けられます

  1. ファイルを読む
  2. データを準備する
  3. ldaモデルをトレーニングする
  4. ldaモデルを使用する
  5. ldaモデルの保存とインポート
    1.ファイルを読み取ります。
    ここではニュースデータを使用します。10のカテゴリがあり、各カテゴリは1000のデータで、

「ファッション」、「ファイナンス」、「テクノロジー」、「教育」、「家具」、「スポーツ」、「時事」、「ゲーム」、「不動産」、「エンターテインメント」


import pandas as pd

df = pd.read_csv('chinese_news.csv')
df.head()

cntopicライブラリ:中国語と英語のLDAトピック分析をサポート
ラベル配布


df['label'].value_counts()

ホーム1000
ファッション1000
不動産1000
時事1000
教育1000
ゲーム1000
ファイナンス1000
エンターテインメント1000
スポーツ1000
テクノロジー1000
名前:ラベル、dtype:int64
2.準備データ
一般的な準備データは次のとおりです。

  1. 単語のセグメンテーション、データのクリーニング
  2. モジュール要件に従って編成されたデータの形式は、
    scikit-learnに記載されています。

  3. 英語のテキストは単語のセグメンテーションを必要とせず、そのまま渡します。
  4. 中国のテキストは最初にセグメント化してから、スペースで区切られた英語の文字列に並べ替える必要があります。「私は中国が大好き」のような形

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トピックモデル分析を開始します。手順は次のとおりです





cntopicライブラリ:中国語と英語のLDAトピック分析をサポート
ここでは、n_topics = 10に従ってldaトピックモデルを構築します。通常、n_topicsは、最適なn_topicsを見つけるために何度も実験する必要があります。

cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

動作中、出力フォルダはコードが配置されているフォルダに生成されます。

  • dictionary.dict辞書ファイル
  • lda.model.xxx複数のldaモデルファイル。xxxは
    cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

上記のコードは時間がかかります。プログラムが完了するまでしばらくお待ちください〜

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を使用して、次のようないくつかのことを実行できます。

cntopicライブラリ:中国語と英語の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を願っています

cntopicライブラリ:中国語と英語のLDAトピック分析をサポート

左右に2つの大きなエリアがあります

  • 左側のトピック分布は、円が大きいほどトピックが多く、円は4つの象限に分散しています。
  • 右側のトピックに対応する特集ワードは、上から下に向かって重みがどんどん低くなっています。
    左側に注意することが重要です。

  • 円を4つの象限に均等に分散させることをお勧めします。円がすべて限られた領域に集中している場合、モデルは十分にトレーニングされません。
  • 円と円の交点を少なくすることをお勧めします。交点が多すぎる場合は、n_topicsの設定が大きすぎるため、小さく設定する必要があります
    。5。ldaモデルの保存とインポート
    ldaトピックモデルのトレーニングは、トレーニング済みモデルを保存しないと特に遅くなります。 、実際に私たちの生活とコンピュータの計算能力を浪費しています。

幸いなことに、cntopicはデフォルトですべての人のモデルを保存します。ストレージアドレスは出力フォルダーにあります。モデルをインポートする方法を知っているだけで済みます。

ここにインポートする必要のあるモデルが2つあります。
cntopicライブラリ:中国語と英語のLDAトピック分析をサポート
今すぐ使用する手順を試してみましょう。前のモデルと区別するために、ここでは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モデルの関連機能を試すことができます。

おすすめ

転載: blog.51cto.com/15069487/2578505