Einleitung
Gemini ist ein leistungsstarkes Werkzeug für die Text- und Bildverarbeitung durch multimodale Eingaben. Bei der Textverarbeitung generiert es kreative Antworten auf der Grundlage von Eingaben, von Geschichten bis hin zu Gedichten. In der Bildverarbeitung kann es visuelle Darstellungen aus Textbeschreibungen erstellen, was die Erstellung von benutzerdefinierter Kunst und konzeptioneller Visualisierung ermöglicht.
Durch die Kombination dieser Fähigkeiten ist Gemini in der Lage, komplexe Aufgaben wie die Erstellung von Geschichten, die Text und Bilder verbinden, oder die Bereitstellung von beschreibenden Bildunterschriften zu bewältigen. In meinem vorherigen Artikel können Sie mehr über Gemini erfahren.
Lasst uns die Reise beginnen!
Multimodale Eingaben
Multimodale Eingaben beinhalten die Verwendung von vielfältigen Eingaben wie Text, Bildern, Audio und Video, um ein multimodales Modell zu aktivieren, das in der Lage ist, mehrere Modalitäten gleichzeitig zu verarbeiten. Diese Herangehensweise ermöglicht komplexe Schlussfolgerungen und Kommunikation über Modalitäten hinweg, was neue Anwendungen ermöglicht. Eine effektive Gestaltung von Eingaben ist eine Herausforderung, mit verschiedenen Methoden wie Schlüsselwörtern, Vorlagen, Beispielen oder Anweisungen in natürlicher Sprache.
Neueste Entwicklungen, wie die Methode von Lee et al. zur Behandlung fehlender Modalitäten und Chens Demonstration der Verwendung von Gemini für räumliche Schlussfolgerungen und Logikrätsel, zeigen die laufenden Innovationen. Khattak et al. führten MaPLe ein, eine Technik zum Erlernen von synergetischem Verhalten über Vision und Sprache in mehreren Transformatorblöcken.
Modellparameter
Während Sie mit Ihrem Eingabeprototyp experimentieren, haben Sie die Möglichkeit, die Modelllaufzeiteinstellungen anzupassen, die auf der rechten Seite der Anwendung angezeigt werden. Machen Sie sich mit diesen wichtigen Einstellungen vertraut:
- Modell: Wählen Sie das Modell, das am besten zu Ihren Anforderungen an Eingaben und Antworten passt.
- Temperatur: Regulieren Sie die Zufälligkeit in den Modellantworten. Erhöhen Sie diesen Wert, um dem Modell zu ermöglichen, unerwartetere und kreativere Ausgaben zu generieren.
- Maximale Ausgaben: Erhöhen Sie die Anzahl der vom Modell für jede Anfrage generierten Antworten. Diese Option ist nützlich, um Eingaben schnell zu testen, indem Sie mehrere Antworten für eine einzelne Eingabe erhalten.
- Sicherheitseinstellungen: Passen Sie die Sicherheitseinstellungen an, um die Antworten des Modells zu steuern. Die Gemini-API bietet anpassbare Sicherheitseinstellungen in vier Dimensionen, die es Ihnen ermöglichen, schnell zu bewerten, ob Ihre Anwendung eine restriktivere oder weniger restriktive Konfiguration erfordert.
API-Schlüssel erhalten
Bevor Sie mit der Codeimplementierung beginnen, benötigen Sie einen API-Schlüssel. Besuchen Sie die Google AI-Suite, erstellen Sie einen API-Schlüssel, kopieren Sie ihn und speichern Sie ihn für die zukünftige Verwendung.
Gehen Sie zu Google Colab, erstellen Sie ein Notebook. Gehen Sie zu Secrets → Add new secret.
Benennen Sie den Schlüssel und fügen Sie den kopierten Schlüssel in das Feld „Wert“ ein. Aktivieren Sie die Notebook-Zugriffsberechtigung.
Sie müssen denselben Namen verwenden, wenn Sie den API-Schlüssel aufrufen.
Lasst uns mit dem Code beginnen!
Codeimplementierung mit Gemini
Zunächst installieren wir die erforderliche Bibliothek.
!pip install -q -U google-generativeai
Importieren Sie die wichtigen Pakete, die Sie verwenden werden.
import pathlib
import textwrap
import google.generativeai as genai
from google.colab import userdata
from IPython.display import display
from IPython.display import Markdown
import PIL.Image
import google.ai.generativelanguage as glm
Schreiben Sie eine Hilfsfunktion, um Text in Markdown zu konvertieren.
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
Übergeben Sie den API-Schlüssel mit demselben Namen, den Sie in Ihren Google Colab Secrets gespeichert haben.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
Nachdem Sie den API-Schlüssel aufgerufen haben, lassen Sie uns die Modelle auflisten.
for m in genai.list_models():
if 'generateContent' in m.supported_generation_methods:
print(m.name)
Sie werden in der Lage sein, die folgende Liste zu sehen:
models/gemini-pro
models/gemini-pro-vision
Text aus Texteingaben generieren
Lassen Sie uns mit dem ersten Modell für Texteingaben beginnen.
model = genai.GenerativeModel('gemini-pro')
Übergeben Sie die Frage und generieren Sie den Inhalt. Lassen Sie uns sehen, wie viel Zeit es in Anspruch nimmt.
%%time
response = model.generate_content("What is Markov Chain Rule")
Sie werden das folgende Zeit-Ergebnis sehen:
CPU times: user 199 ms, sys: 18.9 ms, total: 218 ms
Wall time: 10.2 s
Sie können die Antwort auf Ihre Frage erhalten, indem Sie die Frage einfach in die Hilfsfunktion to_markdown()
übergeben.
to_markdown(response.text)
Sie werden die folgende Antwort sehen:
The Markov Chain Rule, also known as the Chapman-Kolmogorov equations, is a fundamental theorem in probability theory that describes the behavior of stochastic processes over time...
Lassen Sie uns die Sicherheitsbewertungen sehen, indem Sie prompt_feedback
aufrufen.
response.prompt_feedback
Sie werden das folgende Ergebnis sehen:
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
}
Gemini ist in der Lage, verschiedene potenzielle Antworten für eine gegebene Eingabe zu generieren. Diese Antworten, die als Kandidaten bezeichnet werden, bieten eine Reihe von Optionen zur Auswahl.
response.candidates
Sie werden das folgende Ergebnis sehen:
[content {
parts {
text: "The Markov Chain Rule, also known as the Chapman-Kolmogorov equations, is a fundamental theorem in probability theory that describes the behavior of stochastic processes over time...
}
role: "model"
}
finish_reason: STOP
index: 0
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
}
]
Sie haben die Möglichkeit, die Antwort in Echtzeit zu streamen, während sie generiert wird. Das Modell wird Segmente der Antwort bereitstellen, sobald sie erstellt wurden. Lassen Sie uns eine weitere Frage übergeben.
%%time
response = model.generate_content("What is sparse vector?", stream=True)
Sie werden das folgende Zeit-Ergebnis sehen:
CPU times: user 189 ms, sys: 18.8 ms, total: 208 ms
Wall time: 10.7 s
Lassen Sie uns die Antwort-Segmente sehen.
for chunk in response:
print(chunk.text)
print("_"*80)
Sie werden das folgende Ergebnis sehen:
A sparse vector is a data structure that represents a vector with most of its elements
________________________________________________________________________________
set to zero. Sparse vectors are often used to represent high-dimensional vectors, such as those used in machine learning and data mining.
The key advantage of
________________________________________________________________________________
sparse vectors is that they can be stored and processed more efficiently than dense vectors, which store all of their elements, regardless of whether they are zero or not. Sparse vectors can be represented using a variety of data structures, but the most common is the compressed sparse row (CSR) format. In CSR format, the vector
________________________________________________________________________________
is stored as three arrays:
* **Values:** This array stores the nonzero elements of the vector.
* **Column indices:** This array stores the column indices of the nonzero elements.
* **Row pointers:** This array stores the starting index of each row in the values and column indices arrays.
For example, consider the following sparse vector:
x = [0, 3, 0, 0, 7, 0, 0, 0, 11]
This vector has three nonzero elements: 3, 7, and 11. In CSR format
________________________________________________________________________________
, this vector can be represented as follows:
values = [3, 7, 11] column_indices = [1, 4, 8] row_pointers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
The values array stores the three nonzero elements of the vector. The column indices array stores the column indices of the nonzero elements. The row pointers array stores the starting index of each row in the values and column indices arrays.
Sparse vectors can be used to represent a wide variety of data, including:
* **Documents:** A document can be represented as a sparse vector of word counts.
* **Images:** An image can be represented as a sparse vector of pixel values.
* **Graphs:** A graph can be represented as a sparse vector of edge weights.
Sparse vectors are a powerful tool for representing and processing high-dimensional data. They are used in a wide variety of applications, including:
* **Machine learning:** Sparse vectors are used in many machine learning algorithms, such as linear regression, logistic regression, and support vector machines.
* **Data mining:** Sparse vectors are
________________________________________________________________________________
used in data mining tasks, such as clustering, classification, and anomaly detection.
* **Signal processing:** Sparse vectors are used in signal processing applications, such as image compression and audio processing.
________________________________________________________________________________
Lassen Sie uns die Sicherheitsbewertungen sehen.
response = model.generate_content("What is sparse vector?", stream=True)
response.prompt_feedback
Sie werden das folgende Ergebnis sehen:
safety_ratings {
category: HARM_CATEGORY_SEXUALLY_EXPLICIT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HATE_SPEECH
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_HARASSMENT
probability: NEGLIGIBLE
}
safety_ratings {
category: HARM_CATEGORY_DANGEROUS_CONTENT
probability: NEGLIGIBLE
}
Text aus Bild- und Texteingaben generieren
Lassen Sie uns sehen, was das Modell mit Bild-Eingaben tun kann.
Laden Sie das Bild herunter.
!curl -o image.jpg https://i.pinimg.com/736x/d0/0b/f8/d00bf86933543a764c971cca785fdc32.jpg
Öffnen Sie das Bild mit Pillow und speichern Sie es in img
.
img = PIL.Image.open('image.jpg')
img
Für Bild-Eingaben verwenden wir das Modell gemini-pro-vision
.
model = genai.GenerativeModel('gemini-pro-vision')
Lassen Sie uns den Inhalt aus den Bild-Eingaben generieren.
response = model.generate_content(img)
to_markdown(response.text)
Sie werden die folgende Beschreibung sehen:
This image is of two kittens in a red wagon. The kittens are both orange and
white, and they are looking at the camera. The wagon is sitting on a sandy
surface, and the background is a blurry orange.
Wir können einige Text-Eingaben zusammen mit dem Bild geben. Lassen Sie uns die Antwort sehen.
response = model.generate_content(["Write a short, engaging blog post based on this picture.It should include the description about how cats are friendly with human beings for being pet.", img], stream=True)
response.resolve()
to_markdown(response.text)
Sie werden den folgenden Blog-Beitrag sehen:
Cats are one of the most popular pets in the world, and for good reason. They are
independent, affectionate, and intelligent creatures that make great companions.
One of the things that makes cats so special is their ability to form strong bonds
with humans...
Chat-Konversationen
Gemini ermöglicht es Ihnen, offene, mehrteilige Konversationen zu führen. Die Klasse ChatSession
vereinfacht diesen Prozess, indem sie den Zustand der Konversation verwaltet. Im Gegensatz zu generate_content
ist es nicht erforderlich, die Konversationshistorie als Liste zu speichern.
Lassen Sie uns die Konversation beginnen:
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
chat
Übergeben Sie die erste Frage.
response = chat.send_message("In one sentence, explain the big bang theory for a 8 year old child.")
to_markdown(response.text)
Sie werden die folgende Antwort sehen:
In the beginning, there was nothing, and then, with a big bang, all the stars
and planets in the universe were made.
Übergeben Sie die zweite Frage.
response = chat.send_message("In one sentence, explain the solar system for a 8 year old child.")
to_markdown(response.text)
Sie werden die folgende Antwort sehen:
Our solar system is like a big family of planets, moons, and other objects
that all orbit around the Sun, which is like the mom or dad of the family.
Mit chat.history
können wir die Geschichte beider Fragen und Antworten sehen.
chat.history
Sie werden das folgende Ergebnis sehen:
[parts {
text: "In one sentence, explain the big bang theory for a 8 year old child."
}
role: "user",
parts {
text: "In the beginning, there was nothing, and then, with a big bang, all the stars and planets in the universe were made."
}
role: "model",
parts {
text: "In one sentence, explain the solar system for a 8 year old child."
}
role: "user",
parts {
text: "Our solar system is like a big family of planets, moons, and other objects that all orbit around the Sun, which is like the mom or dad of the family."
}
role: "model"]
Lassen Sie uns eine weitere Frage übergeben und die Antwort in Segmenten anzeigen.
response = chat.send_message("Okay, how about a more detailed explanation to a high schooler?", stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
Sie werden das folgende Ergebnis sehen:
The solar system, our cosmic neighborhood, consists of the Sun, eight planets,
________________________________________________________________________________
dwarf planets, moons, asteroids, comets, and meteoroids. The Sun, a massive sphere of hot plasma, sits at the center, exerting its gravitational pull
________________________________________________________________________________
on the entire system. The planets, including Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, and Neptune, orbit the Sun in elliptical paths. Each planet possesses unique characteristics, such as size, composition, and the presence of atmospheres and moons. Dwarf planets, like Pluto, are celestial bodies that are
________________________________________________________________________________
too large to be classified as asteroids but do not meet the criteria to be considered full-fledged planets. Moons, such as our Moon, are natural satellites that orbit planets. Asteroids, rocky fragments, and comets, icy bodies with tails, reside primarily in the asteroid belt between Mars and Jupiter and the Kuiper Belt beyond Neptune, respectively. Meteoroids are small pieces of debris that can enter Earth's atmosphere, creating a fiery streak of light known as a meteor or, if large enough, impact the ground as a meteorite.
________________________________________________________________________________
Lassen Sie uns die Chat-Nachrichten in einem ordentlichen Textformat anzeigen.
for message in chat.history:
display(to_markdown(f'**{message.role}**: {message.parts[0].text}'))
Sie werden das folgende Ergebnis sehen:
**user**: In one sentence, explain the big bang theory for a 8 year old child.
**model**: In the beginning, there was nothing, and then, with a big bang, all the stars and planets in the universe were made.
**user**: In one sentence, explain the solar system for a 8 year old child.
**model**: Our solar system is like a big family of planets, moons, and other objects that all orbit around the Sun, which is like the mom or dad of the family.
**user**: Okay, how about a more detailed explanation to a high schooler?
**model**: The solar system, our cosmic neighborhood, consists of the Sun, eight planets, dwarf planets, moons, asteroids, comets, and meteoroids. The Sun, a massive sphere of hot plasma, sits at the center, exerting its gravitational pull on the entire system. The planets, including Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, and Neptune, orbit the Sun in elliptical paths. Each planet possesses unique characteristics, such as size, composition, and the presence of atmospheres and moons. Dwarf planets, like Pluto, are celestial bodies that are too large to be classified as asteroids but do not meet the criteria to be considered full-fledged planets. Moons, such as our Moon, are natural satellites that orbit planets. Asteroids, rocky fragments, and comets, icy bodies with tails, reside primarily in the asteroid belt between Mars and Jupiter and the Kuiper Belt beyond Neptune, respectively. Meteoroids are small pieces of debris that can enter Earth's atmosphere, creating a fiery streak of light known as a meteor or, if large enough, impact the ground as a meteorite.
Isn’t that interesting! Sie können auch versuchen, dasselbe zu tun und die Anwendungsfälle von Gemini erkunden.
Viel Spaß!