Bridging the Gap Between Relevance Matching and Semantic Matching for Short Text Similarity Modeling

介绍HCAN模型,融合相关性与语义匹配,提升短文本相似度建模效果。使用混合编码器、注意力机制,结合预训练优势,在多个任务上超越基线。

MENLP 2019 Bridging the Gap Between Relevance Matching and Semantic Matching for Short Text Similarity Modeling

这是一篇发表于今年EMNLP上一篇关于文本理解的文章,更准确的来说应该是解决NLP中的短文本语义匹配和神经信息检索(neural information retrieval,NIR)中共同存在的语义匹配问题

NLP中的很多任务的中间环节或是基本原理都会多多少少的涉及到文本语义匹配,例如在文本分类(text classification)中,模型需要通过编码输入文本间的语义表示来计算最后的匹配得分;在阅读理解(reading comprehension)中,在最后定位正确答案的具体区域之前,同样需要根据语义相关从语料库中找到相关的文本……因此。语义匹配是NLP中的一个基本问题,通过词嵌入、LSTM、Transformer或预训练模型来获取输入的表示,最后通过计算表示向量间的距离来得到匹配分数。

随着深度学习在NLP中的成功,将神经网络应用到IR中来提升检索模型的性能成为了一个自然而然的想法。IR主要关注的仍然是一个匹配问题:当用户给定查询时,模型需要根据一定的匹配规则从文档集中找到相关的文档。在深度学习之前主要是基于统计信息进行检索排序,例如使用BM25、TF-IDF等;接着研究人员将word2vec等分布式语义表示模型应用到IR中,基本原理就是比较查询向量和文档向量的余弦相似度,例如DRMM、k-NRM等;最近随着预训练模型的出现,pre-traing + fine tune 成为了NLP中很多任务新的处理范式,因此也就有人将其应用到了IR中的Reranking环节中,借助预训练模型强大的表示能力,最后可以取得不错的效果。

SIGIR 2019 Outline Generation Understanding the Inherent Content Structure of Documents

如上所述可知,相关性匹配和语义匹配在文本相似度建模中都各有优势,而且两者并不是彼此分隔的,如果将两种方式结合到一起使用,那么最后得到的结果应该是比单一一种方式的结果要好。因此,作者在本文中提出了一种混合模型HCAN(Hybrid Co-Attention Network),从模型的名字中我们也可以猜到模型的基本思想,HCAN主要包含以下三个模块:

  • 混合编码模块
  • 相关性匹配模块
  • 语义匹配模块

最后,作者在几个数据集上进行实验证明了想法的合理性和有效性。

HCAN

模型的架构如下所示:


在这里插入图片描述

模型的输入为查询(query)和与之比较的文本(context),目标就是让模型判断两者间的匹配程度。为了捕获短语级的表示,这里使用了三种类型的encoder,作者将其称为deep、widecontextual

  • Deep Encoder:堆叠多层的卷积层,表示向量经过多层的卷积来得到高层的表示 U h = C N N h ( U h − 1 ) U^h = CNN^h (U^{h-1}) Uh=CNNh(Uh1)
  • Wide Encoder:并行的将表示向量通过拥有不同卷积核的卷积层,分别得到每一层对应的表示向量
  • Contextual Encoder:使用双向的LSTM来获取长程依赖特征 U h = B i L S T M h ( U h − 1 ) U^h = BiLSTM^h (U^{h-1}) Uh=BiLSTMh(Uh1)

三种类型的encoder在理想情况下应该起到一种互补的效果,前两种可以显式控制卷积核大小且速度更快,最后一个更容易捕获长程特征。

Relevance Matching

假设将查询和文本的表示记为 U q U_{q} Uq U c U_{c} Uc,首先两者做乘积得到相似性矩阵 S = U q U c T S = U_{q}U_{c}^T S=UqUcT S i , j S_{i,j} Si,j就表示 U q [ i ] U_{q}[i] Uq[i] U c [ j ] U_{c} [j] Uc[j]的相关性分数,将其正则化处理后得到 S ~ \tilde{S} S~,最后将其通过Softmax就得到了位于[0, 1]之间的相关性分数。前一模块使用了三种类型的encoder得到不同层级的表示,但是查询中不同的phrase和对应的文本之间匹配的重要性应该是不同的。因此,作者这里在softmax层之前将它们通过了两种类型的池化层(max-pooling和mean-pooling),又计算了每一部分的IDF值作为对应的权重,因此最后输入到softmax中的为: o R M = { w g t ( q ) ⨀ M a x ( S ) , w g t ( q ) ⨀ M e a n ( S ) } o_{RM} = \{wgt(q) \bigodot{Max(S)}, wgt(q)\bigodot{Mean(S)} \} oRM={wgt(q)Max(S),wgt(q)Mean(S)}

Semantic Matching

这里的语义匹配就是使用了Co-Attention来计算查询向量和文本向量之间的注意力分数,将其作为语义匹配得分,没有什么特别的地方,具体细节可见原文。

通过上述的过程得到了相关性特征和语义匹配特征,最后将两者进行拼接后送入到MLP中来计算最终的分数,对应的损失项自然就是负对数似然。 o = s o f t m a x ( M L P ( { O R M l , O S M l } ) ) L = − ∑ o i , y i log ⁡ o i [ y i ] o=softmax(MLP(\{O_{RM}^l ,O_{SM}^l\})) \\ L= -\sum_{o_{i}, y_{i}} \log o_{i} [y_{i}] o=softmax(MLP({ORMl,OSMl}))L=oi,yilogoi[yi]

Experiment

作者在四个任务上进行了实验来验证模型的有效性,任务和对应的数据集如下:

  • Answer Slection:TrecQA
  • Paraphrase Identification: TwitterURL
  • Semantic Textual Similarity: Quera dataset
  • Tweet Search: TREC Microblog

实验结果如下所示:


在这里插入图片描述

从结果中可以看出,本文所提出的方法比起BERT环视查了一些,但是普遍优于其他的baselines。

关于比较三种encoder之间的比较、学习效率和定性评估的实验部分详见原文~


EMNLP 2019 Abstract Text Summarization: A Low Resource Challenge

这是一篇短文,借鉴了机器翻译中的back-translation的思想通过数据增广来解决低资源下的生成式文本摘要问题,个人觉得没有什么有趣的地方,有兴趣的可查看原文。


在这里插入图片描述

这里推荐一篇FACEBOOK的关于低资源机器翻译任务的报道:Recent advances in low-resource machine translation

论文《DTC-SpMM: Bridging the Gap in Accelerating General Sparse Matrix Multiplication with Tensor Cores》提出了一种利用NVIDIA Tensor Core技术加速通用稀疏矩阵乘法(SpMM)的方法。为了复现该论文的实验结果,需要遵循一系列系统化的步骤与方法。 ### 实验环境准备 1. **硬件平台**:需要一台配备NVIDIA GPU的机器,且GPU需支持Tensor Core技术,例如Volta、Turing或Ampere架构的GPU。 2. **软件依赖**:安装CUDA Toolkit(版本需与论文中使用的版本一致),以及cuSPARSE库,用于比较基准性能。 3. **代码仓库**:从论文作者提供的开源代码仓库(如果存在)获取源码,或自行实现论文中描述的DTC-SpMM算法[^2]。 ### 数据集准备 - **稀疏矩阵数据集**:使用标准的稀疏矩阵测试集,例如SuiteSparse稀疏矩阵集合(原名University of Florida Sparse Matrix Collection)。 - **矩阵格式**:确保所有稀疏矩阵以CSR(Compressed Sparse Row)或其他论文中指定的格式存储,以便适配Tensor Core的计算需求[^4]。 ### 算法实现 1. **Tensor Core编程**:使用CUDA编程模型,结合WMMA(Warp-level Matrix Multiply-Accumulate)API或PTX汇编实现Tensor Core加速的稀疏矩阵乘法。 2. **稀疏模式优化**:根据论文描述,设计适合Tensor Core的稀疏模式压缩与解压机制,例如将稀疏矩阵转换为适合Tile计算的结构。 3. **内存管理优化**:利用统一内存(Unified Memory)或零拷贝内存提升数据传输效率,减少主机与设备之间的数据拷贝开销[^1]。 ### 实验配置与执行 1. **编译与构建**:使用`nvcc`编译CUDA代码,并链接必要的库(如cudart、cusparse等)。 2. **性能测试**:运行不同规模的稀疏矩阵乘法任务,记录执行时间、吞吐量(GOPS)等指标。 3. **对比实验**:与cuSPARSE中的SpMM实现进行对比,评估DTC-SpMM在性能、内存带宽利用率等方面的提升效果[^3]。 ### 示例代码片段(CUDA稀疏矩阵乘法核心部分) ```cuda #include <cuda_runtime.h> #include <mma.h> using namespace nvcuda; __global__ void tensor_core_spmm_kernel(...) { // 初始化WMMA描述符 wmma::fragment<wmma::matrix_a, WMMA_M, WMMA_N, WMMA_K, wmma::precision::tf32, wmma::row_major> a_frag; wmma::fragment<wmma::matrix_b, WMMA_M, WMMA_N, WMMA_K, wmma::precision::tf32, wmma::col_major> b_frag; wmma::fragment<wmma::accumulator, WMMA_M, WMMA_N, WMMA_K, wmma::precision::tf32> c_frag; // 加载矩阵数据 wmma::load_matrix_sync(a_frag, A, lda); wmma::load_matrix_sync(b_frag, B, ldb); // 执行矩阵乘法 wmma::mma_sync(c_frag, a_frag, b_frag, c_frag); // 存储结果 wmma::store_matrix_sync(C, c_frag.data(), ldc, wmma::mem_row_major); } ``` ### 结果分析与验证 - **性能分析**:绘制不同矩阵密度、尺寸下的性能对比图,验证DTC-SpMM在各种场景下的加速效果。 - **正确性验证**:通过与cuSPARSE或CPU端密集矩阵乘法结果进行对比,确保输出结果的数值正确性。 ### 调试与问题解决 - **链接错误处理**:若在编译过程中出现如`multiple definition of yylloc`等链接错误,需检查编译器版本是否与论文中一致,必要时修改源码中的变量声明(如添加`extern`修饰符)以解决符号冲突问题[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值