
ML-Modelltraining und Vorhersage mit Lucidworks Fusion
In diesem Beitrag zeige ich Ihnen, wie Sie ein Modell für maschinelles Lernen trainieren und es zur Erstellung von Vorhersagen…
In diesem Beitrag zeige ich Ihnen, wie Sie ein Modell für maschinelles Lernen trainieren und es zur Erstellung von Vorhersagen für Dokumente in Fusion 3.1 verwenden können. Um die Dinge einfach zu halten, habe ich mich für die „Hallo-Welt“ des maschinellen Lernens entschieden: 20-newsgroups. So können wir uns auf den Prozess des Trainings eines Modells in Fusion konzentrieren, ohne uns in den Details zu verlieren.
Ein weiterer Blogbeitrag von Jake Mannix geht näher auf die neuen Funktionen für maschinelles Lernen in Fusion ein(https://lucidworks.com/2017/06/12/machine-learning-in-lucidworks-fusion/)
Erste Schritte
Falls Sie es noch nicht getan haben, laden Sie bitte Fusion 3.1 herunter und installieren Sie es unter: lucidworks.com/download
In diesem Blog verwenden wir $FUSION_HOME für das Verzeichnis, in dem Sie Fusion installiert haben, z. B.: /opt/fusion/3.1.2.
Starten Sie Fusion, wenn es nicht läuft:
cd $FUSION_HOME bin/fusion start
Melden Sie sich bei der Fusion Admin UI an unter: http://localhost:8764/
Als nächstes sollten Sie das fusion-spark-bootcamp Projekt von Github klonen. Öffnen Sie ein Kommandozeilen-Terminal und klonen Sie das Github-Projekt, indem Sie Folgendes tun:
git clone https://github.com/lucidworks/fusion-spark-bootcamp.git
Tipp: Wenn Sie kein Git-Benutzer sind, können Sie die Zip-Datei des Projekts problemlos unter fusion-spark-bootcamp/master.zip herunterladen.
cd fusion-spark-bootcamp
Bearbeiten Sie das Skript myenv.sh, um die Variablen für Ihre Umgebung zu setzen.
cd labs/ml20news ./setup_ml20news.sh
Dieses Labor wird
- Laden Sie den 20-Nachrichtengruppen-Datensatz herunter
- Indizieren Sie Dokumente mit einer Fusion Index-Pipeline
- Definieren Sie einen Spark-Job für das Training des Modells
- Führen Sie den Spark-Auftrag aus.
- Definieren Sie eine Index-Pipeline mit der ML-Stufe für das trainierte Modell
- Testen Sie die Index-Pipeline, indem Sie Testdokumente indizieren
Nachdem das Skript setup_ml20news.sh ausgeführt wurde, verfügen Sie über ein trainiertes logistisches Regressionsmodell, das Sie in Index-Pipelines verwenden können. Um das Modell in Aktion zu sehen, senden Sie die folgende Anfrage:
curl -u admin:password123 -X POST -H "Content-type:application/json" --data-binary @<(cat <<EOF
[
{
"id":"999",
"ts": "2016-02-24T00:10:01Z",
"body_t": "this is a doc about windscreens and face shields for cycles"
}
]
EOF
) "http://localhost:8764/api/apollo/index-pipelines/ml20news-default/collections/ml20news/index?echo=true"
Wenn Sie die folgende Ausgabe sehen, dann wissen Sie, dass der Klassifikator wie erwartet funktioniert.
{ "docs" : [ { "id" : "2706265e-d2ed-411e-ae06-ad3221d3561d", "fields" : [ "annotations" : [ ] }, { "name" : "the_newsgroup_s", "value" : "rec.motorcycles", "metadata" : { }, "annotations" : [ ] }, {
Lassen Sie uns nun einen Blick unter die Haube werfen, um zu verstehen, wie man das trainierte Modell trainiert und einsetzt
Training des Klassifizierungsmodells
Bevor wir während der Indizierung Klassifizierungsvorhersagen erstellen können, müssen wir ein Klassifizierungsmodell mit unseren Trainingsdaten trainieren. Das Skript setup_ml20news.sh hat bereits die 20 Newsgroup-Daten von http://qwone.com/~jason/20Newsgroups/ indiziert.

Jedes indizierte Dokument enthält die Felder ‚content_txt‘ und ’newsgroup_s‘, wobei ‚content_txt‘ für die Merkmalsextraktion und ’newsgroup_s‘ als Label für das ML-Training verwendet wird.
Als nächstes sehen wir uns den Spark-Auftrag an, der auf den indizierten Daten trainiert und ein Modell erstellt.
Der folgende Screenshot zeigt die Benutzeroberfläche für den Spark-Auftrag, der vom Skript erstellt wird. Der Auftrag definiert ‚content_txt‘ als das zu vektorisierende Feld und ’newsgroup_s‘ als das zu verwendende Beschriftungsfeld. Der Auftrag definiert auch eine Modell-ID, die zum Speichern des trainierten Modells im Blob-Speicher verwendet wird. Der Standardname des Modells ist die Job-ID. Dies kann über die Auftrags-Benutzeroberfläche konfiguriert werden.

Die ML-Jobs verwenden die Textanalyseklassen von Lucene, um Merkmale aus dem Textfeld zu extrahieren. Eine detaillierte Einführung in den Lucene Text Analyzer für Spark finden Sie im Blog von Steve Rowe: https://lucidworks.com/2016/04/13/spark-solr-lucenetextanalyzer/
Wenn Sie einen Fusion ML-Auftrag ausführen, wird im Hintergrund ein Spark-Auftrag ausgeführt und das Ausgabemodell im Fusion Blob-Speicher gespeichert. Das gespeicherte Ausgabemodell kann später bei Abfragen oder Indizes verwendet werden. Die Ausgabe von Fusion ML-Jobs zeigt Zähler für die Anzahl der Labels, die trainiert wurden.

Wenn der Auftrag abgeschlossen ist, ist das ML-Modell über den Fusion-Blob-Speicher zugänglich.

Erzeugen von Vorhersagen anhand eines trainierten Modells
Nachdem das Modell durch einen Spark-Auftrag trainiert wurde, kann es sowohl in Abfrage- als auch in Index-Pipelines verwendet werden. In diesem Beispiel zeige ich Ihnen, wie Sie es in einer Index-Pipeline verwenden, um Vorhersagen zu Dokumenten zu erstellen, bevor diese indiziert werden.
Die Index-Pipeline ist mit einer ML-Stufe konfiguriert, die so konfiguriert ist, dass sie das Eingabefeld ‚body_t‘ übernimmt und die Vorhersage in ein neues Feld ‚the_newsgroup_s‘ ausgibt. Die Modell-ID in der Stufe sollte der Name des trainierten Modells sein. (Standardmäßig ist dies der Name des Spark-Jobs, der das Modell trainiert hat).

Mit Fusion Connectors können Sie Daten aus über 40 Datenquellen indizieren. Wenn diese Datenquellen so konfiguriert sind, dass sie die Index-Pipeline mit der ML-Stufe verwenden, werden die Vorhersagen für alle indizierten Dokumente erstellt. Das folgende Beispiel zeigt die Verwendung der Index Workbench zur Indizierung von Dokumenten und zur Erstellung von Vorhersagen. Hier versuche ich, eine JSON-Datei mit 5 Testdokumenten zu indizieren. Nach Abschluss des Auftrags wird das Feld „the_newsgroup_s“ zu allen 5 Dokumenten hinzugefügt.

Um mehr über ML-Jobs in Fusion zu erfahren, besuchen Sie https://lucidworks.com/2017/06/12/machine-learning-in-lucidworks-fusion/
[1], [2] diskutieren ausführlich über die experimentellen Spark-Jobs, die in Fusion 3.1 für Clustering und Abfrageexploration verfügbar sind.
[1] – https://lucidworks.com/2017/06/21/automatic-document-clustering-with-fusion/
[2] – https://lucidworks.com/2017/06/21/query-explorer-jobs-in-fusion-3-1/