文本匹配、文本相似度模型之DecomposableAttention

用于自然语言推理的可分解注意力模型

github : https://github.com/daiyizheng/shortTextMatch/blob/master/src/DL_model/classic_models/models/DecomposableAttention.py

本文作者提出了一种用于自然语言推理的简单神经架构。 使用注意力将问题分解为可以单独解决的子问题,从而使其可以简单地并行化。在斯坦福自然语言推理 (SNLI) 数据集上,获得了SOTA的结果。

方法

模型分为了四个部分:Input representation,Attend,Compare,Aggregate:

Input representation

模型的输入为 a = ( a 1 . . . . , a l a ) a= (a_1...., a_{l_a}) a=(a1....,ala) b = ( b 1 , . . . , b l b ) b=(b_1,...,b_{l_b}) b=(b1,...,blb),分别代表前提和假说, y ( n ) = { y 1 ( n ) , . . . , y C ( n ) } y^{(n)} = \{y_1^{(n)},...,y_C^{(n)}\} y(n)={y1(n),...,yC(n)}表示a和b之间的关系标签, C C C是输出类的数量。训练目标就是根据输入的 a a a b b b正确预测出他们的关系标签 y y y

Attend

使用神经注意的变体对a和b的句子进行软对齐,并将问题分解为对齐子短语的比较。

F是一个激活函数为ReLU的前馈神经网络。
attention权重如下:

Compare

其次,分别比较每个对齐的子短语,生成一组向量 { v 1 , i } i = 1 l a \{v_{1,i}\}^{l_a}_{i=1} {v1,i}i=1la对于 a a a,以及 { v 2 , j } j = 1 l b \{v_{2,j}\} ^{l_b}_{j=1} {v2,j}j=1lb对于b。每个 { v 1 , i } \{v_{1,i}\} {v1,i}都是 a i a_i ai及其(软)对齐子短语在 b b b中的非线性组合( v 2 , j v_{2,j} v2,j也类似)。

G也是一个前馈神经网络

Aggregate

聚合上一步中的集合 { v 1 , i } i = 1 l a \{v_{1,i}\}^{l_a}_{i=1} {v1,i}i=1la { v 2 , j } j = 1 l b \{v_{2,j}\} ^{l_b}_{j=1} {v2,j}j=1lb,并使用结果预测标签 y y y

将两个向量concatenate后使用前馈神经网络进行分类。

损失函数利用交叉熵损失函数。

Intra-Sentence Attention

通过句内注意来增强这种输入表示,以编码每个句子中单词之间的组成关系。

F i n t r a F_{intra} Fintra也是一个前馈神经网络


d i − j d_{i-j} dij表示当前词 i i i与句子中的其他词 j j j之间的距离偏差,所有距离大于10的词共享一个距离偏差,这样每一个时刻的输入就变为原始输入跟self-attention后的值的拼接所得到的向量 a ‾ i : = [ a i , a i ′ ] , b ‾ j : = [ b j , b j ′ ] \overline{a}_i:=[a_i, a'_i], \overline{b}_j:=[b_j,b'_j] ai:=[ai,ai],bj:=[bj,bj]

结果

结论

基于注意力的自然语言推理方法,可以简单地并行化。该方法在文本理解方面的表现比更复杂的神经方法要好得多。结果表明,至少在这个任务中,两两比较比整体句子级表征更重要。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python 中有许多第三方库可用来计算文本相似度。常用的有: - `fuzzywuzzy`,它使用 Levenshtein 距离算法计算字符串之间的相似度。 - `spaCy`,它使用 Cosine Similarity 算法计算文本之间的相似度。 - `gensim` 中的 `doc2vec` 或 `word2vec`,它使用神经网络算法计算文本之间的相似度。 需要注意的是,文本相似度并不是唯一的评估方法,具体使用哪个库和算法还要根据你的场景来决定。 ### 回答2: Python语言有很多用于匹配文本相似度的库和工具。其中最常用的包括difflib、fuzzywuzzy、nltk和gensim。 difflib库提供了一些类和方法用于比较和匹配文本字符串的差异程度,比如SeqMatcher类可以用来计算两个序列之间的相似度,get_close_matches函数可以用来查找最接近的匹配项等。 fuzzywuzzy库是基于Levenshtein距离算法的文本匹配工具,可以衡量两个字符串之间的编辑距离,提供了一些模糊匹配的函数,如ratio函数用于计算两个字符串的相似程度,返回一个相似度百分比。 nltk库是一个自然语言处理工具包,其中包含了丰富的文本处理和匹配功能。它提供了一些用于标记文本、计算词频、提取关键词、词干化和词向量化的函数和类。 gensim库是一个用于语义建模和相似度计算的库,它提供了一些算法和模型,如word2vec和doc2vec,可以用来将文本转换为向量表示,并计算向量之间的相似度。 这些库与工具可以根据不同的文本相似度计算需求进行选择和使用。可以根据具体情况,选择合适的算法和模型,对文本进行预处理和特征提取,然后使用相应的函数和类进行相似度计算。 ### 回答3: Python中有多种方法来进行文本相似度匹配,常用的方法包括以下几种: 1. 余弦相似度(Cosine Similarity):计算两个向量的夹角余弦值,值域在[-1, 1]之间。可以使用Python中的scipy库中的cosine函数来计算。 2. 编辑距离(Edit Distance):通过计算将一个字符串转换为另一个字符串所需的最少编辑操作次数来衡量文本之间的相似度。可以使用Python中的Levenshtein库来计算编辑距离。 3. Jaccard相似度(Jaccard Similarity):计算两个集合的交集大小除以并集大小得到的相似度指标。可以使用Python中的set数据结构来计算。 4. 文本向量化(Text Vectorization):将文本转换为向量表示,常用的方法有词袋模型(Bag-of-Words)和TF-IDF。可以使用Python中的sklearn库中的CountVectorizer和TfidfVectorizer来实现。 除了这些常用的方法外,还有其他更复杂和高级的算法可以实现文本相似度匹配,如基于深度学习的模型(如BERT、Word2Vec等)和基于语义的模型(如WordNet、GloVe等),这些方法需要更复杂的模型和技术来实现。 总结起来,Python提供了多种库和工具来实现文本相似度匹配,可以根据具体需求选择合适的方法和算法来进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值