GraphRAG: Kombination aus Graphen und Text fĂĽr LLMs
Retrieval Augmented Augmentation hilft dabei, die Ausgaben von LLMs zu optimieren. GraphRAG bringt zusätzlich eine visuelle Komponente ins Spiel.

(Bild: Erstellt mit KI (Midjourney) durch iX-Redaktion)
- Prof. Christian Winkler
Generative Sprachmodelle wie ChatGPT können nahezu jede Frage sofort beantworten und sind leicht zu benutzen. Bei genauerem Hinsehen entdeckt man aber auch ein paar Probleme.
Zunächst sind da die Halluzinationen: Nicht immer stimmt alles, was Sprachmodelle von sich geben. Kennt das Modell bestimmte Informationen nicht, dichtet es welche hinzu. Die Halluzinationen formuliert es dabei so überzeugend, dass sie plausibel klingen. So hat eine erste Version von Llama den Heise-Verlag kurzerhand zum Organisator der CeBIT gemacht. Vermutlich war für das Modell die Kombination von Publikation, IT-Bezug und der Standort Hannover einfach zu naheliegend für die seinerzeit weltgrößte Computermesse. Durch die geschliffene Formulierung ist man dazu geneigt, solche Fehlinformationen zu glauben.
Das Training großer Sprachmodelle ist zudem äußerst aufwendig und kann einige Tausend GPU-Jahre an Rechenzeit in Anspruch nehmen. Daher trainieren die Anbieter die Modelle selten neu. Das heißt, dass die Modelle aktuelle Informationen nicht kennen. Selbst für relativ neue Modelle wie Llama 3.1 liegt der sogenannte Knowledge Cutoff im letzten Jahr.
Bei Aussagen über interne Informationen, beispielsweise die einer Firma, versagen die öffentlichen Sprachmodelle, weil dieser Content nicht in ihrer Trainingsmenge enthalten ist. Man kann generative Modelle nachtrainieren (finetunen), aber auch das ist mit großem Aufwand verbunden (und müsste für jedes Dokument, das hinzukommt, erneut erfolgen).
Gut kombiniert: LLM + RAG
Abhilfe schafft eine Kombination von generativen Modellen mit modernen Verfahren des Information Retrieval. Dokumente können mithilfe von Embedding-Modellen (auch diese gehören zur Klasse der großen Sprachmodelle) indiziert werden. Über Ähnlichkeitsmetriken kann man dann Dokumente (oder Passagen) finden, die eine Frage möglichst gut beantworten. Dieser "Kontext" wird anschließend einem generativen Modell übermittelt, das die Ergebnisse zusammenfasst und auf die Frage genau abgleicht.
Solche Verfahren, die Retrieval Augmented Generation (RAG) heißen, sind äußerst populär. Im vergangenen Jahr wurde damit eine kleine Revolution im Information Retrieval ausgelöst, weil man damit wesentlich bessere Ergebnisse erzielen kann. Nicht zuletzt deshalb gibt es viele Frameworks, die RAG umsetzen.
RAG richtig einzusetzen ist nicht trivial, da die Optimierung in unterschiedlichen Dimensionen möglich ist. Man kann mit unterschiedlichen Embedding-Modellen arbeiten, verschiedene Reranker einsetzen und unterschiedliche generative Modelle verwenden. Die Auswahl der richtigen Kombination erfordert ausreichend Erfahrung.
Außerdem ist es mit reinem RAG leider noch nicht möglich, (formalisiertes) Wissen aus den Dokumenten zu extrahieren. Das wäre aber nützlich, weil die Modelle damit noch viel bessere Antworten geben könnten. Schon lange wird daher an Wissensgraphen (Knowledge Graphs) geforscht. Es wäre also schön, wenn man diese beiden Ideen miteinander verknüpfen könnte.
Hierarchischer Zugang mit GraphRAG
Der Begriff GraphRAG stammt von Microsoft, und der einfĂĽhrende Artikel beschreibt das Verfahren als hierarchischen Zugang zu RAG im Gegensatz zu einer rein semantischen Suche nach Textfragmenten. Die einzelnen Schritte bestehen in der Extraktion des Wissensgraphen aus dem Rohtext und dem Aufbau einer Community-Hierarchie mit inhaltlichen Zusammenfassungen. AnschlieĂźend lassen sich diese Strukturen fĂĽr das Retrieval nutzen und somit bessere Antworten formulieren.
Im Gegensatz zu vielen anderen Projekten von Microsoft bleibt allerdings die Implementierung im Verborgenen. Es gibt zwar Jupyter Notebooks, die aber intensiv Azure und OpenAI nutzen und dafĂĽr alle Informationen in die Cloud ĂĽbertragen. Da vieles in den Klassen versteckt ist, ist es schwer zu verstehen, was hinter den Kulissen passiert.
Zum Glück gibt es alternative Quellen und Implementierungen. Empfehlenswert ist der einführende Artikel von neuml. Hier sieht man sehr viel genauer, was passiert. Ein Embedding-Modell (intfloat/e5-base) ermöglicht es, Ähnlichkeitsanfragen zu stellen. Als Datenbasis dienen existierende Wikipedia-Embeddings, die neuml über Hugging Face zur Verfügung stellt. Die Umsetzung indiziert eine Teilmenge (die Top 100.000 Artikel) und liefert für eine Anfrage (hier "Machine Learning") einen Graphen als Ergebnis:
(Bild:Â Christian Winkler)
Dass die Knoten im oberen Teil in Abbildung 1 deutlich enger miteinander verbunden sind als im Rest des Graphen, ist ein Hinweis darauf, dass dort die Informationsdichte am höchsten sein dürfte.
Da der Graph als NetworkX-Graph in Python modelliert ist, lassen sich auch dessen Methoden aufrufen, um unter anderem den Pfad zwischen zwei Knoten zu ermitteln oder die Knoten mit der höchsten Zentralität zu ermitteln. Ein Blick auf das Ergebnis offenbart, dass es sich um besonders relevante Wikipedia-Seiten handelt:
{'id': 'Machine learning',
'text': 'Machine learning (ML) is a field of study in artificial intelligence concerned with the development ...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 2,
'score': 0.9113607406616211}
{'id': 'Supervised learning',
'text': 'Supervised learning (SL) is a paradigm in machine learning where input objects (for example, a vecto...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 68,
'score': 0.8619827032089233}
{'id': 'Perceptron',
'text': 'In machine learning, the perceptron (or McCulloch–Pitts neuron) is an algorithm for supervised learn...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 70, 'score': 0.8862747550010681}
{'id': 'Autoencoder',
'text': 'An autoencoder is a type of artificial neural network used to learn efficient codings of unlabeled d...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 46,
'score': 0.8562962412834167}
{'id': 'Multilayer perceptron',
'text': 'A multilayer perceptron (MLP) is a misnomer for a modern feedforward artificial neural network, cons...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 89,
'score': 0.8532359004020691}
{'id': 'Unsupervised learning',
'text': 'Unsupervised learning is a paradigm in machine learning where, in contrast to supervised learning an...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 53,
'score': 0.8743622303009033}
{'id': 'Generative pre-trained transformer',
'text': 'Generative pre-trained transformers (GPT) are a type of large language model (LLM) and a prominent f...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 5,
'score': 0.8358747363090515}
{'id': 'Convolutional neural network',
'text': 'Convolutional neural network (CNN) is a regularized type of feed-forward neural network that learns ...',
'score': 0.8500866889953613}
{'id': 'Deep learning', 'text':
'Deep learning is the subset of machine learning methods based on artificial neural networks with rep...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 27,
'score': 0.8632184267044067}
{'id': 'Kernel method',
'text': 'In machine learning, kernel machines are a class of algorithms for pattern analysis, whose best know...',
'topic': 'artificial_learning_intelligence_language',
'topicrank': 99,
'score': 0.8539000749588013}
Der Score stammt aus der Ă„hnlichkeitsanalyse, und man kann deutlich erkennen, dass die Reihenfolge anders als bei der Graph-Analyse ist. In der Kombination aus beiden Verfahren findet man die relevantesten Dokumente sowohl fĂĽr die Anfrage als auch in Bezug auf den Zusammenhang.
Interessant sind zudem die Topics, die in den Ergebnissen auftauchen. Diese wurden beim Indizieren berechnet – der Prozess ist ziemlich aufwendig und erfolgt ebenso wie das Berechnen der Embeddings auf einer GPU um mehrere Größenordnungen schneller als auf einer CPU.
Leistungsfähige Hardware benötigt man auch für die letzte Phase von RAG, der Textgenerierung. Das Beispiel von neuml nutzt dazu ein Mistral-7B-OpenOrca-Modell. Damit es auch auf nicht ganz so leistungsfähigen GPUs läuft, hat sich neuml für ein mit Activation-aware Weight Quantization (AWQ) heruntergerechnetes Modell entschieden. Die Generierung geht damit zügig und kann die Fakten aus dem Graphen extrahieren. Die Anfrage nach "Machine Learning" beantwortet das Tool mit Wikipedia folgendermaßen:
- Machine learning is a field of study in artificial intelligence that focuses on developing statistical algorithms that can learn from data and generalize to unseen data.
- Generative artificial neural networks have surpassed many previous approaches in performance.
- Machine learning algorithms are susceptible to inheriting and amplifying biases present in their training data, which can manifest in skewed representations or unfair treatment of different demographics.
- Supervised learning is a paradigm in machine learning where input objects and a desired output value train a model, allowing the algorithm to correctly determine output values for unseen instances.
- An autoencoder is a type of artificial neural network used for unsupervised learning, learning efficient codings of unlabeled data, and reducing dimensionality.
Auffällig ist, dass sich die Antwort auf generative KI fokussiert. Das Modell reflektiert die Informationen, die sich auf Wikipedia finden lassen. Dort steht offenbar deutlich mehr über generative (Sprach-)Modelle als über andere ML-Themen. Erstaunlich ist zudem, dass das Modell neben überwachtem Lernen noch Autoencoder erklärt, nicht aber unüberwachtes Lernen.
neuml bietet neben den Fragmenten aus dem Jupyter-Notebook auch noch eine Streamlit-Applikation auf GitHub zum Experimentieren an. Das Tool ist leistungsfähig und erlaubt auch, eigene Dokumente zu indizieren.