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

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

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

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

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

  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细化分类),以平衡效率与准确性。

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

相关文章:

  • 以太网的mac帧格式
  • 优化uniappx页面性能,处理页面滑动卡顿问题
  • WebServiceg工具
  • 中心极限定理(CLT)习题集 · 题目篇
  • 深入浅出学会函数(上)
  • C++ 模板特化 (Template Specialization)
  • 如何规避矩阵运营中的限流风险及解决方案
  • springboot整合redis实现缓存
  • mapbox高阶,高程影像、行政区边界阴影效果实现
  • Windows 安装 JDK
  • Qt 处理 XML 数据
  • HarmonyOS:一多能力介绍:一次开发,多端部署
  • 声音分离人声和配乐-从头设计数字生命第5课, demucs——仙盟创梦IDE
  • 【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享
  • 大模型技术全景解析:从基础架构到Prompt工程
  • Windows IIS 配置编辑器 应用程序初始化 <applicationInitialization>
  • docker容器监控自动恢复
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)
  • 从单机工具到协同平台:开源交互式模拟环境的技术演进之路
  • windows上的RagFlow+ollama知识库本地部署
  • 贵州通报9起群众身边不正之风和腐败问题典型案例
  • 欢迎回家!日本和歌山县4只大熊猫将于6月底送返中国
  • 美施压拉美国家选边站队,外交部:搞阵营对抗注定失败
  • 新华视点丨广西抗旱一线调查
  • 上海未来亚洲研究会第六届会员大会举行,叶青当选会长
  • 汪东进卸任中海油董事长,深耕油气领域40余年、已临近退休