论文笔记:Hybrid Attention-Based Prototypical Networks for Noisy Few-Shot Relation Classification

针对小样本关系抽取问题,介绍一种改进的原型网络方法。通过引入混合注意力机制,增强模型对噪声数据的鲁棒性及特征区分能力。在FewRel1.0数据集上,即使存在错误标注,仍能有效提升模型性能。

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

基本信息

  • github:地址
  • 会议:2019 AAAI
  • 标签:关系抽取、小样本

笔记

1. 整体思路是什么?

  • 问题设定:小样本关系抽取,N way K shot 的任务。
  • 数据集:FewRel 1.0数据集,在数据集中引入了 (错误标注的情况)
  • 出发点:在小样本中噪声数据对模型影响是巨大的。小样本学到的特征是稀疏的。
  • 方式:小样本学习中的metric learning方法,用了之前Prototypical网络,作了一定改进。将简单的avg换成了attention。引入了基于实例、基于特征的混合注意力。缓解出发点提到的两个问题。
  • 做法:对每个query,都是拿整个support set与其计算相似度,最终是一个N维的相似度量,取最大作为其类别。

2. 模型流程是什么?

在这里插入图片描述
输入: ( S u p p o r t , x q u e r y ) (Support,x_{query}) Supportxquery
输出: x q u e r y x_{query} xquery对应的类别。

2.1 Instance Encoder
  • 使用Glove词向量,参考PCNN,每个词的embedding是词向量+位置编码。
  • 用CNN做编码器。一维卷积,最大池化,得到句向量。
  • Query的句子也是同样编码方式。
  • 用CNN作者是综合了表现与计算效率的考量
2.2 Prototypical Networks
  • Prototypical Networks的作用是进行一系列计算,得到每个关系的prototype。

  • 对每个关系,输入是K个编码完的句向量,输出一个prototype向量。

  • 原本的方式简单平均:在这里插入图片描述 【关系i的prototype向量】

  • 然后就是计算query编码与每个prototype距离,做个softmax,得到预测类别。
    在这里插入图片描述

2.3 Hybrid Attention

本文对于这个网络的改进,就是第三个模块。

Instance-level Attention

  • 就是将avg变为att:在这里插入图片描述

  • 其中:在这里插入图片描述

  • 这边 g ( ⋅ ) g(·) g()就是一个线性函数,然后激活函数 σ ( ⋅ ) \sigma(·) σ()用的是tanh。

  • 目的:缓解数据集噪声的情况。就是说,在这个关系的实例中,与查询向量更类似的,会有更高的注意力权重。所以那些被错误标注的,往往会有更低的权重。总之就是比平均好。

Feature-level Attention

  • 出发点:先前研究论证了距离函数的选择会影响这个网络的能力。小样本数据集意味着特征是稀疏的,简单的欧式距离能力不足。虽然特征空间是稀疏的,但总会有些维度有更强的区分能力,所以需要特征层面的注意力机制。
  • 修改距离计算:在这里插入图片描述
  • 这里的关系 i i i 的注意力得分就不是一个标量了,而是一个得分向量 z i z_i zi
  • 就是将该关系下的K个实例的编码向量 ( x 1 , x 2 , . . . x K ) (x_1,x_2,...x_K) (x1,x2,...xK)进行多次卷积得到的。
    在这里插入图片描述
    具体操作就是这张图。

3. 最终实验如何?

3.1 实验操作
  • 考虑到训练集有64类关系,更多的关系会使模型在训练集得到更好地结果,因此,对每个Batch随机采样20个关系做N-K。

  • 其他所有超参数在验证集上调参。用grid search。特别提到了初始学习率和权重衰减值。优化策略主要体现在学习率方面。按步数衰减学习率,做了非常多的尝试。【到时复现再说】

3.2 实验结果
  • 【笔记中不全,感兴趣可阅读原文】

  • 全文没有做N-way 1-Shot 因为这样没法算注意力。

  • 在数据集中按照一定比例替换标签(制造错误标注),进行对比。
    在这里插入图片描述

  • 没有噪声时与其他baseline的对比。
    在这里插入图片描述

  • 特征级别的attention得分对比:对隐藏层embedding的230特征进行排序,最高的20个与最低的20个做PCA。
    在这里插入图片描述

4. 个人想法

  • 对于N-way 1 Shot 问题,是否有类似的办法?
  • 作者也提到,今后尝试混合注意力机制与其他模型的适用性。
  • 在FewRel 2.0数据集的两个任务上,基于这个模型应该也有一定的发挥空间。
### 关于Prototypical Networks for Few-Shot Learning论文 Prototypical Networks 是一种针对小样本学习(Few-Shot Learning)设计的方法,旨在通过构建类别原型来完成新类别的快速识别[^1]。该方法的核心思想是在嵌入空间中为每个类别定义一个原型向量,并利用这些原型向量计算输入样本与各个类别的相似度。 #### 论文下载方式 Prototypical Networks 的原始论文Prototypical Networks for Few-shot Learning》可以在以下链接找到并下载: - 原始论文地址:[https://arxiv.org/abs/1703.05175](https://arxiv.org/abs/1703.05175) 如果无法直接访问上述链接,可以尝试通过其他学术资源网站获取PDF版本,例如Google Scholar 或者 ResearchGate。此外,一些开源项目也提供了对该论文的解读和实现细节说明[^2][^3]。 #### 可视化的实现 对于可视化部分,作者展示了在嵌入空间中的 t-SNE 图像,其中类别原型用黑色表示,而错误分类的字符则用红色高亮显示[^4]。要实现类似的可视化效果,可以通过以下步骤: 1. **提取嵌入特征** 使用训练好的模型对测试数据进行前向传播,得到每张图像对应的嵌入向量。 2. **应用t-SNE降维** 利用 `sklearn.manifold.TSNE` 将高维嵌入向量投影到二维或三维空间以便绘制图形。 3. **绘图展示** 使用 Matplotlib 或 Seaborn 绘制散点图,在图中标记出不同类别的原型位置以及误分类的数据点。 以下是基于PyTorch实现的一个简单代码示例: ```python import torch from sklearn.manifold import TSNE import matplotlib.pyplot as plt def visualize_embeddings(embeddings, labels, prototypes): """ embeddings: 测试样本的嵌入向量 (NxD) labels: 对应的真实标签 (Nx1) prototypes: 类别原型向量 (KxD) """ all_data = torch.cat([embeddings, prototypes], dim=0).cpu().numpy() tsne = TSNE(n_components=2, random_state=42) embedded_data = tsne.fit_transform(all_data) # 提取样本点和原型点的位置 sample_points = embedded_data[:len(embeddings)] prototype_points = embedded_data[len(embeddings):] # 绘制散点图 plt.figure(figsize=(8, 6)) unique_labels = set(labels.cpu().numpy()) colors = plt.cm.rainbow(np.linspace(0, 1, len(unique_labels))) for i, color in zip(unique_labels, colors): idx = np.where(labels == i)[0] plt.scatter(sample_points[idx, 0], sample_points[idx, 1], c=color, label=f'Class {i}') # 添加原型点标记 plt.scatter(prototype_points[:, 0], prototype_points[:, 1], marker='*', s=200, c='black', label='Prototypes') plt.legend() plt.title('t-SNE Visualization of Embedding Space') plt.show() ``` 此函数接受嵌入向量、真实标签以及类别原型作为输入参数,并生成相应的t-SNE可视化图表。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值