tutorial texto spanish mineria hacer como r nlp bigdata quanteda

texto - quanteda tutorial



Calcular similitudes de coseno en un corpus grande en R usando quanteda (1)

Estoy tratando de trabajar con un gran corpus de aproximadamente 85,000 tweets que estoy tratando de comparar para dialogar de anuncios de televisión. Sin embargo, debido al tamaño de mi corpus, no puedo procesar la medida de similitud del coseno sin obtener el mensaje "Error: no se puede asignar el vector de tamaño n" (26 GB en mi caso).

Ya estoy ejecutando R 64 bit en un servidor con mucha memoria. También intenté usar AWS en el servidor con más memoria, (244 GB), pero fue en vano, (el mismo error).

¿Hay alguna manera de usar un paquete como fread para evitar esta limitación de memoria o simplemente tengo que inventar una forma de descomponer mis datos? Muchas gracias por la ayuda, he agregado el siguiente código:

x <- NULL y <- NULL num <- NULL z <- NULL ad <- NULL for (i in 1:nrow(ad.corp$documents)){ num <- i ad <- paste("ad.num",num,sep="_") x <- subset(ad.corp, ad.corp$documents$num== yoad) z <- x + corp.all z$documents$texts <- as.character(z$documents$texts) PolAdsDfm <- dfm(z, ignoredFeatures = stopwords("english"), groups = "num",stem=TRUE, verbose=TRUE, removeTwitter=TRUE) PolAdsDfm <- tfidf(PolAdsDfm) y <- similarity(PolAdsDfm, ad, margin="documents",n=20, method = "cosine", normalize = T) y <- sort(y, decreasing=T) if (y[1] > .7){assign(paste(ad,x$documents$texts,sep="--"), y)} else {print(paste(ad,"didn''t make the cut", sep="****"))} }


El error probablemente fue causado por versiones anteriores de quanteda (antes 0.9.1-8, en GitHub a partir del 01-01-2016) que forzaron el objeto dfm en matrices densas para llamar a proxy :: simil (). La versión más nueva ahora funciona en objetos dfm dispersos sin coerción para method = "correlation" y method = "cosine" . (Con más métodos dispersos para venir pronto).

Realmente no puedo seguir lo que está haciendo en el código, pero parece que está obteniendo similitudes por pares entre los documentos agregados como grupos. Sugeriría el siguiente flujo de trabajo:

  1. Crea tu dfm con la opción de grupos para todos los grupos de textos que quieras comparar.

  2. Peso este dfm con tfidf() como lo ha hecho.

  3. Utilice y <- textstat_simil(PolAdsDfm, margin = "documents", method = "cosine") y luego fuerce esto a una matriz simétrica completa usando as.matrix(y) . Todos sus documentos emparejados están entonces en esa matriz, y puede seleccionar con la condición de ser mayor que su umbral de 0.7 directamente desde ese objeto.

    Tenga en cuenta que no es necesario normalizar las frecuencias de los términos con method = "cosine" . En las versiones más nuevas de quanteda , el argumento de normalize ha sido eliminado de todos modos, ya que creo que es una mejor práctica de flujo de trabajo ponderar el dfm antes de cualquier cálculo de similitudes, en lugar de construir ponderaciones en textstat_simil() .

Nota final: sugiero que no accedas a las partes internas de un objeto de corpus utilizando el método que tienes aquí, ya que esas partes internas pueden cambiar y luego romper tu código. Utilice texts(z) lugar de z$documents$texts , por ejemplo, y docvars(ad.corp, "num") lugar de ad.corp$documents$num .