No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Reto final: construye un modelo de sentimientos

26/26
Recursos

Aportes 11

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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

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

Me encanta esta metodología, en mi caso he logrado filtrar PALABRAS RELEVANTES de mi diccionario de idioma maya kaqchikel de 11 mil entradas.
He aprendido a ver las palabras mas frecuentes.
He aprendido a ver cómo y por qué se utilizan esas palabras mas frecuentes.
He aprendido a usar la metodología para analizar listados de palabras en textos específicos.
No es precisamente el camino de ida de este curso, pero si es el camino de regreso.

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í esta mi solucion <https://github.com/LuisEstrad/Modelo-de-sentimientos.git>

20 puntos!

Excelente profesor Francisco, muy claro objetivo codea desde cero y explicando. Calor en las mates en la estadistica y que decir en su python. Mi pregunta es DONDE ENCUENTRO LOS DOS CURSOS RESTANTES QUE IBA A BRINDAR

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