• 1
  • 2
2023-07-14, 15:45
  #1
Medlem
Hej!

Jag läser AI för naturligt språk. Alla kan komma åt den kursen här: https://ai-for-naturligt-sprak.ida.liu.se/

Jag har kört fast på kapitel 3, 10 slutuppgift.

Där det är Logistik regression:

Naive Bayes är en av de simplare modellerna att implementera, och den grundar sig i en förenklad bild av hur text och en klass hänger samman. Det finns många fler modeller som vi kan träna, och en av dem är logistisk regression.

I följande kodcell ska vi använda oss av modellen LogisticRegression för klassificering av flera klasser. Sätt modellens parametrar så att följande stämmer:

• random\_state har ett bestämt värde så att modellens resultat är reproducerbara.
• Modellen ska tränas under som mest 500 iterationer, så att modellen har tid att närma sig en bra lösning (även om den behöver fler steg för att konvergera).
• Modellen ska använda sig av saga för optimering.
• Valfritt: sätt verbose=True för att få utskrifter om vilken iteration modellen är på.

För att genomföra detta behöver du troligtvis läsa om modellens paramterar i Scikit-learns dokumentation.

Data vektoriseras med CountVectorizer så att resultat går att jämföra med Naive Bayes-modellen. Det finns dock andra vektoriserare, exempelvis en som transformerar till tf-idf, TfidfVectorizer.

Utför träningen på ej balanserad träningsdata. Träning på balanserad data sker i en efterföljande kodcell.

OBS: Det kan ta några minuter för modellen att slutföra sin träning.

Har koden:
Kod:
import pandas as pd
from sklearn
.feature_extraction.text import CountVectorizer
from sklearn
.linear_model import LogisticRegression
from sklearn
.pipeline import Pipeline

# Läs in träningsdata och testdata
train_data pd.read_csv('speeches-201718.txt'delimiter='\t'header=Nonenames=['text'])
test_data pd.read_csv('speeches-201819.txt'delimiter='\t'header=Nonenames=['text'])

# Skapa vektorisering och logistisk regression pipeline
vectorizer CountVectorizer()
clf LogisticRegression(random_state=42max_iter=500solver='saga'verbose=True)

log_regr Pipeline([('count_vect'vectorizer), ('log_regr'clf)])

# Träna modellen
X_train train_data['text']
y_train train_data['party']
log_regr.fit(X_trainy_train)

# Testa modellen
X_test test_data['text']
pred_lr log_regr.predict(X_test)
print(
"Urval av prediktioner [0-4]:"pred_lr[:5]) 


Har sedan tidigare följande filer att jobba med som står längst upp på sidan:

Följande filer används i uppgiften:

• speeches-201718.json.bz2 - Tal i Svenska riksdagen, 2017/2018.
• speeches-201819.json.bz2 - Tal i Svenska riksdagen, 2018/2019.

För att spara filerna, högerklicka på länken och välj att spara filen. Du behöver inte ladda ned några filer för att genomföra uppgiften, utan de är per automatik tillgängliga för användning i kodcellerna nedan.

Den sentimentanalys som vi gjorde på recensioner av appar hade två möjliga klasser, pos och neg. Nu ska vi utföra klassificering på data där det finns flera klasser. Det finns ett stort överlapp med hur de tidigare uppgifterna utfördes, men du kommer nu arbeta mer självständigt och få mindre ledning om vad som ska utföras. I slutändan ska du också gå utanför det vi gjort hittills och använda dig av logistisk regression som ett alternativ till Naive Bayes.

Vår data består av alla tal i Svenska riksdagen under sessioner från åren 2017/2018 och 2018/2019. Rådatan är tagen från Riksdagens öppna data och talen är indelade i två filer:

• speeches-201718.txt med 12,343 tal
• speeches-201819.txt med 9,288 tal


Kan någon hjälpa mig med den här koden? Jag får verkligen inte till det. Lärarna på kursen har semester och hänvisar till Google/Youtube vilket inte hjälpt.
__________________
Senast redigerad av Proton 2023-07-14 kl. 17:40.
Citera
2023-07-14, 16:36
  #2
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av eltejpen
Hej!

Jag läser AI för naturligt språk. Alla kan komma åt den kursen här: https://ai-for-naturligt-sprak.ida.liu.se/
.
Kör ni i Jupyter Notebook?

Vad är det du har problem med? Felmeddelanden?

Det alltså denna kod som du har problem med där stycken med _______ ska ersättas?

Kod:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

vectorizer = CountVectorizer()
clf = LogisticRegression(_____)

log_regr = Pipeline([('count_vect', vectorizer), ('log_regr',clf)])

X = _____
y = _____
log_regr.fit(X, y)

X_test = _____
pred_lr = log_regr.predict(X_test)
print("Urval av prediktioner [0-4]", pred_lr[:5])
__________________
Senast redigerad av Enterprise 2023-07-14 kl. 16:46.
Citera
2023-07-14, 17:03
  #3
Medlem
Enterprises avatar
Du hänvisar till en medlem "text" av train_data. Heter inte denna medlem rätteligen "words"?

Koden kör för mig i varje fall, jag får följande varning:
Citat:
ConvergenceWarning: The max_iter was reached which means the coef_ did not converge
warnings.warn("The max_iter was reached which means "
[Parallel(n_jobs=1)]: Done 1 out of 1 | elapsed: 56.0s finished

Och följande slutresultat (har ingen aning om det är rätt):
Kod:
Urval av prediktioner [0-4]: ['MP' 'S' 'S' 'S' 'S']
__________________
Senast redigerad av Enterprise 2023-07-14 kl. 17:07.
Citera
2023-07-14, 17:19
  #4
Medlem
Citat:
Ursprungligen postat av Enterprise
Du hänvisar till en medlem "text" av train_data. Heter inte denna medlem rätteligen "words"?

Koden kör för mig i varje fall, jag får följande varning:


Och följande slutresultat (har ingen aning om det är rätt):
Kod:
Urval av prediktioner [0-4]: ['MP' 'S' 'S' 'S' 'S']

Precis man ska ersätta de tomma raderna vad jag förstår. Jag är rätt förvirrad då de koderna ovan inte varit några problem. Men här blev det bara fel.

Har du hela koden som du skrev in i så fall? Så jag kan se? Då är det lättare att ta till sig.
Citera
2023-07-14, 17:21
  #5
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av eltejpen
Precis man ska ersätta de tomma raderna vad jag förstår. Jag är rätt förvirrad då de koderna ovan inte varit några problem. Men här blev det bara fel.

Har du hela koden som du skrev in i så fall? Så jag kan se? Då är det lättare att ta till sig.
Jag ändrade bara "text" till "words".

Alltså:
Kod:
# Träna modellen
X_train = train_data['words']

Och:
Kod:
# Testa modellen
X_test = test_data['words']

Detta baserade jag på hur träningsdata ser ut (från första cellen i övningen):

Kod:
Fem första datapunkterna:
            id                                              words party
0  H5-002-004  eders majestäter eders kungliga högheter herr ...     S
1  H5-003-001  aktuell debatt om situationen för ensamkommand...     V
2  H5-003-002  herr talman och ledamöter jag vill börja med a...     S
3  H5-003-003  herr talman åhörare den här debatten handlar a...     M
4  H5-003-004  herr talman ansvar och rättssäkerhet är två or...    SD

Så här tog jag fram test_data och train_data (hämtat från första rutan, igen):
Kod:
with bz2.open("speeches-201718.json.bz2") as source:
    speeches_201718 = pd.read_json(source)

with bz2.open("speeches-201819.json.bz2") as source:
    speeches_201819 = pd.read_json(source)

train_data, test_data = speeches_201718, speeches_201819

Notera att jag kör på min lokala miljö i en Jupyter Notebook, medan du kanske kör på skolans testmiljö.
__________________
Senast redigerad av Enterprise 2023-07-14 kl. 17:29.
Citera
2023-07-14, 19:00
  #6
Medlem
Citat:
Ursprungligen postat av Enterprise
Jag ändrade bara "text" till "words".

Alltså:
Kod:
# Träna modellen
X_train = train_data['words']

Och:
Kod:
# Testa modellen
X_test = test_data['words']

Detta baserade jag på hur träningsdata ser ut (från första cellen i övningen):

Kod:
Fem första datapunkterna:
            id                                              words party
0  H5-002-004  eders majestäter eders kungliga högheter herr ...     S
1  H5-003-001  aktuell debatt om situationen för ensamkommand...     V
2  H5-003-002  herr talman och ledamöter jag vill börja med a...     S
3  H5-003-003  herr talman åhörare den här debatten handlar a...     M
4  H5-003-004  herr talman ansvar och rättssäkerhet är två or...    SD

Så här tog jag fram test_data och train_data (hämtat från första rutan, igen):
Kod:
with bz2.open("speeches-201718.json.bz2") as source:
    speeches_201718 = pd.read_json(source)

with bz2.open("speeches-201819.json.bz2") as source:
    speeches_201819 = pd.read_json(source)

train_data, test_data = speeches_201718, speeches_201819

Notera att jag kör på min lokala miljö i en Jupyter Notebook, medan du kanske kör på skolans testmiljö.


Jag får det inte att fungera i skolmiljön. Helt ny på Python då jag inte förstod att det behövdes i kursen och jag känner mig fortfarande nollställd
Citera
2023-07-14, 20:49
  #7
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av eltejpen
Jag får det inte att fungera i skolmiljön. Helt ny på Python då jag inte förstod att det behövdes i kursen och jag känner mig fortfarande nollställd
Men varför kör du inte ett kommando i taget och printar felmeddelandet på det första som går snett?
Citera
2023-07-16, 06:49
  #8
Medlem
Citat:
Ursprungligen postat av Enterprise
Men varför kör du inte ett kommando i taget och printar felmeddelandet på det första som går snett?

Jag förstår din poäng. Men jag har försökt så länge med detta, i veckor. Googlat, läst, kört fast.

Nu har jag kört fast så pass att jag inte ens fattar hur jag börjar. Hur jag går vidare. Jag bara får panik och vet inte. Alltså hjärnsläpp. Totalt. Vilket gör mig frustrerad och jag får mer hjärnsläpp. Så jag lyckas inte ens där.
Citera
2023-07-16, 09:11
  #9
Medlem
Citat:
Ursprungligen postat av eltejpen
Jag förstår din poäng. Men jag har försökt så länge med detta, i veckor. Googlat, läst, kört fast.

Nu har jag kört fast så pass att jag inte ens fattar hur jag börjar. Hur jag går vidare. Jag bara får panik och vet inte. Alltså hjärnsläpp. Totalt. Vilket gör mig frustrerad och jag får mer hjärnsläpp. Så jag lyckas inte ens där.

Men vad behöver du exakt hjälp med?

"För att genomföra detta behöver du troligtvis läsa om modellens paramterar i Scikit-learns dokumentation. "
Börja där.

Jag ska gå och torka blod unde rmina ögon då jag har läst den hiskliga kod som era lektorer har skrivit.



Kod:
clf LogisticRegression(random_state=1solver='saga')) 

Den första bör var anågot åt det hållet. random_state har jag inte riktigt fått fram datatypen på, förutom att den är satt som None i initieringen.
__________________
Senast redigerad av Methos 2023-07-16 kl. 09:27.
Citera
2023-07-16, 10:51
  #10
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av eltejpen
Jag förstår din poäng. Men jag har försökt så länge med detta, i veckor. Googlat, läst, kört fast.

Nu har jag kört fast så pass att jag inte ens fattar hur jag börjar. Hur jag går vidare. Jag bara får panik och vet inte. Alltså hjärnsläpp. Totalt. Vilket gör mig frustrerad och jag får mer hjärnsläpp. Så jag lyckas inte ens där.
Du måste börja lära dig från grunden.
Om jag vore dig skulle jag installera Anaconda lokalt, som inkluderar Jupyter Book.
https://www.anaconda.com/download

Då kan du köra ett kommando i taget i separat cell.
https://youtu.be/2WL-XTl2QYI
Man behöver inte Jupyter för att kör ett kommando i taget, men det är ett nybörjarvänligt sätt att göra det.
__________________
Senast redigerad av Enterprise 2023-07-16 kl. 10:56.
Citera
2023-07-16, 11:04
  #11
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Methos
Kod:
clf LogisticRegression(random_state=1solver='saga')) 

Den första bör var anågot åt det hållet. random_state har jag inte riktigt fått fram datatypen på, förutom att den är satt som None i initieringen.
Förstår inte riktigt vad det är för avgörande skillnad mellan ovanstående och vad TS redan preseterat i sin första post (förutom att max_iter är satt enligt instruktionen)
Kod:
clf LogisticRegression(random_state=42max_iter=500solver='saga'verbose=True
Citera
2023-07-16, 11:26
  #12
Medlem
Citat:
Ursprungligen postat av Enterprise
Förstår inte riktigt vad det är för avgörande skillnad mellan ovanstående och vad TS redan preseterat i sin första post (förutom att max_iter är satt enligt instruktionen)
Kod:
clf LogisticRegression(random_state=42max_iter=500solver='saga'verbose=True

Svarae bara på hans uppgift. Såg inte att han hade angett argment för den klassen.

Jag förstår inte ens vad han vill.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in