Logo
热心市民王先生

技术原理核心

技术研究 LLM 意图分类

深入解析语义路由、向量相似度计算及混合架构设计原理

深度剖析 (Deep Dive)

从关键词到语义空间的范式转变

传统意图分类依赖关键词匹配监督学习模型。关键词方法简单但脆弱,无法处理同义表达;监督学习模型需要大量标注数据,且泛化能力有限。

语义路由(Semantic Routing)代表了范式的根本转变:将意图分类问题转化为向量空间中的相似度计算问题

核心思想:语言的意义可以被编码为高维向量。语义相似的句子,其向量在空间中距离相近。通过计算用户查询向量与预定义意图向量之间的距离,可以判断用户的真实意图。

向量相似度计算的数学基础

语义路由的核心是余弦相似度(Cosine Similarity) 计算:

similarity(A, B) = (A · B) / (||A|| × ||B||)

其中:

  • AB 是两个句子的向量表示
  • A · B 是向量点积
  • ||A|| 是向量的模长

余弦相似度的取值范围是 [-1, 1],值越接近 1 表示两个句子语义越相似。

为什么选择余弦相似度?

  1. 方向敏感:关注向量的方向而非长度,不受句子长度影响
  2. 计算高效:向量点积计算复杂度为 O(n),适合实时场景
  3. 归一化特性:相似度分数在固定范围内,便于设定阈值

语义路由的核心流程

语义路由分为离线索引在线查询两个阶段:

阶段一:离线索引

意图定义 → 示例话语 → 文本编码器 → 意图向量 → 向量存储

对于每个意图,定义若干代表性话语(utterances)。例如:

意图名称示例话语
flight_book”我要订机票”, “帮我查航班”, “北京到上海的飞机”
weather_query”今天天气怎么样”, “明天会下雨吗”, “北京温度”

每个话语通过编码器(如 OpenAI text-embedding-3-small)转换为向量。通常取所有示例话语向量的平均值作为该意图的代表向量。

阶段二:在线查询

用户输入 → 文本编码器 → 查询向量 → 向量搜索 → 相似度排序 → 阈值判断 → 意图输出

当用户发送查询时,系统执行以下步骤:

  1. 编码:将用户查询转换为向量
  2. 搜索:在向量存储中查找最相似的意图向量
  3. 排序:按相似度分数降序排列
  4. 决策:若最高分超过阈值,返回对应意图;否则返回 None

架构图 (Architecture Visuals)

单阶段语义路由架构

适用于意图数量少(<50)、对延迟敏感的场景:

flowchart LR
    A[用户输入] --> B[文本编码器]
    B --> C[查询向量]
    C --> D{向量相似度搜索}
    
    subgraph Intent Vector Store
        E[Intent A: 0.92]
        F[Intent B: 0.78]
        G[Intent C: 0.45]
    end
    
    D --> E
    D --> F
    D --> G
    
    E --> H{Score > Threshold?}
    H -->|Yes| I[返回 Intent A]
    H -->|No| J[返回 None]

混合路由架构(推荐)

适用于生产环境,平衡准确率与延迟:

flowchart TB
    subgraph Stage1[阶段一:语义筛选]
        A[用户输入] --> B[编码器 Embedding]
        B --> C[向量搜索]
        C --> D[Top-K 候选意图]
    end
    
    subgraph Stage2[阶段二:LLM 精判]
        D --> E[构建分类 Prompt]
        E --> F[LLM 判断]
        F --> G{置信度检查}
    end
    
    G -->|High| H[最终意图]
    G -->|Low| I[None/澄清]
    
    style Stage1 fill:#e1f5fe
    style Stage2 fill:#fff3e0

混合架构的优势

维度纯 Embedding 方案混合方案
延迟极快 (~10ms)中等 (~200ms)
准确率中等 (85-90%)高 (92-97%)
成本极低中等
适用场景简单意图、高频调用复杂意图、高精度要求

关键组件 (Key Components)

1. 文本编码器 (Encoder)

编码器是语义路由的核心,决定向量质量。主流选择:

商业 API

  • OpenAI text-embedding-3-small/large:性价比高,多语言支持好
  • Cohere Embed:长文本支持优,可定制性强

开源模型

  • all-MiniLM-L6-v2:极快,适合边缘部署
  • bge-large-zh:中文效果好,MTEB 榜单前列
  • e5-large-v2:通用性强,指令微调

选择建议

场景推荐编码器理由
多语言生产环境OpenAI text-embedding-3-small稳定、多语言、便宜
中文专用场景bge-large-zh中文 SOTA、可本地部署
边缘/移动端all-MiniLM-L6-v2模型小、速度快

2. 向量存储 (Vector Store)

负责存储意图向量并支持快速检索:

轻量级方案

  • 内存 NumPy 数组:意图 <100 时足够,零依赖
  • FAISS:Facebook 开源,支持 GPU 加速

生产级方案

  • Qdrant:Rust 实现,性能优异,过滤能力强
  • Milvus:分布式架构,适合超大规模
  • Pinecone:全托管,零运维

3. 路由决策器 (Router Logic)

阈值策略

  • 固定阈值:统一设定(如 0.75),实现简单
  • 动态阈值:按意图设定不同阈值,适应意图难度差异
  • 自适应阈值:基于历史数据动态调整

Voiceflow 研究发现:添加明确的前缀描述(如 “Trigger this action when…”)可提升分类效果。

4. LLM 验证器 (LLM Validator)

用于第二阶段精判的 LLM 组件:

推荐模型

  • GPT-4o-mini:性价比首选
  • Claude Haiku:速度快、指令遵循好
  • 本地模型 (Llama 3.1 8B):隐私敏感场景

结构化输出:使用 JSON Schema 或 Function Calling 确保输出可解析。

设计哲学 (Why)

为什么选择两阶段架构?

人类决策类比: 人类的意图判断也是两阶段的。听到问题后,大脑首先快速筛选几个可能意图(直觉阶段),然后仔细分析选择最合适的(理性阶段)。

效率与精度的平衡

  • 阶段一:用廉价的向量计算快速筛选候选,排除 90% 的不可能意图
  • 阶段二:用昂贵的 LLM 在小范围内精判,确保准确性

成本最优: 假设 100 个意图,使用纯 LLM 方案每次需要处理 100 个描述。混合方案只需处理 Top-5 候选,成本降低 95%。

为什么 Embedding + LLM 是最佳组合?

Embedding 的优势

  • 毫秒级响应
  • 成本极低($0.0001/1K tokens)
  • 无需训练,零样本泛化

LLM 的优势

  • 深度语义理解
  • 处理边界情况
  • 可解释的推理过程

组合效果: 两者互补,Embedding 提供速度和成本优势,LLM 提供精度保障。这正是现代 AI 系统的设计趋势:快思考 + 慢思考

参考资料