Python实战——ESIM 模型搭建(keras版)
文章目录
- 1. input encoding
- 1.1 原理
- 1.2 实现
- 2. local inference modeling
- 2.1 原理
- 2.2 实现
- 3. inference composition
- 3.1 原理
- 3.2 实现
ESIM 原理笔记见: 论文笔记&翻译——Enhanced LSTM for Natural Language Inference(ESIM)
ESIM主要分为三部分:input encoding,local inference modeling 和 inference composition。如上图所示,ESIM 是左边一部分, 如下图所示
三部分简要代码如下:
1. input encoding
1.1 原理
aˉi=BiLSTM(a,i),∀i∈[1,2,...,la]\bar{a}_i = BiLSTM(a, i), \forall i \in [1, 2, ..., l_a]aˉi=BiLSTM(a,i),∀i∈[1,2,...,la]
bˉj=BiLSTM(b,j),∀j∈[1,2,...,lb]\bar{b}_j = BiLSTM(b, j), \forall j \in [1, 2, ..., l_b]bˉj=BiLSTM(b,j),∀j∈[1,2,...,lb]
1.2 实现
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)
2. local inference modeling
2.1 原理
ai^=∑j=1lbexpeij∑k=1lbexp(eik)bˉ,∀i∈[1,2,...,la]\hat{a_i} = \sum_{j=1}^{l_b} \frac{\exp{e_{ij}}}{\sum_{k=1}^{l_b} \exp(e_{ik})} \bar{b}, \forall i \in [1, 2, ..., l_a]ai^=j=1∑lb∑k=1lbexp(eik)expeijbˉ,∀i∈[1,2,...,la]
bj^=∑i=1laexpeij∑k=1laexp(ekj)aˉ,∀j∈[1,2,...,lb]\hat{b_j} = \sum_{i=1}^{l_a} \frac{\exp{e_{ij}}}{\sum_{k=1}^{l_a} \exp(e_{kj})} \bar{a}, \forall j \in [1, 2, ..., l_b]bj^=i=1∑la∑k=1laexp(ekj)expeijaˉ,∀j∈[1,2,...,lb]
2.2 实现
e = Dot(axes=2)([x1, x2])
e1 = Softmax(axis=2)(e)
e2 = Softmax(axis=1)(e)
e1 = Lambda(K.expand_dims, arguments={'axis' : 3})(e1)
e2 = Lambda(K.expand_dims, arguments={'axis' : 3})(e2)_x1 = Lambda(K.expand_dims, arguments={'axis' : 1})(x2)
_x1 = Multiply()([e1, _x1])
_x1 = Lambda(K.sum, arguments={'axis' : 2})(_x1)
_x2 = Lambda(K.expand_dims, arguments={'axis' : 2})(x1)
_x2 = Multiply()([e2, _x2])
_x2 = Lambda(K.sum, arguments={'axis' : 1})(_x2)
3. inference composition
3.1 原理
ma=[aˉ;a^;aˉ−a^;aˉ⊙a^]m_a = [\bar{a}; \hat{a}; \bar{a} - \hat{a}; \bar{a} \odot \hat{a}]ma=[aˉ;a^;aˉ−a^;aˉ⊙a^]
mb=[bˉ;b^;bˉ−b^;bˉ⊙b^]m_b = [\bar{b}; \hat{b}; \bar{b} - \hat{b}; \bar{b} \odot \hat{b}]mb=[bˉ;b^;bˉ−b^;bˉ⊙b^]
va,i=BiLSTM(ma,i)v_{a,i} = BiLSTM(m_a, i)va,i=BiLSTM(ma,i)
vb,j=BiLSTM(mb,j)v_{b,j} = BiLSTM(m_b, j)vb,j=BiLSTM(mb,j)
va,ave=∑i=1lava,ilav_{a,ave} = \sum_{i=1}^{l_a} \frac{v_{a,i}}{l_a}va,ave=i=1∑lalava,i
va,max=maxi=1lava,iv_{a,max} = \max_{i=1}^{l_a} v_{a,i}va,max=i=1maxlava,i
vb,ave=∑j=1lbvb,jlbv_{b,ave} = \sum_{j=1}^{l_b} \frac{v_{b,j}}{l_b}vb,ave=j=1∑lblbvb,j
vb,max=maxj=1lbvb,jv_{b,max} = \max_{j=1}^{l_b} v_{b,j}vb,max=j=1maxlbvb,j
v=[va,ave;va,max;vb,ave;vb,max]v = [v_{a,ave}; v_{a,max}; v_{b,ave}; v_{b,max} ]v=[va,ave;va,max;vb,ave;vb,max]
3.2 实现
m1 = Concatenate()([x1, _x1, Subtract()([x1, _x1]), Multiply()([x1, _x1])])
m2 = Concatenate()([x2, _x2, Subtract()([x2, _x2]), Multiply()([x2, _x2])])y1 = Bidirectional(LSTM(300, return_sequences=True))(m1)
y2 = Bidirectional(LSTM(300, return_sequences=True))(m2)mx1 = Lambda(K.max, arguments={'axis' : 1})(y1)
av1 = Lambda(K.mean, arguments={'axis' : 1})(y1)
mx2 = Lambda(K.max, arguments={'axis' : 1})(y2)
av2 = Lambda(K.mean, arguments={'axis' : 1})(y2)y = Concatenate()([av1, mx1, av2, mx2])
y = Dense(1024, activation='tanh')(y)
y = Dropout(0.5)(y)
y = Dense(1024, activation='tanh')(y)
y = Dropout(0.5)(y)
y = Dense(2, activation='softmax')(y)
Python实战——ESIM 模型搭建(keras版)相关推荐
- ESIM模型的“全能版”!网易易盾实验室研究员解读HIM混合推理模型
"知物由学"是网易易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物由 ...
- Python实战 | 滑块拼图验证码高级版详解
目录 1.如何实现滑块拼图验证码高级版? 2.HTML代码: 3.Python代码: 4.执行后报错,解决方案: 5.完整代码,修改后如下: 1.如何实现滑块拼图验证码高级版? 2.HTML代码: & ...
- Python实战 -- 利用Flask搭建微电影网站(一)蓝图构建
https://www.bilibili.com/video/av51720348?p=5
- 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...
- linux tensorflow demo_独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...
作者:MOHD SANAD ZAKI RIZVI 翻译:吴金笛 校对:丁楠雅 本文约5500字,建议阅读15分钟. 本文首先介绍了TensorFlow.js的重要性及其组件,并介绍使用其在浏览器中构建 ...
- [Python人工智能] 二十四.易学智能GPU搭建Keras环境实现LSTM恶意URL请求分类
最近用笔记本跑Keras和TensorFlow深度学习代码,一个模型跑十几个小时还奔溃,真的头大!这篇文章简单讲解易学智能GPU搭建Keras环境的过程,并实现了LSTM文本分类的实验,本来想写Goo ...
- kaggle实战—泰坦尼克(五、模型搭建-模型评估)
kaggle实战-泰坦尼克(一.数据分析) kaggle实战-泰坦尼克(二.数据清洗及特征处理) kaggle实战-泰坦尼克(三.数据重构) kaggle实战-泰坦尼克(四.数据可视化) kaggle ...
- python django mysql web页面多级联动_Python Web实战:Python+Django+MySQL实现基于Web版的增删改查...
前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...
- Python机器学习全流程项目实战精讲(2018版)
Python机器学习全流程项目实战精讲(2018版) 网盘地址:https://pan.baidu.com/s/16SSVq74YC07M0dW1iDekPg 提取码: vu7r 备用地址(腾讯微云) ...
最新文章
- Python中的lambda是什么?
- 软件验收标准和验收方法_自动门的验收标准
- keras 以图搜图
- Linux之Sed详解
- Method Overloading
- sql数据库简单增删改查
- linux 释放进程res_linux内存查看及释放
- 前端学习(2649):vue3.0的处理展示
- 用户权限管理shiro
- Ubuntu18.04之boost警告报错
- Flutter 学习汇总
- 路飞学城—Python—爬虫实战密训班 第三章
- 安装gid12.0.4linux-x64l后启动报错/liblzma.so.5: no version information available 的解决办法
- c++编程规范和范例
- 关于IOS7 AutoLayout的各种bug
- cadence SPB17.4 capture and cis 全部错误消息列表
- 孙其功陪你学之——OJB文件介绍
- 十大改名换姓的经典名著
- undeclared (first use in this function)
- vb.net 如何实现报表打印_如何实现流水条码的特殊排版打印