Wie trainiere ich das LSTM-Modell für Sequenzelemente?

8

Ich versuche das LSTM-Modell für die nächste Warenkorbempfehlung zu verwenden. Ich möchte den gleichen Ansatz anwenden, den dieser Artikel: Ein dynamisches rekurrentes Modell für Next Basket Empfehlung

In meinem Fall habe ich einige Benutzer, die einige Artikel zu unterschiedlichen Zeiten kaufen. Also habe ich meine X-Daten wie folgt gestaltet:

%Vor%

Die Sequenzelemente repräsentieren ein Array mit der Form (1,20). Diese Vektoren sind die Durchschnittsdarstellung jedes Elements (generieren mit word2vec), das während jeder Sequenz gekauft wurde.

Dann entwerfe ich mein Label wie:

%Vor%

Der Label-Benutzer repräsentiert die nächste Reihenfolge jedes Benutzers nach seinen vergangenen Aufträgen, die in X-Daten darstellen. Außerdem sind die Beschriftungen Vektoren wie [1 0 1 0 0 0 .. 1], wobei 1 angibt, dass der Benutzer das Element gekauft hat, und ansonsten 0.

Also würde ich gerne das LSTM verwenden, um die vergangenen Sequenzen jedes Benutzers zu trainieren, um die nächsten Kaufsequenzen vorherzusagen. Im Folgenden definiere ich ein LSTM-Modell, bei dem ich die Sequenz nicht zurückgebe, weil ich eine Beschriftung nach Benutzer habe.

%Vor%

Wie Sie sehen können, trainiere ich mein LSTM mit batch_size = 1, weil der Zeitschritt zwischen den Benutzern unterschiedlich ist. Ich passe das Modell an 70% der Benutzer an und ich teste das Modell auf dem Rest.

Meine Ergebnisse sind sehr schlecht, die Top-n-Elemente, die vom Modell für jeden Benutzertest empfohlen werden, sind sehr ähnlich. Beispiel: Für einen bestimmten Benutzer empfiehlt das Modell Artikel, die nie in den alten Sequenzen angezeigt werden. Normalerweise muss es die verglichenen Elemente mit den letzten Sequenzen vorhersagen, also sollte es hohe Wahrscheinlichkeiten für die Artikel vorhersagen, die in der Vergangenheit gekauft wurden.

Offensichtlich scheint meine Vorgehensweise falsch zu sein. Vielleicht sind die Design- und Trainingsdaten nicht für mein Ziel angepasst. Haben Sie eine Idee oder einen Rat, um die Daten anzupassen, um mein Ziel zu erreichen?

Hinweis: Wenn ich ein LSTM-Modell mit nur einem Benutzer mit seinen Sequenzen und seinen Beschriftungen zu jedem Zeitpunkt (repräsentiert die nächste Reihenfolge zu jeder Zeitsequenz) anordne, bekomme ich gute Ergebnisse, um die nächste Bestellung mit der letzten Benutzerbestellung vorherzusagen . Aber dieser Ansatz zwingt mich, N-Benutzer LSTM-Modell zu trainieren, ist also nicht richtig.

Danke dir,

    
beubeu 13.06.2017, 20:20
quelle

2 Antworten

1

Ich bin kein Experte, aber ich bin mir nicht sicher über die Losgröße. Wie ich weiß Keras LSTM zurückgesetzt seinen Zustand nach jedem Batch. Wenn Ihre Stapelgröße 1 ist, setzt LSTM seinen Speicher zurück. Sie vergessen also, was Benutzer 1 bei der Verarbeitung von Zeitschritt 2 zu Zeitschritt 1 getan hat. Die maximale Anzahl von Einkäufen kann Ihre Batch-Größe sein. Sie können die Maskierung verwenden, um den Effekt des Auffüllens zu vermeiden.

    
Parthosarathi Mukherjee 19.06.2017 07:48
quelle
0

Indem Sie das Netzwerk an alle Benutzer in Ihrer Schleife anpassen, erstellen Sie ein verallgemeinertes Modell für alle Benutzer. Das ist wahrscheinlich der Grund, warum Sie ähnliche Ergebnisse für Testdaten erhalten.

Das von Ihnen erwähnte Papier soll Folgendes erfassen: 1) allgemeines Interesse jedes Benutzers aus Daten vergangener Körbe UND 2) sequentielle Informationen in Käufen (z. B. gekauft Brot, nächstes Mal wird Butter kaufen)

Sehen Sie sich die Beschreibung von Abbildung 1) an.

  

Die Eingabeschicht umfasst eine Reihe von Korbdarstellungen von a   Benutzer. Dynamische Darstellung des Benutzers kann im Verborgenen erhalten werden   Schicht. Schließlich zeigt die Ausgabeschicht Werte dieses Benutzers gegenüber allen   Gegenstände.

Ich glaube, sie trainieren ein Modell für jeden Benutzer im laufenden Betrieb und sagen daraus voraus. Die Art, wie sie dies durchführbar machen, ist das Sammeln von Gegenständen in jedem Korb.

Für ihre Daten funktionierte max_pooling besser, aber Sie konnten avg_pooling auch wie in der Zeitung ausprobieren. Hoffe das hilft. Versuchen Sie, dieses Papier selbst zu implementieren, also wenn Sie irgendwelche Fortschritte haben, lassen Sie es uns bitte wissen.

    
J. Doe 24.01.2018 00:58
quelle