以下是语义识别的不同方法分类及适用场景总结,涵盖传统算法、预训练模型和大模型方案,按技术路线和文本长度适配性分类:
一、基于规则的方法
适用场景:短文本、固定句式(如客服话术)
-
正则匹配
import re pattern = r"(订|预订|预约)(.*?)(机票|酒店)" text = "我要订明天去北京的机票" print(re.findall(pattern, text)) # 输出: [('订', '明天去北京的', '机票')]
缺点:无法处理复杂表达(如同义词、倒装句)。
-
关键词规则树
- 构建领域关键词库 + 逻辑组合(如"A且B则触发动作X")。
二、传统机器学习
适用场景:中等长度文本(段落级)
-
TF-IDF + 分类器
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import LinearSVC X = ["文本1", "文本2"] # 训练数据 y = ["类别1", "类别2"] # 标签 vectorizer = TfidfVectorizer() clf = LinearSVC().fit(vectorizer.fit_transform(X), y)
缺点:忽略词序和上下文语义。
-
主题模型(LDA)
from sklearn.decomposition import LatentDirichletAllocation lda = LatentDirichletAllocation(n_components=5) # 提取5个主题 lda.fit(tfidf_matrix)
三、深度学习(中等长度文本)
-
词向量 + RNN/CNN
from keras.layers import LSTM, Dense model.add(LSTM(128, input_shape=(seq_len, embedding_dim))) model.add(Dense(num_classes, activation='softmax'))
特点:能捕捉局部语义,但长距离依赖弱。
-
预训练模型微调
- BERT/Transformer类(适合段落级):
from transformers import BertForSequenceClassification model = BertForSequenceClassification.from_pretrained("bert-base-chinese")
- 轻量化模型(适合移动端):
- ALBERT、DistilBERT
- BERT/Transformer类(适合段落级):
四、大模型方案(长文本/复杂语义)
-
LLM直接调用
- 零样本/小样本学习:
from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "总结这篇长文的要点:" + text}] )
- 优点:无需训练,处理复杂语义(如逻辑推理)。
- 零样本/小样本学习:
-
检索增强生成(RAG)
- 结合向量数据库检索 + LLM生成:
# 伪代码示例 results = vector_db.search(query=text, top_k=3) # 检索相关片段 prompt = f"根据以下信息回答问题:{results}\n问题:{text}" llm_answer = llm.generate(prompt)
- 结合向量数据库检索 + LLM生成:
-
长文本专用模型
- 窗口扩展技术:
- GPT-4-128K、Claude-200K
- 层次化处理:
- 先分块摘要,再整体分析(如LangChain的map-reduce策略)。
- 窗口扩展技术:
五、知识图谱融合
适用场景:需要结构化语义(如医疗、金融)
- 实体-关系抽取
from transformers import pipeline ner = pipeline("ner", model="bert-base-chinese") rel_extract = pipeline("relation-extraction", model="bert-base-chinese")
- 图神经网络(GNN)
- 将文本中的实体和关系映射到知识图谱进行推理。
六、多模态语义理解
适用场景:图文/音视频混合内容
- CLIP模型(文本-图像对齐):
from transformers import CLIPProcessor, CLIPModel model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
方法选型对比表
方法 | 适合文本长度 | 是否需要训练 | 典型准确率 |
---|---|---|---|
规则匹配 | 短 | 否 | 60-80% |
TF-IDF + SVM | 中 | 是 | 70-85% |
BERT微调 | 中/长 | 是 | 85-95% |
GPT-4直接调用 | 长 | 否 | 90%+ |
RAG | 极长 | 部分 | 依赖检索质量 |
推荐工具链
- 短文本:spaCy(规则+统计模型)
- 中等文本:Hugging Face Transformers(BERT/RoBERTa)
- 长文档:LangChain + GPT-4-128K(分块处理+RAG)
- 领域专用:知识图谱 + 微调BioBERT/FinBERT
根据需求选择:准确率优先选大模型,低延迟选轻量化模型,可解释性选规则+知识图谱。