Predictive LLMs: Übertreffen Open-Source-Modelle OpenAI bei Preisprognosen?
In unserem letzten Blogartikel haben wir aufgezeigt, wie das Large Language Model (LLM) GPT-3.5 von OpenAI die Prognosegenauigkeit bei Fahrzeugpreisen deutlich verbessern kann. Besonders beeindruckend ist es, dass das LLM dem hochperformanten Machine-Learning-Algorithmus XGBoost in unserem Anwendungsfall überlegen ist. Der Vorteil des LLMs entsteht dadurch, dass es die Kombination aus Freitext und tabularen Daten erstaunlich gut verarbeitet. In diesem Artikel wiederholen wir das Experiment und werfen einen Blick darauf, ob Open-Source-LLMs in der Lage sind, mit den leistungsstarken Modellen von OpenAI Schritt zu halten. Open-Source-LLMs werden gerne auf der Plattform Hugging Face zur Verfügung gestellt. Wir nutzen unter anderem das Llama-3.1-8b-Instruct (Meta) und das Mistral-7B-Instruct, das von der französischen Firma Mistral AI entwickelt wurde.
Use Case
In diesem Projekt erhielten wir über unseren Partner LOT Internet Zugang zu einem Datensatz von Fahrzeugen, die auf der Plattform mobile.de gelistet sind. Unser Ziel ist es, den Verkaufspreis der Fahrzeuge vorherzusagen. Dazu nutzen wir verschiedene Fahrzeugattribute wie Kilometerstand, Baujahr und Motorenstärke. Besonders wertvoll sind jedoch die Freitextbeschreibungen, in denen Verkäufer*innen detaillierte Informationen über den Zustand und die Ausstattung der Fahrzeuge geben. Wir verwenden diese Freitextdaten als zusätzliches Feature, um die Vorhersagegenauigkeit zu erhöhen. Im Gegensatz zu herkömmlichen Machine-Learning-Methoden wie XGBoost, die hauptsächlich tabulare Daten verarbeiten, können LLMs sowohl strukturierte als auch unstrukturierte Daten effizient integrieren.
Umsetzung
Die technische Umsetzung mit den open-source Modellen bringt einige Herausforderungen mit sich. Dazu gehören die Auswahl eines Modells mit multi-lingualen Fähigkeiten, die Kompatibilität der Modellgröße mit unseren GPU-Speicherkapazitäten, die technische Einrichtung unserer GPU sowie die Auswahl einer geeigneten Python-Code-Base für das Finetuning. Zunächst grenzt sich die Wahl des Modells dadurch ein, dass es Deutsch und Englisch können soll, weil die Freitextdaten von unserem Use-Case auf Deutsch angegeben sind. Als wir mit der Analyse begonnen haben, war ein solches Modell noch nicht so einfach zu finden. Wir sind auf das leo-hessianai-7b gestoßen - eine Version des Llama2 von Meta, die auf deutschen Texten finetuned wurde. Das Llama-3.1 kann mittlerweile Deutsch out-of-the-box. Unsere Firmen-eigene GPU ist eine Nvidia L40S mit 48GB. Damit können wir mit Hilfe des CUDA-Toolkits verschiedene Modelle finetunen, die um die 7-8 Milliarden Parameter haben. Und zwar fokussieren wir uns auf folgende Open Source Modelle:
- Llama-3.1-8b-Instruct (Meta)
- Mistral-7B-Instruct (Mistral AI)
- leo-hessianai-7b (Hessian AI)
Zur Umsetzung verwenden wir folgende Python-Bibliotheken:
- pytorch: Für das Trainieren von neuronalen Netzen. Wird von allen Bibliotheken, die wir nutzen, als Abhängigkeit aufgerufen
- torchtune: pytorch-native Bibliothek für das Finetuning von LLMs. Nutzen wir für das Llama-3.1
- mistral-finetune code base: Nutzen wir für das Finetuning des Mistral Modells
Huggingface-Bibliotheken:
- transformers: Toolkit für die Nutzung vortrainierter Modelle
- trl: Ermöglicht Supervised Finetuning
- peft: Für Parameter-Effizientes Fine-Tuning
Torchtune punktet mit einer strukturierten Dokumentation und verspricht eine hohe Robustheit: “The library will never be the first to provide a feature, but available features will be thoroughly tested.” Die Stärke der Hugging Face Bibliotheken ist die große Vielfalt von Modellen, die damit verwendet werden können. Manchmal führt dies zu Unübersichtlichkeit. Die Mistral-finetune codebase ist die Bibliothek mit der wir am schnellsten Finetuning und Prognosen durchführen können, indem wir der Anleitung im Repo folgen. Der Aspekt, dass dieser Code nur auf die Mistral-Modelle zugeschnitten ist, spielt sicherlich eine Rolle für die gute Nutzbarkeit. Gleichzeitig schränkt dies die Wiederverwendbarkeit des Codes ein bei einem Wechsel zu anderen Modellen.
Umsetzungsschritte
- Daten ins Chat-Format bringen: Zunächst wurden die tabularen Daten in ein Textformat übersetzt, ähnlich wie in unserem ersten Beispiel mit GPT-3.5.
- Modell und Tokenizer laden: Die Modelle und Tokenizer wurden von Hugging Face geladen. Oder im Fall von Mistral direkt von deren Website. Der Tokenizer ist ein wesentlicher Bestandteil, da er den Text in eine für das Modell verständliche Form umwandelt. Das Modell selbst ist vortrainiert und wird für die spezifische Aufgabe des Preisschätzens weiter angepasst.
- Training/Finetuning: Das Modell wurde mittels Finetuning an unsere spezifische Aufgabe angepasst. Hierbei wurden verschiedene Hyperparameter-Settings getestet, um die beste Performance zu erzielen.
- Hyperparameter des Finetuning optimieren: Zu den wesentlichen Hyperparametern gehörten unter anderem die
batch size
,learning rate
, und die Anzahl der Trainingsschritte. Der verwendete Algorithmus nennt sich stochastischer Gradientenabstieg. Diebatch size
gibt an, wie viele Trainingsbeobachtungen genutzt werden, um ein Update der Modellparameter zu berechnen. Dieses Update wird dann Trainingsschritt genannt. Dielearning rate
bestimmt die Größe des Trainingsschrittes während dessen Richtung auf Basis des Gradienten der Modellparameter und mit Hilfe der Trainingsbeobachtungen berechnet wird. - Generierung der Prognosen: Nach dem Training wurden die Preisprognosen generiert. Dabei haben wir unterschiedliche Decodierungsstrategien untersucht, uns jedoch für eine deterministische Strategie entschieden, da wir nur kurze Antworten in Form von numerischen Werten als Rückgabe benötigen und keine kreativen Textantworten. Deterministisch meint hier, dass die Tokens mit der höchsten Wahrscheinlichkeit ausgegeben werden. Eine Alternative wäre es z.B. aus den Tokens mit den drei höchsten Wahrscheinlichkeiten zu samplen.
Ergebnisse
Die Tabelle zeigt die Ergebnisse unserer Preisprognosen mit den Open-Source-Modellen von Hugging Face im Vergleich zu OpenAI's GPT-3.5 turbo. Zum Vergleich sind auch die Ergebnisse von XGBoost angegeben. Für alle LLM-Ergebnisse haben wir die Freitexte beim Finetuning verwendet. Wir variieren die Anzahl der Trainingsbeobachtungen N, die zum Finetuning genutzt werden und dokumentieren die Metriken Mean Absolute Percentage Error (APE) und Median APE auf dem Testdatensatz.
Model | N | Mean APE | Median APE |
---|---|---|---|
gpt 3.5 turbo | 600 | 11.80 % | 6.60 % |
Meta-Llama-3.1-8B-Instruct | 600 | 14.60 % | 8.60 % |
Mistral-7B-Instruct-v0.3 | 600 | 56.40 % | 21.3 % |
leo-hessianai-7b | 600 | 23.51 % | 11.77 % |
XGBoost (ohne Freitext) | 600 | 20.40 % | 8.80 % |
gpt 3.5 turbo | 6000 | 11.80 % | 6.60 % |
Meta-Llama-3.1-8B-Instruct | 6000 | 13.20 % | 7.40 % |
Mistral-7B-Instruct-v0.3 | 6000 | 12.60 % | 6.30 % |
leo-hessianai-7b-chat-bilingual | 6000 | 15.35 % | 8.60 % |
leo-hessianai-7b | 6000 | 13.08 % | 7.27 % |
XGBoost (ohne Freitext) | 6000 | 14.10 % | 7.50 % |
leo-hessianai-7b | 3000 | 15.34 % | 9.09 % |
leo-hessianai-7b | 1500 | 18.46 % | 11.07 % |
Interpretation und Fazit
Unsere Ergebnisse zeigen, dass die getesteten Open-Source-Modelle bisher nur mit einer deutlich höheren Anzahl an Trainingsbeobachtungen an die Genauigkeit von OpenAI's Modell herankommen. Eine steigende Anzahl von Trainingsbeobachtungen wirkt sich positiv auf die Prognosegüte aus. Dies illustrieren wir unter anderem anhand des leo-hessianai-7b, indem wir die Anzahl schrittweise erhöhen. XGBoost wird übertroffen und der Freitext bringt somit einen echten Mehrwert für die Prognose. Fairerweise ist zu bedenken, dass das openAI Modell sehr viel größer ist (ca. 25 x), als die Modelle, die wir open-source getestet haben. Lässt man aber die höhere Anzahl an Trainingsbeobachtungen außer Acht, so übertrifft das Mistral-7b-Instruct das openAI Modell an Genauigkeit, wenn man dem Median APE folgt (6,3 vs. 6,6 %). Wir folgern, dass die open-source-Modelle durchaus mithalten können und vermuten, dass sich bei größeren open-source-Modellen auch beobachten ließe, dass weniger Trainingsbeobachtungen nötig sind, um eine hohe Genauigkeit zu erreichen. Um größere Modelle selbst zu finetunen ist jedoch eine Recheninfrastruktur nötig, die wir nur über Cloud-Anbieter abrufen können. Dies könnte eine spannende Fortsetzung unserer Experimente sein.