0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

有关语义匹配和推理

深度学习自然语言处理 ? 来源:CS的陋室 ? 作者:CS的陋室 ? 2021-03-14 09:32 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

先把论文放出来:Enhanced LSTM for Natural Language Inference,说实话这篇论文不算新了,但是在语义相似度方至今仍流传着他的传说,因此我还是把这篇论文拿着读了起来。近期也是看了很多文章,但是终究不如读论文来的过瘾,大部分博客对这篇论文的模型核心做了很多介绍,但各个操作的出发点和一些独到的见解却写的不多,这次我会在介绍ESIM的过程中讨论一下。

当然,还是建议大家好好品读原论文,更有味道。

另外给点代码,看论文不清楚的看看论文也挺好:

https://blog.csdn.net/wcy23580/article/details/84990923。

https://github.com/weekcup/ESIM。

有关语义匹配和推理

一般地,向量召回主要用的表征模型,但是表征模型没有用到交互特征,因此匹配的准确率上肯定比不过交互模型,所以一般工程上用表征模型召回,然后用交互模型来做精排,这样能保证整个搜索系统的效果更加稳定可靠(看到没,准召分离的思路又来了),而交互模型这块,比较可靠的基线,应该就要数ESIM了。

ESIM里,我比较欣赏的是这几点:

LSTM抽取上下文信息。Tree-LSTM的尝试也为信息抽取带来启发。

把Decomposable attention作为交互特征的思路有机组合起来了。

多种交互形式的特征concat起来。

当然具体阅读后,我还提炼了一些新的idea,在文末。有了这些思路,先让我们来看看具体的模型,其实论文的行文里讨论了很多思路,我们先来看整体论文思路,然后再来提炼里面的独到之处。

模型整体

论文的模型其实没有想象中的困难,在很早就把整篇论文给到了:

输入层是embedding+LSTM的组合。

Local Inference Modeling层,用的Decomposable Attention来体现两者的交互型。

Inference composition层则把上面一层的结果进行多种组合计算,得到多种特征,说白了就是比较。

输出层就不多说了,大家都懂的。

输入层

一般的输入层只会是简单的word2vector,但这里其实加了一个LSTM,还是双向的,就是用来获取各路信息。来看看代码,这个还是比较清晰的:

i1=Input(shape=(SentenceLen,),dtype='float32') i2=Input(shape=(SentenceLen,),dtype='float32') x1=Embedding([CONFIG])(i1) x2=Embedding([CONFIG])(i2) x1=Bidirectional(LSTM(300,return_sequences=True))(x1) x2=Bidirectional(LSTM(300,return_sequences=True))(x2)

Local Inference Modeling

中文翻译应该是局部推理层,我的理解这一层是用于抽取局部信息的,作者用的方法应该来源于这篇论文:A Decomposable Attention Model for Natural Language Inference,这里其实是一个计算交互特征的过程,即一一分析两个句子之间每个位置的相似度,最简单的方式就是点乘,而这篇论文就是使用的这个最简单的方式:

然后再把权重分散到各个位置,其实形态就很像softmax了:

这个其实就是做了一个交叉,计算整个句子的权重,然后用类似softmax的形式整上,非常讨巧,相信ESIM的成功很大程度上就和这个有关。

而这并没结束,作者进行了进一步的强化,对比Decomposable Attention前后的变化,进行了组合。

Inference Composition

推理层应该是进入最终预测之前的最后一层了。这一层的操作同样没那么简单,大部分人可能flatten、maxpool、avgpool之类的就直接全连接了,但是这里并不是,而是做了一系列的再提取和再处理,最终才完成预测向量的:

作者是真的把信息抽取和特征的组合做到了极致,对上面构造的两个组合特征再进行了一次特征提取,用的依旧是熟悉的Bilstm,值得注意的是他操作的维度,来看一个ESIM的开源代码吧:

classInferenceCompositionLayer(object): """ Layertocomposethelocalinferenceinformation. """ def__init__(self,hidden_units,max_length=100,dropout=0.5, activation='tanh',sequences=True): self.hidden_units=hidden_units self.max_length=max_length self.dropout=dropout self.activation=activation self.sequences=sequences def__call__(self,input): composition=Bidirectional(LSTM(self.hidden_units, activation=self.activation, return_sequences=self.sequences, recurrent_dropout=self.dropout, dropout=self.dropout))(input) reduction=TimeDistributed(Dense(self.hidden_units, kernel_initializer='he_normal', activation='relu'))(composition) returnDropout(self.dropout)(reduction)

这里用到另一个我没见过的keras层,即TimeDistributed,有兴趣可以了解下。

此后,非常精髓的使用avg-pool和max-pool的组合,有关池化,max和avg一直打得火热,没有人能给出非常稳定的结论,因此作者就用了两者的组合:

启示

整篇文章其实没有构造出非常高端的结构,只是一些非常朴素的操作,但是综合起来成了现在也非常推荐用的基线,是有很多有借鉴意义的东西的,我这里一一列举,大家可以直接在里面选择需要的来用。

BiLSTM似乎还挺好用的。当然私以为CNN其实也可以尝试的。

花式concat,多种信息抽取方式进行组合,小孩子才做选择,大人全都要。

attention的使用,其实有出处A Decomposable Attention Model for Natural Language Inference,思想其实是两者一一对比得到交互矩阵,利用该交互矩阵构造类似softmax的权重,为各自的关键信息进行加权,重点提取。

信息的对比来自于可以来自减和乘,减直接计算两者的差距,类似欧氏距离,乘的使用则来源于余弦距离,既然要对比特征,那就把这两个用到极致。

avg和max哪个好,别争了,都用,哪个比较重要交给后面的全连接层来决定吧。

我的这篇文章里面没有讲tree-lstm,主要是因为我们平时比较难用到,原因是这个树不好构建,需要依赖依存句法,但是的确是一个挺有意思的思想,只有真的去读论文的人才能知道。

参考资料

论文原文:Enhanced LSTM for Natural Language Inference

论文解读:https://blog.csdn.net/wcy23580/article/details/84990923

keras版本代码:https://github.com/weekcup/ESIM/blob/master/src/model.py

依旧推荐大家直接去读论文,文章对他为什么做这些操作有很明确的思想,其实在我看来这些思想比操作本身还要重要,毕竟思想是需要启发的,在这些思想的指导下,我在思考解决方案的时候就能有参考,方案可以借鉴,但是这个思想的实现并不局限在一个方法上。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3551

    浏览量

    50760
  • 代码
    +关注

    关注

    30

    文章

    4908

    浏览量

    71279
  • eSIM
    +关注

    关注

    3

    文章

    253

    浏览量

    27441

原文标题:【语义相似度】ESIM:语义相似度领域小模型的尊严

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI推理的存储,看好SRAM?

    电子发烧友网报道(文/黄晶晶)近几年,生成式AI引领行业变革,AI训练率先崛起,带动高带宽内存HBM一飞冲天。但我们知道AI推理的广泛应用才能推动AI普惠大众。在AI推理方面,业内巨头、初创公司等都
    的头像 发表于 03-03 08:51 ?1858次阅读
    AI<b class='flag-5'>推理</b>的存储,看好SRAM?

    信而泰×DeepSeek:AI推理引擎驱动网络智能诊断迈向 “自愈”时代

    DeepSeek-R1:强大的AI推理引擎底座DeepSeek是由杭州深度求索人工智能基础技术研究有限公司开发的新一代AI大模型。其核心优势在于强大的推理引擎能力,融合了自然语言处理(NLP)、深度
    发表于 07-16 15:29

    大模型推理显存和计算量估计方法研究

    随着人工智能技术的飞速发展,深度学习大模型在各个领域得到了广泛应用。然而,大模型的推理过程对显存和计算资源的需求较高,给实际应用带来了挑战。为了解决这一问题,本文将探讨大模型推理显存和计算量的估计
    发表于 07-03 19:43

    使用MicroPython部署中的ocrrec_image.py推理得到的输出结果很差,如何解决呢?

    使用在线平台训练OCR识别任务,测试结果表现很好。 期待结果和实际结果 实际的推理结果很差,推理不出任何信息。
    发表于 04-29 06:54

    详解 LLM 推理模型的现状

    2025年,如何提升大型语言模型(LLM)的推理能力成了最热门的话题之一,大量优化推理能力的新策略开始出现,包括扩展推理时间计算、运用强化学习、开展监督微调和进行提炼等。本文将深入探讨LLM
    的头像 发表于 04-03 12:09 ?676次阅读
    详解 LLM <b class='flag-5'>推理</b>模型的现状

    使用OpenVINO?进行推理时的内存泄漏怎么解决?

    使用 OpenVINO? 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃。
    发表于 03-06 08:29

    如何使用多摄像头作为OpenVINO?推理的输入?

    无法确定如何使用多摄像头作为OpenVINO?推理的输入
    发表于 03-06 07:30

    在采用异构模式推理时,如何检查每层使用的设备是什么?

    在异构模式推理时,无法检查每层使用的设备是什么
    发表于 03-06 06:49

    无法调用GPU插件推理的远程张量API怎么解决?

    运行了使用 GPU 插件的远程张量 API 的推理。但是,它未能共享 OpenCL* 内存,但结果不正确。
    发表于 03-06 06:13

    使用NVIDIA推理平台提高AI推理性能

    NVIDIA推理平台提高了 AI 推理性能,为零售、电信等行业节省了数百万美元。
    的头像 发表于 02-08 09:59 ?865次阅读
    使用NVIDIA<b class='flag-5'>推理</b>平台提高AI<b class='flag-5'>推理</b>性能

    利用VLM和MLLMs实现SLAM语义增强

    语义同步定位与建图(SLAM)系统在对邻近的语义相似物体进行建图时面临困境,特别是在复杂的室内环境中。本文提出了一种面向对象SLAM的语义增强(SEO-SLAM)的新型SLAM系统,借助视觉语言模型
    的头像 发表于 12-05 10:00 ?1609次阅读
    利用VLM和MLLMs实现SLAM<b class='flag-5'>语义</b>增强

    高效大模型的推理综述

    大模型由于其在各种任务中的出色表现而引起了广泛的关注。然而,大模型推理的大量计算和内存需求对其在资源受限场景的部署提出了挑战。业内一直在努力开发旨在提高大模型推理效率的技术。本文对现有的关于高效
    的头像 发表于 11-15 11:45 ?1654次阅读
    高效大模型的<b class='flag-5'>推理</b>综述

    FPGA和ASIC在大模型推理加速中的应用

    随着现在AI的快速发展,使用FPGA和ASIC进行推理加速的研究也越来越多,从目前的市场来说,有些公司已经有了专门做推理的ASIC,像Groq的LPU,专门针对大语言模型的推理做了优化,因此相比GPU这种通过计算平台,功耗更低、
    的头像 发表于 10-29 14:12 ?2213次阅读
    FPGA和ASIC在大模型<b class='flag-5'>推理</b>加速中的应用

    使用语义线索增强局部特征匹配

    视觉匹配是关键计算机视觉任务中的关键步骤,包括摄像机定位、图像配准和运动结构。目前最有效的匹配关键点的技术包括使用经过学习的稀疏或密集匹配器,这需要成对的图像。这些神经网络对两幅图像的特征有很好的总体理解,但它们经常难以
    的头像 发表于 10-28 09:57 ?968次阅读
    使用<b class='flag-5'>语义</b>线索增强局部特征<b class='flag-5'>匹配</b>

    手册上新 |迅为RK3568开发板NPU例程测试

    安装 2.1.2 conda虚拟环境安装 2.1.3 docker环境安装 2.2 rknn-toolkit2功能演示 2.2.1 模型转换 2.2.2 连板推理 第3章
    发表于 10-23 14:06