Benutzerdefinierte Einbettungen verwenden

Wenn Sie bereits eigene 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 generischen strukturierten Daten oder unstrukturierten Daten mit Metadaten verfügbar. Diese Funktion ist für die Medien- und Gesundheitssuche nicht verfügbar.

Standardmäßig generiert die Vertex AI Search automatisch Vektor-Embeddings, ohne dass eine Konfiguration erforderlich ist. Wenn Sie mit dem Erstellen von Embeds nicht vertraut sind, empfiehlt Google, Vertex AI Search zu verwenden, um Embeds für Sie zu erstellen und zu verwenden. Wenn Sie jedoch eigene Einbettungen für Ihre Daten erstellt haben, sollten Sie diese anstelle der von der Vertex AI Search generierten verwenden. Das gilt insbesondere, wenn Ihre benutzerdefinierten Einbettungen zusätzlichen Kontext enthalten, der die Suchabfrage und das Ranking verbessern kann. Beispiel:

  • Ihre Embeddings wurden mit benutzerdefinierten Wörtern trainiert, z. B. mit internen Begriffen, deren semantische Ähnlichkeit durch das Training mit öffentlichen Daten nicht erfasst wird. Das können z. B. 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 Embeds verwenden, um ein personalisiertes Ranking zu erhalten, das die Dokument-Embeds von Google für ein relevanzbasiertes Ranking ergänzen kann.

So verwenden Sie eigene Embeds:

  1. Vorbereitung: Prüfen, ob Ihre Einbettungen alle Anforderungen erfüllen
  2. Daten mit Einbettungen aufnehmen: Dokumente mit ihren Einbettungen aufnehmen
  3. Schema aktualisieren: Aktualisieren Sie Ihr Schema mit den wichtigsten Property-Feldern und Dimensionsspezifikationen.
  4. Embedding angeben: Sie können das Einbetten entweder global oder pro Suchanfrage angeben.

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 Dimension der Einbettung muss zwischen 1 und 768 liegen.
  • Einbettungen werden für Text und Bilder unterstützt. Videos werden nicht unterstützt
  • Bis zu zwei Felder können als Schlüsselfelder für das Einbetten getaggt werden. Sie können zwei Felder für Fälle wie A/B-Tests für Ihre Einbettungen verwenden.
  • Die Bezeichnungen für Schlüsseleigenschaften von Einbettungsfeldern 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 Felder aufnehmen, die bei 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: Fügen Sie bei der Vorbereitung Ihrer Daten die Einbettungen der einzelnen Dokumente als eindimensionale Arrays in ein bis zwei Felder im Dokument ein. Sie können bis zu zwei Einbettungen angeben, z. B. für A/B-Tests zwischen Einbettungen. 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 zur Vorbereitung strukturierter Daten in der Dokumentation Daten für die Aufnahme vorbereiten.

    • Unstrukturierte Daten mit Metadaten: Fügen Sie beim Vorbereiten Ihrer Daten die Einbettung jedes Dokuments als eindimensionales Array in ein Feld in den Dokumentmetadaten ein. Sie können bis zu zwei Einbettungen angeben, z. B. für A/B-Tests zwischen Einbettungen. Jede Einbettung muss in den Dokumentmetadaten in einem eigenen Feld 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 Datenaufnahmemethode (Cloud Storage oder BigQuery) in der Dokumentation Daten für die Datenaufnahme vorbereiten.

  2. Folgen Sie der Anleitung für Ihren Datentyp unter Engine erstellen und Daten mit Vertex AI Search aufnehmen, 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üsseleigenschaftszuordnungen und Dimensionen für Ihre Einbettungsfelder entweder über die Google Cloud Console oder die API.

Console

So aktualisieren Sie Ihr Schema mit der Google Cloud Console:

  1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

    Zum Agent Builder

  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üsseleigenschaften embedding_vector als Schlüsseleigenschaft für dieses Feld aus.

    Wenn Sie ein zweites Feld für das Einbetten 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 Feld für das Einbetten haben, wiederholen Sie diesen Schritt für dieses Feld.

  8. Klicken Sie auf Speichern, um die Schemaänderungen anzuwenden.

    Nach der Aktualisierung des Schemas kann es je nach Größe des Datenspeichers bis zu 24 Stunden dauern, bis die Indexierung neu erstellt wurde.

REST

So aktualisieren Sie Ihr Schema mithilfe der API:

  1. Geben Sie gemäß der REST-Anleitung unter Schema aktualisieren die Zuordnung der Schlüsseleigenschaften und die Anzahl der Dimensionen für jedes Einbettungsfeld an:

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

    Hier ist 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 Schemaaktualisierungsanfrage würde die oben formatierte JSON als JSON-String eingeschlossen:

      "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\"}}}}"
    

    Nach der Aktualisierung des Schemas kann es je nach Größe des Datenspeichers bis zu 24 Stunden dauern, bis die Indexierung neu erstellt wurde.

Geben Sie als Nächstes das Einbetten an.

Einbettung angeben

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

Es gibt zwei Möglichkeiten, ein Einbetten anzugeben:

  • Embedding global angeben: Wenn Sie dasselbe Einbetten für alle Suchanfragen angeben möchten, aktualisieren Sie Ihre Bereitstellungseinstellungen, um eine Einbettungsspezifikation entweder über die Google Cloud Console oder die API hinzuzufügen.
  • Embedding pro Suchanfrage angeben: Sende embeddingSpec in jeder Suchanfrage über die API. Dadurch wird die globale Einstellung überschrieben, falls diese festgelegt ist.

Einbettung global angeben

Sie können dieselbe Einbettung für alle Suchanfragen mit der Google Cloud Console oder der API angeben.

Console

Wenn du für alle Suchanfragen dieselbe Einbettungsspezifikation verwenden möchtest, aktualisiere deine Bereitstellungseinstellungen mit einer Einbettungsspezifikation.

  1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.

    Zum Agent Builder

  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 unter Embedding-Feldpfad den Namen des Felds ein, das Sie der Property „Embedding-Schlüssel“ zugeordnet haben.

  5. Geben Sie unter Rangierungsausdruck eine oder mehrere Funktionen ein, um das Ranking der Ergebnisse zu steuern. Variablen werden gemäß dem von Ihnen eingegebenen Ausdruck gewichtet. Der Rangfolgeausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

    Folgende Funktionen werden unterstützt:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Folgende Variablen sind zulässig:

    • relevance_score: Eine vordefinierte Variable, die von Vertex AI Search zur Messung der Relevanz eines Dokuments bereitgestellt wird. Die Bewertung reicht von 0 bis 1, 0.
    • dotProduct(): Eine vordefinierte Funktion von Vertex AI Search. Sie müssen für diese Funktion denselben Feldnamen angeben wie für embeddingVector.fieldPath.

    Beispiel:

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

REST

Wenn du für alle Suchanfragen dieselbe Einbettungsspezifikation angeben möchtest, aktualisiere servingConfig mit der embeddingConfig.

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

    Im folgenden Beispiel verwendet embeddingConfig Einbettungen im Feld example_embedding_field und ordnet relevance_score ein Gewicht von 0, 5 zu.

    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 Property „Embedding-Schlüssel“ zugeordnet haben.
    • ranking_expression: Bestimmt das Ranking der Ergebnisse. Variablen werden gemäß dem von Ihnen eingegebenen Ausdruck gewichtet. Der Rangfolgeausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

    Folgende Funktionen werden unterstützt:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Folgende Variablen sind zulässig:

    • relevance_score: Eine vordefinierte Variable von Vertex AI Search.
    • dotProduct(): Eine vordefinierte Funktion von Vertex AI Search. Das Skalarprodukt ist normalisiert. Sie müssen für diese Funktion denselben Feldnamen angeben wie für embeddingVector.fieldPath.

    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 zum Angeben von Einbettungsspezifikationen für einzelne Suchanfragen findest du unter Pro Anfrage.

Einbettung pro Suchanfrage angeben

Mit der API kannst du eine Einbettungsspezifikation für eine einzelne Suchanfrage angeben. Eine Einbettungsspezifikation pro Anfrage überschreibt alle globalen Einbettungsspezifikationen.

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

    Im folgenden Beispiel für embeddingSpec werden Einbettungen im Feld example_embedding_field verwendet. „Beispielabfrage“ wird als Eingabevektor angegeben und relevance_score erhält bei der Berechnung des Rankings ein Gewicht von 0, 5 und example_embedding_field ein Gewicht von 0,3.

      "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 Property „Embedding-Schlüssel“ zugeordnet haben.
    • vector: Der Eingabevektor als Array.
    • ranking_expression: Bestimmt das Ranking der Ergebnisse. Variablen werden gemäß dem von Ihnen eingegebenen Ausdruck gewichtet. Der Ranking-Ausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die durch + im Format function, { " + ", function } verbunden sind.

      Folgende Funktionen werden unterstützt:

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      Folgende Variablen sind zulässig:

      • relevance_score: Eine vordefinierte Variable, die von Vertex AI Search zur Messung der Relevanz eines Dokuments bereitgestellt wird. Die Bewertung reicht von 0 bis 1, 0.
      • dotProduct(): Eine vordefinierte Funktion von Vertex AI Search. Sie müssen für diese Funktion denselben Feldnamen angeben wie für embeddingVector.fieldPath.

      Beispiel:

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

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

Nächste Schritte