HyppÀÀ sisÀltöön

📝 TehtĂ€vĂ€t

TehtÀvÀ: Vihapuheen tunnistus

Kouluta Naive Bayes classifier, joka tunnistaa, onko viesti vihapuhetta vai ei. Raportoi tulokset oppimispÀivÀkirjassasi. Valitse joko pienempi tai suurempi datasetti:

Kuten aina, dokumentoi se, mitÀ opit Naive Bayes algoritmista oppimispÀivÀkirjaasi.

Huomaa, ettÀ sinun ei odoteta kÀyttÀvÀn edistynyttÀ stemmausta. Tarkoitus on ymmÀrtÀÀ, miten Naive Bayes toimii ja miten sitÀ kÀytetÀÀn. Suosi yksinkertaisia ja ymmÀrrettÀviÀ menetelmiÀ.

Warning

Lue tehtĂ€vĂ€nanto dataan liittyvissĂ€ ongelmissa huolellisesti. Esimerkiksi yllĂ€ on esitelty, ettĂ€ sinun tulee tunnistaa, onko viesti vihapuhetta vai ei. Vastaus on siis "KyllĂ€ on" tai "Ei ole". ÄlĂ€ siis tee luokitusta, jossa on useampia luokkia, kuten "vihapuhe", "loukkaava puhe", "ei kumpikaan".

Sen sijaan voi olla perusteltua kokeilla, kuinka koulutetun mallin tarkkuus reagoi siihen, sisÀllytÀtkö loukkaavaksi puheeksi luokitellut viestit "ei kumpikaan"-luokkaan vai et.

VinkkejÀ

Kirjastot

Tulet tarvitsemaan scikit-learn-kirjastoa. Asenna se uv add scikit-learn-komennolla; se lisÀtÀÀn pyproject.toml-tiedostoon. Tutustu ainakin seuraaviin importattuihin luokkiin tai metodeihin:

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB, ComplementNB
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix

Huomaa, ettĂ€ lista ei ole kattava. Kirjoitat oppimispĂ€ivĂ€kirjaa, joten sinun on suositeltavaa tutustua vapaasti aihepiiriin. ÄlĂ€ tyydy vastaamaan kysymykseen vaan ota omistajuus omasta oppimisprosessistasi.

Tip

Jos tutustut myös ml-perusteet-code-repositorion koodiin – eli siis niihin Allure-testattuihin koodeihin –, kannattaa pohtia, miten kyseisessĂ€ opettajan tekemĂ€ssĂ€ from scratch -koodissa on hoidettu esimerkiksi tekstin vektorisointi. Onko kĂ€ytössĂ€ vastaava tekniikka kuin TfidVectorizer tai CountVectorizer? Tekeekö malli sen itse vai onko se erillinen luokka/funktio kuten scikitin toteutuksessa?

Datan esikÀsittely

Et voi syöttÀÀ dataa sinÀllÀÀn Naive Bayes -malliin. Sinun on ensin aivan vÀhimmillÀÀn muunnettava data numeeriseen muotoon, mutta kenties dataa kannattaa puhdistaa myös muutoin? Voit esimerkiksi haluta:

  • Poista erikoismerkit
  • Tee tekstistĂ€ lowercase
  • Poista nimimerkit
  • Poista yleisimmĂ€t sanat (usein termillĂ€ stop words)
  • Korvaa urlit sanalla "urlhere" tai riisutulla domain-nimellĂ€

EthÀn tee tÀtÀ ensimmÀisellÀ kielimallin ehdottamalla, todennÀköisesti raskaalla tavalla, vaan suosi jotakin, minkÀ ymmÀrrÀt tÀysin. Voit tehdÀ sen kÀsin vaikkapa nÀin:

import re
import pandas as pd

df = pd.read_csv('path_to_your_dataset.csv')

def preprocess_text(text):
    # Replace URLs with the word "urlhere"
    text = re.sub(r"http\S+|www\S+|https\S+", "urlhere", text, flags=re.MULTILINE)
    # Rest of the processing
    return text

df['cleaned_tweet'] = df['tweet'].apply(preprocess_text)