IBM Cloud Docs
Verwenden Sie ELSER, das Modell für die Verarbeitung natürlicher Sprache von Elastic

Verwenden Sie ELSER, das Modell für die Verarbeitung natürlicher Sprache von Elastic

Elastic Learned Sparse EncodeR(ELSER) ist ein von Elastic trainiertes NLP-Modell (Natural Language Processing, Verarbeitung natürlicher Sprache), das Ihnen die Ausführung einer semantischen Suche mithilfe der Darstellung von Sparse-Vektoren ermöglicht. Anstelle der Literalübereinstimmung für Suchbegriffe ruft die semantische Suche Ergebnisse auf der Basis der Absicht und der kontextbezogenen Bedeutung einer Suchabfrage ab.

In diesem Lernprogramm stellen Sie eine Instanz von Databases for Elasticsearch Platinum bereit und wenden das ELSER-Modell auf einen Texthauptteil an und sehen, wie es die Qualität der Suchergebnisse verbessert.

Dies ist das zweite von drei Lernprogrammen, die sich mit den Funktionen von Elasticsearch rund um Machine Learningbeschäftigen. Machine Learning ist ein Zweig der künstlichen Intelligenz (KI) und der Informatik, der sich auf die Verwendung von Daten und Algorithmen konzentriert, um die Art und Weise zu imitieren, wie Menschen lernen, und seine Genauigkeit schrittweise verbessert. Mithilfe statistischer Methoden werden Algorithmen trainiert, um Klassifizierungen oder Vorhersagen zu machen und wichtige Erkenntnisse in Data-Mining-Projekten zu gewinnen.

Weitere Lernprogramme finden Sie in dieser Elasticsearch-Reihe für maschinelles Lernen:

Databases for Elasticsearch ist ein kostenpflichtiger Service, sodass für die Ausführung dieses Lernprogramms Gebühren anfallen.

Vorbemerkungen

Installieren Sie einige Tools, die Sie unbedingt benötigen, um den Bereitstellungsprozess zu starten:

Beziehen Sie einen API-Schlüssel, um die Infrastruktur für Ihr Konto bereitzustellen

Erstellen Sie einen IBM Cloud-API-Schlüssel, der es Terraform ermöglicht, Infrastruktur in Ihrem Konto bereitzustellen. Sie können bis zu 20 API-Schlüssel erstellen.

Aus Sicherheitsgründen kann der API-Schlüssel nur zum Zeitpunkt seiner Erstellung kopiert oder heruntergeladen werden. Wenn der API-Schlüssel verloren geht, müssen Sie einen neuen API-Schlüssel erzeugen.

Projekt klonen

Klonen Sie das Projekt aus dem GitHub-Repository.

git clone https://github.com/IBM/elasticsearch-ml-elser-tutorial.git

Elasticsearch-Cluster installieren

  1. Navigieren Sie zum Terraform-Ordner des geklonten Projekts.

    cd elasticsearch-ml-elser-tutorial/terraform
    
  2. Erstellen Sie auf Ihrer Maschine ein Dokument namens terraform.tfvars mit den folgenden Feldern:

     ibmcloud_api_key = "<your_api_key_from_step_1>"
     region = "<your_region>"
     elastic_password = "<make-up-a-password>"
    

    Das Dokument terraform.tfvars enthält Variablen, die Sie vielleicht geheim halten möchten, daher ist es vom öffentlichen Github-Repository ausgeschlossen.

  3. Installieren Sie die Infrastruktur mit dem folgenden Befehl:

    terraform init
    terraform apply --auto-approve
    

Exportieren Sie schließlich die URL für den Datenbankzugriff in Ihre Terminalumgebung (sie wird in den nachfolgenden Schritten benötigt)

 terraform output --json
 export ES="<the url value obtained from the output>"
 cd ..

ELSER-Modell installieren

Das ELSER-Modell muss installiert und gestartet werden, bevor Sie es verwenden können. Installieren Sie es mit einem Befehl wie dem folgenden:

curl -kX PUT "$ES/_ml/trained_models/.elser_model_1?pretty" -H 'Content-Type: application/json' -d'
{
  "input": {
	"field_names": ["text_field"]
  }
}
'

Als Nächstes starten Sie es, indem Sie Folgendes eingeben:

curl -kX POST "$ES/_ml/trained_models/.elser_model_1/deployment/_start?deployment_id=for_search&pretty"

Möglicherweise müssen Sie einige Minuten warten, bis die Installation des Modells abgeschlossen ist, bevor der Startbefehl ausgeführt werden kann.

Index und Zuordnungen für Ihre Daten erstellen

Sie sollten sich im Stammverzeichnis Ihres Projektordners befinden. Verwenden Sie im Terminal einen Befehl wie den folgenden:

curl -kXPUT -H"Content-Type: application/json" -d@mapping.json $ES/test_data

Dadurch wird ein Index namens test_data in Ihrer ES-Instanz erstellt. Außerdem werden einige explizite Zuordnungen erstellt. Auf diese Weise definiert Elastic, wie ein Dokument und die darin enthaltenen Felder gespeichert und indexiert werden. Die Zuordnungsdefinition wird in der Datei mapping.json gespeichert. Es definiert ein Feld mit dem Namen ml.tokens, das verwendet wird, um alle zusätzlichen Daten (Tokens) zu speichern, die für den Algorithmus für maschinelles Lernen erstellt werden, wenn er die hochgeladenen Daten analysiert. Diese Daten werden in einem Feld namens text enthalten sein, das auch explizit im Zuordnungsdokument definiert ist.

Erstellung einer Ingest-Pipeline für die Analyse Ihrer Daten

Das ELSER-Modell ist in allen Platin-Implementierungen von Databases for Elasticsearchvorinstalliert. Sie müssen nur eine Pipeline erstellen, die diese zum Analysieren Ihrer eingehenden Daten verwendet.

curl -kX PUT -H"Content-Type: application/json" -d@pipeline.json $ES/_ingest/pipeline/elser-v1-test

Das pipeline.json-Dokument enthält die Pipelinedefinition. Es beschreibt, wie Dokumente verarbeitet werden, wenn sie hochgeladen werden. In diesem Fall definiert es die Verwendung des ELSER-Modells und weist ES an, alle resultierenden Daten in das Feld ml.tokens des Index zu stellen.

Dies ist eine sehr einfache Pipeline. Zum Beispiel behandelt sie keine Aufnahmefehler, sondern löscht sie einfach. Aber es ist für die Zwecke dieser Demo ausreichend.

Hochladen von Daten

Das Dokument import.json enthält Daten aus dem Dataset msmarco-passagetest2019-top1000, bei dem es sich um eine Untergruppe des Datasets MS MARCO für die Durchlaufrangfolge handelt. Sie besteht aus 200 Abfragen, die jeweils von einer Liste relevanter Textpassagen begleitet werden. Alle eindeutigen Passagen wurden zusammen mit ihren IDs aus diesem Dataset extrahiert und für den Massenupload in Elasticsearchvorbereitet.

In diesem Schritt laden Sie die Daten in Elasticsearch hoch und übergeben sie beim Hochladen über das ELSER-Analyseprogramm.

Die Analyse der Verarbeitung natürlicher Sprache ist rechenintensiv, daher dauert dieser Prozess mehrere Stunden (bis zu 12 Stunden). Wir führen den Massenupload in Stapeln von 100 Einträgen durch, um sicherzustellen, dass der Pipelinepuffer nicht überläuft.

Teilen Sie zuerst das Dokument import.json in kleinere Dokumente mit jeweils 100 Einträgen auf (jeder Eintrag besteht aus zwei Zeilen im Dokument):

split -l 200 -a 4  import.json

Dadurch entstehen mehrere hundert kleine Dokumente. Importieren Sie sie, indem Sie das Script upload.sh ausführen:

./upload.sh

Für jedes hochgeladene Dokument versucht das ELSER-Modell, den Text abzuleiten, und generiert eine Gruppe von Wörtern, die es für relevant hält, zusammen mit einem Relevanzwert. Das folgende Beispiel zeigt ein eingepflastertes Dokument:

{
  "_index": "test_data",
  "_id": "1",
  "_version": 3,
  "_seq_no": 1310,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "text": "This is the definition of RNA along with examples of types of RNA molecules. This is the definition of RNA along with examples of types of RNA molecules. RNA Definition",
    "ml": {
      "tokens": {
        "molecules": 0.9468944,
        "cell": 0.31727117,
        "type": 0.1881346,
        "lab": 0.14050934,
        "example": 0.27423903,
        "strand": 0.11950072,
        "dna": 0.82435495,
        "protein": 0.25066674,
        "term": 0.5622088,
        "definition": 0.21340553,
        "nuclear": 0.03731725,
        "different": 0.026590228,
        "element": 0.42168307,
        "genetic": 0.36145726,
        "types": 0.7244048,
        "characteristics": 0.24549837,
        "adam": 0.15298073,
        "rna": 1.949169,
        "organism": 0.27345642,
        "gene": 0.57350045,
        "substance": 0.006454099,
        "mrna": 1.002312,
        "bond": 0.096653655,
        "structure": 0.1670035,
        "genome": 0.24130683,
        "sequence": 0.21949387,
        "q": 0.028950738,
        "unit": 0.1926791,
        "examples": 1.0590855,
        "material": 0.034060754,
        "chemical": 0.454947,
        "science": 0.20523745,
        "biological": 0.47201967,
        "molecule": 0.92732555,
        "atom": 0.021480415,
        "word": 0.2971402
      },
      "model_id": ".elser_model_1"
    }
  }
}

Sie sehen, dass es Beziehungen jenseits der tatsächlichen Wörter im Text erstellt hat. Beispiel: Es wurde angenommen, dass es sich bei diesem Snippet um science, genes und dna handelt.

Lehnen Sie sich zurück und entspannen Sie sich. Der Import nimmt etwas Zeit in Anspruch.

Dataset durchsuchen und Ergebnisse vergleichen

Sobald der Datensatz hochgeladen ist, können Sie ihn testen, insbesondere den Unterschied, den der ELSER NLP-Prozessor für die Qualität Ihrer Suchergebnisse machen kann. Die folgende Suchabfrage verwendet die generierten Tokens, um Ergebnisse zurückzugeben, die am relevantesten erscheinen:

curl -k -H"Content-Type: application/json" -d@elserquery.json $ES/test_data/_search | jq .

Vergleichen Sie dies mit einer Abfrage, die die Tokens NICHT verwendet und einfach den ursprünglichen Text durchsucht:

curl -k -H"Content-Type: application/json" -d@query.json $ES/test_data/_search | jq .

Sie können andere Abfragen ausprobieren, indem Sie den Text in den Dateien query.json und elserquery.json ändern. Probieren Sie Folgendes aus:

what is the best exercise for stiff limbs?

oder

explain how the US president is elected

In all diesen Fällen sind die ELSER-verbesserten Ergebnisse wesentlich relevanter.

Das gilt natürlich nicht für alle Suchen. Eine Suche nach taylor swift beispielsweise führt zu ähnlichen Ergebnissen für beide. Alles hängt also von der Art der Suche und den Daten in Ihrem Index ab. Sie sehen jedoch, dass viele Suchvorgänge durch Anwendung des ELSER ML-Modells deutlich verbessert werden könnten.

Infrastruktur umrüsten

Für Ihre Databases for Elasticsearch fallen Gebühren an. Nachdem Sie dieses Lernprogramm abgeschlossen haben, können Sie die gesamte Infrastruktur entfernen, indem Sie zum Verzeichnis terraform des Projekts wechseln und den folgenden Befehl verwenden:

terraform destroy

Bereit für mehr?

ELSER ist nur ein ML-Modell. Es gibt viele andere und mit dem Databases for Elasticsearch Platinum Plan können Sie ohne großen Aufwand andere bereitstellen und Ihre Daten stattdessen mit ihnen analysieren. Wir haben ein Lernprogramm zusammengestellt, das Ihnen zeigt, wie Sie genau das tun können.