ESIM (Enhanced LSTM for Natural Language Inference)
生活随笔
收集整理的這篇文章主要介紹了
ESIM (Enhanced LSTM for Natural Language Inference)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ESIM歷史意義:
1、 深層次的挖掘文本間的語義關系特征
2、加入文本語法結構信息
?
本文主要結構如下:
一、Abstract
1、推理是人工智能的關鍵體現
2、SNLI為推理模型提供數據支撐
3、文中提出的模型不需要復雜的模型結構且效果較好
4、融合語法樹模型,效果更佳
二、Introduction
? ? ?主要介紹數據集和推理的相關背景知識
三、Related Work
? ? ? ? ? ?簡單的介紹了相關工作以及數據集的相關應用情況
四、Hybrid Neural Inference Models
模型結構輸入層-輸入編碼層,即輸入的兩個匹配文本數值矩陣通過雙向LSTM獲得輸出,與此同時還給出Tree-LSTM網絡結構
局部推理建模層: 相當于注意力層,計算注意力矩陣并通過element-wise添加特征維度
推理組合層: 將兩句話特征矩陣通過池化操作得到最終特征向量,實現特征聚合
輸出預測層: 利用全連接 + softmax進行分類
?
五、Experiment Setup
?實驗參數的一些設置,包括學習率、batchsize大小、wordEmbedding維度等
六、Results
? ? ?實驗進行了多組變量分析,最后分析發現 ESIM + tree-LSTM組合效果最好
七、Conclusions and Future Work
? ? ? ? ? 主要是對文章進行總結并對未來進行展望
八、Code
# -*- coding: utf-8 -*-# @Time : 2021/2/16 下午6:54 # @Author : TaoWang # @Description : ESIM網絡結構import torch import torch.nn as nn import numpy as np import pandas as pd from torchtext import data from torchtext.vocab import Vectors from torchtext.data import Field, Example, Iteratorclass ESIM(nn.Module):def __init__(self, text):super(ESIM, self).__init__()self.embedding = nn.Embedding(*text.vocab.vectors.size())self.embedding.weight.data.copy_(text.vocab.vectors)# 輸入編碼層self.a_bilstm_input = nn.LSTM(text.vocab.vectors.size()[1], hidden_size, batch_first=True, bidirectional=True)self.b_bilstm_input = nn.LSTM(text.vocab.vectors.size()[1], hidden_size, batch_first=True, bidirectional=True)# 推理組合層self.a_bilstm_infer = nn.LSTM(8 * hidden_size, hidden_size, batch_first=True, bidirectional=True)self.b_bilstm_infer = nn.LSTM(8 * hidden_size, hidden_size, batch_first=True, bidirectional=True)# 預測層全連接網絡self.linear = nn.Sequential(nn.Linear(8 * hidden_size, 2 * hidden_size),nn.ReLU(True),nn.Linear(2 * hidden_size, linear_size),nn.ReLU(True),nn.Linear(linear_size, classes))def forward(self, a, b):""":param a: :param b: :return: """# 詞嵌入emb_a, emb_b = self.embedding(a), self.embedding(b)# 輸入編碼層a_ba, _ = self.a_bilstm_input(emb_a)b_ba, _ = self.b_bilstm_input(emb_b)# 局部推理建模層e = torch.matmul(a_ba, b_ba.permute(0, 2, 1))a_ti = torch.matmul(torch.softmax(e, dim=2), b_ba)b_ti = torch.matmul(torch.softmax(e, dim=1).permute(0, 2, 1), a_ba)# 矩陣拼接ma = torch.cat([a_ba, a_ti, a_ba - a_ti, a_ba * a_ti], dim=2)mb = torch.cat([b_ba, b_ti, b_ba - b_ti, b_ba * b_ti], dim=2)# 推理組合層va, _ = self.a_bilstm_infer(ma)vb, _ = self.b_bilstm_infer(mb)va_avg, va_max = torch.mean(va, dim=1), torch.max(va, dim=1)[0]vb_avg, vb_max = torch.mean(vb, dim=1), torch.max(vb, dim=1)[0]v = torch.cat([va_avg, va_max, vb_avg, vb_max], dim=1)# 輸出預測層out = self.linear(v)return out?
總結
以上是生活随笔為你收集整理的ESIM (Enhanced LSTM for Natural Language Inference)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Comp-Agg (A Compare-
- 下一篇: 异常检测-孤立森林(IsolationF