如何仅在存储的单词列表中在text2vector中生成文档术语矩阵

时间:2017-07-28 12:34:22

标签: r text-mining text2vec

text2vec中的文法是什么来向量化文本并使用指定的单词列表来实现dtm?

如何仅对指定的要素进行矢量化和生成文档术语矩阵?如果功能没有出现在文本中,变量应保持为空。

我需要生成与dtm中完全相同的列的术语文档矩阵我运行建模,否则我不能在新文档上使用随机森林模型。

2 个答案:

答案 0 :(得分:2)

  

我需要生成与dtm完全相同的列的术语文档矩阵我运行建模,否则我不能在新文档上使用随机森林模型。

quanteda 中,您可以使用dfm_select()将测试集的功能设置为与训练集的功能相同。例如,要使下面的dfm1具有与dfm2相同的功能:

txts <- c("a b c d", "a a b b", "b c c d e f")

(dfm1 <- dfm(txts[1:2]))
## Document-feature matrix of: 2 documents, 4 features (25% sparse).
## 2 x 4 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d
##   text1 1 1 1 1
##   text2 2 2 0 0
(dfm2 <- dfm(txts[2:3]))
## Document-feature matrix of: 2 documents, 6 features (41.7% sparse).
## 2 x 6 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d e f
##   text1 2 2 0 0 0 0
##   text2 0 1 2 1 1 1

dfm_select(dfm1, dfm2, valuetype = "fixed", verbose = TRUE)
## kept 4 features, padded 2 features
## Document-feature matrix of: 2 documents, 6 features (50% sparse).
## 2 x 6 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d e f
##   text1 1 1 1 1 0 0
##   text2 2 2 0 0 0 0

对于特征上下文矩阵( text2vec 对输入的需求)但是,这不起作用,因为共现(至少那些用窗口而不是文档上下文计算的)是相互依赖的功能,所以你不能简单地以相同的方式添加和删除它们。

答案 1 :(得分:1)

您只能从特定功能集创建文档字词矩阵:

v = create_vocabulary(c("word1", "word2"))
vectorizer = vocab_vectorizer(v)
dtm_test = create_dtm(it, vectorizer)

但是我并不建议1)对这些稀疏数据使用随机森林 - 它不会很好地工作2)执行你描述的特征选择 - 你可能会过度配备。