IIC2233-2016-1 / syllabus

Página principal del curso
32 stars 34 forks source link

Vector IDF T07 #606

Closed ManuelSIlvaCav closed 8 years ago

ManuelSIlvaCav commented 8 years ago

Para las issues repetidas, el vector IDF como se calcula exactamente? Estuve averiguando y en wikipedia aparece que se calcula como log[ (numero de issues)/{1 + (issues en las que aparece la palabra) }] para cada palabra del vector TF.... es asi o alguna forma mas facil?

Gracias!

ivaniadg commented 8 years ago

Así se calcula. Para hacer los cálculos más fáciles pueden usar numpy (está dentro de las librerías permitidas)

vbarros2 commented 8 years ago

No entiendo como sacar la norma entre dos vectores:

Si es el vector para el cual estoy buscando issues parecidas es ["hola", 'como', 'estas']... El vector IDF podria ser [1.233, 1.1, 1.224].

Si comparando me aparece el vector ['todo', 'bien', 'estas', 'ahi'], mi vector IDF seria algo como [0, 0, 1.224]... el IDF es el mismo ya que poseen las mismas variables para calcularlo?? (creo que es asi).

Entonces cuando saco la norma seria raiz((1.233-0)^2 + (1.1-0)^2 + (1.224-1.224)^2) ??

Esto esta bien... Perdón pero no me queda claro con el enunciado y no quiero tenerlo incorrecto por error de comprensión.

Gracias!

rodolfopalma commented 8 years ago

@vbarros2 para poder comparar los vectores necesitas que los índices de ambas listas correspondan a las mismas palabras. En #610 se habló algo relacionado.

sdiez1 commented 8 years ago

En wikipedia sale, como dijo @ManuelSIlvaCav , dicen como calcular:

TF -> (frecuencia de termino) IDF -> log[ (numero de issues)/{1 + (issues en las que aparece la palabra) }]

Pero me dicen que debo calcular el vector IDF de cada uno de los vectores TF. Como sale ahí el vector IDF debiera de ser uno. De longitud la cantidad de palabras que solicito. Además en varias partes sale algo de multiplicar ambos vectores. Porfavor si me pueden explicar como se calcula el IDF

Gracias!

ivaniadg commented 8 years ago

Digamos tienes las siguientes issues [['clase', 'funcion', 'método'], ['clase', 'método'], ['funcion', 'método']] que generan el siguiente diccionario [clase', 'funcion', 'método']. La nueva issue ['clase', 'método'] tendrá el siguiente vector TF [1, 0, 1]. El vector idf es [log (3/2), log (log (3/2), log (3/3)]. El vector TF-IDF de la issue es la multiplicación de estos vectores que da como resultado [log (3/2), 0, 0]

sdiez1 commented 8 years ago

Muchas gracias!

jpdattas commented 8 years ago

@indonoso por que dices "la nueva issue"? en el enunciado sale "seleccionar una issue dentro de las que existan en el repositorio". Se supone que esa no se cuenta para hacer el diccionario? Es la misma segunda issue que listaste o es otra issue con mismas palabras?

e IDF sería entonces : log[ (numero de issues)/{1 + (issues en las que aparece la palabra) }] ? o log[ (numero de issues)/{issues en las que aparece la palabra}] ? que seria lo que pusiste tu(segun entiendo)

edit: y en el enunciado sale "IDF de cada uno de ellos." pero según entiendo en tu explicación sería el IDF de todas las issues o no?

ivaniadg commented 8 years ago

A cada issue i le vas a buscar las dos issues más parecidas que fueron creadas antes que i. El uno en el denominador se pone cuando issues en que aparece la palabra es cero (esto puede ocurrir si usas un diccionario externo, y no generado por el set datos). Es para evitar divisiones por cero.

jpdattas commented 8 years ago

y seria el idf común para todas las issues o no?

ivaniadg commented 8 years ago

Sí :smile:

jpdattas commented 8 years ago

aa ok muchas gracias!

fnquinteros commented 8 years ago

así y todo no me quedó claro...

@indonoso en tu explicación arriba, tu vector IDF tiene un elemento log(log(3/2), log(3/3))... eso está bien? :S

Se supone que debemos agarrar todas las palabras de todas las issues, meterlas en una lista (obviamente ya habiendo filtrado las stopwords), formar los vectores TF de todas las issues y luego qué?

El vector IDF es propio de cada issue/vector TF? o hay un solo vector IDF para todas las issues?

Hay una forma de sacar las 2 issues más parecidas a la issue en cuestión sin usar el vector IDF? (para qué sirve ese vector de todas formas :S)

jpdattas commented 8 years ago

es log[ (numero de issues)/{(issues en las que aparece la palabra) }] pero si lo de abajo es cero, en vez haces log[ (numero de issues)/{1 + (issues en las que aparece la palabra) }]

yo entiendo que se saca el TF y TF-IDF de cada uno. ( el idf es comun. ) y se saca la distancia entre los TF-IDF

fnquinteros commented 8 years ago

pero para el idf se hace el calculo para cada palabra y se hace un vector [único?] donde los elementos del vector son los resultados obtenidos en cada calculo?

jpdattas commented 8 years ago

segun entiendo el idf es vector unico y el TF-IDF se saca para cada uno.

donde los elementos del vector son los resultados obtenidos en cada calculo?

si

fnquinteros commented 8 years ago

buena, gracias!

jpdattas commented 8 years ago

@fnquinteros la verdad es que mi algoritmo solo me esta devolviendo los issues mas cortos. quizas tengo un error en alguna parte o no entendi bien, no se

jpdattas commented 8 years ago

@caackermann nunca jaja

caackermann commented 8 years ago

@jpdattas acabo de cachar que lo dijeron mas arriba jaja. A que se refieren con la multiplicacion de los vectores TF-IDF? Producto punto, producto cruz, multiplicar cada elemento?

Meaylwin commented 8 years ago

existe una issue que tiene como titulo "el", y no tiene body, por lo que es 0

jpdattas commented 8 years ago

cierto. en esa seria 0.

Yo hice producto punto, asumi que se habia equivocado arriba pero mi algoritmo me da siempre los issues mas chicos (siempre devuelve lo mismo independiente del issue al que le busque similares) asique no se realmente si es error de codigo o de haber entendido

caackermann commented 8 years ago

Pero el producto punto entre 2 vectores no es un escalar?

jpdattas commented 8 years ago

osea nada que ver, hice producto de cada elemento

ivaniadg commented 8 years ago

Deben multiplicar vectores de tamaño (1, n) x (n, 1) (donde (filas, columnas)). Así obtendrán el vector TF-IDF de la issue. Después buscar la issue más parecida a la issue i deben tener el vector TF-IDF de cada una de las issues creadas antes de i y obtener el valor min([|issue_i - issue_k|^2 for k in N])donde N es el número de issues, |issue_i - issue_k|^2 es un escalar.

caackermann commented 8 years ago

Ahh perfecto. Gracias!