Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Reto final: construye un modelo de sentimientos

26/26
Recursos

Aportes 7

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Primero probé con métodos vistos en clase pero para usar otros algoritmos me resulto mas difícil, por lo cual me apoyé de la solución del maestro y vectorizando el texto fue mas fácil probar otros algoritmos.

Con los atributos de frecuencia de palabras mayor a 50, los 250 biograms mas comunes y quitando las stopwords el RandomForestClassifier da un 95% de accuracy

# Abrimos el los archivos y los guardamos
f = open('/content/drive/My Drive/Colab Notebooks/NLP_resources/Algoritmos NLP/all_balanced.review', 'r')
text = f.read()
import nltk
from nltk.corpus import stopwords
bag_of_words = [] #Creamos el directorio de palabras
for line in text.split('\n'):
  seq = line.split('#label#:')
  if len(seq)==2:
    for key_value in seq[0].split(' '):
      bag_of_words.append(key_value.split(':')[0]) 
stopwords = stopwords.words('english')
bag_of_words = [w for w in bag_of_words if w.lower() not in stopwords] # Quitamos las stopwords
fdist = nltk.FreqDist(bag_of_words) # Sacamos las frecuencias
reduced_bow = [w for w in set(bag_of_words) if fdist[w]>50] # Separamos frecuencias que tengan mas de 50 repeticiones 
bigram_text = nltk.Text(bag_of_words) # Sacamos los biogramas
bigrams = list(nltk.bigrams(bigram_text))
top_bigrams = (nltk.FreqDist(bigrams)).most_common(250) # Separamos bigramas mas comunes

# Vectorizamos el texto

import numpy as np

vectors = []
labels = []
for line in text.split('\n'):
  seq = line.split('#label#:')
  if len(seq)==2:
    line_dict = {keyval.split(':')[0]: int(keyval.split(':')[1]) for keyval in seq[0].split(' ') if len(keyval.split(':'))==2}
    line_vector = []
    for word in reduced_bow:
      if word in line_dict.keys():
        line_vector.append(line_dict[word])
      else:
        line_vector.append(0)
    vectors.append(line_vector) # Indicamos si el texto tiene palabras de las mas frecuentes
    labels.append(float(seq[1]))

    bigram_text = nltk.Text(line_dict.keys())
    bigrams = list(nltk.bigrams(bigram_text))
    for word in top_bigrams:
      if word in bigrams:
        line_vector.append(1)
      else:
        line_vector.append(0)
    vectors.append(line_vector) # Indicamos si el texto tiene biogramas mas comunes
    labels.append(float(seq[1]))

vectors = np.array(vectors)

from sklearn.model_selection import train_test_split

train_vectors, test_vectors, train_labels, test_labels = train_test_split(vectors, labels, test_size=0.1, random_state=42)

from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier().fit(train_vectors, train_labels)
print('Score for RandomForestClassifier = {}'.format(clf.score(test_vectors, test_labels)))

Me hubiera gustado que el curso se enfoque más en el uso y aplicación de las librerías sklearn, nltk, spacy, y no tanto en implementar fórmulas.

Excelente !
Aqui mi solución al reto usando tensorflow
https://colab.research.google.com/drive/1aovlP-JbQTR2WYnxN-YpUonqClD374kT?usp=sharing

Tengo una duda en una pregunta del examen: " Si tenemos una cadena de Markov para describir las probabilidades de transición en cuanto al clima de un dia para otro, y observamos la siguiente secuencia de estados día tras día: (frío, frío, caliente, frío, tibio, caliente, tibio, frío), entonces la probabilidad de transición P(caliente|frío) es: "
Frio =1 Caliente=2 Tibio=3
(frío, frío, caliente, frío, tibio, caliente, tibio, frío) = (1,1,2,1,3,2,3,1)
P(Caliente | Frio) = P(Frio , Caliente) / P(Frio)
P(2 | 1) = P(1 , 2) / P(1)
P(1,2) = 1 / 7 # Una vez pasa de 1 a 2, sobre los 7 cambios posibles.
P(Frio) = 3 / 7 # Dentro de las 7 transiciones posibles, 3 comienzan con 1
P(2 | 1) = P(1 , 2) / P(1) = 1/3
Respuestas posibles: 0%, 25%, 50% y 100%
Si el cambio fuera de caliente a frio, caliente pasa una ves a frio y otra a tibio, de las 2 veces que caliente cambia de estado una pasa a frio. En ese caso la probabilidad es de 50%.  Pero en el ejercicio P(caliente|frío)  lo interpreto al revés. No se si el análisis es correcto???

Increible curso!!

Aquí está mi solución, realice bigramas y trigramas para mejorar el score, y finalmente el algoritmo que mejor me funciono fue random forest repo

Me gustó mucho la grafica que puso el profesor así que la incluí jaja

La verdad es en la práctica que se evidencia el gran valor que tiene este curso de Algoritmos de clasificación de texto con el anterior de fundamentos de NLTK también con Francisco.

Existe una demanda inimaginable acerca de empresas que desean conocer más a fondo la clasificación y sentimientos de sus usuarios en diferentes etapas dela año.
De verdad el NLP es increíblemente importante hoy en día, espero los demás cursos de la serie pronto!
De nuevo gracias @el_pachocamacho