NLP-基于bertopic工具的新闻文本分析与挖掘

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 这篇文章介绍了如何使用Bertopic工具进行新闻文本分析与挖掘,包括安装Bertopic库、加载和预处理数据集、建立并训练主题模型、评估模型性能、分类新闻标题、调优聚类结果的详细步骤和方法。

NLP-基于bertopic工具的新闻文本分析与挖掘

一,前言

最近简单接触了一些NLP的内容,练一下如何结合ChatGPT进行学习。

二,具体过程

(1)预处理文本,记录处理过程。

在使用Bertopic进行主题建模之前,需要对文本进行预处理。下面是如何使用Bertopic预处理文本的具体处理过程
1.安装Bertopic库:
在Python环境中安装Bertopic库。你可以使用pip命令来安装Bertopic库:

pip install bertopic

2.加载数据集:
数据下载地址:
链接:https://pan.baidu.com/s/1e7u\_7M3k19NMO8qwUlaTxA?pwd=eqqs
提取码:eqqs

将数据下载下来,存放位置如下
在这里插入图片描述

使用以下代码将训练集加载到一个列表中:

dirPath=r'E:\AIStudy\WordSystem\new2016zh'
validPath=os.path.join(dirPath,'news2016zh_valid.json')
datas=[]
with open(trainPath, 'r',encoding='utf-8') as f:
    lines=f.readlines()
    for line in lines:
        data = json.loads(line)
        datas.append(data)

3.预处理数据
在使用Bertopic进行主题建模之前,需要对数据进行预处理。Bertopic使用spacy库进行预处理,因此你需要安装spacy库并下载相应的模型。
可以使用以下命令来安装spacy和en_core_web_sm模型:

pip install spacy
python -m spacy download en_core_web_sm

具体对数据进行预处理程序如下:

print('#2.预处理数据')
nlp = spacy.load('en_core_web_sm')
texts = [doc['title'] for doc in datas]
processed_texts = []
qtar=tqdm(total=len(texts))
for text in texts:
    qtar.update(1)
    doc = nlp(text)
    processed_texts.append(' '.join([token.lemma_ for token in doc if not token.is_stop and not token.is_punct]))
qtar.close()
print(len(processed_texts))

预处理运行中:
在这里插入图片描述

(2)使用文本聚类工具对新闻集合进行聚类处理,记录处理过程和结果。

我使用文本聚类工具Bertopic对新闻集合进行聚类处理,下面是处理的过程
4.记录处理过程
在进行文本预处理时,可以记录处理过程,以便以后查看

import logging

logging.basicConfig(filename='preprocessing.log', level=logging.INFO)
for doc in data:
    text = doc['content']
    doc = nlp(text)
    processed_text = ' '.join([token.lemma_ for token in doc if not token.is_stop and not token.is_punct])
    processed_texts.append(processed_text)
    logging.info(f'Processed document {doc["id"]}: {text} -> {processed_text}')

5.使用Bertopic建立主题模型并训练

print('3.训练模型')

model = BERTopic(language='english', calculate_probabilities=True)
topics, probabilities = model.fit_transform(processed_texts)

在这里插入图片描述

6.评估模型
你可以使用sklearn.metrics提供的评估工具来评估模型的性能。

from sklearn.metrics import silhouette_score
silhouette_avg = silhouette_score(probabilities, topics)
print("Silhouette Score:", silhouette_avg)

7.分类新闻标题
最后,使用训练好的模型来对新闻标题进行分类。假设你有一个新的新闻标题,可以使用以下代码将其分类到一个主题:

new_title = '如何选择儿童摄影机构给宝宝拍照?'
new_processed_text = ' '.join([token.lemma_ for token in nlp(new_title) if not token.is_stop and not token.is_punct])
new_topic, new_prob = model.transform([new_processed_text])

处理结果如下:
在这里插入图片描述

(3)人工观察聚类结果进行简单调优,记录调优过程和结果。

基于以下对聚类结果进行简单调优的基本准则
1.检查聚类质量:首先,需要检查聚类结果的质量。可以使用Silhouette Score、Calinski-Harabasz Index等指标来评估聚类结果的质量。如果聚类质量不佳,可以尝试调整聚类参数或者增加数据量来提升聚类效果。
2.根据聚类结果进行分类:将聚类结果根据主题进行分类,可以发现相似主题下的文章,有助于进一步对聚类结果进行理解和分析。
3.调整聚类粒度:根据聚类结果,可以对聚类粒度进行调整。如果聚类结果过于粗糙,可以尝试增加主题数或者调整聚类参数;如果聚类结果过于细致,可以尝试减少主题数或者调整聚类参数。
4.检查聚类标签:检查聚类标签是否能够准确地描述聚类结果。如果聚类标签不够准确,可以考虑手动修改聚类标签或者使用自动化标签生成技术来生成更准确的聚类标签。
5.进一步分析聚类结果:对聚类结果进行进一步的分析,可以发现主题之间的关联性和区别性,有助于进一步理解文本数据的内在结构。可以使用可视化技术将聚类结果可视化,或者使用文本挖掘技术进行主题词提取和文本关系分析等。
我们对以上的结果进行一下分析。
1.提高数据量,为了方便查看效果,我只使用了5000词条,数据较小。
2.调整聚类参: calculate_probabilities=True, top_n_words=5, nr_topics=3。语言改为简体中文
在这里插入图片描述

可以看到聚类效果,提升了6倍多
3.根据聚类结果与标签进行分类
calculate_similarity:用于指定是否计算主题之间的相似度,默认为 False。
similarity_threshold:用于指定主题之间的相似度阈值,当两个主题的相似度高于此阈值时,这两个主题将被合并为一个主题,默认为 0.75。

三、实验分析和总结

1学习文本处理的基本概念和术语,包括文本信息抽取、文本聚类和文本摘要等。
(2)掌握文本处理中常用的指标,如准确率、召回率、F1值等,可以帮助你衡量算法性能。
(3)熟悉常用的文本处理工具和算法,如TextRank算法、Summarization算法、BERTopic算法等。
(4)掌握文本聚类的基本过程和方法,包括文本预处理、聚类模型训练、聚类结果评估和聚类结果可视化等。
(5)了解如何从文本中提取关键词和摘要句,并将它们用于生成新闻专题的概要。
对于初学者来说是一份很好学习资料,可以快速入门并掌握文本处理的基本技术和工具。同时,涉及到了一些常用的文本处理算法和工具,这些内容也对于进一步深入学习和应用文本处理技术来说非常有帮助。
同时也学习了一些常见调优方法,可以让我可以更好地理解和优化聚类结果

四、思考题

(1)针对父子事件的定义,上述过程中所采用的方法聚类的粒度是过粗还是过细,思考优化方式。
1.上述过程中所采用的方法聚类的粒度是过粗
针对父子事件的定义,使用文本聚类工具Bertopic对新闻池进行聚类时,聚类的粒度可能会受到影响。如果聚类过粗,则可能会将不同的子事件聚合到同一个父事件中,导致无法区分不同的子事件;如果聚类过细,则可能会将同一个父事件分成多个子事件,导致聚类结果过于细致。

为了解决这个问题,我们在检索了一些资料之后发现可以,采取以下优化方式:

调整主题数:Bertopic的聚类粒度取决于主题数,因此我们可以通过调整主题数来控制聚类的粒度。如果聚类过粗,可以尝试增加主题数;如果聚类过细,可以尝试减少主题数。需要注意的是,主题数不应该设置得太小或太大,否则可能会导致聚类效果变差。

调整聚类参数:Bertopic提供了一些参数可以用来调整聚类的粒度,例如词频阈值、主题相似度阈值等。通过调整这些参数,可以控制聚类的粒度。需要注意的是,不同的参数取值可能会对聚类结果产生不同的影响,因此需要进行实验来确定最佳的参数取值。

使用层次聚类:Bertopic使用的是基于密度的聚类方法,可能会导致聚类结果过于粗糙。可以考虑使用层次聚类方法,将聚类结果分层,从而得到更为细致的聚类结果。层次聚类方法可以使用scikit-learn库中的AgglomerativeClustering类来实现。

结合手动标注:如果聚类结果过于粗糙或过于细致,可以考虑结合手动标注来进行优化。可以选择一部分代表性文本进行手动标注,然后将手动标注的结果反馈到聚类模型中,从而优化聚类结果。手动标注可以采用人工标注、半自动标注或众包标注等方式。

五,整合代码

全部代码整合如下

import json
import spacy
import os
from tqdm import tqdm
from bertopic import BERTopic
from sklearn.metrics import silhouette_score

# 1.加载数据集
print('# 1.加载数据集')
dirPath=r'E:\AIStudy\WordSystem\new2016zh'
validPath=os.path.join(dirPath,'news2016zh_valid.json')
datas=[]
with open(validPath, 'r',encoding='utf-8') as f:
    lines=f.readlines()
    for i in range(len(lines)):
        line=lines[i]
        data = json.loads(line)
        datas.append(data)
        if i>2000:
            break

#2.预处理数据
print('#2.预处理数据')
nlp = spacy.load('en_core_web_sm')
texts = [doc['title'] for doc in datas]
processed_texts = []
qtar=tqdm(total=len(texts))
for text in texts:
    qtar.update(1)
    doc = nlp(text)
    processed_texts.append(' '.join([token.lemma_ for token in doc if not token.is_stop and not token.is_punct]))
qtar.close()
print(len(processed_texts))

#3训练模型
print('3.训练模型')

model = BERTopic(language='chinese (simplified)', calculate_probabilities=True, top_n_words=5, nr_topics=3)
topics, probabilities = model.fit_transform(processed_texts)

#4评估模型
silhouette_avg = silhouette_score(probabilities, topics)
print("Silhouette Score:", silhouette_avg)

#实际分类
new_title = '如何选择儿童摄影机构给宝宝拍照?'
new_processed_text = ' '.join([token.lemma_ for token in nlp(new_title) if not token.is_stop and not token.is_punct])
new_topic, new_prob = model.transform([new_processed_text])

print(new_processed_text,new_topic, new_prob)
相关文章
|
2月前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
55 4
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
55 2
|
3月前
|
人工智能 自然语言处理 算法
自然语言处理与文本分析
自然语言处理(Natural Language Processing,NLP)是计算机科学和人工智能领域的一个分支,旨在让计算机理解、生成和处理人类自然语言。文本分析是自然语言处理的一个重要部分,旨在从文本数据中提取有用信息,如关键词、主题、情感等。
46 4
|
4月前
|
自然语言处理 算法 Python
【语言的力量!】NLP揭秘:从零开始,如何将「文字海洋」转化为「智慧宝藏」——探索文本分析的奇妙之旅!
【8月更文挑战第12天】随着互联网的爆炸式增长,每日产生的海量文本信息成为企业和研究者挖掘价值的金矿。本文通过具体代码示例,展示了如何运用Python中的自然语言处理(NLP)工具,完成从文本数据收集到分析的全过程。首先介绍了文本预处理,包括分词、去除停用词和词干提取;接着说明了如何利用TF-IDF等方法提取文本特征;然后演示了情感分析技术,可判定文本情感倾向;最后探讨了主题建模方法,如LDA算法,用于发现文本集中的潜在主题。这些步骤共同构成了一个强大的框架,使我们能够更有效地理解和利用文本数据。
39 1
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
【NLP-新闻文本分类】处理新闻文本分类所有开源解决方案汇总
汇总了多个用于新闻文本分类的开源解决方案,包括TextCNN、Bert、LSTM、CNN、Transformer以及多模型融合方法。
61 1
|
4月前
|
机器学习/深度学习 存储 自然语言处理
【NLP-新闻文本分类】3 Bert模型的对抗训练
详细介绍了使用BERT模型进行新闻文本分类的过程,包括数据集预处理、使用预处理数据训练BERT语料库、加载语料库和词典后用原始数据训练BERT模型,以及模型测试。
81 1
|
4月前
|
机器学习/深度学习 数据采集 监控
【NLP-新闻文本分类】2特征工程
本文讨论了特征工程的重要性和处理流程,强调了特征工程在机器学习中的关键作用,并概述了特征工程的步骤,包括数据预处理、特征提取、特征处理、特征选择和特征监控。
33 1
|
4月前
|
数据采集 自然语言处理 数据挖掘
【NLP-新闻文本分类】1 数据分析和探索
文章提供了新闻文本分类数据集的分析,包括数据预览、类型检查、缺失值分析、分布情况,指出了类别不均衡和句子长度差异等问题,并提出了预处理建议。
56 1
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--1 赛后总结与分析
参与讯飞英文学术论文分类挑战赛的经验,包括使用的多种模型和技术,如TextCNN、FastText、LightGBM和BERT,以及提分策略和遇到的问题。
45 0
|
5月前
|
SQL 人工智能 自然语言处理
一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
142 0
下一篇
DataWorks