Ich konnte keine nützliche Literatur finden, um Deep Learning für dieses spezielle Problem zu nutzen. Die meisten Methoden scheinen auf nicht-maschinellen Lernmethoden wie String-Ähnlichkeiten und Levenstein-Entfernungen zu beruhen. Ein vernünftiger, auf tiefem Lernen basierender Ansatz für dieses Problem wäre ein wiederkehrendes neuronales Netzwerk . Ideal wäre ein LSTM (Long Short Term Memory) oder GRU (Gated Recurrent Unit). Die Idee ist, eine RNN zu haben, die einen internen Zustand hat und die Reihenfolge berücksichtigt, in der die Eingänge gespeist werden.
Im Gegensatz zur Textklassifizierung, Stimmungsanalyse oder Sequenzgenerierung würde die bevorzugte Codierung für den Text hier auf Zeichenebene statt auf Wortebene liegen .
Zum Beispiel
Christian Douglas,Chris,1
Jhon Stevens,Charlie,0
würde werden
[C,h,r,i,s,t,i,a,n, ,D,o,u,g,l,a,s, ,C,h,r,i,s] --> [1]
[J,h,o,n, ,S,t,e,v,e,n,s, ,C,h,a,r,l,i,e] --> [0]
Die beiden abgleichenden Zeichenfolgen werden zu einer einzigen Sequenz verkettet. Die Intuition hier ist, dass das RNN die Sequenz zeichenweise verarbeitet und lernt (Aktualisierungsgewichte lesen), dass die Zeichen am Ende ein ähnliches Muster haben wie zuvor in derselben Sequenz, um daraus zu schließen, dass es eine 1 statt einer sein sollte 0.
Der Vektor von [1/0] ist die Zielvariable.
Die Standard-RNN-Vorverarbeitungsschritte gelten wie gewohnt - wir füllen die Sequenzen am Anfang so auf, dass sie alle die gleiche Länge haben (z. B. 50), die Zeichen werden anstelle von Zeichenfolgen usw. als numerisch codiert.
Da das Wörterbuch hier ziemlich klein ist (26 Alphabete + Leerzeichen + Pad), kann die Netzwerkarchitektur ziemlich einfach sein. Eine einzelne Einbettungsschicht + wiederkehrende Schicht sollte ausreichen.
Wenn Sie das Problem auf diese Weise festlegen, können Sie eine Vanille-RNN oder eine sofort einsatzbereite LSTM / GRU verwenden, anstatt eine benutzerdefinierte Architektur zu erstellen, die zwei separate Zeichenfolgen als Eingabe für jeden Datenpunkt verwendet und eine Zahl ausgibt.
Sie könnten diesen Ansatz ausprobieren und sehen, ob er in der Lage ist, Basismodelle zufriedenstellend zu schlagen.
Eine gute Lektüre für RNNs auf Zeichenebene ist Andrej Karpathys Blog und Code . Das Problem, das er zu lösen versucht, ist anders und der Code ist in reiner Zahl, aber er fängt die Idee immer noch ziemlich gut ein.