马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
对于无标注文本的行业划分(行业分类),属于范例的无监督或自监督学习使命。以下是几种常见的算法方法及实现思绪,实用于缺乏标注数据的场景:
一、基于关键词匹配的规则方法
核心头脑:通过预界说的行业关键词库,盘算文本与各行业的关键词匹配度,选择匹配度最高的行业。
实现步调:
- 构建行业关键词库:
- 按行业(如“汽车”“金融”“医疗”等)收集高频关键词,可通过行业陈诉、百科或现有分类体系提取。
- 示例:
- industry_keywords = {
- "汽车": ["车型", "引擎", "油耗", "新能源", "4S店"],
- "金融": ["利率", "贷款", "股票", "保险", "理财"],
- "医疗": ["医院", "药品", "手术", "患者", "医保"]
- }
复制代码
- 文本特性提取:
- 对输入文本举行分词、去停用词,提取高频词或名词短语作为特性。
- 匹配与分类:
- 盘算文本特性与各行业关键词的重叠率(如Jaccard系数、TF-IDF权重),选择重叠率最高的行业。
- 示例代码:
- from collections import defaultdict
- def 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)发掘文本中的匿伏主题,再根据主题分布将文本聚合成若干“行业簇”,最后人工标注簇的行业标签。
实现步调:
- 文本预处理惩罚:
- 分词、去停用词、词形还原,构建文档-词矩阵(如TF-IDF矩阵)。
- 主题模型练习:
- 使用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())))
复制代码
- 文本聚类:
- 将文本的主题分布作为特性,使用K-Means、DBSCAN等聚类算法聚合成簇。
- 簇标注:
- 人工分析每个簇的高频主题词,赋予行业标签(如含“股票”“基金”的簇标注为“金融”)。
优缺点:
- 优点:能发现隐含的行业模式,适合长文本或范畴分布较散的场景。
- 缺点:需要人工参加簇标注,主题数目需履历设定,短文本效果较差。
三、基于自监督学习的表现学习方法
核心头脑:利用无标注数据预练习文本编码器(如BERT),天生文本的语义向量,再通过聚类或分类头实现行业划分。
实现步调:
- 预练习语言模型:
- 使用掩码语言模型(MLM)等自监督使命在无标注文本上预练习模型(如RoBERTa)。
- 文本嵌入天生:
- 将文本输入预练习模型,提取句子级嵌入(如CLS token或平均池化后的向量)。
- from transformers import BertTokenizer, BertModel
- import torch
- tokenizer = 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() # 平均池化
复制代码
- 无监督分类:
- 方法1:直接聚类。使用K-Means等算法对嵌入向量聚类,人工标注簇的行业标签。
- 方法2:伪标签练习。通过规则方法天生少量伪标签数据, fine-tune 分类头(如Dense层)。
优缺点:
- 优点:能捕捉语义信息,泛化本事强,适合复杂文本(如消息、品评)。
- 缺点:需要大量盘算资源预练习模型,或依赖少量伪标签辅助。
四、基于条理聚类的行业树构建
核心头脑:通过文本相似度构建条理聚类树,从根节点到叶子节点逐层划分行业种别(如先区分“斲丧”“科技”,再细分“汽车”“电子”)。
实现步调:
- 文本相似度盘算:
- 使用余弦相似度、编辑距离等度量文本之间的相似性,构建相似度矩阵。
- 条理聚类:
- 使用凝聚条理聚类(Agglomerative Clustering),从单个文本开始,渐渐归并相似文本为簇,形成树状布局。
- 行业树剪枝与标注:
- 根据业务需求剪枝(如保存3-5层布局),人工为每个子树节点赋予行业标签。
优缺点:
- 优点:可主动发现行业层级关系,适合行业体系复杂的场景。
- 缺点:盘算复杂度高(O(n³)),大文本集服从低。
五、方法对比与选择发起
方法实用场景数据需求精度开发成本关键词匹配垂直范畴、关键词明白少量行业辞书中低低主题模型+聚类长文本、行业隐含关联大量无标注文本中等中自监督表现学习通用范畴、需语义明白大量无标注文本高高条理聚类行业体系复杂、需层级划分中等规模文本中等中高六、实战工具保举
- 关键词匹配:
- 中文:哈工大LTP、jieba分词 + 行业辞书(如阿里行业关键词库)。
- 英文:spaCy + 行业Thesaurus。
- 主题模型:
- Gensim(LDA)、Scikit-learn(NMF)。
- 自监督学习:
- Hugging Face Transformers(BERT/RoBERTa)、Sentence-BERT(句子嵌入优化)。
- 聚类工具:
- Scikit-learn(K-Means/DBSCAN)、HDBSCAN(条理密度聚类)。
总结
无标注数据的行业划分需联合业务特点选择方法:
- 快速落地:优先用关键词匹配,共同人工校准。
- 中恒久需求:接纳自监督学习预练习模型,联合少量伪标签或人工标注提拔精度。
- 范畴知识不敷:通过主题模型或条理聚类探索数据分布,辅助构建行业体系。
实际应用中,常接纳“规则+统计学习”的混淆方案(如关键词匹配过滤候选行业,再用LDA细化分类),以平衡服从与正确性。
—— —— —— —— ——
以上,咨询豆包而来,标题是“有没有对一段笔墨举行行业划分的算法方法? 无标注的数据“。先备忘,有空再逐个方法试一试。
|