Im vorherigen Kapitel haben Sie gesehen, wie man einen Elasticsearch-Index um ein dense_vector -Feld erweitert, das mit Einbettungen gefüllt wird, die von einem Machine-Learning-Modell generiert wurden. Das Modell wurde lokal auf Ihrem Computer installiert, und die Einbettungen wurden aus dem Python-Code generiert und den Dokumenten hinzugefügt, bevor diese in den Index eingefügt wurden.
In diesem Kapitel lernen Sie einen weiteren Vektortyp kennen, den sparse_vector, der dazu dient, Schlussfolgerungen aus dem Elastic Learned Sparse EncodeR-Modell (ELSER) zu speichern. Die von diesem Modell zurückgegebenen Einbettungen sind eine Sammlung von Tags (korrekter als Merkmale bezeichnet), denen jeweils ein Gewicht zugewiesen ist.
In diesem Kapitel werden Sie auch eine andere Methode für die Arbeit mit Machine-Learning-Modellen verwenden, bei der der Elasticsearch-Dienst selbst das Modell ausführt und die resultierenden Einbettungen über eine Pipeline zum Index hinzufügt.
Das
Ähnlich wie der Feldtyp dense_vector , den Sie im vorherigen Kapitel verwendet haben, kann der Typ sparse_vector Schlussfolgerungen speichern, die von Modellen des maschinellen Lernens zurückgegeben werden. Während dichte Vektoren ein Array von Zahlen fester Länge enthalten, die den Quelltext beschreiben, speichert ein dünnbesetzter Vektor eine Zuordnung von Merkmalen zu Gewichten.
Fügen wir dem Index ein sparse_vector -Feld hinzu. Dies ist ein Typ, der in der Indexzuordnung explizit definiert werden muss. Nachfolgend sehen Sie eine aktualisierte Version der create_index() -Methode mit einem neuen Feld namens elser_embedding vom Typ .
Einsatz des ELSER-Modells
Wie bereits erwähnt, übernimmt Elasticsearch in diesem Beispiel die Verantwortung für das Modell und führt es automatisch aus, um Einbettungen zu generieren, sowohl beim Einfügen von Dokumenten als auch bei der Suche.
Der Elasticsearch-Client stellt eine Reihe von API-Endpunkten zur Verfügung, um Machine-Learning-Modelle und deren Pipelines zu verwalten. Die folgende deploy_elser() Methode in search.py folgt einigen Schritten zum Herunterladen und Installieren des ELSER v2 Modells und zum Erstellen einer Pipeline, die es verwendet, um das oben definierte Feld elser_embedding zu füllen.
Die Konfiguration von ELSER erfordert für uns mehrere Schritte. Zuerst wird die ml.put_trained_model() -Methode von Elasticsearch verwendet, um ELSER herunterzuladen. Das Argument model_id gibt das Modell und die Version an, die heruntergeladen werden sollen (ELSER v2 ist für Elasticsearch 8.11 und höher verfügbar). Das Feld input ist die von diesem Modell benötigte Konfiguration.
Sobald das Modell heruntergeladen ist, muss es bereitgestellt werden. Hierfür wird die Methode ml.start_trained_model_deployment() verwendet, wobei lediglich die Kennung des bereitzustellenden Modells angegeben wird. Beachten Sie, dass es sich hierbei um einen asynchronen Vorgang handelt, das Modell steht also erst nach kurzer Zeit zur Verfügung.
Der letzte Schritt zur Konfiguration der Nutzung von ELSER besteht darin, eine Pipeline dafür zu definieren. Mithilfe einer Pipeline wird Elasticsearch mitgeteilt, wie das Modell verwendet werden soll. Einer Pipeline wird eine Kennung und eine oder mehrere Verarbeitungsaufgaben zur Ausführung zugewiesen. Die oben erstellte Pipeline heißt elser-ingest-pipeline und hat eine einzige Inferenzaufgabe. Das bedeutet, dass bei jedem Hinzufügen eines Dokuments das Modell mit input_field ausgeführt wird und die Ausgabe dem Dokument mit output_field hinzugefügt wird. In diesem Beispiel wird das summary -Feld verwendet, um die Einbettungen zu erzeugen, wie bei den dichten Vektoreinbettungen im vorherigen Kapitel. Die resultierenden Einbettungen werden in das im vorherigen Abschnitt erstellte dünnbesetzte Vektorfeld elser_embedding geschrieben.
Um den Aufruf dieser Methode zu vereinfachen, fügen Sie in der Datei app.py der Flask-Anwendung den Befehl deploy-elser hinzu:
Sie können ELSER nun mit folgendem Befehl auf Ihrem Elasticsearch-Dienst bereitstellen:
Die letzte Konfigurationsaufgabe besteht darin, den Index mit der Pipeline zu verknüpfen, sodass das Modell automatisch ausgeführt wird, wenn Dokumente in diesen Index eingefügt werden. Dies wird in der Indexkonfiguration mit der Option settings durchgeführt. Hier ist ein weiteres Update zur create_index() -Methode, um diesen Link zu erstellen:
Mit dieser Änderung können Sie den Index nun mit voller Unterstützung für ELSER-Inferenzen neu generieren:
Vorher
Semantische SucheNächste
Semantische Anfragen