当前位置: 首页 > backend >正文

无标注文本的行业划分(行业分类)算法 —— 无监督或自监督学习

对于无标注文本的行业划分(行业分类),属于典型的无监督或自监督学习任务。以下是几种常见的算法方法及实现思路,适用于缺乏标注数据的场景:

一、基于关键词匹配的规则方法

核心思想:通过预定义的行业关键词库,计算文本与各行业的关键词匹配度,选择匹配度最高的行业。
实现步骤

  1. 构建行业关键词库
    • 按行业(如“汽车”“金融”“医疗”等)收集高频关键词,可通过行业报告、百科或现有分类体系提取。
    • 示例:
      industry_keywords = {"汽车": ["车型", "引擎", "油耗", "新能源", "4S店"],"金融": ["利率", "贷款", "股票", "保险", "理财"],"医疗": ["医院", "药品", "手术", "患者", "医保"]
      }
      
  2. 文本特征提取
    • 对输入文本进行分词、去停用词,提取高频词或名词短语作为特征。
  3. 匹配与分类
    • 计算文本特征与各行业关键词的重叠率(如Jaccard系数、TF-IDF权重),选择重叠率最高的行业。
    • 示例代码:
      from collections import defaultdictdef classify_industry(text, industry_keywords):text_tokens = set(text.lower().split())scores = defaultdict(float)for industry, keywords in industry_keywords.items():common_tokens = text_tokens.intersection(keywords)scores[industry] = len(common_tokens) / max(len(keywords), 1)  # 归一化得分return max(scores, key=lambda k: scores[k]) if scores else None
      

优缺点

  • 优点:简单直观,无需训练数据,适合快速上线。
  • 缺点:依赖关键词库的完整性,无法处理新词或语义变体(如“新能源车”未在关键词库中)。

二、基于主题模型的聚类方法

核心思想:通过主题模型(如LDA、NMF)挖掘文本中的潜在主题,再根据主题分布将文本聚合成若干“行业簇”,最后人工标注簇的行业标签。
实现步骤

  1. 文本预处理
    • 分词、去停用词、词形还原,构建文档-词矩阵(如TF-IDF矩阵)。
  2. 主题模型训练
    • 使用LDA模型推断文本的主题分布(如假设每个主题对应一个行业)。
      from gensim import corpora, models
      from sklearn.feature_extraction.text import TfidfVectorizer# 假设documents是文本列表
      tfidf = TfidfVectorizer()
      X = tfidf.fit_transform(documents)
      lda = models.LdaModel(corpus=X, num_topics=5, id2word=dict(zip(tfidf.vocabulary_.values(), tfidf.vocabulary_.keys())))
      
  3. 文本聚类
    • 将文本的主题分布作为特征,使用K-Means、DBSCAN等聚类算法聚合成簇。
  4. 簇标注
    • 人工分析每个簇的高频主题词,赋予行业标签(如含“股票”“基金”的簇标注为“金融”)。
      优缺点
  • 优点:能发现隐含的行业模式,适合长文本或领域分布较散的场景。
  • 缺点:需要人工参与簇标注,主题数量需经验设定,短文本效果较差。

三、基于自监督学习的表示学习方法

核心思想:利用无标注数据预训练文本编码器(如BERT),生成文本的语义向量,再通过聚类或分类头实现行业划分。
实现步骤

  1. 预训练语言模型
    • 使用掩码语言模型(MLM)等自监督任务在无标注文本上预训练模型(如RoBERTa)。
  2. 文本嵌入生成
    • 将文本输入预训练模型,提取句子级嵌入(如CLS token或平均池化后的向量)。
      from transformers import BertTokenizer, BertModel
      import torchtokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
      model = BertModel.from_pretrained("bert-base-uncased")def get_text_embedding(text):inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512)with torch.no_grad():outputs = model(**inputs)return outputs.last_hidden_state.mean(dim=1).squeeze().numpy()  # 平均池化
      
  3. 无监督分类
    • 方法1:直接聚类。使用K-Means等算法对嵌入向量聚类,人工标注簇的行业标签。
    • 方法2:伪标签训练。通过规则方法生成少量伪标签数据, fine-tune 分类头(如Dense层)。
      优缺点
  • 优点:能捕捉语义信息,泛化能力强,适合复杂文本(如新闻、评论)。
  • 缺点:需要大量计算资源预训练模型,或依赖少量伪标签辅助。

四、基于层次聚类的行业树构建

核心思想:通过文本相似度构建层次聚类树,从根节点到叶子节点逐层划分行业类别(如先区分“消费”“科技”,再细分“汽车”“电子”)。
实现步骤

  1. 文本相似度计算
    • 使用余弦相似度、编辑距离等度量文本之间的相似性,构建相似度矩阵。
  2. 层次聚类
    • 使用凝聚层次聚类(Agglomerative Clustering),从单个文本开始,逐步合并相似文本为簇,形成树状结构。
  3. 行业树剪枝与标注
    • 根据业务需求剪枝(如保留3-5层结构),人工为每个子树节点赋予行业标签。
      优缺点
  • 优点:可自动发现行业层级关系,适合行业体系复杂的场景。
  • 缺点:计算复杂度高(O(n³)),大文本集效率低。

五、方法对比与选择建议

方法适用场景数据需求精度开发成本
关键词匹配垂直领域、关键词明确少量行业词典中低
主题模型+聚类长文本、行业隐含关联大量无标注文本中等
自监督表示学习通用领域、需语义理解大量无标注文本
层次聚类行业体系复杂、需层级划分中等规模文本中等中高

六、实战工具推荐

  1. 关键词匹配
    • 中文:哈工大LTP、jieba分词 + 行业词典(如阿里行业关键词库)。
    • 英文:spaCy + 行业Thesaurus。
  2. 主题模型
    • Gensim(LDA)、Scikit-learn(NMF)。
  3. 自监督学习
    • Hugging Face Transformers(BERT/RoBERTa)、Sentence-BERT(句子嵌入优化)。
  4. 聚类工具
    • Scikit-learn(K-Means/DBSCAN)、HDBSCAN(层次密度聚类)。

总结

无标注数据的行业划分需结合业务特点选择方法:

  • 快速落地:优先用关键词匹配,配合人工校准。
  • 中长期需求:采用自监督学习预训练模型,结合少量伪标签或人工标注提升精度。
  • 领域知识不足:通过主题模型或层次聚类探索数据分布,辅助构建行业体系。

实际应用中,常采用“规则+统计学习”的混合方案(如关键词匹配过滤候选行业,再用LDA细化分类),以平衡效率与准确性。

—— —— —— —— ——
以上,咨询豆包而来,问题是“有没有对一段文字进行行业划分的算法方法? 无标注的数据“。先备忘,有空再逐个方法试一试。

http://www.xdnf.cn/news/1602.html

相关文章:

  • 【TensorFlow深度学习框架】从数学原理到工业级应用
  • 硬件工程师面试常见问题(7)
  • 【GIT】github中的仓库如何删除?
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite验收用户名和密码
  • 从指标定义到可视化:基于衡石指标平台的全链路数据治理实战
  • 4.1.1 类的序列化与反序列化(XmlSerializer)
  • 一文走进GpuGeek | 模型调用
  • Python 面向对象练习
  • 探秘 FFmpeg 版本发展时间简史
  • SpringMVC处理请求映射路径和接收参数
  • 配置RSUniVLM环境(自用)
  • [特殊字符] 分布式定时任务调度实战:XXL-JOB工作原理与路由策略详解
  • IDEA启动报错Failed to create JVM. JVM path的解决办法
  • (51单片机)LCD展示动画(延时函数)(LLCD1602教程)
  • 2025最新系统 Linux 教程(六)
  • Puter部署指南:基于Docker的多功能个人云平台掌控自己的数据
  • uniapp-商城-34-shop 购物车 选好了 进行订单确认
  • java—12 kafka
  • Kubernetes(K8S)入门阶段详细指南
  • 微信小程序根据图片生成背景颜色有效果图
  • 并发设计模式实战系列(6):读写锁
  • 【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
  • 开源交易所源码,交易所开发
  • 11.原型模式:思考与解读
  • 使用eclipse将原有tomcat插件工程调整为的Dynamic Web Module工程(保姆级教程)
  • 【数据可视化-26】基于人口统计与社会经济数据的多维度可视化分析
  • 【LLM+Code】Windsurf Agent 模式PromptTools详细解读
  • JAVA---面向对象(上)
  • 5.3.1 MvvmLight以及CommunityToolkit.Mvvm介绍
  • Redis安装及入门应用