Jina AI hat seine hochmodernen Open-Source bilingualen Embedding-Modelle für Deutsch-Englisch und Chinesisch-Englisch Sprachpaare über Hugging Face veröffentlicht.


In diesem Tutorial werden wir durch eine minimale Installation und einen Anwendungsfall gehen, der Folgendes umfasst:
- Herunterladen von Jina Embedding-Modellen von Hugging Face.
- Verwendung der Modelle zur Erstellung von Encodierungen aus Texten in Deutsch und Englisch.
- Aufbau einer sehr rudimentären Embedding-basierten neuralen Suchmaschine für sprachübergreifende Abfragen.
Wir zeigen Ihnen, wie Sie Jina Embeddings verwenden können, um englische Abfragen zu schreiben, die passende Texte auf Deutsch finden und umgekehrt.
Dieses Tutorial funktioniert genauso für das chinesische Modell. Folgen Sie einfach den Anweisungen im Abschnitt (gegen Ende) mit dem Titel Querying in Chinese, um das Chinesisch-Englisch bilinguale Modell und ein Beispieldokument auf Chinesisch zu erhalten.


tagBilinguale Embedding-Modelle
Ein bilinguales Embedding-Modell ist ein Modell, das Texte in zwei Sprachen – in diesem Tutorial Deutsch und Englisch, für das chinesische Modell Chinesisch und Englisch – in denselben Embedding-Raum abbildet. Und zwar so, dass wenn ein deutscher Text und ein englischer Text dasselbe bedeuten, ihre entsprechenden Embedding-Vektoren nahe beieinander liegen.
Solche Modelle eignen sich sehr gut für sprachübergreifende Informationsabruf-Anwendungen, die wir in diesem Tutorial zeigen werden, können aber auch als Grundlage für RAG-basierte Chatbots, mehrsprachige Textkategorisierung, Zusammenfassung, Stimmungsanalyse und alle anderen Anwendungen dienen, die Embeddings verwenden. Mit solchen Modellen können Sie Texte in beiden Sprachen behandeln, als wären sie in derselben Sprache geschrieben.
Obwohl viele große Sprachmodelle behaupten, viele verschiedene Sprachen zu unterstützen, unterstützen sie nicht alle Sprachen gleichermaßen. Es gibt zunehmend Fragen zu Verzerrungen, die durch die Dominanz des Englischen im Internet und durch die weite Verbreitung maschinell übersetzter Texte verursacht werden. Durch die Konzentration auf zwei Sprachen können wir die Embedding-Qualität für beide besser kontrollieren und Verzerrungen minimieren, während wir viel kleinere Modelle mit ähnlicher oder höherer Leistung produzieren als riesige Modelle, die vorgeben, Dutzende von Sprachen zu beherrschen.
Die bilingualen Modelle von Jina Embeddings v2 unterstützen 8.192 Eingabe-Kontexttoken, wodurch sie nicht nur zwei Sprachen unterstützen können, sondern auch vergleichsweise große Textsegmente im Vergleich zu ähnlichen Modellen. Dies macht sie ideal für komplexere Anwendungsfälle, bei denen viel mehr Textinformationen in Embeddings verarbeitet werden müssen.
tagMachen Sie mit auf Google Colab
Dieses Tutorial hat ein begleitendes Notebook, das Sie auf Google Colab oder lokal auf Ihrem eigenen System ausführen können.

tagInstallation der Voraussetzungen
Stellen Sie sicher, dass die aktuelle Umgebung die relevanten Bibliotheken installiert hat. Sie benötigen die neueste Version von transformers
, führen Sie also selbst wenn es bereits installiert ist:
pip install -U transformers
Dieses Tutorial wird die FAISS-Bibliothek von Meta für Vektorsuche und -vergleich verwenden. Zur Installation führen Sie aus:
pip install faiss-cpu
Wir werden auch Beautiful Soup verwenden, um die Eingabedaten in diesem Tutorial zu verarbeiten, stellen Sie also sicher, dass es installiert ist:
pip install bs4
tagZugang zu Hugging Face
Sie benötigen Zugang zu Hugging Face, insbesondere ein Konto und einen Zugriffstoken zum Herunterladen von Modellen.
Wenn Sie noch kein Konto bei Hugging Face haben:
Gehen Sie zu https://huggingface.co/ und Sie sollten oben rechts auf der Seite einen "Sign Up"-Button sehen. Klicken Sie darauf und folgen Sie den Anweisungen, um ein neues Konto zu erstellen.

Nachdem Sie sich in Ihr Konto eingeloggt haben:
Folgen Sie den Anweisungen auf der Hugging Face Website, um einen Zugriffstoken zu erhalten.

Sie müssen dieses Token in eine Umgebungsvariable namens HF_TOKEN
kopieren. Wenn Sie in einem Notebook (zum Beispiel in Google Colab) arbeiten oder es intern in einem Python-Programm setzen, verwenden Sie folgenden Python-Code:
import os
os.environ['HF_TOKEN'] = "<your token here>"
In Ihrer Shell verwenden Sie die jeweilige Syntax zum Setzen einer Umgebungsvariable. In bash
:
export HF_TOKEN="<your token here>"
tagJina Embeddings v2 für Deutsch und Englisch herunterladen
Sobald Ihr Token gesetzt ist, können Sie das zweisprachige Deutsch-Englisch Jina Embeddings Modell mit der transformers
Bibliothek herunterladen:
from transformers import AutoModel
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-de', trust_remote_code=True)
Dies kann beim ersten Mal mehrere Minuten dauern, aber das Modell wird danach lokal zwischengespeichert, also keine Sorge, wenn Sie dieses Tutorial später neu starten.
tagEnglischsprachige Daten herunterladen
Für dieses Tutorial werden wir die englischsprachige Version des Buches Pro Git: Everything You Need to Know About Git verwenden. Dieses Buch ist auch auf Chinesisch und Deutsch verfügbar, was wir später in diesem Tutorial nutzen werden.
Um die EPUB-Version herunterzuladen, führen Sie folgenden Befehl aus:
wget -O progit-en.epub https://open.umn.edu/opentextbooks/formats/3437
Dies kopiert das Buch in eine Datei namens progit-en.epub
im lokalen Verzeichnis.

Alternativ können Sie auch einfach den Link https://open.umn.edu/opentextbooks/formats/3437 besuchen, um es auf ein lokales Laufwerk herunterzuladen. Es ist unter der Creative Commons Attribution Non Commercial Share Alike 3.0 Lizenz verfügbar.
tagVerarbeitung der Daten
Dieser spezielle Text hat eine interne Struktur aus hierarchischen Abschnitten, die wir leicht finden können, indem wir nach dem <section>
Tag in den zugrundeliegenden XHTML-Daten suchen. Der folgende Code liest die EPUB-Datei und teilt sie anhand der internen Struktur einer EPUB-Datei und des <section>
Tags auf, konvertiert dann jeden Abschnitt in Klartext ohne XHTML-Tags. Er erstellt ein Python-Dictionary, dessen Schlüssel eine Reihe von Zeichenketten sind, die den Standort jedes Abschnitts im Buch angeben, und dessen Werte der Klartext-Inhalt dieses Abschnitts sind.
from zipfile import ZipFile
from bs4 import BeautifulSoup
import copy
def decompose_epub(file_name):
def to_top_text(section):
selected = copy.copy(section)
while next_section := selected.find("section"):
next_section.decompose()
return selected.get_text().strip()
ret = {}
with ZipFile(file_name, 'r') as zip:
for name in zip.namelist():
if name.endswith(".xhtml"):
data = zip.read(name)
doc = BeautifulSoup(data.decode('utf-8'), 'html.parser')
ret[name + ":top"] = to_top_text(doc)
for num, sect in enumerate(doc.find_all("section")):
ret[name + f"::{num}"] = to_top_text(sect)
return ret
Führen Sie dann die Funktion decompose_epub
für die zuvor heruntergeladene EPUB-Datei aus:
book_data = decompose_epub("progit-en.epub")
Die Variable book_data
wird nun 583 Abschnitte enthalten. Zum Beispiel:
print(book_data['EPUB/ch01-getting-started.xhtml::12'])
Ergebnis:
The Command Line
There are a lot of different ways to use Git.
There are the original command-line tools, and there are many graphical user interfaces of varying capabilities.
For this book, we will be using Git on the command line.
For one, the command line is the only place you can run all Git commands — most of the GUIs implement only a partial subset of Git functionality for simplicity.
If you know how to run the command-line version, you can probably also figure out how to run the GUI version, while the opposite is not necessarily true.
Also, while your choice of graphical client is a matter of personal taste, all users will have the command-line tools installed and available.
So we will expect you to know how to open Terminal in macOS or Command Prompt or PowerShell in Windows.
If you don't know what we're talking about here, you may need to stop and research that quickly so that you can follow the rest of the examples and descriptions in this book.
tagGenerierung und Indexierung von Embeddings mit Jina Embeddings v2 und FAISS
Für jeden der 583 Abschnitte werden wir ein Embedding generieren und in einem FAISS-Index speichern. Jina Embeddings v2 Modelle akzeptieren Eingaben von bis zu 8192 Tokens, was groß genug ist, dass wir für ein Buch wie dieses keine weitere Textsegmentierung durchführen oder überprüfen müssen, ob ein Abschnitt zu viele Tokens hat. Der längste Abschnitt im Buch hat ungefähr 12.000 Zeichen, was für normales Englisch weit unter der 8k Token-Grenze liegen sollte.
Um ein einzelnes Embedding zu generieren, verwenden Sie die encode
Methode des heruntergeladenen Modells. Zum Beispiel:
model.encode([book_data['EPUB/ch01-getting-started.xhtml::12']])
Dies gibt ein Array mit einem einzelnen 768-dimensionalen Vektor zurück:
array([[ 6.11135997e-02, 1.67829826e-01, -1.94809273e-01,
4.45595086e-02, 3.28837298e-02, -1.33441269e-01,
1.35364473e-01, -1.23119736e-02, 7.51526654e-02,
-4.25386652e-02, -6.91794455e-02, 1.03527725e-01,
-2.90831417e-01, -6.21018047e-03, -2.16205455e-02,
-2.20803712e-02, 1.50471330e-01, -3.31433356e-01,
-1.48741454e-01, -2.10959971e-01, 8.80039856e-02,
....
Das ist ein Embedding.
Jina Embeddings Modelle sind für die Batch-Verarbeitung eingerichtet. Die optimale Batch-Größe hängt von der Hardware ab, die Sie beim Ausführen verwenden. Eine große Batch-Größe riskiert, dass der Speicher ausgeht. Eine kleine Batch-Größe wird länger zur Verarbeitung brauchen.
batch_size=5
funktionierte auf Google Colab in der kostenlosen Version ohne GPU und brauchte etwa eine Stunde, um den gesamten Satz von Embeddings zu generieren.In der Produktion empfehlen wir die Verwendung von leistungsfähigerer Hardware oder die Nutzung des Embedding API-Service von Jina AI. Folgen Sie dem Link unten, um herauszufinden, wie es funktioniert und wie Sie mit kostenlosem Zugang beginnen können.

Der folgende Code generiert die Embeddings und speichert sie in einem FAISS-Index. Setzen Sie die Variable batch_size
entsprechend Ihren Ressourcen.
import faiss
batch_size = 5
vector_data = []
faiss_index = faiss.IndexFlatIP(768)
data = [(key, txt) for key, txt in book_data.items()]
batches = [data[i:i + batch_size] for i in range(0, len(data), batch_size)]
for ind, batch in enumerate(batches):
print(f"Processing batch {ind + 1} of {len(batches)}")
batch_embeddings = model.encode([x[1] for x in batch], normalize_embeddings=True)
vector_data.extend(batch)
faiss_index.add(batch_embeddings)
Bei der Arbeit in einer Produktionsumgebung ist ein Python-Dictionary keine angemessene oder leistungsfähige Möglichkeit, Dokumente und Embeddings zu handhaben. Sie sollten eine speziell entwickelte Vektordatenbank verwenden, die ihre eigenen Anweisungen für die Dateneinfügung hat.
tagAuf Deutsch abfragen für englische Ergebnisse
Wenn wir etwas aus diesem Textset abfragen, passiert Folgendes:
- Das Jina Embeddings Deutsch-Englisch Modell erstellt ein Embedding für die Abfrage.
- Wir verwenden den FAISS-Index (
faiss_index
), um das gespeicherte Embedding mit dem höchsten Kosinus zur Abfrage-Embedding zu erhalten und seine Position im Index zurückzugeben. - Wir schauen den entsprechenden Text im Vector-Data-Array (
vector_data
) nach und geben den Kosinus, den Standort des Textes und den Text selbst aus.
Das macht die folgende query
Funktion.
def query(query_str):
query = model.encode([query_str], normalize_embeddings=True)
cosine, index = faiss_index.search(query, 1)
print(f"Cosine: {cosine[0][0]}")
loc, txt = vector_data[index[0][0]]
print(f"Location: {loc}\\nText:\\n\\n{txt}")
Lassen Sie uns das ausprobieren.
# Translation: "How do I roll back to a previous version?"
query("Wie kann ich auf eine frühere Version zurücksetzen?")
Ergebnis:
Cosine: 0.5202275514602661
Location: EPUB/ch02-git-basics-chapter.xhtml::20
Text:
Undoing things with git restore
Git version 2.23.0 introduced a new command: git restore.
It's basically an alternative to git reset which we just covered.
From Git version 2.23.0 onwards, Git will use git restore instead of git reset for many undo operations.
Let's retrace our steps, and undo things with git restore instead of git reset.
Dies ist eine sehr gute Antwort auf die Frage. Versuchen wir eine weitere:
# Translation: "What does 'version control' mean?"
query("Was bedeutet 'Versionsverwaltung'?")
Ergebnis:
Cosine: 0.5001817941665649
Location: EPUB/ch01-getting-started.xhtml::1
Text:
About Version Control
What is "version control", and why should you care?
Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later.
For the examples in this book, you will use software source code as the files being version controlled, though in reality you can do this with nearly any type of file on a computer.
If you are a graphic or web designer and want to keep every version of an image or layout (which you would most certainly want to), a Version Control System (VCS) is a very wise thing to use.
It allows you to revert selected files back to a previous state, revert the entire project back to a previous state, compare changes over time, see who last modified something that might be causing a problem, who introduced an issue and when, and more.
Using a VCS also generally means that if you screw things up or lose files, you can easily recover.
In addition, you get all this for very little overhead.
Probieren Sie es mit Ihren eigenen deutschen Fragen aus, um zu sehen, wie gut es funktioniert. Als allgemeine Praxis sollten Sie bei der Textinformationssuche drei bis fünf Antworten anfordern statt nur einer. Die beste Antwort ist oft nicht die erste.
tagDie Rollen umkehren: Deutsche Dokumente mit Englisch abfragen
Das Buch Pro Git: Everything You Need to Know About Git ist auch auf Deutsch verfügbar. Wir können dasselbe Modell verwenden, um diese Demo mit umgekehrten Sprachen durchzuführen.
E-Book herunterladen:
wget -O progit-de.epub https://open.umn.edu/opentextbooks/formats/3454
Dies kopiert das Buch in eine Datei namens progit-de.epub
. Dann verarbeiten wir es auf die gleiche Weise wie beim englischen Buch:
book_data = decompose_epub("progit-de.epub")
Und dann generieren wir die Embeddings auf die gleiche Weise wie zuvor:
batch_size = 5
vector_data = []
faiss_index = faiss.IndexFlatIP(768)
data = [(key, txt) for key, txt in book_data.items()]
batches = [data[i:i + batch_size] for i in range(0, len(data), batch_size)]
for ind, batch in enumerate(batches):
print(f"Processing batch {ind + 1} of {len(batches)}")
batch_embeddings = model.encode([x[1] for x in batch], normalize_embeddings=True)
vector_data.extend(batch)
faiss_index.add(batch_embeddings)
Wir können jetzt die gleiche query
-Funktion verwenden, um auf Englisch nach Antworten auf Deutsch zu suchen:
query("What is version control?")
Ergebnis:
Cosine: 0.6719034910202026
Location: EPUB/ch01-getting-started.xhtml::1
Text:
Was ist Versionsverwaltung?
Was ist „Versionsverwaltung", und warum sollten Sie sich dafür interessieren?
Versionsverwaltung ist ein System, welches die Änderungen an einer oder einer Reihe von Dateien über die Zeit hinweg protokolliert, sodass man später auf eine bestimmte Version zurückgreifen kann.
Die Dateien, die in den Beispielen in diesem Buch unter Versionsverwaltung gestellt werden, enthalten Quelltext von Software, tatsächlich kann in der Praxis nahezu jede Art von Datei per Versionsverwaltung nachverfolgt werden.
Als Grafik- oder Webdesigner möchte man zum Beispiel in der Lage sein, jede Version eines Bildes oder Layouts nachverfolgen zu können. Als solcher wäre es deshalb ratsam, ein Versionsverwaltungssystem (engl. Version Control System, VCS) einzusetzen.
Ein solches System erlaubt es, einzelne Dateien oder auch ein ganzes Projekt in einen früheren Zustand zurückzuversetzen, nachzuvollziehen, wer zuletzt welche Änderungen vorgenommen hat, die möglicherweise Probleme verursachen, herauszufinden wer eine Änderung ursprünglich vorgenommen hat und viele weitere Dinge.
Ein Versionsverwaltungssystem bietet allgemein die Möglichkeit, jederzeit zu einem vorherigen, funktionierenden Zustand zurückzukehren, auch wenn man einmal Mist gebaut oder aus irgendeinem Grund Dateien verloren hat.
All diese Vorteile erhält man für einen nur sehr geringen, zusätzlichen Aufwand.
Dieser Abschnittstitel übersetzt sich als "What is version control?", also ist dies eine gute Antwort.
tagAbfragen auf Chinesisch
Diese Beispiele funktionieren auf genau die gleiche Weise mit Jina Embeddings v2 für Chinesisch und Englisch. Um stattdessen das chinesische Modell zu verwenden, führen Sie einfach Folgendes aus:
from transformers import AutoModel
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True)
Und um die chinesische Ausgabe von Pro Git: Everything You Need to Know About Git zu erhalten:
wget -O progit-zh.epub https://open.umn.edu/opentextbooks/formats/3455
Dann verarbeiten Sie das chinesische Buch:
book_data = decompose_epub("progit-zh.epub")
Der gesamte andere Code in diesem Tutorial wird auf die gleiche Weise funktionieren.
tagDie Zukunft: Mehr Sprachen, einschließlich Programmierung
Wir werden in der unmittelbaren Zukunft weitere zweisprachige Modelle einführen, wobei Spanisch und Japanisch bereits in Arbeit sind, sowie ein Modell, das Englisch und mehrere wichtige Programmiersprachen unterstützt. Diese Modelle eignen sich ideal für internationale Unternehmen, die mehrsprachige Informationen verwalten, und können als Grundstein für KI-gestützte Informationsgewinnung und RAG-basierte generative Sprachmodelle dienen, die sich in verschiedene moderne KI-Anwendungsfälle einfügen.
Jina AIs Modelle sind kompakt und gehören zu den besten ihrer Klasse, was zeigt, dass man nicht das größte Modell braucht, um die beste Leistung zu erzielen. Durch den Fokus auf zweisprachige Leistung produzieren wir Modelle, die sowohl besser in diesen Sprachen sind, sich leichter anpassen lassen und kostengünstiger sind als große Modelle, die mit unkurierten Daten trainiert wurden.
Jina Embeddings sind verfügbar auf Hugging Face, im AWS Marketplace zur Verwendung in Sagemaker und über die Jina Embeddings Web API. Sie sind vollständig in viele KI-Prozess-Frameworks und Vektordatenbanken integriert.
Besuchen Sie die Jina Embeddings Website für weitere Informationen oder kontaktieren Sie uns, um zu besprechen, wie Jina AIs Angebote in Ihre Geschäftsprozesse passen können.
