Bertopic环境安装与文本主题聚类教程

1.环境配置

(一)安装:anaconda

1. 理解:为什么需要anaconda

不同的python版本适应与相应的依赖包,可以用ANACONDA来管理不同的python版本环境,需要用到哪个环境就调用哪个环境。

本人最常用的就是一个Py3.6的包,这个包很多的版本的库都兼容,但是由于新的出来,一些最新的库已经开始不适配3.6

此前有次,自己的原生代码,在生成WordCloud词云时,从来都不会报错,会出现一个字体的错误。一直没解决,用了很多方法都没解决,后面发现是不适配3.6版本。所以在anaconda中可以再生成一个更高版本的环境。

可以专门用一个python版本,解决相应的问题。

2. 下载anaconda

anaconda下载地址

下载好,双击安装,一直下一步
在这里插入图片描述

3. 启动anaconda

在开始菜单,找到anaconda powershell prompt,输入conda,有输出即可

这样我们就有了管理python版本、依赖包版本的工具

(二)安装:python环境

  1. 安装python 3.10.6

conda create -n test python=3.10.6
其中-n 后面的test代表新的环境的名字,可以自己定义

这里一般都不会出现什么问题,都可以正常创建新的环境。
2. 激活环境

创建之后,我们还是在原本的基础环境上,需要跳到新的环境中去配置新的环境的依赖包

conda activate test

然后输入python,发现python3.10.6安装好了
在这里插入图片描述

(三)安装:依赖包

环境已经构建好,接下来就是安装相应的依赖包

  1. 第一步:先安装hdbscan ⚠️
hdbscan的安装问题

因为BERTopic依赖HDBSCAN这个包

但当前版本,使用pip安装HDBSCAN这个包,会报错

在这里插入图片描述

下面是两个相关讨论,里面有解决方案

https://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjdmK6IqqKFAxX3TGcHHfgmDQoQFnoECA8QAQ&url=https%3A%2F%2Fgithub.com%2FMaartenGr%2FBERTopic%2Fissues%2F816&usg=AOvVaw3F5j2NSu0dkw5xUZP2WMNc&opi=89978449

https://github.com/MaartenGr/BERTopic/issues/1656

解决方案
1. 安装build-tools-for-visual-studio

注意,这个解决方案中说,需要先安装build-tools-for-visual-studio,但是在我的电脑(win10虚拟机)上实测是不需要先安装这个的,大家可以先跳过这个步骤,直接安装hdbscan,如果安装不上去,再拐回来下载build-tools-for-visual-studio,安装并重启电脑,重新打开prompt窗口,然后继续执行后面的步骤

下载地址

https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022

在这里插入图片描述

2. 安装hdbscan

先通过conda安装hdbscan

conda install -c conda-forge hdbscan

这里输入y,包括python在内的一些包会被更新,但是没关系,仍然具备兼容性

在这里插入图片描述

接下来就能使用pip进行安装了

本人在安装过程中,发现就是安装不上去,网络一直卡着不动,可以试试配置一下conda的源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

conda config --set show_channel_urls yes

# 查看配置信息:mac上channels只有defaults,没有其他的
conda config --show

网上查找了很多源,从本地或者命令行中添加或者修改源,均未能下载和安装上hdbscan
后来,一气之下,将所有的源都删除,将源恢复成默认源后,开始下载和安装。

如果不行的话,可以试试以下 的命令行:

pip install hdbscan
conda install hdbscan
pip install --upgrade git+https://github.com/scikit-learn-contrib/hdbscan.git#egg=hdbscan

其中,可以在pip安装的时候,先更换第二步中的pip源。

(四)安装transformers、BERTopic等重要依赖包

  1. 设置pip换源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

  1. 安装依赖

pip install torch==2.0.1 transformers==4.29.1 tqdm==4.65.0 numpy==1.23.2 jieba==0.42.1 bertopic==0.15.0

2.BERT预训练模型下载

(一)模型原理

我们是数据集可能是一条条的文本数据,每一条文本代表一条数据。但是我们的计算机并不能很好的识别和认识我们的语言,计算机只认识计算机语言,就是数字。

所以需要将文本转成数字,其中很很多方法可以实现,比如TFIDF,one-hot,word2vec等等。这些都是不同的向量转化方法

BERT预训练模型,就是将自己的文本转化为相应的向量。
在这里插入图片描述

(二)预训练模型获取

注意在执行到下面这行代码的时候,需要下载模型,在网上下载模型,此时需要梯子
在这里插入图片描述
代码如下
embedding_model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

如果实在没有梯子,也可以使用huggingface镜像,参考如下文章

国内快速下载huggingface(镜像)上的模型和数据 - 知乎

下面是官方教程

HF-Mirror - Huggingface 镜像站

具体操作:

  1. 打开Anaconda powershell prompt

注意!!!!!!!!!!!!是Anaconda powershell prompt,不是Anaconda prompt,本人在操作的时候,就犯了这个错误,导致在设置环境变量的时候一直报错,再尝试多次后,才发现应该用Anaconda powershell prompt

  1. 激活环境

conda activate test

  1. 安装依赖

pip install -U huggingface_hub

  1. 设置环境变量,即使用huggingface镜像站

Linux平台,在命令行执行

export HF_ENDPOINT=https://hf-mirror.com

Windows Powershell,在命令行执行,注意这里必须使用powershell

$env:HF_ENDPOINT = "https://hf-mirror.com"

注意这个是在当前powershell会话中临时设置环境变量,所以如果关闭powershell而后重新打开,则需要重新运行该命令设置环境变量

  1. 下载模型

huggingface-cli download --resume-download 模型名

具体代码如下:

huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2

如果下载不下来,可以尝试用梯子后,再执行该命令行。

模型名需要去huggingface镜像站进行查询,以获取精确的模型名称

hf-mirror

注意:如果下载失败,可以重复执行上面的命令,来继续下载

3.BERT模型实战操作

本阶段主要演示了如何使用 BERTopic 库进行文本聚类,包括语义向量的生成、主题建模、以及可视化结果等步骤。可以根据实际需求对相关参数进行调整,以获得更好的聚类效果。

3.1预处理

利用上述的安装的包,初步进行文本主题聚类

导入相应的库

from bertopic import BERTopic
from sentence_transformers import SentenceTransformer
from umap import UMAP

from bertopic import BERTopic
from sentence_transformers import SentenceTransformer
from umap import UMAP

BERTopic: 用于文本聚类和主题建模。
SentenceTransformer: 用于生成语义向量。
UMAP: 用于将高维数据降维到二维以进行可视化。

3.2随机生成数据

用了一些关于天气和自然语言处理的句子作为示例数据。

# step1 加载文件
docs = [
  '今天天气很好',
  '今天天气很不错',
  '今天天气晴朗',
  '今天天气不错',
  '今天阳光明媚',
  '自然语言处理会使用到深度学习',
  '自然语言处理会使用到线性代数',
  '自然语言处理会需要掌握一定的微积分知识',
  '自然语言处理很简单',
  '自然语言处理容易掌握'
]

3.3用预训练模型生成词向量

使用了预训练的 Sentence Transformer 模型来生成文本的语义向量。
注意,这里使用了本地预训练模型的路径。如果你想从网络下载预训练模型,可以使用 SentenceTransformer(‘paraphrase-multilingual-MiniLM-L12-v2’) 的方式,需要魔法。

其中,如果按照正常下来下来的数据,会存放在本地自己电脑用户名下的缓存文件中,一般只要修改成自己电脑的对应用户名,后面的路径基本上都差不多。


# 方式1:从网络中下载
# embedding_model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 方式2:从本地加载,注意\\转义
# 路径写到包含config.json的位置
embedding_model = SentenceTransformer('C:\\Users\\Acer\\.cache\\huggingface\\hub\\models--sentence-transformers--paraphrase-multilingual-MiniLM-L12-v2\\snapshots\\bf3bf13ab40c3157080a7ab344c831b9ad18b5eb')
embedding_model

SentenceTransformer(
(0): Transformer({‘max_seq_length’: 128, ‘do_lower_case’: False}) with Transformer model: BertModel
(1): Pooling({‘word_embedding_dimension’: 384, ‘pooling_mode_cls_token’: False, ‘pooling_mode_mean_tokens’: True, ‘pooling_mode_max_tokens’: False, ‘pooling_mode_mean_sqrt_len_tokens’: False})
)

创建词向量

# 方式1:从网络中下载
# embedding_model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 方式2:从本地加载,注意\\转义
# 路径写到包含config.json的位置
embedding_model = SentenceTransformer('C:\\Users\\Acer\\.cache\\huggingface\\hub\\models--sentence-transformers--paraphrase-multilingual-MiniLM-L12-v2\\snapshots\\bf3bf13ab40c3157080a7ab344c831b9ad18b5eb')
embedding_model

SentenceTransformer(
(0): Transformer({‘max_seq_length’: 128, ‘do_lower_case’: False}) with Transformer model: BertModel
(1): Pooling({‘word_embedding_dimension’: 384, ‘pooling_mode_cls_token’: False, ‘pooling_mode_mean_tokens’: True, ‘pooling_mode_max_tokens’: False, ‘pooling_mode_mean_sqrt_len_tokens’: False})
)

训练词向量

embeddings = embedding_model.encode(docs, show_progress_bar=True)
print(type(embeddings), embeddings.shape)
print(embeddings)
# 这里生成的六个语义向量,对前面的六个句子

Batches: 100%|███████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 14.71it/s]
<class ‘numpy.ndarray’> (10, 384)
[[ 0.22831468 0.20791563 -0.01361516 … 0.08457319 -0.27376777
0.30211884]
[ 0.23415908 0.18763618 -0.00334522 … 0.0779568 -0.28823084
0.29783484]
[ 0.25473985 0.1818736 0.02977079 … 0.12291715 -0.15997924
0.20394081]

[-0.10149585 0.03836724 -0.2841275 … 0.23825662 -0.04146785
-0.19284795]
[-0.28807738 -0.0264765 0.18795006 … 0.4801185 0.34286192
-0.21912703]
[-0.13998343 -0.17367244 -0.0083187 … 0.338658 0.19647516

3.4文本聚类

用 BERTopic 进行文本聚类。
min_topic_size 参数控制了每个主题最小的文档数量,这是一个重要的参数,可以根据需要进行调整。

# 创建模型
topic_model = BERTopic(
  embedding_model=embedding_model,
  min_topic_size=2, # 重要参数
  verbose=True,
)

# 训练模型
topic_model.fit_transform(docs, embeddings=embeddings)

# 获取聚类结果
topic_info = topic_model.get_topic_info()
topic_info

使用 UMAP 将高维的语义向量降维到二维,以便进行可视化。topic_model.visualize_documents() 函数会生成一个交互式的可视化界面,显示文档在二维空间中的分布以及它们所属的主题。

# ⭐ UMAP可视化
reduced_embeddings = UMAP(n_neighbors=5, n_components=2, min_dist=0.0, metric='cosine',).fit_transform(embeddings)
topic_model.visualize_documents(docs, reduced_embeddings=reduced_embeddings, hide_annotations=True)

在这里插入图片描述

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驭风少年君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值