IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【自然语言处理】【聚类】CDAC+:通过深度自适应聚类发现新意图 -> 正文阅读

[人工智能]【自然语言处理】【聚类】CDAC+:通过深度自适应聚类发现新意图

CDAC+:通过深度自适应聚类发现新意图
《Discovering New Intents via Constrained Deep Adaptive Clustering with Cluster Refinement》

论文地址:https://arxiv.org/pdf/1911.08891.pdf

一、简介

  • 意图发现

    ? 发现用户未被满足的新意图是对话系统中的重要任务。通过将相似语料聚类成相同的簇,可以识别出新的商业机会,并决定系统未来的发展方向。由于许多对话数据是未标注的,一个好的聚类算法能够帮助自动发现合理的分类,识别潜在的用户需求。

    ? 但是,实现这样的聚类算法面临两个挑战。

    • 精准估计新意图的数量十分困难;
    • 聚类的结果很难符合人的期望。例如,假设需要根据用户遇到的技术问题来划分数据,最终可能会按问题的类型进行聚类;
  • 现有方法

    • Hakkani-Tur \text{Hakkani-Tur} Hakkani-Tur等人使用语义解决将用户的语料分解成图,然后基于频率和熵进行剪枝;
    • Padmasundari \text{Padmasundari} Padmasundari通过集成方法来合并不同聚类算法和表示方法的结果;
    • AutoDial \text{AutoDial} AutoDial抽取所有类型的特征(例如 POS \text{POS} POS标记和关键词),然后使用层次聚类来聚合句子;
    • Haponchyk \text{Haponchyk} Haponchyk使用预定义的结构化输出来指导聚类过程;

    但是,这些方法都需要密集的特征工程。此外,这些方法以pipeline的方式执行表示学习和簇分配,可能导致较差的效果。

  • 解决方案

    ? 实际场景中,存在着有限的标注数据和大量的无标注数据,且预先不知道所有的意图类别。此外,训练数据存在噪音,即无标注数据中既有已知意图,也有未知意图。关键是如何利用标注数据来有效地改进聚类效果。

    ? 为了解决这些问题,本文提出了一种端到端的聚类方法 CDAC+ \text{CDAC+} CDAC+,在聚类的过程中优化意图的向量表示。此外,还利用预训练语言模型 BERT \text{BERT} BERT和标注数据来帮助聚类过程。具体来说,整个方法划分为三个步骤。

    • 首先,从 BERT \text{BERT} BERT获取意图的向量表示;(意图表示)
    • 其次,构造成对分类任务来作为聚类的替代。使用意图表示来计算句子对的相似矩阵,然后使用相似与否的标签来训练网络;(成对分类)
    • 最后,使用辅助 t t t分布和 KL \text{KL} KL散度来鼓励模型从高置信度分配中学习;(簇细化)

二、意图表示

? 使用预训练语言模型 BERT \text{BERT} BERT来获取意图向量表示。给定语料库中的第 i i i个句子 x i x_i xi?,从 BERT \text{BERT} BERT的最后隐藏层获取所有token的嵌入向量 [ C , T 1 , … , T N ] ∈ R ( N + 1 ) × H [C,T_1,\dots,T_N]\in\mathbb{R}^{(N+1)\times H} [C,T1?,,TN?]R(N+1)×H。利用 mean-pooling \text{mean-pooling} mean-pooling来获得平均表示 e i ∈ R H e_i\in\mathbb{R}^H ei?RH
e i = mean-pooling ( [ C , T 1 , … , T N ] ) e_i=\text{mean-pooling}([C,T_1,\dots,T_N]) ei?=mean-pooling([C,T1?,,TN?])
其中, N N N是序列长度, H H H是隐藏层大小。然后,将 e i e_i ei?送入聚类层 g g g,并获得意图的向量表示 I i ∈ R k I_i\in\mathbb{R}^k Ii?Rk
g ( e i ) = I i = W 2 ( Dropout ( tanh ( W 1 e i ) ) ) g(e_i)=I_i=W_2(\text{Dropout}(\text{tanh}(W_1 e_i))) g(ei?)=Ii?=W2?(Dropout(tanh(W1?ei?)))
其中, W 1 ∈ R H × H W_1\in\mathbb{R}^{H\times H} W1?RH×H W 2 ∈ R H × k W_2\in\mathbb{R}^{H\times k} W2?RH×k是可学习参数, k k k是簇数量。

三、成对分类

? 聚类的本质是衡量样本间的相似度。受模型 DAC \text{DAC} DAC的启发,本文将聚类问题重新为成对分类问题。通过学习句子是否相似,模型能够学习到有益于聚类的意图表示。使用意图向量表示 I I I来计算相似矩阵 S S S
S i j = I i I j T ∥ I i ∥ ∥ I j ∥ S_{ij}=\frac{I_i I_j^T}{\parallel I_i \parallel\parallel I_j \parallel} Sij?=Ii?Ij?Ii?IjT??
其中, ∥ ? ∥ \parallel \cdot \parallel ? L2 \text{L2} L2范数,并且 i , j ∈ { 1 , … , n } i,j\in\{1,\dots,n\} i,j{1,,n};batch size为n; S i j S_{ij} Sij?表示句子 x i x_i xi? x j x_j xj?的相似度。然后,迭代地使用监督和自监督步骤来优化模型。

1. 监督步骤

? 给定少量的标注数据,构造标签矩阵 R \text{R} R
R i j : = { 1 , ?? if y i = y j 0 , ?? if y i ≠ y j , R_{ij}:= \begin{cases} 1,\;\text{if}\quad y_i=y_j \\ 0,\;\text{if}\quad y_i\neq y_j, \end{cases} Rij?:={1,ifyi?=yj?0,ifyi??=yj?,?
其中, i , j ∈ { 1 , … , n } i,j\in\{1,\dots,n\} i,j{1,,n}。使用相似矩阵 S S S和标签矩阵 R R R来计算损失函数 L s i m \mathcal{L}_{sim} Lsim?
L s i m ( R i j , S i j ) = ? R i j log ( S i j ) ? ( 1 ? R i j ) log ( 1 ? S i j ) \mathcal{L}_{sim}(R_{ij},S_{ij})=-R_{ij}\text{log}(S_{ij})-(1-R_{ij})\text{log}(1-S_{ij}) Lsim?(Rij?,Sij?)=?Rij?log(Sij?)?(1?Rij?)log(1?Sij?)
这里将标注数据作为先验,并使用它指导聚类过程。

2. 自监督步骤

? 通过相似矩阵 S S S上应用动态阈值,获取自标注矩阵 R ^ \hat{R} R^
R ^ i j : = { 1 , if S i j > u ( λ ) ?? or ?? y i = y j 0 , if S i j < l ( λ ) ?? or ?? y i ≠ y j Not?selected,?otherwise \hat{R}_{ij}:= \begin{cases} 1,\text{if}\quad S_{ij}>u(\lambda)\;\text{or}\;y_i=y_j \\ 0,\text{if}\quad S_{ij}<l(\lambda)\;\text{or}\;y_i\neq y_j \\ \text{Not selected, otherwise} \end{cases} R^ij?:=??????1,ifSij?>u(λ)oryi?=yj?0,ifSij?<l(λ)oryi??=yj?Not?selected,?otherwise?
其中, i , j ∈ { 1 , … , n } i,j\in\{1,\dots,n\} i,j{1,,n} u ( λ ) u(\lambda) u(λ)是动态阈值上限, l ( λ ) l(\lambda) l(λ)是动态阈值下限,共同用来决定句子对是否相似。那些介于 u ( λ ) u(\lambda) u(λ) l ( λ ) l(\lambda) l(λ)的句子对不参与训练过程。在本步骤中,混合了标注和未标注数据来训练模型。

? 此外,添加 u ( λ ) ? l ( λ ) u(\lambda)-l(\lambda) u(λ)?l(λ)作为样本数量的惩罚项
min λ ?? E ( λ ) = u ( λ ) ? l ( λ ) \mathop{\text{min}}_{\lambda}\;\textbf{E}(\lambda)=u(\lambda)-l(\lambda) minλ?E(λ)=u(λ)?l(λ)
其中, λ \lambda λ是一个控制样本选择的自适应参数,并且迭代更新 λ \lambda λ的值
λ : = λ ? η ? ? E ( λ ) ? λ \lambda:=\lambda-\eta\cdot\frac{\partial\textbf{E}(\lambda)}{\partial\lambda} λ:=λ?η??λ?E(λ)?
其中, η \eta η λ \lambda λ的学习率。由于 u ( λ ) ∝ ? λ u(\lambda)\propto -\lambda u(λ)?λ l ( λ ) ∝ λ l(\lambda)\propto\lambda l(λ)λ,可以在训练过程中增加 λ \lambda λ来降低 u ( λ ) u(\lambda) u(λ)和提高 l ( λ ) l(\lambda) l(λ)。这方便逐步地选择更多句子来参加训练过程。这当然也可能在 R ^ \hat{R} R^中引入更多的噪音。

? 最后,使用相似度矩阵 S S S和自标注矩阵 R ^ \hat{R} R^来计算损失函数 L ^ s i m \hat{\mathcal{L}}_{sim} L^sim?
L ^ s i m ( R ^ i j , S i j ) = ? R ^ i j log ( S i j ) ? ( 1 ? R ^ i j ) log ( 1 ? S i j ) \hat{\mathcal{L}}_{sim}(\hat{R}_{ij},S_{ij})=-\hat{R}_{ij}\text{log}(S_{ij})-(1-\hat{R}_{ij})\text{log}(1-S_{ij}) L^sim?(R^ij?,Sij?)=?R^ij?log(Sij?)?(1?R^ij?)log(1?Sij?)
随着阈值的改变,模型会从学习简单分类句子到学习难分类句子对,迭代地获取有益于聚类的表示。当 u ( λ ) ≤ l ( λ ) u(\lambda)\leq l(\lambda) u(λ)l(λ)时,停止迭代并移动到细化阶段。

四、簇细化

? 这部分的逻辑与模型DEC完全相同。

? 通过期望最大化方法迭代的细化簇分配,鼓励模型来学习高置信度的分配。首先,给定初始化的簇中心 U ∈ R k × k U\in\mathbb{R}^{k\times k} URk×k,计算意图向量表示和簇中心的软分配。具体来说,使用学生 t t t分布作为评估意图向量表示 I i I_i Ii?和簇中心 U j U_j Uj?的相似度
Q i j = ( 1 + ∥ I i ? U j ∥ 2 ) ? 1 ∑ j ′ ( 1 + ∥ I i ? U j ∥ 2 ) ? 1 Q_{ij}=\frac{(1+\parallel I_i-U_j \parallel^2)^{-1}}{\sum_{j'}(1+\parallel I_i-U_j \parallel^2)^{-1}} Qij?=j?(1+Ii??Uj?2)?1(1+Ii??Uj?2)?1?
其中, Q i j Q_{ij} Qij?表示样本 i i i属于簇 j j j的概率。

? 其次,使用辅助目标分布 P P P来强迫模型来学习高置信度分配,从而细化了模型参数和簇中心。定义目标分布 P P P如下:
P i j = Q i j 2 / f i ∑ j ′ Q i j ′ 2 / f j ′ P_{ij}=\frac{Q_{ij}^2/f_i}{\sum_{j'}Q_{ij'}^2/f_{j'}} Pij?=j?Qij2?/fj?Qij2?/fi??
其中 f i = ∑ i Q i j f_i=\sum_{i}Q_{ij} fi?=i?Qij?表示软簇频率。

? 最后,最小化 P P P Q Q Q KLD \text{KLD} KLD损失函数
L KLD = K L ( P ∥ Q ) = ∑ i ∑ j P i j log P i j Q i j \mathcal{L}_{\text{KLD}}=KL(P\parallel Q)=\sum_i\sum_j P_{ij}\text{log}\frac{P_{ij}}{Q_{ij}} LKLD?=KL(PQ)=i?j?Pij?logQij?Pij??
然后,重复上面的两个步骤直至在两次连续迭代中,簇分配的改变小于 δ l a b l e % \delta_{lable}\% δlable?%

? 推断簇中心 c i c_i ci?如下:
c i = argmax k ?? Q i k c_i=\mathop{\text{argmax}}_k\;Q_{ik} ci?=argmaxk?Qik?
其中, c i c_i ci?是句子 x i x_i xi?的簇分配。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:50:48  更:2022-03-21 20:55:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:40:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码