我有一个 term-frequency,document-term matrix (dtm-tf),其中每一行都是一个文档,每列都是一个术语,矩阵中的每个数字代表一个数字文件中出现的术语。我还有一个术语 - 上下文矩阵(一个词向量/嵌入矩阵),其中每一行都是来自dtm的一个术语,每一列本质上都是一个数字,可以用来将它与其他单词联系起来在类似的背景下。
这是我所拥有的一个非常简单的可重复的例子:
# Load packages
library(text2vec)
# Create documents
text <- c("I like cats.", "She like dogs.", "She dislikes cats.", "I dislike her.")
# Generate vectorizer
it <- itoken(text, preprocessor = tolower, tokenizer = word_tokenizer, progressbar = F)
vocab <- create_vocabulary(it)
vectorizer <- vocab_vectorizer(vocab)
# Generate document-term matrix
dtm <- as.matrix(create_dtm(it, vectorizer))
# Generate word-context matrix
tcm <- create_tcm(it, vectorizer, skip_grams_window = 10)
glove <- GlobalVectors$new(word_vectors_size = 10, vocabulary = vocab, x_max = 10)
wv_main <- glove$fit_transform(tcm, n_iter = 10, convergence_tol = 0.01)
wv_context <- glove$components
word_vectors <- wv_main + t(wv_context)
根据这些,我想生成一个文档上下文矩阵,其中每一行都是一个文档,每列都是一个表示上下文的数字。
我认为,解决这个问题的最佳方法是平均每个文档中每个单词的单词向量中的相应值。
目前我正在这样做:
dvm <- NULL
for (i in seq(nrow(dtm))) {
terms <- names(which(dtm[i, ] != 0))
dvm <- rbind(dvm, colMeans(word_vectors[terms, ]))
}
对我来说最有效的方法是什么?如果有比平均更好的方法,也可以随意提及。