Sanojen Pussi
Pyyhkäise näyttääksesi valikon
BoW-mallin ymmärtäminen
Bag of words (BoW) -malli esittää dokumentit vektoreina, joissa jokainen ulottuvuus vastaa yksittäistä sanaa. Jokainen ulottuvuus voi kuvata sanan esiintymistä dokumentissa (1 jos sana on läsnä, 0 jos ei) tai sen frekvenssiä (sanojen lukumäärä). Näin ollen BoW-mallit voivat olla joko binäärisiä tai frekvenssipohjaisia.
Tarkastellaan, miten sama lause (dokumentti) esitetään kummallakin tavalla:
Binäärinen malli esittää tämän dokumentin vektorina [1, 1, 1], kun taas frekvenssipohjainen malli esittää sen muodossa [2, 1, 2], ottaen huomioon sanojen esiintymistiheyden.
BoW-toteutus
BoW-mallin toteutus on suoraviivaista, erityisesti sklearn (scikit-learn) -kirjaston ja sen CountVectorizer-luokan avulla.
Alla on esimerkki binäärisestä bag of words -mallista:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
from sklearn.feature_extraction.text import CountVectorizer
Tämä rivi tuo CountVectorizer-luokan sklearn-kirjastosta.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Nämä rivit määrittelevät listan nimeltä corpus, joka sisältää kolme merkkijonoa. Jokainen merkkijono on tekstidokumentti.
vectorizer = CountVectorizer(binary=True)
Tämä rivi luo CountVectorizer-luokan olion. Parametri binary=True määrittää, että malli käyttää binäärisiä arvoja.
bow_matrix = vectorizer.fit_transform(corpus)
Metodi ensin sovittaa mallin aineistoon, oppii korpuksen sanaston ja muuntaa tekstidokumentit harvaksi matriisiksi, joka sisältää tokenien esiintymät (bag of words -matriisi).
print(bow_matrix.toarray())
Tämä rivi muuntaa harvan matriisin bow_matrix tiheäksi taulukoksi (numpy.ndarray) käyttämällä .toarray()-metodia ja tulostaa sen.
Jokainen rivin matriisissa vastaa dokumenttia, ja jokainen sarake vastaa tokenia (sanaa). Jotta voimme esittää tämän visuaalisesti, muunsimme tämän harvan matriisin tiheäksi 2D-taulukoksi käyttämällä .toarray()-metodia.
Harva matriisi on matriisi, jossa suurin osa alkioista on nollia. Sitä käytetään tehokkaaseen datan esittämiseen ja käsittelyyn, kun nolla-arvojen määrä on suuri. Muisti- ja laskentaresursseja säästetään tallentamalla vain nollasta poikkeavat alkiot.
Jotta voidaan luoda frekvenssipohjainen bag of words -malli, tarvitsee vain poistaa parametri binary=True, koska sen oletusarvo on False:
1234567891011from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
Matriisin muuntaminen DataFrame-muotoon
On usein kätevää muuntaa muodostettu bag of words -matriisi pandas DataFrame -muotoon. Lisäksi CountVectorizer-instanssi tarjoaa get_feature_names_out() -metodin, joka palauttaa taulukon uniikkeja sanoja (piirrenimiä), joita malli käyttää. Näitä piirrenimiä voidaan käyttää DataFrame-taulukon sarakkeina:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Tämän esitystavan avulla voimme nyt helposti käyttää paitsi tietyn dokumentin vektoria, myös tietyn sanan vektoria:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
Koska jokainen yksilöllinen sana vastaa saraketta, sanavektorin hakeminen on yhtä yksinkertaista kuin sarakkeen hakeminen DataFrame-rakenteesta määrittämällä sana (esimerkiksi 'global'). Käytämme myös values-attribuuttia saadaksemme tulokseksi taulukon Series-olion sijaan.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Sanojen Pussi
BoW-mallin ymmärtäminen
Bag of words (BoW) -malli esittää dokumentit vektoreina, joissa jokainen ulottuvuus vastaa yksittäistä sanaa. Jokainen ulottuvuus voi kuvata sanan esiintymistä dokumentissa (1 jos sana on läsnä, 0 jos ei) tai sen frekvenssiä (sanojen lukumäärä). Näin ollen BoW-mallit voivat olla joko binäärisiä tai frekvenssipohjaisia.
Tarkastellaan, miten sama lause (dokumentti) esitetään kummallakin tavalla:
Binäärinen malli esittää tämän dokumentin vektorina [1, 1, 1], kun taas frekvenssipohjainen malli esittää sen muodossa [2, 1, 2], ottaen huomioon sanojen esiintymistiheyden.
BoW-toteutus
BoW-mallin toteutus on suoraviivaista, erityisesti sklearn (scikit-learn) -kirjaston ja sen CountVectorizer-luokan avulla.
Alla on esimerkki binäärisestä bag of words -mallista:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a binary Bag of Words model vectorizer = CountVectorizer(binary=True) # Generate a BoW matrix bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix into a dense array print(bow_matrix.toarray())
from sklearn.feature_extraction.text import CountVectorizer
Tämä rivi tuo CountVectorizer-luokan sklearn-kirjastosta.
corpus = [
'Global climate change poses significant risks to global ecosystems.',
'Global warming and climate change demand urgent action.',
'Sustainable environmental practices support environmental conservation.',
]
Nämä rivit määrittelevät listan nimeltä corpus, joka sisältää kolme merkkijonoa. Jokainen merkkijono on tekstidokumentti.
vectorizer = CountVectorizer(binary=True)
Tämä rivi luo CountVectorizer-luokan olion. Parametri binary=True määrittää, että malli käyttää binäärisiä arvoja.
bow_matrix = vectorizer.fit_transform(corpus)
Metodi ensin sovittaa mallin aineistoon, oppii korpuksen sanaston ja muuntaa tekstidokumentit harvaksi matriisiksi, joka sisältää tokenien esiintymät (bag of words -matriisi).
print(bow_matrix.toarray())
Tämä rivi muuntaa harvan matriisin bow_matrix tiheäksi taulukoksi (numpy.ndarray) käyttämällä .toarray()-metodia ja tulostaa sen.
Jokainen rivin matriisissa vastaa dokumenttia, ja jokainen sarake vastaa tokenia (sanaa). Jotta voimme esittää tämän visuaalisesti, muunsimme tämän harvan matriisin tiheäksi 2D-taulukoksi käyttämällä .toarray()-metodia.
Harva matriisi on matriisi, jossa suurin osa alkioista on nollia. Sitä käytetään tehokkaaseen datan esittämiseen ja käsittelyyn, kun nolla-arvojen määrä on suuri. Muisti- ja laskentaresursseja säästetään tallentamalla vain nollasta poikkeavat alkiot.
Jotta voidaan luoda frekvenssipohjainen bag of words -malli, tarvitsee vain poistaa parametri binary=True, koska sen oletusarvo on False:
1234567891011from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] # Create a frequency-based Bag of Words model vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) print(bow_matrix.toarray())
Matriisin muuntaminen DataFrame-muotoon
On usein kätevää muuntaa muodostettu bag of words -matriisi pandas DataFrame -muotoon. Lisäksi CountVectorizer-instanssi tarjoaa get_feature_names_out() -metodin, joka palauttaa taulukon uniikkeja sanoja (piirrenimiä), joita malli käyttää. Näitä piirrenimiä voidaan käyttää DataFrame-taulukon sarakkeina:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) # Convert a sparse matrix to a DataFrame bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) print(bow_df)
Tämän esitystavan avulla voimme nyt helposti käyttää paitsi tietyn dokumentin vektoria, myös tietyn sanan vektoria:
12345678910111213from sklearn.feature_extraction.text import CountVectorizer import pandas as pd corpus = [ 'Global climate change poses significant risks to global ecosystems.', 'Global warming and climate change demand urgent action.', 'Sustainable environmental practices support environmental conservation.', ] vectorizer = CountVectorizer() bow_matrix = vectorizer.fit_transform(corpus) bow_df = pd.DataFrame(bow_matrix.toarray(), columns=vectorizer.get_feature_names_out()) # Print the vector for 'global' as a NumPy array print(f"Vector for the word 'global': {bow_df['global'].values}")
Koska jokainen yksilöllinen sana vastaa saraketta, sanavektorin hakeminen on yhtä yksinkertaista kuin sarakkeen hakeminen DataFrame-rakenteesta määrittämällä sana (esimerkiksi 'global'). Käytämme myös values-attribuuttia saadaksemme tulokseksi taulukon Series-olion sijaan.
Kiitos palautteestasi!