[PYTHON] Explication et implémentation de l'algorithme ESIM

L'explication de l'algorithme et la mise en œuvre de l'article suivant.

Title: Enhanced LSTM for Natural Language Inference Author: Chen, et al. Year: 2017 URL: https://arxiv.org/abs/1609.06038

Il y a une attention décomposable dans l'algorithme qui trouve la relation entre les deux documents (par exemple, les hypothèses et hypothèses, si elles ont la même signification, etc.) et les performances d'ESIM, qui en est une version améliorée. Cela semble bon, alors j'ai essayé de l'implémenter avec Keras.

L'article ci-dessous traite de Decomposable Attention, le prédécesseur de cet algorithme.

Explication et implémentation de l'algorithme Decomposable Attention

Qu'est-ce que ESIM

--ESIM est une abréviation pour Enhanced Sequential Inference Model, qui est une version améliorée de Decomposable Attention [^ 2]. --Algorithme de classification qui prend deux documents en entrée

image.png

Algorithme complet (extrait de l'article original [^ 1])

Différence par rapport à l'attention décomposable

--Utilisez Tree-LSTM [^ 12]. (BiLSTM [^ 13] est également acceptable)

algorithme

❏ Flux

Le flux lui-même est le même que l'attention décomposable.

--Assister

❏ Variables d'entrée

Le document d'entrée $ a $ et le document $ b $ sont composés de mots d'une longueur de respectivement $ l_a $ et $ l_b $, et chaque élément est une représentation distribuée (par exemple GloVe [^ 7] ou Word2Vec [^ 8]]. ) Est converti en un vecteur de dimension $ d $.

a = (a_1, ..., a_{l_a})^\mathrm{T} \\
b = (b_1, ..., b_{l_b})^\mathrm{T} \\

Convertir des mots en représentation distribuée (l'expérience utilise GloVe 300 dimensions [^ 7])

\bar{a}_i = \mathrm{BiLSTM}(a, i),\quad \forall i \in \left\{1,...,l_a\right\} \\
\bar{b}_j = \mathrm{BiLSTM}(b, j),\quad \forall j \in \left\{1,...,l_b\right\} \\

❏Attend

C'est la même chose que l'attention décomposable.

\begin{align}
e_{ij} &= \bar{a}_i^\mathrm{T}\bar{b}_j \\
\tilde{a}_i &= \sum_{j=1}^{l_b} \frac{\exp(e_{ij})}{\sum_{k=1}^{l_a}\exp(e_{kj})} \bar{b}_j, \quad \forall i \in \left\{1,...,l_a\right\} \\
\tilde{b}_j &= \sum_{i=1}^{l_a} \frac{\exp(e_{ij})}{\sum_{k=1}^{l_b}\exp(e_{ik})} \bar{a}_i, \quad \forall j \in \left\{1,...,l_b\right\}  \\
\end{align}

Que faites-vous?

--A) .J'ai fait cuire et mangé des pommes --B). J'ai mangé du mikan hier

Quand il y avait deux phrases

\bar{a} je Est pomme À Cuire a mangé
\tilde{a} je Est Mandarine À - a mangé

Il est plus facile de comparer si les éléments similaires à sont triés de manière à être appariés. Les documents sont classés en pondérant les mots susceptibles d'être liés aux deux phrases. (En fait, calcul entre vecteurs)

❏Compare

\begin{align}
m_a &= (\bar{a}, \tilde{a}, \bar{a}-\tilde{a}, \bar{a} \odot \tilde{a})^\mathrm{T} \\
m_b &= (\bar{b}, \tilde{b}, \bar{b}-\tilde{b}, \bar{b} \odot \tilde{b})^\mathrm{T} \\
\end{align}

Dans Decomposable Attention, il n'y en avait que deux, $ \ bar {a}, \ tilde {a}, \ bar {b}, \ tilde {b} $, mais dans ESIM, les performances sont améliorées en ajoutant une soustraction et un produit d'élément. Il paraît que

❏Aggregate

v_{a,t} = \mathrm{BiLSTM}(F(m_a)) \\
v_{b,t} = \mathrm{BiLSTM}(F(m_b))

Ici, l'article original propose à la fois les méthodes TreeLSTM [^ 12] et BiLSTM [^ 13], mais dans cet article, BiLSTM est utilisé pour faciliter l'implémentation. La fonction $ F $ est un réseau neuronal feedforward.

v_{a,\mathrm{ave}} = \sum_{i=1}^{l_a}\frac{v_{a,i}}{l_a}, \quad 
v_{a,\max} = \max_{i=\left\{1,..l_a\right\}}\frac{v_{a,i}}{l_a}, \\

v_{b,\mathrm{ave}} = \sum_{j=1}^{l_b}\frac{v_{b,i}}{l_b}, \quad 
v_{b,\max} = \max_{j=\left\{1,..l_b\right\}}\frac{v_{b,j}}{l_b}, \\

v = (v_{a,\mathrm{ave}}, v_{a,\max}, v_{b,\mathrm{ave}}, v_{b,\max})^\mathrm{T}

Avec Decomposable Attention, c'était seulement $ \ max $, mais c'était difficile à ajuster, donc j'ai ajouté $ \ mathrm {avg} $ également.

la mise en oeuvre

Il est basé sur le code [^ 3].

https://gist.github.com/namakemono/b74547e82ef9307da9c29057c650cdf1

References

[^ 1]: Chen, Enhanced LSTM for Natural Language Inference, 2017. (Article original de l'algorithme ESIM) [^ 2]: Parikh, A Decomposable Attention for Natural Language Inference, 2016. (Article original de Decomposable Attention) [^ 3]: Dang, Paires de questions Quora - Modèles DL, 2017 (avec ESIM et code Attention décomposable) [^ 4]: Kaggle, Quora Question Pairs, 2017. (Concours pour juger si les documents sont identiques) [^ 5]: Maximilien @ DAMI, Quora Question Pairs - Solution 1ère place, 2017. (Kaggle-Quora Winner Article) [^ 6]: explosion, spaCy, 2017. (Bibliothèque de traitement du langage naturel) [^ 7]: Pennington et al., Glove: Global vectors for word representation., 2014. (Algorithme de représentation distribuée GloVe Papier original) [^ 8]: Milkolov et al., Optimisation efficace des représentations de mots dans l'espace vectoriel, 2013. (Article original de l'algorithme d'expression distribuée Word2Vec) [^ 9]: Chollet, Keras, 2016. (Keras: Library for Deep Learning) [^ 10]: lystdo, LSTM avec intégration de word2vec, 2017. (Code de version LSTM + Word2Vec Keras disponible) [^ 11]: namakemono, Implémentation d'ESIM, 2017. (Implémentation ESIM) [^ 12]: Tai et al., Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks, 2015. (LSTM in Tree Structure) [^ 13]: Bahdanau, Traduction automatique neuronale en apprenant conjointement à aligner et à traduire, 2014. (Article de traduction automatique, mentionnant BiLSTM)

Recommended Posts

Explication et implémentation de l'algorithme ESIM
Explication et implémentation de l'algorithme Decomposable Attention
Explication et mise en œuvre de SocialFoceModel
Explication et mise en œuvre de PRML Chapitre 4
Explication et mise en œuvre du perceptron simple
Explication de la distance d'édition et de l'implémentation en Python
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Introduction et mise en œuvre de la fonction d'activation
Algorithme de tri et implémentation en Python
Implémentation de la méthode Dyxtra par python
Explication du CSV et exemple d'implémentation dans chaque langage de programmation
Explication mathématique de la recherche de dichotomie et de trisection et méthode de mise en œuvre sans bogues
Mise en œuvre et expérience de la méthode de clustering convexe
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Implémentation et description à l'aide de XGBoost pour les débutants
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
Explication et implémentation du protocole XMPP utilisé dans Slack, HipChat et IRC
Comparaison d'exemples d'implémentation de k-means de scikit-learn et pyclustering
Implémentation de l'arbre TRIE avec Python et LOUDS
Comparaison d'écriture R et Python (méthode de division mutuelle euclidienne)
Méthode de division mutuelle euclidienne et méthode de division mutuelle euclidienne étendue
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
Mise à jour séquentielle de la co-distribution pour la dérivation et l'implémentation des expressions
Implémentation de la séquence de Fibonacci
J'ai touché Bergeronnette (3). Enquête et mise en place de messages pop-up.
Principes de base et mise en œuvre de Perceptron
Implémentation de l'écran de l'administrateur DB par Flask-Admin et Flask-Login
Algorithme de lapin et de tortue
Explication des outils et commandes de package pour le système d'exploitation Linux
Implémentation Python du mode de fusion CSS3 et discussion sur l'espace colorimétrique
[Deep Learning from scratch] Implémentation de la méthode Momentum et de la méthode AdaGrad
Dérivation et implémentation d'équations de mise à jour pour la décomposition de facteurs tensoriels non négatifs
[Avec une explication simple] Implémentation Scratch d'une machine Boltsman profonde avec Python ②
[Avec une explication simple] Implémentation Scratch d'une machine Boltzmann profonde avec Python ①
Théorie et mise en œuvre de modèles de régression multiple - pourquoi une régularisation est nécessaire -
Vérification et mise en œuvre de la méthode de reconstruction vidéo en utilisant GRU et Autoencoder
Dérivation de l'algorithme EM et exemple de calcul pour le tirage au sort
Implémentation de la méthode ML-EM, algorithme de reconstruction en coupe pour scanner
Implémentation informatique quantique de Quantum Walk 2
Le problème des menteurs et de l'honnêteté
Mécanisme de pyenv et virtualenv
Implémentation de TF-IDF à l'aide de gensim
Implémentation de MathJax sur Sphinx
Pré-traitement et post-traitement de pytest
Combinaison de récursif et de générateur
Combinaison de anyenv et direnv
Normalisation de la théorie et de la mise en œuvre des flux
Mise en œuvre de la théorie des jeux - Le dilemme du prisonnier -
Différenciation du tri et généralisation du tri
Mise en œuvre d'une analyse de composants indépendante
[Neta] Algorithme de tri de O (1)
Coexistence de pyenv et autojump
Implémentation informatique quantique de Quantum Walk 3
Implémentation Python du filtre à particules
Utilisation et intégration de "Shodan"
Le problème des menteurs et de l'honnêteté
Description et implémentation de Maxout (Python)
Occurrence et résolution de tensorflow.python.framework.errors_impl.FailedPreconditionError