Ejercicio de análisis de sentimientos en NLP [parte 2]

| Última modificación: 7 de noviembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En un post anterior iniciamos el desarrollo de un ejercicio de análisis de sentimientos en NLP. En el presente artículo, seguiremos con este ejercicio y lo finalizaremos.

Ejercicio de análisis de sentimientos en NLP

Extracción de features

#Ejercicio de análisis de sentimientos en NLP
cv = TfidfVectorizer (
        ngram_range = (1, 3),
        strip_accents = 'ascii',
        max_df = 0.95,
        min_df = 3
        max_features = 3000
)
cv.fit (X_train)

TfidfVectorizer (max_df = 0.95, max_features = 3000, min_df = 3, ngram_range = (1, 3), strip_accents = ‘ascii’)

#Ejercicio de análisis de sentimientos en NLP
len (cv.vocabulari_.items ())

3000

TF – IDF scores del training set y test set

#Ejercicio de análisis de sentimientos en NLP
X_train_ = cv.transform (X_train)
X_test_ = cv.transform (X_test)
#Ejercicio de análisis de sentimientos en NLP
X_train.iloc [0]

‘Zhang Yimou ya no es el poeta de lo íntimo, el director chino que filmó La linterna roja, allá en los primeros noventa: ahora es el deslumbrante artífice de una pirotecnia visual rara, deslumbrante y hermosa. Yimou es un maestro cuyo talento consiste en procurarnos belleza, entregarnos un ejercicio de amaneramiento plástico bajo el que, fascinante, fluye una forma de entender el cine a la que no estábamos acostumbrados.

La quebradiza, endeble y melodramática historia de esta dinastía china enfangada en traiciones, engaños y pasiones al más puro estilo culebrón Televisa precisa un envoltorio tan apabullante, embutido en un traje tan rico y costoso, tan hipnótico, que llena un momento en el que la historia no la cuentan los personajes ni son sus diálogos los que explicitan las evoluciones de la trama, sino los trajes, los movimientos apoteósicos de masas en batallas, coreografiadas con un sentido del detalle cuasipornográfico que ya hubiese querido para sí Zack Snyder en su estupenda 300′.

#Ejercicio de análisis de sentimientos en NLP
X_train_ [0]

<1 x 3000 sparse matrix of type ‘<class ‘numpy.float64′>’

with 205 stored elements in Compressed Sparse Row format>

Score IDF de algunas palabras

#Ejercicio de análisis de sentimientos en NLP
words_example = [
'cine',
'película',
'muy',
'y',
'de',
'que',
'potter',
'mala',
'aburrimiento',
'sorprendente',
'aburrir',
'ausdf'
]
#Ejercicio de análisis de sentimientos en NLP
vocab_idf = dict (zip (cv.get_feature_names_out (), cv.idf_))

print ('{0: 20} {1 : 20}'.format ('Palabra', 'IDF'))
for word in words_example:
      if word not in vocab_idf:
            print ('{0 : 20} {1 : 20}'.format (word, '00V'))
      else:
            print ('{0 : 20} {1 : 2.3f}'.format (word, vocab_idf [word]))
PalabraIDF
cine1.556
película00V
de00V
que00V
potter5.005
mala3.155
aburrimiento00V
muy1.532
y00V
sorprendente4.275
aburrir00V
ausdf00V

Palabras con el TF – IDF en alguna review

#Ejercicio de análisis de sentimientos en NLP
i = random.randing (0, len (X_train))
print ('ID: {}'.format (i))
print ('Sentiment': {}.format (y_train.iloc [i]))
print ('Review: {}'.format (X_train.iloc [i]))

for word in X_train.iloc [i].strip ().split ():
      if word in vocab_idf:
            print (f "word: {word} idf: {vocab_idf [word]}")
Ejercicio de análisis de sentimientos en NLP
#Ejercicio de análisis de sentimientos en NLP
doc_vector = X_train_ [i]
df_tfidf = pd.DataFrame (doc_vector.T.todense (), index = cv.get_feature_names (), columns = ['tfidf'])
df_tfidf = df_tfidf [df_tfidf ['tfidf'] > 0]

top_n = 15
print ('Top {} words with highest TF_IDF in the review {}:\n{}'.format (top_n, df_tfidf.sort_values (by = ["tfidf"], ascending = False) [:top_n]))
print ('\nTop {} words with lowest TF_IDF in the review {}:\n{}'.format (top_n, df_tfidf.sort_values (by = ["tfidf"], ascending = False) [-top_n:]))

Top 15 words with highest TF_IDF in the review 2865:

tfidf
tarantino0.240204
chicas0.202056
mas0.139239
dialogo0.134014
simple0.126848
por0.125130
las0.124225
ese0.121362
se puede0.112946
ya0.112031
secuencia0.109725
dos0.097785
esque0.094525
sin duda0.092644
duda0.084009

Top 15 words with lowest TF_IDF in the review 2865:

tfidf
por la0.166103
anos0.015657
por el0.015503
mi0.015149
guion0.014914
desde0.014831
no es0.014506
hasta0.014207
personajes0.014163
peliculas0.014031
con la0.013908
tiene0.012403
de un0.012024
ser0.011676
todo0.010418

X2 scores

#Ejercicio de análisis de sentimientos en NLP
i = 15

chi2score = chi2 (X_train, y_train) [0]
scores= list (zip (cv.get_feature_names (), chi2scpre))
sorted_scores = sorted (scores, key = lambda x : x [1])
topchi2 = list (zip (*sorted_scores [-i:]))
x = range (len (topchi2 [i]))
labels = topchi2 [0]

plt.figure (figsize = (12, 8))
plt.barh (x. topchi2 [1], align = 'center', alpha = 0.5)
plt.plot (topchi2 [1], x '-o', markersize = 5, alpha = 0.8)
plt.yticks (x, labels, fontsize = 12)
plt.xlabel ('$\chi^2$', fontsize = 26)
plt.ylabel ('word', fontzise = 16)
plt.title ('Top {} $\chi^2$ score for each word in the training set'.format (i), fontsize = 20)
plt.grid ()
plt.tight_layout ()
plt.show ();

Para poder acceder a las opciones laborales del Big Data, uno de los sectores con mayor demanda y mejores salarios de todo el mercado laboral, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación adquirirás los conocimientos imprescindibles para abrirte paso en el mundillo tecnológico en pocos meses. ¡No dudes en dar el paso que transformará tu futuro y accede ya para pedir más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado