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 鈥淩eino de Espa帽a鈥 como una frase bastante com煤n, con lo cual 鈥渞eino鈥 y 鈥渆spa帽a鈥 tendr铆an que tener un PMI alto (en este caso por ejemplo 0.95) mientras que 鈥渟illa鈥 y 鈥渆spa帽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.