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

这篇具有很好参考价值的文章主要介绍了NLP-基于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

将数据下载下来,存放位置如下
NLP-基于bertopic工具的新闻文本分析与挖掘

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

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))

预处理运行中:
NLP-基于bertopic工具的新闻文本分析与挖掘

(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)

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

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])

处理结果如下:
NLP-基于bertopic工具的新闻文本分析与挖掘

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

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

可以看到聚类效果,提升了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类来实现。

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

五,整合代码

全部代码整合如下文章来源地址https://www.toymoban.com/news/detail-488184.html

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)

到了这里,关于NLP-基于bertopic工具的新闻文本分析与挖掘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【毕业设计】基于Spark的海量新闻文本聚类(新闻分类)

    🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定

    2024年02月12日
    浏览(42)
  • 基于PyTorch使用LSTM实现新闻文本分类任务

    PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm=1001.2014.3001.5501 基于PyTorch使用LSTM实现新闻文本分类任务的概况如下: 任务描述:新闻文本分类是一种常见的自然语言处理任务,旨在将新闻文章分为不同的类别,如政治、体育、科技等。 方法:使

    2024年02月09日
    浏览(43)
  • 文本标注技术方案(NLP标注工具)

    doccano 是一个面向人类的开源文本注释工具。它为文本分类、序列标记和序列到序列任务提供注释功能。您可以创建用于情感分析、命名实体识别、文本摘要等的标记数据。只需创建一个项目,上传数据,然后开始注释。您可以在数小时内构建数据集。 支持命名实体识别,情

    2024年02月10日
    浏览(49)
  • Python数据分析案例33——新闻文本主题多分类(Transformer, 组合模型) 模型保存

    对于海量的新闻,我们可能需要进行文本的分类。模型构建很重要,现在对于自然语言处理基本都是神经网络的方法了。 本次这里正好有一组质量特别高的新闻数据,涉及  \\\'教育\\\' \\\'科技\\\' \\\'社会\\\' \\\'时政\\\' \\\'财经\\\' \\\'房产\\\' \\\'家居\\\'  七大主题,基本涵盖了所有的常见的新闻类型。每个

    2024年01月17日
    浏览(46)
  • 基于BERT-PGN模型的中文新闻文本自动摘要生成——文本摘要生成(论文研读)

    基于BERT-PGN模型的中文新闻文本自动摘要生成(2020.07.08) 针对文本自动摘要任务中生成式摘要模型对句子的上下文理解不够充分、生成内容重复的问题,基于BERT 和指针生成网络(PGN),提出了一种面向中文新闻文本的生成式摘要模型——BERT-指针生成网络(BERTPGN)。首先,

    2024年02月01日
    浏览(54)
  • 【数据挖掘实战】——舆情分析:对微博文本进行情绪分类

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+   目录 一、背景介绍 二、比赛任务

    2024年02月08日
    浏览(44)
  • 文本挖掘学习笔记(三):文档相似度、文档分类和情感分析

    注:学习笔记基于文彤老师文本挖掘的系列课程 全文基于《射雕英雄传》语料库,下面是读入数据的一个基于Pandas的通用操作框架。 计算两个词相似度的原理:简单的说,就是将每个词的向量在空间上进行余弦运算,当cos越接近0时候,两者越相似。 词袋模型不考虑词条之间

    2023年04月22日
    浏览(40)
  • 使用 Docker 和 HuggingFace 实现 NLP 文本情感分析应用

    在继续分享“干燥、有趣”的向量数据库实战内容之前,我们来聊一篇简单有趣的内容:如何使用 Docker 和 HuggingFace 现成的模型,快速实现一个 NLP 文本情感分析应用,支持中英文内容的情感快速分析。 在这篇文章里,我们不需要准备显卡和语料,也不需要耐心等待“炼丹”

    2023年04月10日
    浏览(41)
  • NLP | 基于LLMs的文本分类任务

    比赛链接:讯飞开放平台 来源:DataWhale AI夏令营3(NLP)   ①Roberta在预训练的阶段中没有对下一句话进行预测( NSP ) ②采用了 动态掩码 ③使用 字符级 和 词级别 表征的 混合文本编码 。 论文:https://arxiv.org/pdf/1907.11692.pdf   DataWhale Topline的改进:   特征1:平均池化Mean

    2024年02月11日
    浏览(36)
  • 【NLP】小项目:基于transformer的文本摘要

            本博客的主要焦点是使用“变压器”的非常高级的接口,即拥抱面管道。使用此界面,您将看到我们只需 1 或 2 行代码即可总结文本。 回顾什么是文本摘要以及我们在哪里使用它。 如何使用拥抱面转换器执行文本摘要(只需几行代码)         文本摘要是将

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包