No tienes acceso a esta clase

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

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

18 Días
23 Hrs
46 Min
56 Seg

Colocaciones en Python

12/24
Recursos

Aportes 24

Preguntas 4

Ordenar por:

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

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)})$

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?

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.

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

  • 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]

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.

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

as **colocaciones** son combinaciones frecuentes de palabras que ocurren juntas más a menudo de lo que se esperaría por casualidad. Un ejemplo clásico de colocación es "hacer una decisión" frente a "tomar una decisión". El objetivo de identificar colocaciones es entender mejor el comportamiento natural del lenguaje y las expresiones comunes.
Si alguien esta interesado en darle doble click al tema de Mutual Information les recomiendo este video: <https://www.youtube.com/watch?v=eJIp_mgVLwE>
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.

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.

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.