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]))
Palabra | IDF |
cine | 1.556 |
película | 00V |
de | 00V |
que | 00V |
potter | 5.005 |
mala | 3.155 |
aburrimiento | 00V |
muy | 1.532 |
y | 00V |
sorprendente | 4.275 |
aburrir | 00V |
ausdf | 00V |
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
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 | |
tarantino | 0.240204 |
chicas | 0.202056 |
mas | 0.139239 |
dialogo | 0.134014 |
simple | 0.126848 |
por | 0.125130 |
las | 0.124225 |
ese | 0.121362 |
se puede | 0.112946 |
ya | 0.112031 |
secuencia | 0.109725 |
dos | 0.097785 |
esque | 0.094525 |
sin duda | 0.092644 |
duda | 0.084009 |
Top 15 words with lowest TF_IDF in the review 2865:
tfidf | |
por la | 0.166103 |
anos | 0.015657 |
por el | 0.015503 |
mi | 0.015149 |
guion | 0.014914 |
desde | 0.014831 |
no es | 0.014506 |
hasta | 0.014207 |
personajes | 0.014163 |
peliculas | 0.014031 |
con la | 0.013908 |
tiene | 0.012403 |
de un | 0.012024 |
ser | 0.011676 |
todo | 0.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!