Benutzerdefinierte Einbettungen verwenden

Wenn Sie bereits benutzerdefinierte Vektoreinbettungen für Ihre Daten erstellt haben, können Sie sie in Vertex AI Search hochladen und bei Abfragen mit Vertex AI Search verwenden.

Diese Funktion ist für Datenspeicher mit benutzerdefinierten strukturierten Daten oder unstrukturierten Daten mit Metadaten verfügbar. Diese Funktion ist nicht für die Suche nach Medien und im Gesundheitswesen verfügbar.

Standardmäßig generiert Vertex AI Search automatisch Vektoreinbettungen, ohne dass eine Konfiguration erforderlich ist. Wenn Sie sich mit dem Erstellen von Einbettungen nicht auskennen, empfiehlt Google, dass Vertex AI Search Einbettungen für Sie erstellt und verwendet. Wenn Sie jedoch eigene Einbettungen für Ihre Daten erstellt haben, möchten Sie diese möglicherweise anstelle der von Vertex AI Search generierten Einbettungen verwenden. Das ist insbesondere dann sinnvoll, wenn Ihre benutzerdefinierten Einbettungen zusätzlichen Kontext enthalten, der die Suche und das Ranking verbessern kann. Beispiel:

  • Ihre Einbettungen wurden mit benutzerdefinierten Wörtern trainiert, z. B. internen Begriffen, deren semantische Ähnlichkeit nicht durch das Training mit öffentlichen Daten erfasst würde. Das können beispielsweise organisationsspezifische Begriffe sein, die nur in privaten Dokumenten vorkommen.
  • Sie haben Einbettungen für Nutzerprofile erstellt und möchten diese verwenden, um ein personalisiertes, semantisch relevantes Dokumentranking zu erstellen. Sie können Ihre Einbettungen verwenden, um eine personalisierte Rangfolge zu erhalten, die die Dokumenteinbettungen von Google für die relevanzbasierte Rangfolge ergänzen kann.

So verwenden Sie Ihre eigenen Einbettungen:

  1. Vorbereitung: Prüfen Sie, ob Ihre Einbettungen alle Anforderungen erfüllen.
  2. Daten mit Einbettungen aufnehmen: Nehmen Sie Ihre Dokumente mit ihren Einbettungen auf.
  3. Schema aktualisieren: Aktualisieren Sie Ihr Schema mit den Feldern für die wichtigsten Attribute und Dimensionsspezifikationen.
  4. Einbettung angeben: Geben Sie die Einbettung entweder global oder pro Suchanfrage an.

Hinweise

Bevor Sie beginnen, sollten Sie prüfen, ob Ihre Einbettungen die folgenden Anforderungen erfüllen:

  • Einbettungen werden für strukturierte Daten und unstrukturierte Daten mit Metadaten unterstützt.
  • Einbettungen müssen als eindimensionale Arrays angegeben werden
  • Die Einbettungsdimensionalität muss zwischen 1 und 768 (einschließlich) liegen.
  • Einbettungen werden für Text und Bilder unterstützt. Videos werden nicht unterstützt
  • Es können bis zu zwei Felder als wichtige Felder für den Einbettungsschlüssel getaggt werden. Sie können zwei Felder für Fälle wie A/B-Tests für Ihre Einbettungen verwenden.
  • Die Schlüsselattribute für Einbettungsfelder können derzeit nicht entfernt werden, nachdem sie festgelegt wurden.

Daten mit Einbettungen aufnehmen

Sie können die Einbettungen eines Dokuments in ein bis zwei Feldern aufnehmen, die während der Dokumentaufnahme als Teil der Daten oder Metadaten dieses Dokuments enthalten sind.

So nehmen Sie Daten mit Einbettungen auf:

  1. Bereiten Sie Ihre Daten je nach Datentyp für die Aufnahme vor:

    • Strukturierte Daten: Wenn Sie Ihre Daten vorbereiten, fügen Sie die Einbettungen der einzelnen Dokumente als eindimensionale Arrays in ein bis zwei Feldern im Dokument ein. Sie können bis zu zwei Einbettungen angeben, z. B. für A/B-Tests. Jede Einbettung muss in einem eigenen Feld im Dokument angegeben werden, z. B.: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Folgen Sie der Anleitung zum Vorbereiten strukturierter Daten in der Dokumentation Daten für die Aufnahme vorbereiten.

    • Unstrukturierte Daten mit Metadaten: Wenn Sie Ihre Daten vorbereiten, fügen Sie die Einbettung jedes Dokuments als eindimensionales Array in ein Feld in den Dokumentmetadaten ein. Sie können bis zu zwei Einbettungen bereitstellen, z. B. für A/B-Tests zwischen Einbettungen. Jede Einbettung muss in einem eigenen Feld in den Dokumentmetadaten angegeben werden, z. B.: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      Folgen Sie der Anleitung zum Vorbereiten unstrukturierter Daten mit Metadaten für Ihre Aufnahmemethode (Cloud Storage oder BigQuery) in der Dokumentation Daten für die Aufnahme vorbereiten.

  2. Folgen Sie der Anleitung für Ihren Datentyp unter Suchdatenspeicher erstellen, um Ihre Dokumente mit Einbettungen aufzunehmen.

Aktualisieren Sie als Nächstes Ihr Schema, damit die richtigen Einbettungsfelder verwendet werden.

Schema aktualisieren

Aktualisieren Sie Ihr Schema mit Schlüsselattributzuordnungen und Dimensionen für Ihre Einbettungsfelder. Verwenden Sie dazu entweder die Google Cloud -Konsole oder die API.

Console

So aktualisieren Sie Ihr Schema über die Google Cloud Console:

  1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf.

    KI-Anwendungen

  2. Klicken Sie im Navigationsmenü auf Datenspeicher.

  3. Klicken Sie in der Spalte Name auf den Datenspeicher mit dem Schema, das Sie aktualisieren möchten.

  4. Klicken Sie auf den Tab Schema, um das Schema für Ihre Daten aufzurufen.

  5. Klicken Sie auf Bearbeiten.

  6. Suchen Sie im Schema nach dem Einbettungsfeld und wählen Sie in der Spalte Schlüsselattribute embedding_vector als Schlüsselattribut für dieses Feld aus.

    Wenn Sie ein zweites Einbettungsfeld haben, wiederholen Sie diesen Schritt für dieses Feld.

  7. Geben Sie in der Spalte Dimension die Anzahl der Dimensionen für das jeweilige Einbettungsfeld ein.

    Wenn Sie ein zweites Einbettungsfeld haben, wiederholen Sie diesen Schritt für dieses Feld.

  8. Klicken Sie auf Speichern, um die Schemaänderungen zu übernehmen.

    Nachdem Sie Ihr Schema aktualisiert haben, kann es je nach Größe Ihres Datenspeichers bis zu 24 Stunden dauern, bis die Daten neu indexiert werden.

REST

So aktualisieren Sie Ihr Schema mithilfe der API:

  1. Folgen Sie der REST-Anleitung unter Schema aktualisieren und geben Sie die Zuordnung der Schlüsselattribute und die Anzahl der Dimensionen für jedes Einbettungsfeld an:

    • "keyPropertyMapping": "embedding_vector"
    • "dimension": NUMBER_OF_DIMENSIONS

    Hier sehen Sie beispielsweise ein formatiertes JSON-Schema mit 768 Dimensionen für das Feld example_embedding_vector:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "example_embedding_vector": {
            "type": "array",
            "keyPropertyMapping": 'embedding_vector',
            "dimension": 768,
            "items": {
              "type": "number"
            }
          }
        }
      }
    

    In einer Anfrage zum Aktualisieren des Schemas würde das oben formatierte JSON als JSON-String eingefügt:

      "jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
    

    Nachdem Sie Ihr Schema aktualisiert haben, kann es je nach Größe Ihres Datenspeichers bis zu 24 Stunden dauern, bis die Daten neu indexiert werden.

Geben Sie als Nächstes das Einbettungselement an.

Einbettung angeben

Nachdem die Indexierung aus Ihrer Schemaaktualisierung abgeschlossen ist, können Sie Suchanfragen mit einer Einbettungsspezifikation senden.

Es gibt zwei Möglichkeiten, ein Embedding anzugeben:

  • Einbettung global angeben: Wenn Sie für alle Suchanfragen dieselbe Einbettung angeben möchten, aktualisieren Sie Ihre Bereitstellungseinstellungen, um eine Einbettungsspezifikation mit der Google Cloud -Konsole oder der API einzuschließen.
  • Einbettung pro Suchanfrage angeben: Senden Sie embeddingSpec in jeder Suchanfrage über die API. Dadurch wird die globale Einstellung überschrieben, sofern sie festgelegt ist.

Einbettung global angeben

Sie können dasselbe Embedding für alle Suchanfragen über dieGoogle Cloud Console oder die API angeben.

Console

Wenn Sie allen Suchanfragen dieselbe Einbettungsspezifikation zur Verfügung stellen möchten, aktualisieren Sie Ihre Bereitstellungseinstellungen mit einer Einbettungsspezifikation.

  1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf.

    KI-Anwendungen

  2. Klicken Sie für den Datenspeicher mit dem Schema, das Sie aktualisieren möchten, auf Anzeigen.

  3. Rufen Sie die Seite Konfigurationen auf und klicken Sie auf den Tab Bereitstellung.

  4. Geben Sie für Pfad des Einbettungsfelds den Namen des Felds ein, das Sie der Eigenschaft für den Einbettungsschlüssel zugeordnet haben.

  5. Geben Sie für Ranking-Ausdruck eine oder mehrere Funktionen ein, um das Ranking der Ergebnisse zu steuern. Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Ranking-Ausdruck ist eine einzelne Funktion oder mehrere Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

    Unterstützte Funktionen:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Die folgenden Variablen werden akzeptiert:

    • relevance_score: Eine vordefinierte Variable, die von Vertex AI Search bereitgestellt wird, um die Relevanz eines Dokuments zu messen. Der Wert liegt zwischen 0 und 1, einschließlich der Grenzwerte.
    • dotProduct(): Eine vordefinierte Funktion, die von Vertex AI Search bereitgestellt wird. Sie müssen dieser Funktion denselben Feldnamen wie für embeddingVector.fieldPath angeben.

    Beispiel:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)

REST

Wenn Sie allen Suchanfragen dieselbe Einbettungsspezifikation zur Verfügung stellen möchten, aktualisieren Sie servingConfig mit embeddingConfig.

  1. Patchen Sie die servingConfig-Entität mit den Feldern, die Sie aktualisieren möchten. Geben Sie die Felder an, die Sie mit updateMask aktualisieren.

    Im folgenden Beispiel werden für embeddingConfig Einbettungen im Feld example_embedding_field verwendet und relevance_score erhält ein Gewicht von 0, 5.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search",
          "embeddingConfig": {
            "fieldPath": "example_embedding_field"
          },
          "ranking_expression": "0.5 * relevance_score"
        }' \
    'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
    
    • fieldPath: Der Name des Felds, das Sie der Eigenschaft „Einbettungsschlüssel“ zugeordnet haben.
    • ranking_expression: Steuert die Rangfolge der Ergebnisse. Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Ranking-Ausdruck ist eine einzelne Funktion oder mehrere Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

    Unterstützte Funktionen:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Die folgenden Variablen werden akzeptiert:

    • relevance_score: Eine vordefinierte Variable, die von Vertex AI Search bereitgestellt wird.
    • dotProduct(): Eine vordefinierte Funktion, die von Vertex AI Search bereitgestellt wird. Das Punktprodukt wird normalisiert. Sie müssen dieser Funktion denselben Feldnamen wie für embeddingVector.fieldPath angeben.

    Beispiel:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Wenn Sie Suchanfragen senden, wird servingConfig.embeddingConfig automatisch eingefügt.

    Wenn Sie eine Suchanfrage senden, die explizit eine andere embeddingSpec enthält, wird servingConfig.embeddingConfig überschrieben. Eine Anleitung dazu, wie Sie Einbettungsspezifikationen für einzelne Suchanfragen angeben, finden Sie unter Pro Anfrage.

Einbettung pro Suchanfrage angeben

Sie können eine Einbettungsspezifikation für eine einzelne Suchanfrage über die API bereitstellen. Eine Einbettungsspezifikation pro Anfrage überschreibt jede globale Einbettungsspezifikation.

  1. Senden Sie eine Suchanfrage, die embeddingSpec enthält.

    Im folgenden Beispiel für embeddingSpec werden Einbettungen im Feld example_embedding_field verwendet, „Beispielanfrage“ als Eingabevektor angegeben und beim Berechnen des Rankings ein Gewicht von 0,5 für relevance_score und 0,3 für example_embedding_field festgelegt.

      "embeddingSpec": {
        "embeddingVectors": [{
          "fieldPath": "example_embedding_field",
          "vector": [
            0.96241474,
            -0.45999944,
            0.108588696
          ]
        }]
      },
      "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
    
    • fieldPath: Der Name des Felds, das Sie der Eigenschaft „Einbettungsschlüssel“ zugeordnet haben.
    • vector: Der als Array bereitgestellte Eingabevektor.
    • ranking_expression: Steuert die Rangfolge der Ergebnisse. Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Ranking-Ausdruck ist eine einzelne Funktion oder mehrere Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

      Unterstützte Funktionen:

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      Die folgenden Variablen werden akzeptiert:

      • relevance_score: Eine vordefinierte Variable, die von Vertex AI Search bereitgestellt wird, um die Relevanz eines Dokuments zu messen. Der Wert liegt zwischen 0 und 1, einschließlich der Grenzwerte.
      • dotProduct(): Eine vordefinierte Funktion, die von Vertex AI Search bereitgestellt wird. Sie müssen dieser Funktion denselben Feldnamen wie für embeddingVector.fieldPath bereitstellen.

      Beispiel:

      • 0.3 * relevance_score
      • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. Ergebnisse in der Antwort auf die Suchanfrage erhalten. Jedes Suchergebnis enthält den Relevanzwert und die Werte des Skalarprodukts. Beispiel:

    "modelScores": {
      "dotProduct(example_embedding_field)": [0.02150772698223591],
      "relevance_score": [ 0.8828125 ]
    }
    
    • dotProduct(): Das berechnete Skalarprodukt für das Suchergebnisdokument.
    • relevance_score: Der berechnete Relevanzwert für das Suchergebnisdokument.

Nächste Schritte