Reprezentarea Bag-of-Words

Procesarea Limbajului Natural (NLP) în Python

Fouad Trad

Machine Learning Engineer

Recapitularea fluxului NLP

Diagrama completă a fluxului de lucru, menționând că Capitolele 3 și 4 se concentrează pe bibliotecile transformers.

Procesarea Limbajului Natural (NLP) în Python

Bag-of-Words (BoW)

  • Tehnică fundamentală pentru reprezentarea textului ca numere
  • Reprezintă textul numărând aparițiile fiecărui cuvânt
  • Aruncă cuvintele într-un sac și le numără
  • Ignoră gramatica și ordinea

Imagine care arată cuvintele unui text aruncate într-un sac, iar apoi sunt numărate aparițiile fiecărui cuvânt.

Procesarea Limbajului Natural (NLP) în Python

Exemplu BoW

Imagine cu două propoziții: „I love NLP" și „I love machine learning."

Procesarea Limbajului Natural (NLP) în Python

Exemplu BoW

Imagine cu vocabularul derivat din propoziții: I, love, NLP, machine și learning.

  • Construiește un vocabular cu toate cuvintele unice
Procesarea Limbajului Natural (NLP) în Python

Exemplu BoW

Imagine cu vectorii de caracteristici pentru fiecare propoziție, generați prin numărarea aparițiilor cuvintelor conform vocabularului definit.

  • Construiește un vocabular cu toate cuvintele unice
  • Numără de câte ori apare fiecare cuvânt din vocabular
Procesarea Limbajului Natural (NLP) în Python

BoW în cod

reviews = ["I loved the movie. It was amazing!",
           "The movie was okay.",
           "I hated the movie. It was boring."]

def preprocess(text):
text = text.lower()
tokens = word_tokenize(text)
tokens = [word for word in tokens if word not in string.punctuation]
return " ".join(tokens)
cleaned_reviews = [preprocess(review) for review in reviews]
print(cleaned_reviews)
['i loved the movie it was amazing', 
 'the movie was okay', 
 'i hated the movie it was boring']
Procesarea Limbajului Natural (NLP) în Python

BoW în cod

from sklearn.feature_extraction.text import CountVectorizer


vectorizer = CountVectorizer()
vectorizer.fit(cleaned_reviews)
print(vectorizer.get_feature_names_out())
['amazing' 'boring' 'hated' 'it' 'loved' 'movie' 'okay' 'the' 'was']
Procesarea Limbajului Natural (NLP) în Python

Rezultatul BoW

X = vectorizer.transform(cleaned_reviews)

# OR X = vectorizer.fit_transform(cleaned_reviews)
print(X)
<Compressed Sparse Row sparse matrix of dtype 'int64'
    with 16 stored elements and shape (3, 9)>

Matrice rară: tabel completat majoritar cu zerouri

Procesarea Limbajului Natural (NLP) în Python

Rezultatul BoW

print(X.toarray())
[[1 0 0 1 1 1 0 1 1]
 [0 0 0 0 0 1 1 1 1]
 [0 1 1 1 0 1 0 1 1]]
print(vectorizer.get_feature_names_out())
['amazing' 'boring' 'hated' 'it' 'loved' 'movie' 'okay' 'the' 'was']
Procesarea Limbajului Natural (NLP) în Python

Frecvența cuvintelor

import numpy as np

word_counts = np.sum(X.toarray(), axis=0)
words = vectorizer.get_feature_names_out()
import matplotlib.pyplot as plt

plt.bar(words, word_counts)
plt.title("Word Frequencies in Movie Reviews")
plt.xlabel("Words") plt.ylabel("Frequency") plt.show()

Grafic de bare cu cuvintele și frecvențele lor; cuvintele de tip stop-word sunt cele mai frecvente.

Procesarea Limbajului Natural (NLP) în Python

Să exersăm!

Procesarea Limbajului Natural (NLP) în Python

Preparing Video For Download...