意图识别_Query特征提取

本文探讨了搜索引擎中Query意图识别的特点,如多标签类别、样本分布不均衡及Query的短文本特性。并介绍了特征提取方法,包括文本特征如Ngram、TF-IDF,统计特征如Query长度、频次,以及利用Query与Title关系、Query间关系和Title间关系来增强特征。此外,还讨论了语义特征的提取,如使用LDA模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【1】背景/术语:

  1. Search_Session:用户与搜索引擎的一次完整的过程。信息包括:Query、Title、如果用户在Session期间变换了查询词,后续的搜索和点击均会被记录,直到脱离搜索。理解:一个样本即Query和点击的Title

【2】Query的意图识别和传统的文本分类问题有如下区别:

  1. 类别不完全互斥,即多标签。eg:极品飞车属于游戏、电影类
  2. 样本分布不均衡:一、类别方面不均衡,vidio类占总比例需求很大。二、热门样本query出现频率高
  3. Query通常以短文本为主。Query通常极为精炼,特征比较稀疏。而Query有对应的点击Title,充分挖掘两类文本之间的关系,对效果提升有很大的帮助。
  4. 一些关系网:不同Query点击了相同的Title、相同Query点击了不同title

【3】特征提取:

文本特征提取(预先采用了分词工具分词)

  • 因为分词不一定准确,改进:统计分词后word前后word的分布概率,通过P(pre_word|word)等合并成词概率高的词
  • Ngram特征:
  1. double padding Tri-gram:加入句首和句尾结构信息
  2. 选择只在某一类出现的词(Title/Query:百度经验)
  3. TF-IDF
  4. 强化Query尾部和头部对权重:经验分类中Query:怎么,如何。

统计特征提取:

  • Query长度、Query频次、BM-25:用来评价搜索词和结果之间相关性的算法

关系对利用:

  • Query和Title关系:
  1. 宏观:相同对Query对应Title进行合并,将合并的title作为特征补充/协同过滤推荐类别(基于相似性的方法分类)
  2. 微观:提取Query、Title公共子串
  • Query间的关系:
  1. Session中,Query变换的部分Diff部分强烈表达意图
  2. 相关Query集合共现的部分,将相似Query信息作为该Query特征补充
  3. 生成Query的Family Tree(根据Query的包含关系),Query的亲属作为特征补充
  • title间的关系:
  1. 类似Query间特征的处理

语义特征提取

  • LDA

 

### Rasa 意图识别原理 Rasa 是一个开源的对话式 AI 框架,广泛用于构建智能客服、虚拟助手等应用。意图识别是 Rasa 的核心功能之一,其目标是理解用户输入(query)所表达的意图类别。这一过程主要依赖于自然语言处理(NLP)和机器学习技术。 在 Rasa 中,意图识别通常分为两个阶段: 1. **文本特征提取** 用户输入的文本首先被转换为数值化的向量表示。Rasa 使用基于词袋(Bag-of-Words)、TF-IDF 或者更先进的词嵌入(如 spaCy 提供的词向量)来将文本转化为模型可处理的形式 [^2]。 2. **分类模型训练与预测** 在提取文本特征之后,Rasa 使用分类算法对意图进行建模。常见的策略包括使用传统的机器学习模型(如 SVM、随机森林)或深度学习模型(如 CNN、RNN)。其中 TEDPolicy(Transformer Embedding Dialogue Policy)是一种基于 Transformer 的多任务学习模型,能够同时处理意图识别和对话状态追踪(DST),从而提升整体对话系统的性能 [^3]。 ### 实现方法 #### 1. 基于规则的方法 在早期版本中,Rasa 支持通过正则表达式或关键字匹配来进行意图识别。这种方式适用于语义边界清晰、变化较少的场景,但泛化能力较差 [^1]。 ```yaml # 示例:基于规则的意图定义 regex: check_balance pattern: (?i)balance|账户余额 regex: transfer_money pattern: (?i)transfer|转账 ``` #### 2. 基于机器学习的方法 现代 Rasa 更倾向于使用基于机器学习的意图识别流程。具体步骤如下: - 准备训练数据(`nlu.yml`) - 配置 NLU 管道(`config.yml`) - 训练模型并部署 ```yaml # 示例:nlu.yml 数据格式 version: "3.0" nlu: - intent: check_balance examples: | - 我的账户余额是多少? - 查一下我的钱还剩多少 - intent: transfer_money examples: | - 给张三转账500元 - 我想把钱转给李四 ``` ```yaml # 示例:config.yml 中的 NLU 配置 pipeline: - name: WhitespaceTokenizer - name: RegexFeaturizer - name: LexicalSyntacticFeaturizer - name: CountVectorsFeaturizer - name: DIETClassifier epochs: 100 ``` #### 3. 多意图识别 对于用户可能同时表达多个意图的情况,Rasa 支持使用 `multi-hot encoding` 来表示意图特征。例如,“查询余额+转账”可以作为一个复合意图进行建模。TEDPolicy 虽然具备一定的多意图泛化能力,但推荐在 `stories.yml` 或 `rules.yml` 中显式定义多意图交互逻辑以获得最佳效果 [^3]。 ```yaml # 示例:rules.yml 中定义多意图响应 rules: - rule: 多意图处理示例 steps: - intent: check_balance - intent: transfer_money - action: utter_check_and_transfer ``` ### 模型优化建议 - **使用 DIETClassifier**:该组件结合了意图识别和实体识别,适合复杂场景。 - **引入外部词向量**:如使用中文 BERT 或 Chinese-BERT-wwm-ext 提升语义理解能力。 - **数据增强**:通过同义词替换、句式变换等方式扩充训练样本。 - **持续迭代**:定期更新训练数据和模型配置,适应新出现的用户表达方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值