R:text2vec DTM的凭证编号与原始凭证编号不正确

时间:2018-01-19 17:17:51

标签: r text2vec

我是一名经常使用text2vec的学生。

直到去年,我使用这个程序没有任何问题。

但是今天当我使用Parallel功能构建DTM时,DTM文档的数量与原始文档编号不一致。

DTM的文档数量与原始文档的数量相匹配,并且已注册核心。因此,怀疑并行处理后结果没有合并。

我测试的附加代码。

library(stringr)
library(text2vec)
library(data.table)
library (parallel)
library (doParallel)

N <- detectCores()
cl <- makeCluster (N)
registerDoParallel (cl)

data("movie_review")

setDT(movie_review)
setkey(movie_review, id)

##number of document is 5000
IT <- itoken_parallel (movie_review$review,
                       ids          = movie_review$id,
                       tokenizer    = word_tokenizer,
                       progressbar  = F)


VOCAB <- create_vocabulary (
    IT, 
    ngram = c(1, 1)) %>%
    prune_vocabulary (term_count_min = 3)

VoCAB.order <- VOCAB[order((VOCAB$term_count), decreasing = T),]

VECTORIZER <- vocab_vectorizer (VOCAB)

DTM <- create_dtm (IT,              
                   VECTORIZER,      
                   distributed = F)

##DTM dimension is not 5000. number is 5000/4(number of Cores) = 1250
dim(DTM)

我在Vignette中检查了text2vec itoken函数。我找到了用itoken测试并行处理的例子,并且处理得很好而没有错误。

在此过程中,如何使用停用词和最小频率功能?

N_WORKERS = 1 # change 1 to number of cores in parallel backend
if(require(doParallel)) registerDoParallel(N_WORKERS)
data("movie_review")
it = itoken_parallel(movie_review$review[1:100], n_chunks = N_WORKERS)
system.time(dtm <- create_dtm(it, hash_vectorizer(2**16), type = 'dgTMatrix'))

我期待真诚地回答。

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

您好请删除distributed = F。这是一个错误(distributed = F捕获到省略号here)。我会修好它。谢谢你的报道!

关于第二个问题 - 没有好的解决方案。您可以使用colSums函数手动计算频繁/非频繁单词(实际哈希值),但我不建议这样做。

UPD - fixed now