[PYTHON] Erklärung und Implementierung des ESIM-Algorithmus

Die Algorithmuserklärung und Implementierung des folgenden Dokuments.

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

Was ist die Geschichte? Der Algorithmus enthält Decomsable Attention, das die Beziehung zwischen den beiden Dokumenten (z. B. Annahmen und Hypothesen, ob sie dieselbe Bedeutung haben usw.) und der Leistung von ESIM, einer verbesserten Version davon, ermittelt. Scheint gut zu sein, also habe ich versucht, es mit Keras zu implementieren.

Der folgende Artikel befasst sich mit Decomposable Attention, dem Vorgänger dieses Algorithmus.

Erklärung und Implementierung des Decomposable Attention-Algorithmus

Was ist ESIM?

--ESIM ist eine Abkürzung für Enhanced Sequential Inference Model, eine verbesserte Version von Decomposable Attention [^ 2].

image.png

Ganzer Algorithmus (zitiert aus dem Originalpapier [^ 1])

Unterschied zur zerlegbaren Aufmerksamkeit

--Verwenden Sie Tree-LSTM [^ 12]. (BiLSTM [^ 13] ist ebenfalls akzeptabel) --Verwenden Sie beim Vergleich Unterschiede und Elementprodukte. --Verwenden Sie während der Aggregation sowohl das durchschnittliche Pooling als auch das maximale Pooling.

Algorithmus

❏ Durchfluss

Der Ablauf selbst entspricht dem von Decomposable Attention.

--Besuchen

❏ Eingangsvariablen

Das Eingabedokument $ a $ und das Dokument $ b $ bestehen aus Wörtern mit einer Länge von $ l_a $ bzw. $ l_b $, und jedes Element ist eine verteilte Darstellung (z. B. GloVe [^ 7] oder Word2Vec [^ 8]]. ) Wird in einen $ d $ -Dimensionsvektor konvertiert.

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

Konvertieren Sie Wörter in verteilte Darstellung (Experiment verwendet 300-dimensionales GloVe [^ 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

Dies entspricht der zerlegbaren Aufmerksamkeit.

\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}

Was machst du?

Ich habe Äpfel gebacken und gegessen --B) Ich habe gestern Mikan gegessen

Als es zwei Sätze gab

\bar{a} ich Ist Apfel Zu Backen
\tilde{a} ich Ist Mandarine Zu -

Es ist einfacher zu vergleichen, ob die ähnlichen Elemente so sortiert sind, dass sie gepaart sind. Die Dokumente werden durch Gewichtung der Wörter angeordnet, die wahrscheinlich mit den beiden Sätzen zusammenhängen. (Tatsächlich Berechnung zwischen Vektoren)

❏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}

In Decomposable Attention gab es nur zwei, $ \ bar {a}, \ tilde {a}, \ bar {b}, \ tilde {b} $, aber in ESIM wird die Leistung durch Hinzufügen von Subtraktion und Elementprodukt verbessert. Es scheint, dass

❏Aggregate

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

In der Originalarbeit werden sowohl TreeLSTM [^ 12] - als auch BiLSTM [^ 13] -Methoden vorgeschlagen. In diesem Artikel wird BiLSTM jedoch zur Vereinfachung der Implementierung verwendet. Die Funktion $ F $ ist ein vorwärts gerichtetes neuronales Netz.

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}

Mit Decomposable Attention war es nur $ \ max $, aber es war schwierig anzupassen, also habe ich auch $ \ mathrm {avg} $ hinzugefügt.

Implementierung

Es basiert auf dem Code [^ 3].

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

References

[^ 1]: Chen, Enhanced LSTM for Natural Language Inference, 2017. (Originalarbeit des ESIM-Algorithmus) [^ 2]: Parikh, Eine zerlegbare Aufmerksamkeit für die Schlussfolgerung natürlicher Sprache, 2016. (Originalartikel von Decomposable Attention) [^ 3]: Dang, Quora Question Pairs - DL-Modelle, 2017. (mit ESIM- und Decomposable Attention-Code) [^ 4]: Kaggle, Quora Question Pairs, 2017. (Wettbewerb um die Beurteilung, ob die Dokumente gleich sind) [^ 5]: Maximilien @ DAMI, Lösung für Quora-Fragenpaare - 1. Platz, 2017. (Kaggle-Quora-Gewinner Artikel) [^ 6]: Explosion, spaCy, 2017. (Bibliothek zur Verarbeitung natürlicher Sprache) [^ 7]: Pennington et al., Handschuh: Globale Vektoren für die Wortrepräsentation., 2014. (Algorithmus für verteilte Repräsentation GloVe Original Papier) [^ 8]: Milkolov et al., Effiziente Optimierung von Wortrepräsentationen im Vektorraum, 2013. (Originalarbeit des Algorithmus für verteilte Ausdrücke Word2Vec) [^ 9]: Chollet, Keras, 2016. (Keras: Bibliothek für tiefes Lernen) [^ 10]: lystdo, LSTM mit word2vec-Einbettungen, 2017. (LSTM + Word2Vec Keras-Versionscode verfügbar) [^ 11]: namakemono, Implementierung von ESIM, 2017. (ESIM-Implementierung) [^ 12]: Tai et al., Verbesserte semantische Darstellungen aus baumstrukturierten Langzeit-Kurzzeitgedächtnisnetzwerken, 2015. (LSTM in Tree Structure) [^ 13]: Bahdanau, Neuronale maschinelle Übersetzung durch gemeinsames Lernen des Ausrichtens und Übersetzens, 2014. (Papier für maschinelle Übersetzung unter Erwähnung von BiLSTM)

Recommended Posts

Erklärung und Implementierung des ESIM-Algorithmus
Erklärung und Implementierung des Decomposable Attention-Algorithmus
Erklärung und Implementierung von SocialFoceModel
Erläuterung und Implementierung von PRML Kapitel 4
Erklärung und Implementierung von einfachem Perzeptron
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Einführung und Implementierung der Aktivierungsfunktion
Sortieralgorithmus und Implementierung in Python
Implementierung der Dyxtra-Methode durch Python
Erläuterung der CSV und Implementierungsbeispiel in jeder Programmiersprache
Mathematische Erklärung der Dichotomie- und Trisektionssuch- und Implementierungsmethode ohne Fehler
Implementierung und Experiment der konvexen Clustering-Methode
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
Implementierung und Beschreibung mit XGBoost für Anfänger
Zusammenfassung der Klassifizierung und Implementierung von Algorithmen für maschinelles Lernen
Erläuterung und Implementierung des in Slack, HipChat und IRC verwendeten XMPP-Protokolls
Vergleichen Sie die Implementierungsbeispiele für scikit-learn und pyclustering k-means
TRIE-Baumimplementierung mit Python und LOUDS
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Euklidische Methode der gegenseitigen Teilung und erweiterte Methode der euklidischen gegenseitigen Teilung
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Sequentielle Aktualisierung der Co-Distribution zur Ableitung und Implementierung von Ausdrücken
Implementierung der Fibonacci-Sequenz
Ich berührte Bachstelze (3). Untersuchung und Implementierung von Popup-Nachrichten.
Perceptron Grundlagen und Implementierung
Implementierung des DB-Administratorbildschirms durch Flask-Admin und Flask-Login
Kaninchen- und Schildkrötenalgorithmus
Python-Implementierung des CSS3-Mischmodus und Diskussion über den Farbraum
[Deep Learning von Grund auf neu] Implementierung der Momentum-Methode und der AdaGrad-Methode
Ableitung und Implementierung von Aktualisierungsgleichungen für die nicht negative Tensorfaktorzerlegung
[Mit einfacher Erklärung] Scratch-Implementierung einer Deep Boltsman-Maschine mit Python ②
[Mit einfacher Erklärung] Scratch-Implementierung einer tiefen Boltzmann-Maschine mit Python ①
Theorie und Implementierung mehrerer Regressionsmodelle - warum Regularisierung erforderlich ist -
Überprüfung und Implementierung der Videorekonstruktionsmethode mit GRU und Autoencoder
Ableitung des EM-Algorithmus und Berechnungsbeispiel für den Münzwurf
Implementierung der ML-EM-Methode, Querschnittsrekonstruktionsalgorithmus für CT-Scan
Quantum Computer Implementierung von Quantum Walk 2
Das Problem der Lügner und der Ehrlichkeit
Mechanismus von Pyenv und Virtualenv
Implementierung von TF-IDF mit Gensim
Implementierung von MathJax auf Sphinx
Vor- und Nachbearbeitung von Pytest
Kombination von rekursiv und Generator
Kombination von anyenv und direnv
Normalisierung der Strömungstheorie und -implementierung
Implementierung der Spieltheorie - Gefangenendilemma -
Differenzierung der Sortierung und Verallgemeinerung der Sortierung
Implementierung einer unabhängigen Komponentenanalyse
[Neta] Sortieralgorithmus von O (1)
Koexistenz von Pyenv und Autojump
Quantum Computer Implementierung von Quantum Walk 3
Python-Implementierung des Partikelfilters
Verwendung und Integration von "Shodan"
Das Problem der Lügner und der Ehrlichkeit
Maxout Beschreibung und Implementierung (Python)
Auftreten und Auflösung von tensorflow.python.framework.errors_impl.FailedPreconditionError