使用 R Server 对大数据进行文本挖掘

数据挖掘 机器学习 r 大数据 文本挖掘
2022-02-22 05:48:43

我有一张大桌子(1.5 亿行和约 70 列)。在表中的三列中,我有文本输入(3-20 个字/列),我需要将其用于分类算法。

对于较小的数据集,我使用了 tm R 包并创建了 DocumentTermMatrix,其中我使用单词(或单词部分)的频率作为 SVM 和决策森林算法中的预测变量。

但是,现在我的数据集要大得多,这就是为什么我将其转换为 xdf 文件并使用 RevoScaleR 包进行合并、加入等。

但是,我不确定如何对非常大的数据集进行文本挖掘(例如,创建一个可用于分类的文档术语矩阵)。我没有找到任何预构建功能。可以在一大块数据中创建一个文档术语矩阵,然后以某种方式对频率求和。我不确定这是否是最好的方法,你能帮我吗?

谢谢你,丽莎

2个回答

感谢你的回复。偶然我发现 MicrosoftML ( https://msdn.microsoft.com/en-us/microsoft-r/microsoftml-introduction ) 提供了我所需要的——通过使用 Microsoft R 客户端和 R 服务器中提供的 featureizeText 函数。也许它可以帮助其他人-我找到了他们的示例,并且可以将其转换为我的数据(Microsoft ML 下的 featureizeText() 帮助)。

trainReviews <- data.frame(review = c( 
        "This is great",
        "I hate it",
        "Love it",
        "Do not like it",
        "Really like it",
        "I hate it",
        "I like it a lot",
        "I kind of hate it",
        "I do like it",
        "I really hate it",
        "It is very good",
        "I hate it a bunch",
        "I love it a bunch",
        "I hate it",
        "I like it very much",
        "I hate it very much.",
        "I really do love it",
        "I really do hate it",
        "Love it!",
        "Hate it!",
        "I love it",
        "I hate it",
        "I love it",
        "I hate it",
        "I love it"),
     like = c(TRUE, FALSE, TRUE, FALSE, TRUE,
        FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE,
        FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, 
        FALSE, TRUE, FALSE, TRUE), stringsAsFactors = FALSE
    )

    testReviews <- data.frame(review = c(
        "This is great",
        "I hate it",
        "Love it",
        "Really like it",
        "I hate it",
        "I like it a lot",
        "I love it",
        "I do like it",
        "I really hate it",
        "I love it"), stringsAsFactors = FALSE)


outModel <- rxLogisticRegression(like ~ reviewTran, data = trainReviews,
    mlTransforms = list(featurizeText(vars = c(reviewTran = "review"),
    stopwordsRemover = stopwordsDefault(), keepPunctuations = FALSE)))
# 'hate' and 'love' have non-zero weights summary(outModel)

你的意思是 1.5 亿和 70 列吗?

是的,创建 DTM 很容易耗尽内存。这是与此处类似的问题:

大型数据集上的文本挖掘

就像他们谈论的那样,我会创建拆分(批量)并将块保存到文件或数据库中。当需要进行分类时,如果您抽取 10,000 个随机抽样的行,看看它是如何工作的。