library(reticulate)
Scikit-Learn-LLM Zero Shot Learners
Aufgabe
Fragen Sie ChatGPT via Scikit-Learn-LLM zum Sentiment der ersten 7 Texte (=Tweets) aus dem Germeval-2018-Datensatz (Test). Nutzen Sie die gleiche Zahl an Tweets aus dem Train-Datensatz zum Finetuning Ihres Modells. Nutzen Sie den Endpoint ZeroShotGPTClassifier
.
Hinweise:
- Beachten Sie die Standardhinweise des Datenwerks.
- Nutzen Sie Python, nicht R.
- Das Verwenden der OpenAI-API kostet Geld. 💸 Informieren Sie sich vorab. Um auf die API zugreifen zu können, müssen Sie sich ein Konto angelegt haben und über ein Guthaben verfügen. Werfen Sie hin und wieder einen Blick auf Ihr OpenAI-Guthaben-Konto.
Aktuell sind scikit-llm
und openai
in den aktuellsten Versionen inkompatibel.
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. scikit-llm 0.4.2 requires openai<1.0,>=0.27.9, but you have openai 1.3.5 which is incompatible.
Die einfachste Lösung ist, beide Pakete in verschiedenen venvs zu lagern. \(\square\)
Lösung
Wir legen ggf. eine neue venv an:
#virtualenv_create("scikit-llm")
Und nutzen diese:
use_virtualenv("scikit-llm")
Check:
py_config()
python: /Users/sebastiansaueruser/.virtualenvs/scikit-llm/bin/python
libpython: /Users/sebastiansaueruser/.pyenv/versions/3.11.1/lib/libpython3.11.dylib
pythonhome: /Users/sebastiansaueruser/.virtualenvs/scikit-llm:/Users/sebastiansaueruser/.virtualenvs/scikit-llm
version: 3.11.1 (main, Oct 4 2023, 18:12:06) [Clang 15.0.0 (clang-1500.0.40.1)]
numpy: /Users/sebastiansaueruser/.virtualenvs/scikit-llm/lib/python3.11/site-packages/numpy
numpy_version: 1.26.2
NOTE: Python version was forced by use_python() function
py_list_packages() |> head()
package version requirement
1 absl-py 1.4.0 absl-py==1.4.0
2 aiohttp 3.9.0 aiohttp==3.9.0
3 aiosignal 1.3.1 aiosignal==1.3.1
4 annotated-types 0.6.0 annotated-types==0.6.0
5 anyio 3.7.1 anyio==3.7.1
6 array-record 0.4.0 array-record==0.4.0
Ggf. müssen Sie zunächst die nötigen Module installieren, z.B. so: reticulate::py_install("scikit-llm")
.
#py_install("scikit-llm")
Module importieren:
from skllm import ZeroShotGPTClassifier
from skllm.config import SKLLMConfig # Anmeldung
import pandas as pd
import time
import os
Train-Daten importieren:
= 'https://github.com/sebastiansauer/pradadata/raw/master/data-raw/germeval_train.csv'
csv_file_path_train = pd.read_csv(csv_file_path_train) germeval_train
Test-Daten importieren:
= 'https://github.com/sebastiansauer/pradadata/raw/master/data-raw/germeval_test.csv'
csv_file_path_test = pd.read_csv(csv_file_path_test) germeval_test
Die ersten paar Texte aus dem Train-Datensatz herausziehen:
= 7
n_tweets = germeval_train["text"].head(n_tweets).tolist()
X_train X_train
['@corinnamilborn Liebe Corinna, wir würden dich gerne als Moderatorin für uns gewinnen! Wärst du begeisterbar?', '@Martin28a Sie haben ja auch Recht. Unser Tweet war etwas missverständlich. Dass das BVerfG Sachleistungen nicht ausschließt, kritisieren wir.', '@ahrens_theo fröhlicher gruß aus der schönsten stadt der welt theo ⚓️', '@dushanwegner Amis hätten alles und jeden gewählt...nur Hillary wollten sie nicht und eine Fortsetzung von Obama-Politik erst recht nicht..!', '@spdde kein verläßlicher Verhandlungspartner. Nachkarteln nach den Sondierzngsgesprächen - schickt diese Stümper #SPD in die Versenkung.', '@Dirki_M Ja, aber wo widersprechen die Zahlen denn denen, die im von uns verlinkten Artikel stehen? In unserem Tweet geht es rein um subs. Geschützte. 2017 ist der gesamte Familiennachzug im Vergleich zu 2016 - die Zahlen, die Hr. Brandner bemüht - übrigens leicht rückläufig gewesen.', '@milenahanm 33 bis 45 habe ich noch gar nicht gelebt und es geht mir am Arsch vorbei was in dieser Zeit geschehen ist. Ich lebe im heute und jetzt und nicht in der Vergangenheit.']
Und hier sind die Labels dazu:
= germeval_train["c1"].head(n_tweets).tolist()
y_train y_train
['OTHER', 'OTHER', 'OTHER', 'OTHER', 'OFFENSE', 'OTHER', 'OFFENSE']
Und analog für den Test-Datensatz:
= germeval_test["text"].head(n_tweets).tolist() X_test
Anmelden bei OpenAI:
= os.environ.get("OPENAI_API_KEY")
OPENAI_SECRET_KEY = os.environ.get("OPENAI_ORG_ID")
OPENAI_ORG_ID
SKLLMConfig.set_openai_key(OPENAI_SECRET_KEY) SKLLMConfig.set_openai_org(OPENAI_ORG_ID)
Model definieren:
= ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo") clf
Model fitten:
= X_train, y = y_train) clf.fit(X
ZeroShotGPTClassifier()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
ZeroShotGPTClassifier()
Vorhersagen:
= clf.predict(X = X_test) y_pred
0%| | 0/7 [00:00<?, ?it/s]
14%|█▍ | 1/7 [00:38<03:48, 38.03s/it]
29%|██▊ | 2/7 [00:48<01:48, 21.62s/it]
43%|████▎ | 3/7 [01:16<01:38, 24.65s/it]
57%|█████▋ | 4/7 [01:18<00:47, 15.81s/it]
71%|███████▏ | 5/7 [01:28<00:27, 13.69s/it]
86%|████████▌ | 6/7 [01:31<00:09, 9.87s/it]
100%|██████████| 7/7 [01:33<00:00, 13.32s/it]
Voilà:
for tweet, sentiment in zip(X_test, y_pred):
print(f"Review: {tweet}\nPredicted Sentiment: {sentiment}\n\n")
Review: Meine Mutter hat mir erzählt, dass mein Vater einen Wahlkreiskandidaten nicht gewählt hat, weil der gegen die Homo-Ehe ist ☺
Predicted Sentiment: OFFENSE
Review: @Tom174_ @davidbest95 Meine Reaktion; |LBR| Nicht jeder Moslem ist ein Terrorist. Aber jeder Moslem glaubt an Überlieferungen, die Gewalt und Terror begünstigen.
Predicted Sentiment: OFFENSE
Review: #Merkel rollt dem Emir von #Katar, der islamistischen Terror unterstützt, den roten Teppich aus.Wir brauchen einen sofortigen #Waffenstopp!
Predicted Sentiment: OFFENSE
Review: „Merle ist kein junges unschuldiges Mädchen“ Kch....... 😱 #tatort
Predicted Sentiment: OFFENSE
Review: @umweltundaktiv Asylantenflut bringt eben nur negatives für Deutschland. Drum Asylanenstop und Rückführung der Mehrzahl.
Predicted Sentiment: OFFENSE
Review: @_StultaMundi Die Bibel enthält ebenfalls Gesetze des Zivil- und Strafrechts.
Predicted Sentiment: OTHER
Review: @Thueringen_ @Miquwarchar @Pontifex_de Man munkelt, Franziskus ist großer "Kiss"- und "Black Sabbath"-Fan! #RockOn
Predicted Sentiment: OTHER