Benutzerdefinierte Einbettungen verwenden

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

Diese Funktion ist für Datenspeicher mit benutzerdefinierten strukturierten Daten oder unstrukturierten Daten mit Metadaten verfügbar.

Gemini Enterprise generiert standardmäßig automatisch Vektoreinbettungen, ohne dass eine Konfiguration erforderlich ist. Wenn Sie mit dem Erstellen von Einbettungen nicht vertraut sind, empfiehlt Google, Gemini Enterprise Einbettungen für Sie erstellen und verwenden zu lassen. Wenn Sie jedoch bereits eigene Einbettungen für Ihre Daten erstellt haben, können Sie diese anstelle der von Gemini Enterprise generierten Einbettungen verwenden. Das bietet sich insbesondere dann an, wenn Ihre benutzerdefinierten Einbettungen zusätzlichen Kontext enthalten, der das Abrufen und Ranking von Suchergebnissen verbessern kann. Beispiel:

  • Ihre Einbettungen wurden mit benutzerdefinierten Wörtern trainiert, z. B. mit internen Begriffen, deren semantische Ähnlichkeit beim Training mit öffentlichen Daten nicht erfasst werden 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 für ein personalisiertes und semantisch relevantes Dokument-Ranking verwenden. Sie können Ihre Einbettungen verwenden, um ein auf Personalisierung basierendes Ranking zu erhalten. Dadurch werden die Dokumenteinbettungen von Google für auf Relevanz basierendes Ranking ergänzt.

So verwenden Sie eigene Einbettungen:

  1. Vorbereitung: Überprüfen Sie, ob Ihre Einbettungen alle Anforderungen erfüllen.
  2. Daten mit Einbettungen aufnehmen: Nehmen Sie die Dokumente mit ihren Einbettungen auf.
  3. Schema aktualisieren: Aktualisieren Sie Ihr Schema mit den Feldern für Schlüsselattribute und den Dimensionsspezifikationen.
  4. Einbettung angeben: Sie können die Einbettung entweder global oder pro Suchanfrage angeben.

Hinweis

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

  • Einbettungen werden für strukturierte Daten sowie unstrukturierte Daten mit Metadaten unterstützt.
  • Einbettungen müssen als eindimensionale Arrays angegeben werden.
  • Die Dimension der Einbettung muss zwischen 1 und 768 liegen (einschließlich).
  • Einbettungen werden für Text und Bilder unterstützt, jedoch nicht für Videos.
  • Es können bis zu zwei Felder für die Einbettung getaggt werden. Zwei Felder für Einbettungen eignen sich für Fälle wie A/B-Tests.
  • Die als Schlüsselattribut zugewiesenen Einbettungsfelder können nach dem Festlegen nicht mehr entfernt werden.

Daten mit Einbettungen aufnehmen

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

So nehmen Sie Daten mit Einbettungen auf:

  1. Bereiten Sie Ihre Daten abhängig vom Datentyp für die Aufnahme vor:

    • Strukturierte Daten: Fügen Sie die Einbettungen der Dokumente in bis zu zwei Feldern im Dokument als eindimensionale Arrays 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 zum Vorbereiten strukturierter Daten in der Dokumentation Daten für die Aufnahme vorbereiten.

    • Unstrukturierte Daten mit Metadaten: Fügen Sie die Einbettung der Dokumente 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 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) unter Daten für die Aufnahme vorbereiten.

  2. Folgen Sie der Anleitung für Ihren Datentyp zum Erstellen eines Datenspeichers für selbst erhobene Daten, 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 den Schlüsselattributzuordnungen und Dimensionen für Ihre Einbettungsfelder. Verwenden Sie dazu entweder die Google Cloud Console oder die API.

Console

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

  1. Rufen Sie in der Google Cloud Console die Seite Gemini Enterprise auf.

    Zu Gemini Enterprise

  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. Wählen Sie in der Spalte Schlüsselattribute die Option embedding_vector als Schlüsselattribut für das Feld aus.

    Wiederholen Sie diesen Schritt für das zweite Einbettungsfeld, sofern vorhanden.

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

    Wiederholen Sie diesen Schritt für das zweite Einbettungsfeld, sofern vorhanden.

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

    Nachdem Sie das Schema aktualisiert haben, kann es je nach Größe des Datenspeichers bis zu 24 Stunden dauern, bis der Index neu erstellt wurde.

REST

So aktualisieren Sie das Schema mit der API:

  1. Folgen Sie der REST-Anleitung unter Schema aktualisieren und geben Sie die Schlüsselattributzuordnungen 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"
            }
          }
        }
      }
    

    Bei einer Anfrage zum Aktualisieren des Schemas wäre das formatierte JSON-Schema als JSON-String enthalten:

      "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 das Schema aktualisiert haben, kann es je nach Größe des Datenspeichers bis zu 24 Stunden dauern, bis der Index neu erstellt wurde.

Geben Sie als Nächstes die Einbettung an.

Einbettung angeben

Nachdem die Indexierung nach der Aktualisierung des Schemas abgeschlossen ist, können Sie Suchanfragen mit einer Einbettungsspezifikation senden.

Es gibt zwei Möglichkeiten, eine Einbettung anzugeben:

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

Einbettung global angeben

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

Console

Wenn Sie bei allen Suchanfragen dieselbe Einbettungsspezifikation angeben möchten, aktualisieren Sie Ihre Bereitstellungseinstellungen mit einer Einbettungsspezifikation.

  1. Rufen Sie in der Google Cloud Console die Seite Gemini Enterprise auf.

    Zu Gemini Enterprise

  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 Einbettungsfeldpfad den Namen des Felds ein, das Sie dem Einbettungsschlüsselattribut zugeordnet haben.

  5. Geben Sie für Rankingausdruck eine oder mehrere Funktionen ein, um das Ranking der Ergebnisse zu steuern. Die Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Rankingausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die mit + im Format function, { " + ", function } verbunden werden.

    Unterstützte Funktionen:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Die folgenden Variablen sind zulässig:

    • relevance_score: Eine vordefinierte Variable, die von Gemini Enterprise angegeben wird, um die Relevanz eines Dokuments zu messen. Der Wert liegt zwischen 0 und 1 (einschließlich).
    • dotProduct(): Eine vordefinierte Funktion, die von Gemini Enterprise angegeben wird. Sie müssen für diese 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 bei allen Suchanfragen dieselbe Einbettungsspezifikation angeben möchten, aktualisieren Sie die servingConfig mit der embeddingConfig.

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

    Im folgenden Beispiel werden für die embeddingConfig Einbettungen im Feld example_embedding_field verwendet. Die Gewichtung für relevance_score beträgt 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 dem Einbettungsschlüsselattribut zugeordnet haben.
    • ranking_expression: Steuert das Ranking der Ergebnisse. Die Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Rankingausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die mit + im Format function, { " + ", function } verbunden werden.

    Unterstützte Funktionen:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    Die folgenden Variablen sind zulässig:

    • relevance_score: Eine vordefinierte Variable, die von Gemini Enterprise angegeben wird.
    • dotProduct(): Eine vordefinierte Funktion, die von Gemini Enterprise angegeben wird. Das Skalarprodukt wird normalisiert. Sie müssen für diese 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 die servingConfig.embeddingConfig automatisch eingeschlossen.

    Wenn Sie eine Suchanfrage senden, die explizit eine andere embeddingSpec enthält, wird die servingConfig.embeddingConfig überschrieben. Lesen Sie die Anleitung dazu, wie Sie Einbettungsspezifikationen pro Suchanfrage angeben.

Einbettung pro Suchanfrage angeben

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

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

    Im folgenden Beispiel für embeddingSpec werden Einbettungen im Feld example_embedding_field verwendet und „Example Query“ wird als Eingabevektor angegeben. Bei der Berechnung des Rankings wird eine Gewichtung von 0,5 für relevance_score bzw. 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 dem Einbettungsschlüsselattribut zugeordnet haben.
    • vector: Der als Array angegebene Eingabevektor.
    • ranking_expression: Steuert das Ranking der Ergebnisse. Die Variablen werden entsprechend dem eingegebenen Ausdruck gewichtet. Der Rankingausdruck besteht aus einer einzelnen Funktion oder mehreren Funktionen, die mit + im Format function, { " + ", function } verbunden werden.

      Unterstützte Funktionen:

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      Die folgenden Variablen sind zulässig:

      • relevance_score: Eine vordefinierte Variable, die von Gemini Enterprise angegeben wird, um die Relevanz eines Dokuments zu messen. Der Wert liegt zwischen 0 und 1 (einschließlich).
      • dotProduct(): Eine vordefinierte Funktion, die von Gemini Enterprise angegeben wird. Sie müssen für diese 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. Rufen Sie die Ergebnisse in der Antwort auf die Suchanfrage ab. Jedes Suchergebnis enthält den Relevanzwert und das Skalarprodukt. Beispiel:

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

Nächste Schritte