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

    文章

    3818

    浏览量

    52268
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74379
  • eSIM
    +关注

    关注

    3

    文章

    289

    浏览量

    28417

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    神州信息2026语义金融与AI智能体白皮书正式发布

    4月21日至22日,第五届中国国际软件发展大会在北京国家会议中心隆重举行。大会首日,神州信息正式发布《语义金融与AI智能体:本体论在现代银行体系中的应用白皮书(2026)》(以下简称“白皮书”)。该
    的头像 发表于 04-23 17:46 1330次阅读

    【地平线征程 5 域控试用】激光雷达数据获取与 BPU 推理实现

    :8192 字节,确保能完整接收数据包 2.BPU 模型加载与推理 模型文件 : 路径 : /userdata/test/model.hbm 类型 :Horizon 打包模型(.hbm) 模型
    发表于 04-20 21:31

    曦望发布新一代推理GPU芯片,单位Token推理成本降低90%

    电子发烧友网报道 1月27日,国产GPU厂商曦望(Sunrise)重磅发布新一代推理GPU芯片——启望S3。这是曦望在近一年累计完成约30亿元战略融资后的首次集中公开亮相。2025年,曦望芯片交付量
    的头像 发表于 01-28 17:38 9549次阅读

    LLM推理模型是如何推理的?

    这篇文章《(How)DoReasoningModelsReason?》对当前大型推理模型(LRM)进行了深刻的剖析,超越了表面的性能宣传,直指其技术本质和核心局限。以下是基于原文的详细技术原理、关键
    的头像 发表于 01-19 15:33 705次阅读
    LLM<b class='flag-5'>推理</b>模型是如何<b class='flag-5'>推理</b>的?

    基于NVIDIA Alpamayo构建具备推理能力的辅助驾驶汽车

    辅助驾驶研究领域正经历一场快速变革。视觉-语言-动作推理模型(Reasoning VLA) 的出现正重塑该领域,这些模型为辅助驾驶决策赋予了类人的思维能力。这类模型可视为在语义空间中运行的隐式世界
    的头像 发表于 01-14 09:41 2307次阅读
    基于NVIDIA Alpamayo构建具备<b class='flag-5'>推理</b>能力的辅助驾驶汽车

    C语言中除数为0属于什么错误

    0 的错误,以及援引数组元素时下标溢出等。 静态错误又可以分为语法错误和静态语义错误。语法错误指有关语言结构上的错误,如单词拼写错误、表达式中缺少操作数、括号不匹配等。静态语义错误指
    发表于 12-08 06:38

    Progress-Think框架赋能机器人首次实现语义进展推理

    在视觉语言导航(VLN)中,机器人长期缺乏一种关键能力:它能持续前进,却无法判断自己的任务推进到了哪一步。导航在空间中不断展开,画面节节推进,但模型并不知道自己在自然语言指令里处于什么阶段,因此容易漂移、兜圈,或做出难以解释的决策。我们认为,引入语义进展推理,是破解长程导
    的头像 发表于 12-03 09:27 451次阅读
    Progress-Think框架赋能机器人首次实现<b class='flag-5'>语义</b>进展<b class='flag-5'>推理</b>

    NVIDIA TensorRT LLM 1.0推理框架正式上线

    TensorRT LLM 作为 NVIDIA 为大规模 LLM 推理打造的推理框架,核心目标是突破 NVIDIA 平台上的推理性能瓶颈。为实现这一目标,其构建了多维度的核心实现路径:一方面,针对需
    的头像 发表于 10-21 11:04 1415次阅读

    微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地

    本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
    的头像 发表于 10-15 14:38 545次阅读

    什么是AI模型的推理能力

    NVIDIA 的数据工厂团队为 NVIDIA Cosmos Reason 等 AI 模型奠定了基础,该模型近日在 Hugging Face 的物理推理模型排行榜中位列榜首。
    的头像 发表于 09-23 15:19 1471次阅读

    华为亮相2025金融AI推理应用落地与发展论坛

    近日,2025金融AI推理应用落地与发展论坛在上海举行。中国银联执行副总裁涂晓军、华为数字金融军团CEO曹冲出席本次论坛并发表致辞。论坛上,华为公司副总裁、数据存储产品线总裁周跃峰博士发布AI推理
    的头像 发表于 08-15 09:45 1385次阅读

    请问如何在RK3588上使用npu,用onnx模型来推理

    请问如何在瑞芯微 RK3588上使用npu,用onnx模型来推理。官网上介绍说要把ONNX模型转换成RKNN模型。但是我并不想这么干,请问有什么办法吗?
    发表于 08-09 00:51

    信而泰×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