TF-IDF+TensorFlow+ワードクラウド+LDAニュース自動要約推薦システムに基づく - 深層学習アルゴリズムアプリケーション(ipynbソースコードを含む)+トレーニングデータセット


ここに画像の説明を挿入

序文

このプロジェクトでは、TF-IDF キーワード抽出テクノロジーをワード クラウド データの視覚化、LDA (Latent Dirichlet Allocation) モデル トレーニング、音声変換システムと組み合わせて使用​​し、TensorFlow に基づくテキスト要約プログラムを実装します。

まず、TF-IDF (Term Frequency-Inverse Document Frequency) テクノロジーを使用して、テキスト内のキーワードを抽出します。これは、テキスト内の最も代表的な単語を見つけるのに役立ち、その後の要約に重要な情報を提供します。

2つ目は、ワードクラウドデータ可視化技術を活用し、キーワードを視覚的に表示します。これにより、ユーザーはテキストの要点と焦点を直感的に理解することができます。

次に、トピック モデリングに使用される手法である LDA モデルを使用してトレーニングします。LDA モデルを通じて、テキスト内の隠れたトピック構造を発見し、テキスト コンテンツの分布と関連性をより深く理解できるようになります。

最後に、これらの手法を組み合わせて、TensorFlow ベースのテキスト要約プログラムを作成しました。このプログラムは、テキストの重要な情報、主題構造を自動的に抽出し、簡潔なテキストの要約を生成できます。

さらに、音声変換システムも統合し、生成された要約テキストを音声で提示できるようになり、ユーザーエクスペリエンスと使いやすさが向上しました。

このプロジェクトを通じて、複数のテクノロジーを統合して強力なテキスト要約プログラムを実装することができ、ユーザーにより便利で直感的なテキストの理解と取得のエクスペリエンスを提供できました。

全体的なデザイン

システムの全体構成図とシステムフローチャートを記載します。

システム全体構成図

システムの全体構成を図に示します。

ここに画像の説明を挿入

システムフローチャート

システムフローを図に示します。

ここに画像の説明を挿入

動作環境

このセクションには、Python 環境と TensorFlow 環境が含まれます。

Python環境

Python 3.6 以降の構成が必要です。Windows 環境では、Python 環境の構成を完了するために Anaconda をダウンロードすることをお勧めします。ダウンロード アドレスは https://www.anaconda.com/です仮想マシンをダウンロードして、Linux 環境でコードを実行することもできます。

TensorFlow 環境

インストール方法は次のとおりです。

方法 1

Anaconda プロンプトを開き、清華倉庫のイメージを入力します。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config -set show_channel_urls yes

TensorFlow という名前の Python 3.6 環境を作成します。この時点では、Python のバージョンが新しい TensorFlow バージョンと一致することに問題があります。このステップでは、Python 3.x を選択します。

conda create -n tensorflow python=3.6

確認が必要な場合は「y」を入力してください。Anaconda プロンプトで TensorFlow 環境をアクティブ化します。

conda activate tensorflow

TensorFlow の CPU バージョンをインストールします。

pip install -upgrade --ignore -installed tensorflow

テストコードは次のとおりです。

import tensorflow as tf
hello = tf.constant( 'Hello, TensorFlow! ')
sess = tf.Session()
print sess.run(hello)
# 输出 b'Hello! TensorFlow'

インストールされました。

方法 2

Anaconda Navigator を開き、「Environments」と入力して、「Create」をクリックし、ポップアップ ダイアログ ボックスに「TensorFlow」と入力し、適切な Python バージョンを選択し、TensorFlow 環境を作成して、TensorFlow 環境に入ります。「Not install」をクリックして、検索ボックスで必要なパッケージを見つけます。 。たとえば、TensorFlow の場合は、右下の [適用] を選択して、インストールが成功したかどうかをテストします。Jupyter Notebook エディターに次のコードを入力します。

import tensorflow as tf
hello = tf.constant( 'Hello, TensorFlow! ')
sess = tf.Session()
print sess.run(hello)
# 输出 b'Hello! TensorFlow'

hello TensorFlowインストールが成功したことを示す を出力できます。

モジュールの実装

本プロジェクトはデータ前処理、ワードクラウド構築、キーワード抽出、音声ブロードキャスト、LDAトピックモデル、モデル構築の6つのモジュールから構成されており、各モジュールの機能紹介と関連コードは以下の通りです。

1. データの前処理

清華大学 NLP 研究室が立ち上げた中国語テキスト データセット THUCNews からダウンロードします (ダウンロード アドレスはhttps://github.com/gaussic/text-classification-cnn-rnnです)。金融、不動産、家具、教育、テクノロジー、ファッション、時事、スポーツ、ゲーム、エンターテイメントの10の候補カテゴリーに分けて合計5,000件のニューステキストを統合。

1) データのインポート

jupyter Notebookで実現しており、関連するコードは以下の通りです。

#导入相应数据包
import pandas as pd
import numpy as np
#数据的读入及读出
df_news=pd.read_table("./cnews.val.txt",names=["category","content"])
df_news.head()

図に示すように、ニュース データのカテゴリと内容をそれぞれ表す対応するデータをフォルダーから読み込みます。

#数据的类别及总量
df_news.category.unique()
df_news.content.shape
#为方便后续对数据的处理,将原始表格型据结构转换成列表格式
content_list=df_news.content.values.tolist()

ここに画像の説明を挿入
図に示すように、データ カテゴリ処理コードは正常にコンパイルされます。

ここに画像の説明を挿入

2) データクリーニング

ニュースのテキスト データには、漢字だけでなく、数字、英語の文字、句読点などが含まれます。単語の分割は中国語のテキスト分析の重要な部分であり、単語の分割が正しく行われると、モデルをより適切に構築できます。中国語コーパスの単語は英語や他の言語のコーパスとは異なり、密接に関連しているため、英語のような空間分割を使用する代わりに、jieba ライブラリの分割方法を使用します。

#jieba分词
content_fenci = [] #建立一个空的
for line in content_list:
	text = jieba.lcut(line) #给每一条都分词
	if len(text) > 1 and text != '\r': #换行
		content_fenci.append(text)  #将分词后的结果放入
#content_fenci[0]   #分词后的一个样本     
df_content=pd.DataFrame({
    
    'content':content_fenci})
df_content.head()

単語分割後の結果を図に示します。

ここに画像の説明を挿入

#导入停用词
def drop_stopwords(contents,stopwords):
	content_clean = [] #放清理后的分词
	all_words = []
	for line in contents:
		line_clean=[]
	for word in line:
		if word in stopwords:
			continue
		line_clean.append(word)
		all_words.append(str(word))
		content_clean.append(line_clean)
	return content_clean,all_words
content_clean,all_words = drop_stopwords(content_fenci,stopwords_list,)
df_clean= pd.DataFrame({
    
    'contents_clean':content_clean})
df_clean.head()

洗浄後の結果を図に示します。

ここに画像の説明を挿入

3) 統計的な単語頻度

テキスト内の各単語の出現数をカウントし、単語の頻度によって統計を並べ替えます。写真が示すように。

ここに画像の説明を挿入

関連するコードは次のとおりです。

tf= Counter(all_words)

2. ワードクラウドの構築

ワードクラウドは、文章中に頻繁に出現するキーワードを視覚的に表示し、低頻度で低品質な大量の文字情報を除去することで、閲覧者が素早く読むだけで文章の要点を理解できるようにします。テキスト。

#导入背景图片后的词云
mask = imread('4.png')#读入图片
wc=wordcloud.WordCloud(font_path=font,mask=mask,background_color='white',scale=2)
#scale:按照比例进行放大画布,如设置为2,则长和宽都是原来画布的2倍
wc.generate_from_frequencies(tf)
plt.imshow(wc)  #显示词云
plt.axis('off') #关闭坐标轴
plt.show()
wc.to_file('ciyun.jpg') #保存词云

3. キーワード抽出

TF-IDF は統計手法であり、単語の重要度はファイル内での出現回数に比例して増加しますが、同時にコーパス内での出現頻度に反比例して減少します。 TF-IDFアルゴリズムのキーワード抽出を実装します。

import jieba.analyse
index = 2
#print(df_clean['contents_clean'][index])
#词之间相连
content_S_str = "".join(content_clean[index])
print(content_list[index])
print('关键词:')
print(" ".join(jieba.analyse.extract_tags(content_S_str, topK=10, withWeight=False)))

4.音声ブロードキャスト

上記で抽出できたキーワードをpyttsx3音声に変換して放送します。

import pyttsx3
voice=pyttsx3.init()
voice.say(" ".join(jieba.analyse.extract_tags(content_S_str, topK=10, withWeight=False)))
print("准备语音播报.....")
voice.runAndWait()

5. LDAトピックモデル

LDA は、3 層ベイジアン確率モデルとしても知られるドキュメント トピック生成モデルであり、このモデルには、単語 (W)、トピック (Z)、およびドキュメント (シータ) の 3 つの層が含まれています。文書からトピック、トピックから単語を多項分布し、各トピックのキーワードを取得します。実際の運用では単語数が多く、文書内の単語数が限られているため、密行列で表現するとメモリの無駄が発生するため、gensimでは疎行列を使用して表現しています内部的に。まず、単語の分割とクリーニング後の文書を使用してdictionary = corpora.Dictionary (texts)辞書が生成され、次に、生成された辞書がスパース ベクトルに変換されます。

def create_LDA(content_clean):
	#基于文本集建立(词典),并获得特征数
    dictionary = corpora.Dictionary(content_clean)
    #基于词典,将分词列表集转换成稀疏向量集,称作语料库
    dic = len(dictionary.token2id)
    print('词典特征数:%d' % dic)
	corpus = [dictionary.doc2bow(sentence) for sentence in content_clean]
	#模型训练
	lda = gensim.models.LdaModel(corpus=corpus, id2word = dictionary,num_topics = 10,passes=10)
    #passes 训练几轮
    print(lda.print_topic(1,topn=5))
    print('-----------')
    for topic in lda.print_topics(num_topics=10, num_words = 5):
		print(topic[1])
create_LDA(content_clean)

6. モデルの構築

ベイズ分類器の原理は、オブジェクトの事前確率を使用して、ベイズの公式を使用して事後確率、つまりオブジェクトが特定のクラスに属する確率を計算し、事後確率が最大のクラスを選択することです。それが属するクラス。マッピング オブジェクトはハッシュ可能な値を任意のオブジェクトにマッピングします。マップは変更可能なオブジェクトです。現在、Python には、中括弧で表される辞書という標準マッピング タイプが 1 つだけあります。ただし、中括弧内の各要素はキーと値のペア (キー:値) であり、辞書も順序付けされていません。

df_train=pd.DataFrame({
    
    "content":content_clean,"label":df_news['category']})
#为了方便计算,把对应的标签字符类型转换为数字
#映射类型(mapping)
#非空字典
label_mapping = {
    
    "体育": 0, "娱乐": 1, "家居": 2, "房产": 3, "教育":4, "时尚": 5,"时政": 6,"游戏": 7,"科技": 8,"财经": 9}
df_train['label'] = df_train['label'].map(label_mapping)
#df_train.head()
#将每个新闻信息转换成字符串形式,CountVectorizer和TfidfVectorizer的输入为字符串
def create_words(data):
    words = []
    for index in range(len(data)):
        try:
            words.append( ' '.join(data[index]))
        except Exception:
            print(index)
    return words
#把数据分成测试集和训练集
x_train,x_test,y_train,y_test =train_test_split(df_train['content'].values,df_train['label'].values,random_state=0)   
train_words = create_words(x_train)
test_words = create_words(x_test)
#模型训练
#第一种
#CountVectorizer属于常见的特征数值计算类,是一个文本特征提取方法
#对于每个训练文本,只考虑每种词汇在该训练文本中出现的频率
vec = CountVectorizer(analyzer = 'word',max_features=4000,lowercase=False)
vec.fit(train_words)
classifier = MultinomialNB()
classifier.fit(vec.transform(train_words),y_train)
print("模型准确率:",classifier.score(vec.transform(test_words), y_test))
#第二种,TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外
#关注包含这个词汇的其它训练文本数目的倒数,训练文本的数量越多特征化的方法就越有优势
vectorizer = TfidfVectorizer(analyzer='word',max_features = 40000,
lowercase=False)
vectorizer.fit(train_words)
classifier.fit(vectorizer.transform(train_words),y_train)
print("模型准确率为:",classifier.score(vectorizer.transform(test_words),
    y_test))

システムテスト

ワード クラウドを図 1 に、キーワード抽出を図 2 に、LDA テストの結果を図 3 に、ベイジアンの結果を図 4 に示します。

ここに画像の説明を挿入

図 1 ワードクラウド

ここに画像の説明を挿入

図2 キーワード抽出

ここに画像の説明を挿入

図 3 LDA の結果

ここに画像の説明を挿入

図 4 ベイズの結果

プロジェクトのソースコードのダウンロード

詳細については、ブログ リソースのダウンロード ページをご覧ください。


その他の情報ダウンロード

人工知能関連の学習ルートと知識システムについて学び続けたい場合は、私の他のブログ「重い | 完全な人工知能 AI 学習 - 基本知識学習ルート、すべての資料は料金を支払わずにネットワーク ディスクから直接ダウンロードできます」を参照してください。 「ルーチンへの注意
このブログでは、Github の有名なオープンソース プラットフォーム、AI テクノロジー プラットフォーム、および関連分野の専門家 (Datawhale、ApacheCN、AI Youdao、Huang Haiguang 博士など) について言及しています。関連資料は約 100G あります。友達全員を助けてください。

おすすめ

転載: blog.csdn.net/qq_31136513/article/details/132180260