Multimodale Daten in Python mit BigQuery DataFrames analysieren

In dieser Anleitung erfahren Sie, wie Sie multimodale Daten in einem Python-Notebook mithilfe von Klassen und Methoden von BigQuery DataFrames analysieren.

In dieser Anleitung wird der Produktkatalog aus dem öffentlichen Dataset des Cymbal-Zoofachgeschäfts verwendet.

Ein Notebook, das bereits die in diesem Tutorial behandelten Aufgaben enthält, können Sie unter BigFrames-Multimodal-DataFrame hochladen.

Lernziele

  • Multimodale DataFrames erstellen
  • Strukturierte und unstrukturierte Daten in einem DataFrame kombinieren
  • Bilder transformieren
  • Text und Einbettungen basierend auf Bilddaten generieren
  • PDFs in kleinere Teile für die weitere Analyse aufteilen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Trusted Cloud by S3NS:

  • BigQuery: you incur costs for the data that you process in BigQuery.
  • BigQuery Python UDFs: you incur costs for using BigQuery DataFrames image transformation and chunk PDF methods.
  • Cloud Storage: you incur costs for the objects stored in Cloud Storage.
  • Vertex AI: you incur costs for calls to Vertex AI models.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Trusted Cloud Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen finden Sie auf den folgenden Preisseiten:

Hinweise

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Trusted Cloud project.

  3. Enable the BigQuery, BigQuery Connection, Cloud Storage, and Vertex AI APIs.

    Enable the APIs

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Einrichten

In diesem Abschnitt erstellen Sie den Cloud Storage-Bucket, die Verbindung und das Notebook, die in dieser Anleitung verwendet werden.

Bucket erstellen

Erstellen Sie einen Cloud Storage-Bucket zum Speichern der umgewandelten Objekte:

  1. Rufen Sie in der Trusted Cloud Console die Seite Buckets auf.

    Buckets aufrufen

  2. Klicken Sie auf Erstellen.

  3. Geben Sie auf der Seite Bucket erstellen im Bereich Einstieg einen global eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht.

  4. Klicken Sie auf Erstellen.

Verbindung herstellen

Erstellen Sie eine Cloud-Ressourcenverbindung und rufen Sie das Dienstkonto der Verbindung ab. BigQuery verwendet die Verbindung, um auf Objekte in Cloud Storage zuzugreifen.

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie im Bereich Explorer auf Daten hinzufügen.

    Das Dialogfeld Daten hinzufügen wird geöffnet.

  3. Wählen Sie im Bereich Nach im Abschnitt Datenquellentyp die Option Geschäftsanwendungen aus.

    Alternativ können Sie im Feld Nach Datenquellen suchen den Wert Vertex AI eingeben.

  4. Klicken Sie im Abschnitt Empfohlene Datenquellen auf Vertex AI.

  5. Klicken Sie auf die Lösungskarte Vertex AI-Modelle: BigQuery-Verknüpfung.

  6. Wählen Sie in der Liste Verbindungstyp die Option Vertex AI-Remote-Modelle, Remote-Funktionen und BigLake (Cloud-Ressource) aus.

  7. Geben Sie im Feld Verbindungs-ID bigframes-default-connection ein.

  8. Klicken Sie auf Verbindung erstellen.

  9. Klicken Sie auf Zur Verbindung.

  10. Kopieren Sie im Bereich Verbindungsinformationen die Dienstkonto-ID zur Verwendung in einem späteren Schritt.

Dem Dienstkonto der Verbindung Berechtigungen gewähren

Weisen Sie dem Dienstkonto der Verbindung die Rollen zu, die es für den Zugriff auf Cloud Storage und Vertex AI benötigt. Sie müssen diese Rollen in demselben Projekt gewähren, das Sie im Abschnitt Vorbereitung erstellt oder ausgewählt haben.

So weisen Sie die Rolle zu:

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Zugriff erlauben.

  3. Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  4. Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage Object User aus.

  5. Klicken Sie auf Weitere Rolle hinzufügen.

  6. Wählen Sie im Feld Rolle auswählen die Option Vertex AI und dann Vertex AI-Nutzer aus.

  7. Klicken Sie auf Speichern.

Notebook erstellen

Erstellen Sie ein Notebook, in dem Sie Python-Code ausführen können:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie in der Tableiste des Editorbereichs auf den Drop-down-Pfeil neben SQL-Abfrage und dann auf Notebook.

  3. Klicken Sie im Bereich Mit einer Vorlage beginnen auf Schließen.

  4. Klicken Sie auf Verbinden > Mit einer Laufzeit verbinden.

  5. Wenn Sie bereits eine Laufzeit haben, akzeptieren Sie die Standardeinstellungen und klicken Sie auf Verbinden. Wenn Sie noch keine Laufzeit haben, wählen Sie Neue Laufzeit erstellen aus und klicken Sie dann auf Verbinden.

    Die Einrichtung der Laufzeit kann einige Minuten dauern.

Multimodalen DataFrame erstellen

Erstellen Sie mit der Methode from_glob_path der Klasse Session einen multimodalen DataFrame, der strukturierte und unstrukturierte Daten enthält:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    import bigframes
    
    # Flags to control preview image/video preview size
    bigframes.options.display.blob_display_width = 300
    
    import bigframes.pandas as bpd
    
    # Create blob columns from wildcard path.
    df_image = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*", name="image"
    )
    # Other ways are: from string uri column
    # df = bpd.DataFrame({"uri": ["gs://<my_bucket>/<my_file_0>", "gs://<my_bucket>/<my_file_1>"]})
    # df["blob_col"] = df["uri"].str.to_blob()
    
    # From an existing object table
    # df = bpd.read_gbq_object_table("<my_object_table>", name="blob_col")
    
    # Take only the 5 images to deal with. Preview the content of the Mutimodal DataFrame
    df_image = df_image.head(5)
    df_image
  2. Klicken Sie auf Ausführen.

    Der letzte Aufruf von df_image gibt die Bilder zurück, die dem DataFrame hinzugefügt wurden. Alternativ können Sie die Methode .display aufrufen.

Strukturierte und unstrukturierte Daten im DataFrame kombinieren

Text- und Bilddaten im multimodalen DataFrame kombinieren:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    # Combine unstructured data with structured data
    df_image["author"] = ["alice", "bob", "bob", "alice", "bob"]  # type: ignore
    df_image["content_type"] = df_image["image"].blob.content_type()
    df_image["size"] = df_image["image"].blob.size()
    df_image["updated"] = df_image["image"].blob.updated()
    df_image
  2. Klicken Sie auf Ausführen .

    Der Code gibt die DataFrame-Daten zurück.

  3. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:

    # Filter images and display, you can also display audio and video types. Use width/height parameters to constrain window sizes.
    df_image[df_image["author"] == "alice"]["image"].blob.display()
  4. Klicken Sie auf Ausführen .

    Der Code gibt Bilder aus dem DataFrame zurück, bei denen der Wert der Spalte author alice ist.

Bildtransformationen durchführen

Sie können Bilddaten mit den folgenden Methoden der Klasse Series.BlobAccessor transformieren:

Die umgewandelten Bilder werden in Cloud Storage geschrieben.

Bilder transformieren:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    df_image["blurred"] = df_image["image"].blob.image_blur(
        (20, 20), dst=f"{dst_bucket}/image_blur_transformed/", engine="opencv"
    )
    df_image["resized"] = df_image["image"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_resize_transformed/", engine="opencv"
    )
    df_image["normalized"] = df_image["image"].blob.image_normalize(
        alpha=50.0,
        beta=150.0,
        norm_type="minmax",
        dst=f"{dst_bucket}/image_normalize_transformed/",
        engine="opencv",
    )
    
    # You can also chain functions together
    df_image["blur_resized"] = df_image["blurred"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_blur_resize_transformed/", engine="opencv"
    )
    df_image
  2. Aktualisieren Sie alle Verweise auf {dst_bucket} so, dass sie auf den von Ihnen erstellten Bucket im Format gs://mybucket verweisen.
  3. Klicken Sie auf Ausführen .

    Der Code gibt die Originalbilder sowie alle ihre Transformationen zurück.

Text generieren

Mit der Methode predict der Klasse GeminiTextGenerator Text aus multimodalen Daten generieren:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    from bigframes.ml import llm
    
    gemini = llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
    
    # Deal with first 2 images as example
    df_image = df_image.head(2)
    
    # Ask the same question on the images
    df_image = df_image.head(2)
    answer = gemini.predict(df_image, prompt=["what item is it?", df_image["image"]])
    answer[["ml_generate_text_llm_result", "image"]]
  2. Klicken Sie auf Ausführen .

    Der Code gibt die ersten beiden Bilder in df_image sowie Text zurück, der für beide Bilder als Antwort auf die Frage what item is it? generiert wurde.

  3. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:

    # Ask different questions
    df_image["question"] = [  # type: ignore
        "what item is it?",
        "what color is the picture?",
    ]
    answer_alt = gemini.predict(
        df_image, prompt=[df_image["question"], df_image["image"]]
    )
    answer_alt[["ml_generate_text_llm_result", "image"]]
  4. Klicken Sie auf Ausführen .

    Der Code gibt die ersten beiden Bilder in df_image zurück. Für das erste Bild wird Text generiert, der auf die Frage what item is it? antwortet, und für das zweite Bild wird Text generiert, der auf die Frage what color is the picture? antwortet.

Einbettungen generieren

Mit der Methode predict der Klasse MultimodalEmbeddingGenerator können Sie Einbettungen für multimodale Daten generieren:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    # Generate embeddings on images
    embed_model = llm.MultimodalEmbeddingGenerator()
    embeddings = embed_model.predict(df_image["image"])
    embeddings
  2. Klicken Sie auf Ausführen .

    Der Code gibt die Einbettungen zurück, die durch einen Aufruf an ein Einbettungsmodell generiert wurden.

PDFs in mehrere Teile aufteilen

PDF-Objekte in kleinere Teile aufteilen, indem Sie die Methode pdf_chunk der Klasse Series.BlobAccessor verwenden:

  1. Erstellen Sie im Notebook eine Codezelle und kopieren Sie den folgenden Code hinein:
    # PDF chunking
    df_pdf = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/documents/*", name="pdf"
    )
    df_pdf["chunked"] = df_pdf["pdf"].blob.pdf_chunk(engine="pypdf")
    chunked = df_pdf["chunked"].explode()
    chunked
  2. Klicken Sie auf Ausführen .

    Der Code gibt die in Chunks vorliegenden PDF-Daten zurück.

Bereinigen

  1. In the Trusted Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.