尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于TF-IDF与K-Means的文本聚类:解决一词多义与海量评论自动分类

基于TF-IDF与K-Means的文本聚类:解决一词多义与海量评论自动分类 这次我们来看一个非常实际的算法应用问题如何让机器理解“苹果”这个词在不同语境下的不同含义并以此为基础对海量文本评论进行自动分类。想象一下你手上有10万条用户评论里面既有讨论“苹果手机很好用”也有“今天买的苹果很甜”还有“苹果公司的发布会”。传统的关键词匹配会把这些都归为一类但显然它们讨论的是完全不同的事物。这篇文章要解决的就是如何用算法自动、准确地区分这些语义实现评论的智能分类。这个问题的核心在于文本表示和相似度计算。我们不会使用需要海量数据和算力的深度模型而是聚焦于一套经典、高效且可解释性强的技术组合TF-IDF将文本转化为数学向量余弦相似度衡量向量间的“方向”差异以判断语义远近最后用聚类算法如K-Means将相似的评论自动归组。这套方案的优势在于硬件门槛极低普通CPU即可运行内存占用主要取决于文本数量非常适合中小型项目或作为复杂系统的预处理模块。本文将带你完整走通这个流程从理解每个技术点的作用到准备Python环境再到用真实数据或模拟数据一步步实现文本向量化、相似度计算和聚类分析最后评估分类效果。无论你是想处理用户反馈、分析社交媒体舆情还是单纯学习NLP基础技术这篇文章都能提供一套可直接运行的代码和清晰的排查思路。1. 核心能力速览在深入代码之前我们先通过下表快速了解本方案的核心特性和要求能力项说明核心算法TF-IDF (词频-逆文档频率) 余弦相似度 K-Means聚类主要功能对海量文本评论进行无监督自动分类区分词语在不同语境下的语义如“苹果”指水果还是公司硬件门槛极低。无需GPU普通CPU即可。内存占用与文本数量、长度正相关10万条短评预计需要数GB内存。启动/运行方式Python脚本命令行运行或集成到Web服务如Flask/FastAPI提供API接口。是否支持批量任务是。核心就是为批量文本处理设计可一次性处理数万至数十万条数据。是否支持API接口可轻松扩展。算法本身是函数可封装为RESTful API供其他系统调用。适合场景用户评论分析、社交媒体话题发现、工单自动归类、内容去重、数据清洗预处理等。不适合场景需要极高精度如法律、医疗文本分类、语言复杂多语言混合、大量网络新词、且没有足够语料进行模型微调的场景。2. 适用场景与使用边界这套基于TF-IDF和聚类的文本分类方案最适合解决“大海捞针”式的粗粒度信息组织问题。它非常适合以下场景未知类别发现当你面对一堆文本完全不知道里面有多少种话题时聚类可以帮助你自动发现潜在的类别。大规模文本初筛例如从10万条电商评论中快速将讨论“手机性能”、“拍照效果”、“物流服务”的评论大致分开尽管它们可能都含有“苹果”这个词。降维与可视化前处理在将文本数据投入更复杂的分析或可视化之前先用此方法进行归类可以使结果更清晰。快速验证想法作为NLP项目的起点快速验证文本数据是否具有可分离的语义簇。它的能力边界和注意事项无监督学习聚类算法不知道“苹果公司”和“水果苹果”这些具体标签它只告诉你哪些评论更相似。最终簇的含义需要人工观察簇内的关键词来定义。依赖文本特征效果严重依赖于TF-IDF向量化的质量。如果文本很短如“好”“不错”或包含大量同义词、缩写、错别字效果会打折扣。需要调参K-Means需要预先指定聚类数量K选择不当会影响结果。通常需要结合轮廓系数等指标或尝试多种K值。语义理解有限它基于词频统计无法像BERT等模型那样理解深层语义、上下文和指代关系。对于“iPhone续航不行”和“苹果手机电池差”它能判断相似但对于“水果苹果”和“苹果股价”的区分则完全依赖于这两个短语中其他词语如“水果”、“股价”提供的特征。合规与伦理用于分析用户评论时必须遵守数据隐私法规确保数据已脱敏或获得授权。分析结果应用于改善产品和服务而非对用户进行不当画像或歧视。3. 环境准备与前置条件实现该方案只需要一个标准的Python数据科学环境。以下是详细的准备清单1. 操作系统Windows 10/11, macOS, 或 Linux (如Ubuntu)。推荐使用Linux或macOS以获得更好的包管理体验。2. Python 环境Python 版本3.7 或以上推荐 3.8/3.9兼容性最广。环境管理强烈建议使用conda或venv创建独立的虚拟环境避免包冲突。# 使用 conda 创建环境 conda create -n text_cluster python3.9 conda activate text_cluster # 或使用 venv python -m venv text_cluster_env # Windows text_cluster_env\Scripts\activate # Linux/macOS source text_cluster_env/bin/activate3. 核心 Python 库在激活的虚拟环境中使用pip安装以下库pip install numpy pandas scikit-learn jieba matplotlib seabornnumpy,pandas数据处理基础。scikit-learn核心库提供TF-IDF向量化、余弦相似度计算、K-Means聚类以及评估指标。jieba优秀的中文分词工具。如果你的评论是英文则不需要。matplotlib,seaborn用于结果可视化如绘制聚类分布图。4. 硬件与存储CPU现代多核CPU即可更多核心能加速向量化计算。内存这是主要瓶颈。处理10万条评论时TF-IDF矩阵可能会非常稀疏但庞大。建议准备8GB以上内存对于更长的文本或更多数据需要16GB或更多。磁盘少量空间用于存储代码和数据。5. 数据准备准备一个文本文件如comments.csv或直接从数据库导出。数据应至少包含一列文本内容。示例comments.csv格式id,content 1,苹果手机拍照效果真棒 2,今天买的红富士苹果又甜又脆。 3,期待苹果公司今年的开发者大会。 4,这款安卓手机续航比苹果强。 5,苹果派的做法其实很简单。 ...4. 安装部署与启动方式本项目本质是一个Python数据处理脚本没有常驻服务。部署即运行脚本。我们将创建一个主脚本comment_cluster.py。1. 项目结构建议按如下目录组织代码和数据text_clustering_project/ ├── data/ │ ├── raw_comments.csv # 原始评论数据 │ └── stopwords.txt # 中文停用词表可选 ├── src/ │ └── comment_cluster.py # 主处理脚本 ├── output/ # 输出目录 │ ├── clustered_results.csv │ └── cluster_visualization.png └── requirements.txt # 依赖列表2. 核心脚本框架 (comment_cluster.py)脚本将按流程封装数据加载 - 文本预处理 - TF-IDF向量化 - 聚类 - 结果保存与可视化。# comment_cluster.py import pandas as pd import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import matplotlib.pyplot as plt import seaborn as sns from sklearn.decomposition import PCA import numpy as np import warnings warnings.filterwarnings(ignore) def load_stopwords(filepath): 加载停用词表 with open(filepath, r, encodingutf-8) as f: stopwords [line.strip() for line in f.readlines()] return set(stopwords) def preprocess_text(text, stopwords): 中文文本预处理分词、去停用词 if not isinstance(text, str): return # 分词 words jieba.lcut(text) # 去除停用词和非中文字符简单示例 words [w for w in words if w not in stopwords and w.strip() and len(w) 1] return .join(words) def main(): # 1. 加载数据 print(步骤1: 加载数据...) df pd.read_csv(./data/raw_comments.csv) comments df[content].tolist() print(f共加载 {len(comments)} 条评论。) # 2. 加载停用词并预处理 print(步骤2: 文本预处理分词、去停用词...) stopwords load_stopwords(./data/stopwords.txt) processed_comments [preprocess_text(comment, stopwords) for comment in comments] # 3. TF-IDF 向量化 print(步骤3: TF-IDF 向量化...) vectorizer TfidfVectorizer(max_features5000) # 限制特征数量控制内存 X vectorizer.fit_transform(processed_comments) print(f向量化后特征维度: {X.shape}) # 4. 聚类 (以K3为例实际需选择) print(步骤4: 进行K-Means聚类...) n_clusters 3 # 假设我们预期有3个主题水果、公司、其他 kmeans KMeans(n_clustersn_clusters, random_state42, n_initauto) cluster_labels kmeans.fit_predict(X) df[cluster_label] cluster_labels # 5. 评估聚类效果轮廓系数 print(步骤5: 评估聚类效果...) silhouette_avg silhouette_score(X, cluster_labels) print(f轮廓系数 (Silhouette Score): {silhouette_avg:.4f}) # 6. 保存结果 print(步骤6: 保存聚类结果...) output_path ./output/clustered_results.csv df.to_csv(output_path, indexFalse, encodingutf-8-sig) print(f结果已保存至: {output_path}) # 7. 可视化降维到2D后绘制散点图 print(步骤7: 生成可视化图表...) # 使用PCA将高维TF-IDF向量降至2维以便可视化 pca PCA(n_components2, random_state42) X_pca pca.fit_transform(X.toarray()) df[pca_x] X_pca[:, 0] df[pca_y] X_pca[:, 1] plt.figure(figsize(10, 8)) scatter sns.scatterplot(datadf, xpca_x, ypca_y, huecluster_label, paletteviridis, s60, alpha0.7) plt.title(fComment Clustering Visualization (K{n_clusters}, Silhouette{silhouette_avg:.3f})) plt.xlabel(PCA Component 1) plt.ylabel(PCA Component 2) plt.legend(titleCluster) plt.tight_layout() viz_path ./output/cluster_visualization.png plt.savefig(viz_path, dpi300) print(f可视化图表已保存至: {viz_path}) # plt.show() # 如果在本地有GUI环境可以取消注释查看 if __name__ __main__: main()3. 启动与运行在项目根目录下确保虚拟环境已激活直接运行Python脚本cd /path/to/text_clustering_project python src/comment_cluster.py脚本将依次打印每个步骤的日志并在output/目录下生成结果文件。5. 功能测试与效果验证现在我们使用模拟数据来验证整个流程并观察算法如何区分“苹果”的不同语义。5.1 测试数据准备创建一个data/raw_comments.csv文件包含以下模拟评论id,content 1,苹果手机拍照效果真棒 2,今天买的红富士苹果又甜又脆。 3,期待苹果公司今年的开发者大会。 4,这款安卓手机续航比苹果强。 5,苹果派的做法其实很简单。 6,iPhone 15的屏幕素质一如既往的出色。 7,超市的烟台苹果今天特价。 8,库克在苹果发布会上介绍了新产品。 9,妈妈用苹果做了美味的苹果酱。 10,我的苹果电脑已经用了五年了。 11,苹果的股价最近波动很大。 12,这种青苹果有点酸。 13,苹果的生态系统确实很封闭。 14,榨苹果汁需要几个苹果 15,很多人认为苹果创新乏力了。5.2 停用词表准备创建一个简单的data/stopwords.txt包含一些常见无意义词的 了 在 是 我 有 和 就 都 而 及 与 着实际项目中应使用更全面的停用词表可从开源项目获取。5.3 执行测试运行主脚本python src/comment_cluster.py。观察控制台输出步骤1: 加载数据... 共加载 15 条评论。 步骤2: 文本预处理分词、去停用词... 步骤3: TF-IDF 向量化... 向量化后特征维度: (15, 5000) 步骤4: 进行K-Means聚类... 步骤5: 评估聚类效果... 轮廓系数 (Silhouette Score): 0.5123 步骤6: 保存聚类结果... 结果已保存至: ./output/clustered_results.csv 步骤7: 生成可视化图表... 可视化图表已保存至: ./output/cluster_visualization.png轮廓系数在0到1之间越接近1表示聚类效果越好。0.51对于小规模文本数据是一个不错的起点。5.4 结果分析打开output/clustered_results.csv查看cluster_label列。一个可能的结果如下实际结果因随机种子可能略有不同idcontentcluster_label1苹果手机拍照效果真棒02今天买的红富士苹果又甜又脆。13期待苹果公司今年的开发者大会。04这款安卓手机续航比苹果强。06iPhone 15的屏幕素质一如既往的出色。07超市的烟台苹果今天特价。18库克在苹果发布会上介绍了新产品。09妈妈用苹果做了美味的苹果酱。110我的苹果电脑已经用了五年了。011苹果的股价最近波动很大。012这种青苹果有点酸。113苹果的生态系统确实很封闭。014榨苹果汁需要几个苹果115很多人认为苹果创新乏力了。05苹果派的做法其实很简单。1效果验证簇0 (标签0)主要包含与“苹果公司”及其产品手机、电脑、发布会、股价、生态系统相关的评论。关键词可能是“手机”、“公司”、“iPhone”、“电脑”、“股价”。簇1 (标签1)主要包含与“水果苹果”及其食用方式红富士、甜、脆、苹果酱、青苹果、苹果汁、苹果派相关的评论。关键词可能是“红富士”、“甜”、“脆”、“酱”、“汁”、“派”。成功标准判断语义一致性同一簇内的评论应围绕同一主题。观察发现簇0和簇1内部的主题一致性较高。区分度两个簇之间的主题差异明显。水果和科技公司被成功分开。算法有效性即使评论中都含有“苹果”一词算法通过TF-IDF捕捉到的其他特征词如“手机”、“甜”、“股价”、“汁”成功提供了区分依据。测试结论本次小规模测试验证了TF-IDF聚类方案能够有效区分“苹果”一词在不同语境下的语义实现了评论的自动分类。6. 接口API与批量任务封装虽然核心是离线脚本但将其封装为API服务可以方便地集成到其他系统如客服平台、内容管理系统进行实时或定时分类。6.1 使用FastAPI构建分类API创建一个新的脚本api_server.py# api_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List import pandas as pd import jieba from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans import joblib # 用于保存和加载模型 import os app FastAPI(title评论自动分类API, description基于TF-IDF和K-Means的评论聚类API) # 全局变量存储已训练的模型和向量化器 vectorizer None kmeans_model None stopwords set() class CommentRequest(BaseModel): comments: List[str] # 可选传入自定义聚类数量K如果不传则使用默认或已加载的模型 n_clusters: int None class ClusterResponse(BaseModel): comments: List[str] cluster_labels: List[int] cluster_centers_info: List[str] # 简单描述每个簇的中心词示例 def load_models(): 加载预训练的模型和向量化器 global vectorizer, kmeans_model, stopwords try: # 假设模型已提前训练并保存 vectorizer joblib.load(./models/tfidf_vectorizer.pkl) kmeans_model joblib.load(./models/kmeans_model.pkl) # 加载停用词 with open(./data/stopwords.txt, r, encodingutf-8) as f: stopwords set([line.strip() for line in f]) print(模型加载成功。) except FileNotFoundError: print(未找到预训练模型API将无法进行预测。请先运行训练脚本。) # 在实际应用中这里可以初始化为空并在首次调用时触发训练或返回错误。 def preprocess_single(text): 预处理单条文本 words jieba.lcut(str(text)) words [w for w in words if w not in stopwords and w.strip() and len(w) 1] return .join(words) app.on_event(startup) async def startup_event(): load_models() app.post(/cluster, response_modelClusterResponse) async def cluster_comments(request: CommentRequest): 对一批评论进行聚类。 if vectorizer is None or kmeans_model is None: raise HTTPException(status_code503, detail服务未就绪模型未加载。) # 1. 预处理 processed_comments [preprocess_single(comment) for comment in request.comments] # 2. 向量化 X vectorizer.transform(processed_comments) # 3. 预测聚类标签 labels kmeans_model.predict(X) # 4. 简单构造每个簇的中心词信息示例实际可更复杂 # 这里简单返回每个簇的前几个高频特征词 feature_names vectorizer.get_feature_names_out() centers_info [] for i in range(kmeans_model.n_clusters): # 获取该簇中心点权重最高的前5个词 center kmeans_model.cluster_centers_[i] top_indices center.argsort()[-5:][::-1] top_words [feature_names[idx] for idx in top_indices] centers_info.append(fCluster {i}: {, .join(top_words)}) return ClusterResponse( commentsrequest.comments, cluster_labelslabels.tolist(), cluster_centers_infocenters_info ) app.get(/health) async def health_check(): return {status: healthy, model_loaded: vectorizer is not None} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)6.2 启动API服务# 安装FastAPI和Uvicorn pip install fastapi uvicorn # 启动服务 python api_server.py服务启动后访问http://127.0.0.1:8000/docs可以看到自动生成的API交互文档。6.3 调用API进行批量分类使用curl或 Pythonrequests库调用接口# 使用curl调用 curl -X POST http://127.0.0.1:8000/cluster \ -H Content-Type: application/json \ -d { comments: [ 苹果手机信号不太好, 这个苹果吃起来很爽口, 苹果发布会定在下个月 ] }# 使用Python requests调用 import requests import json url http://127.0.0.1:8000/cluster payload { comments: [ 苹果手机信号不太好, 这个苹果吃起来很爽口, 苹果发布会定在下个月 ] } headers {Content-Type: application/json} response requests.post(url, datajson.dumps(payload), headersheaders, timeout30) print(response.json())预期返回结果示例{ comments: [ 苹果手机信号不太好, 这个苹果吃起来很爽口, 苹果发布会定在下个月 ], cluster_labels: [0, 1, 0], cluster_centers_info: [ Cluster 0: 手机, 苹果, 公司, 发布, 信号, Cluster 1: 苹果, 吃, 起来, 爽口, 甜 ] }从结果可以看到API成功将关于“手机信号”和“发布会”的评论归为簇0科技公司将关于“吃起来爽口”的评论归为簇1水果。6.4 批量任务处理对于超大批量数据如10万条不建议通过单次API调用传输。更佳实践是离线脚本处理直接使用最开始的Python脚本处理存储在文件或数据库中的大批量数据。队列异步处理将任务放入消息队列如RabbitMQ, Redis由后台Worker调用核心算法函数处理结果写回数据库。分块API调用如果必须通过API客户端应将数据分块如每批1000条循环调用API并汇总结果。7. 资源占用与性能观察处理10万条评论时性能瓶颈主要在于内存和计算时间。1. 内存占用观察TF-IDF向量化产生的矩阵通常是稀疏矩阵scipy.sparse.csr_matrix这节省了大量内存。主要内存消耗点原始文本数据10万条评论假设平均每条50字符约占用100,000 * 50 * 2 bytes ≈ 10 MB。TF-IDF矩阵假设保留5000个特征词稀疏度99%则内存占用远小于稠密矩阵 (100,000 * 5000 * 8 bytes ≈ 4 GB)。实际可能只有几十到几百MB。K-Means计算算法需要计算样本到簇中心的距离会消耗额外内存。监控方法在Python脚本中或使用系统工具如htop,任务管理器观察进程内存。import psutil import os process psutil.Process(os.getpid()) print(f当前进程内存占用: {process.memory_info().rss / 1024 / 1024:.2f} MB)2. 计算时间预估分词与预处理线性复杂度 O(n)10万条评论在普通CPU上可能需要数十秒到几分钟。TF-IDF向量化复杂度与文本数量和特征数相关。max_features参数控制特征数量是平衡效果与性能的关键。K-Means聚类复杂度约为 O(n * K * I * d)其中n是样本数K是簇数I是迭代次数d是特征维度。对于10万*5000的数据可能需要数分钟。性能优化建议控制特征数量TfidfVectorizer(max_features5000)。根据词汇重要性5000-10000个特征通常足够。使用n_initauto新版scikit-learn中这能自动选择合理的初始化次数加速K-Means。增量学习如果数据源源不断可考虑MiniBatchKMeans它使用小批量数据更新簇中心速度更快对内存更友好但精度略有牺牲。分布式计算对于千万级数据考虑使用Spark MLlib或Dask-ml进行分布式TF-IDF和聚类。8. 常见问题与排查方法在实际部署和运行中你可能会遇到以下问题问题现象可能原因排查方式解决方案脚本运行报错ModuleNotFoundError依赖库未安装或不在当前Python环境。在终端执行pip list检查scikit-learn,jieba等是否存在。在正确的虚拟环境中使用pip install -r requirements.txt安装所有依赖。分词效果差出现大量单字或符号1. 未加载停用词表。2. 文本包含大量无意义字符如URL、用户。打印预处理后的几条文本观察分词结果。1. 确保停用词表路径正确且已加载。2. 在预处理函数中添加更严格的文本清洗如正则表达式去除URL、特殊符号。TF-IDF向量化后特征维度异常高如几十万max_features参数未设置或设置过大。打印X.shape查看特征数。在TfidfVectorizer中设置max_features5000或10000限制最高频特征。聚类结果不理想所有样本几乎都在一个簇1. 文本差异太小如都是“好评”、“差评”。2. 聚类数量K设置不合理。3. TF-IDF特征区分度不够。1. 检查原始文本内容。2. 尝试不同的K值计算轮廓系数。3. 查看TF-IDF矩阵中非零元素的比例。1. 考虑引入更复杂的特征如n-gram。2. 使用“肘部法则”或轮廓系数选择K。3. 尝试调整TF-IDF的min_df忽略低频词和max_df忽略高频词。轮廓系数为负或非常接近0聚类效果很差样本分配可能随机。检查轮廓系数计算代码确保传入的是原始特征矩阵X和标签labels。1. 尝试不同的聚类算法如DBSCAN无需指定K。2. 重新检查数据预处理和特征提取步骤。处理10万条数据时内存溢出OOM1. TF-IDF矩阵转为稠密数组。2. 特征数过多。3. 同时处理的数据批次太大。使用内存监控工具观察峰值。1. 确保始终使用稀疏矩阵运算。2. 降低max_features。3. 使用MiniBatchKMeans或分块处理数据。API服务调用超时1. 单次请求数据量过大。2. 模型预测过程较慢。查看API服务日志记录请求处理时间。1. 限制单次请求的评论条数如最多1000条。2. 对API调用实施异步处理快速返回任务ID后台处理。新评论无法被正确分类新评论包含训练时未出现的词汇OOV问题。查看新评论的预处理结果和向量化后的特征。TF-IDF会忽略OOV词。对于重要新词需要定期用新数据重新训练TF-IDF向量化和K-Means模型。9. 最佳实践与使用建议为了让项目更稳健、易维护遵循以下最佳实践数据预处理是重中之重80%的精力应放在数据清洗上。包括去除无关字符、纠正错别字、统一表述如“iPhone”和“苹果手机”。停用词表定制化通用停用词表之外应根据业务添加领域停用词。例如在电商评论中“商品”、“卖家”、“物流”可能也是高频但区分度低的词。特征工程尝试除了词频TF-IDF可以尝试n-gramTfidfVectorizer(ngram_range(1,2))可以捕捉“苹果手机”、“很甜”等短语。词向量加权如果数据量够大可以使用Word2Vec或BERT词向量的平均值作为文本表示再进行聚类。聚类数量K的选择肘部法则绘制不同K值对应的聚类误差平方和SSE选择拐点。轮廓系数选择使平均轮廓系数最大的K。业务理解根据经验或业务需求确定大致的主题数量。模型持久化与更新使用joblib保存训练好的vectorizer和kmeans_model。定期如每周/每月用新数据重新训练以覆盖新的词汇和话题。import joblib joblib.dump(vectorizer, ./models/tfidf_vectorizer.pkl) joblib.dump(kmeans_model, ./models/kmeans_model.pkl)结果评估不止于轮廓系数轮廓系数是内部指标。一定要人工抽样检查每个簇的评论看语义是否一致。可以计算每个簇的主题词TF-IDF权重高的词来辅助理解。安全与合规数据脱敏处理真实评论前去除用户ID、手机号、地址等个人敏感信息。授权与用途确保你有权使用这些数据进行分析且分析结果用于合规目的。算法公平性注意聚类结果是否无意中放大了某些偏见需人工审核。10. 总结与下一步通过本文的实践我们验证了使用TF-IDF 余弦相似度 K-Means聚类这一经典组合可以有效解决“一词多义”场景下的评论自动分类问题。这套方案的最大优势在于简单、快速、可解释性强无需标注数据在普通服务器上就能处理十万乃至百万量级的文本。你最应该先验证的是用自己业务场景中的一小部分数据比如1000条跑通整个流程观察聚类结果是否符合业务直觉。如果效果不佳问题通常出在数据预处理或特征提取上。最容易踩的坑忘了设置max_features导致特征爆炸、内存溢出。使用了不合适的停用词表把关键特征词过滤掉了。盲目相信轮廓系数没有人工检查聚类结果的实际语义。后续可以深入的方向进阶特征尝试将TF-IDF特征与主题模型如LDA的特征结合或使用预训练语言模型如Sentence-BERT生成句向量再进行聚类。增量聚类对于流式数据研究在线聚类算法如BIRCH或MiniBatchKMeans的增量学习模式。层次化分类先进行粗粒度聚类如科技、食品再对每个大类进行细粒度聚类如手机、电脑水果、甜品。集成到业务流将训练好的模型和API服务集成到你的数据管道或业务系统中实现评论的实时自动打标和分流。这个项目代码和思路已经为你提供了一个坚实的起点。建议收藏本文在需要处理文本分类或话题发现任务时随时回来参考这套从环境准备到API部署的完整方案。
返回列表