No tienes acceso a esta clase

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

Adquiere por un año todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/año

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

0D
2H
48M
42S

Colocaciones en Python

12/24
Recursos

Aportes 22

Preguntas 4

Ordenar por:

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

o inicia sesión.

Me causa un poco de duda al sacar P(w_1,w_2) no tendríamos que dividir la columna entre el total de bigramas?

Por si quieren escribir la formula en Latex en su Notebook para que se vea bien bonita:

Aquí les dejo el código en Latex:

$P M I = log (\frac{P(w_1, w_2)}{P(w_1)P(w_2)})$

Colocaciones: Son secuencias de palabras que ocurren en textos y conversaciones con una frecuencia inusualmente alta. Existe evidencia estadística de que estas palabras ocurren con esa frecuencia inusualmente alta, y esto nos da la idea de que podemos construir algunos números, algunas métricas que nos permiten identificar de manera sistemática estas colocaciones.

Francisco Camacho mis respeto, tremendo profesor

En la formula de PMI, lo que denotan como probabilidades no es congruente con el uso que se le dio. Deberían cambiarlo con conteo o frecuencia de los N-gramas y las palabras. Ya que se reemplazaron por estos y no por una probabilidad.

  • Que son?

    • Son secuencias de palabras que suelen ocurrir ven textos o conversiones con una Frecuencia inusualmente alta
    • Las colocaciones de una palabra son declaraciones formales de donde suele ubicarse típicamente esa palabra
  • Coding

    reconstruimos la lista

    md_bigrams = list(bigrams(text1))
    
    threshold = 2
    

    Ahora filtramos

    filtered_bigrams = [bigram for bigram in md_bigrams if len(bigram[0])>threshold and len(bigram[1])>threshold]
    filtered_bigram_dist = FreqDist(filtered_bigrams)
    

    Ahora se introducen los Dataframes, el objeto dataframe gestiona columna y filas

    df = pd.DataFrame()
    
    df['bi_grams']=list(set(filtered_bigrams))
    

    Separamos por palabras por cada bigrama

    df['word_0']=df['bi_grams'].apply(lambda x: x[0])
    df['word_1']=df['bi_grams'].apply(lambda x: x[1])
    

    Para crear distribuciones de palabras filtrado

    filtered_words = [word for word in text1 if len(word)>threshold]
    filtered_words_dist = FreqDist(filtered_words)
    

    y para agregarlo en el Datframe

    df['bi_gram_freq'] = df['bi_grams'].apply (lambda x:filtered_bigram_dist[x])
    df['word_0_freq']= df['word_0'].apply (lambda x:filtered_words_dist[x])
    df['word_1_freq']=df['word_1'].apply (lambda x:filtered_words_dist[x])
    
  • PMI

    df['PMI']= df[['bi_gram_freq', 'word_0_freq','word_1_freq']].apply(lambda x: np.log2(x.values[0]/(x.values[1]*x.values[2])), axis =1)
    
    df.sort_values(by = 'PMI', ascending= False)
    

A lo mejor tuvieron el mismo problema que yo, word_0_freq y word_1_freq se obtienen de filtered_word_dist

df['bi_gram_freq'] = df['bi_grams'].apply(lambda x: filtered_bigram_dist[x]) 
df['word_0_freq'] = df['word_0'].apply(lambda x: filtered_word_dist[x])
df['word_1_freq'] = df['word_1'].apply(lambda x: filtered_word_dist[x])

Pero siguen siendo frecuencias, asi que la probabilidad, en terminos frecuentistas tal vez se deba cambiar a len(filtered_bigrams) /filtered_word_dist[x]

Si te quedaste con dudas de la función apply, no te preocupes, aquí te dejó la documentación de Pandas para que le eches un ojo.

Ojo que en el cálculo no estamos normalizando las probabilidades, pero todos los PMI son proporcionales a sus valores reales por una constante, y podemos dejarlo así siempre y cuando únicamente nos importe el orden de PMI entre bigramas y no el valor exácto del PMI, en cuyo caso sería necesario normalizar 🤔

¿Qué son las colocaciones ?

Recomiendo este video para comprender mejor la idea de COLOCACION: https://www.youtube.com/watch?v=kH4r2rtRLZ8

¿Alguien sabe cómo escribir ecuaciones en una Notebook? Ya sea Jupyter o Colab

Por si no quedo muy claro el concepto de PMI este articulo lo explica bastante bien.
Understanding Pointwise Mutual Information in NLP

desde la actualizacion de Platzi se perdieron los Recursos de todas las clases de todos los cursos. por favor arreglen eso

En el calculo del PMI creo que no se están calculando probabilidades en el numerador ni el denominador sino en el cociente final (Fernando menciona probabilidad que es un numero entre 0 y 1. Creo que son las posibilidades o los conteos de cada estructura analizada). La explicación sin embargo esta decente.

Evita usar apply en tu código


La razón: Tiende a ser lento.

Apply sirve para ejecutar cualquier cosa sobre el dataframe, lo malo de esto es que como es demasiado general es difícil de optimizar por lo que es muuy lento en comparación de otras funciones especializadas que pandas tiene.

Aquí una pregunta de stack overflow dondese discute.

https://stackoverflow.com/questions/54432583/when-should-i-not-want-to-use-pandas-apply-in-my-code

se me estallo la cabeza *😦

Alguien tien claro porque se utilizo un logaritmo en base 2, en lugar del natural o bien base 10? Gracias

Para poder escribir las ecuaciones que vemos en el notebook se una LaTeX, les dejo la línea que use en el mío:

\begin{equation}
    PMI = \log\left(\dfrac{P(w_{1},w_{2})}{P(w_{1}) P(w_{2})}\right)
\end{equation}

Hola, me gustaría aportar algo:

En la parte donde Francisco crea el dataframe con list y sets:

df = pd.DataFrame()
df['bi_grams'] = list(set(filtered_bigrams))

también se puede hacer con diccionarios de la siguiente manera:

filtered_bigram_dist = FreqDist(filtered_bigrams)
filtered_bigram_dict = dict(filtered_bigram_dist)

df_2 = pd.DataFrame()
df_2['bi_grams'] = filtered_bigram_dict.keys()

Al final resulta con el mismo numero de biagramas y no afecta el resultado.
Saludos.

Creo que hay un error en la explicación, en estadística el coeficiente de correlación entre dos o más variables es el que mide cuanta relación hay entre ellas, ahora el profesor dice que los valores tienden a cero (yo con los mismos datos y con otros he tenido diferentes resultados y no todos son menores que cero, por eso me puse a buscar mis apuntes de estadística xD).

Al grano, este coeficiente va desde -1 a 1 y determina que hay relación (positiva o negativa) siempre y cuando no sean cero, cuando el valor es cero significa que no hay relación, es decir que esas variables son independientes mientras que cuando vale 1, por ejemplo, significa que están completamente relacionados.

¿Esto que tiene que ver? Pues bien, tiene que ver en el hecho de que cuando estamos comparando estas listas de n-gramas lo que intentamos hacer es ver cuán relacionadas están entre ellas, por ejemplo, si estuviéramos hablando de España en un documento oficial seguramente habría “Reino de España” como una frase bastante común, con lo cual “reino” y “españa” tendrían que tener un PMI alto (en este caso por ejemplo 0.95) mientras que “silla” y “españa” probablemente tengan un PMI de 0.

Para terminar, creo que los valores no siempre son cero o negativos y de hecho no deberían serlo, si alguien comprende la razón del porqué indica el profe que mayormente salen valores negativos que lo indique por favor.

Curioso que not sea de las más usadas. Curioso porque la mejor forma de demostrar que algo es verdadero es negándolo la premisa que lo contrasta y para demostrar algo s falso, es igual, negándolo, jejejejeje.

Bueno, o al menos así es en lógica proporcional.