【问题标题】:Working with text classification and big sparse matrices in R在 R 中处理文本分类和大稀疏矩阵
【发布时间】:2016-12-09 20:39:24
【问题描述】:

我正在从事一个文本多类分类项目,我需要构建文档/术语矩阵并用 R 语言进行训练和测试。

我已经有不适合 R 中基矩阵类的有限维度的数据集,并且需要构建大型稀疏矩阵才能对例如 10 万条推文进行分类。我正在使用 quanteda 包,因为它现在比包 tm 更有用和更可靠,其中使用字典创建 DocumentTermMatrix 会使该过程非常耗内存与小数据集。目前,正如我所说,我使用 quanteda 来构建等效的 Document Term Matrix 容器,稍后我将其转换为 data.frame 来执行训练。

我想知道是否有办法构建如此大的矩阵。我一直在阅读有关允许这种容器的 bigmemory 包,但我不确定它是否可以与 caret 一起用于以后的分类。总的来说,我想了解这个问题并建立一个解决方法,以便能够处理更大的数据集,因为 RAM 不是一个(大)问题(32GB),但我正在尝试找到一种方法来解决这个问题,我感到完全迷失了关于它。

【问题讨论】:

    标签: r classification text-mining r-caret quanteda


    【解决方案1】:

    你在什么时候达到了 ram 限制?

    quanteda 是在中等数据集上使用 NLP 的好包。但我也建议尝试我的text2vec 包。一般来说,它对内存非常友好,不需要将所有原始文本加载到 RAM 中(例如,它可以为 16gb 笔记本电脑上的维基百科转储创建 DTM)。

    第二点,我强烈不建议将数据转换成data.frame。尝试直接使用sparseMatrix 对象。

    以下方法适用于文本分类:

    1. 带有 L1 惩罚的逻辑回归(参见 glmnet 包)
    2. 线性 SVM(请参阅 LiblineaR,但值得寻找替代方案)
    3. 也值得一试`xgboost.我更喜欢线性模型。所以你可以试试线性助推器。

    【讨论】:

    • (花了很多时间来编辑那个答案......)我一直在看 text2vec 包,听起来很有趣。我正在考虑试一试,但我需要了解如何使用创建的 DTM 通过分类执行 - 我需要使用插入符号 - 因为据我所知,这个对象是 dgCMatrix 或 dgTMatrix。我可以直接将此对象提供给插入符号中的 train 函数吗?谢谢!
    • dgCMatrix from Matrix 包是 R 中稀疏矩阵的“标准”。我没有尝试过caret,但您可以对这个主题感兴趣:github.com/topepo/caret/issues/31。似乎插入符号支持开箱即用的稀疏矩阵。
    • 事实上quantedas dfm-class继承自dgCMatrix-class。因此,如果您的代码适用于 dfm-class,在大多数情况下它也适用于 dgCMatrix
    • 谢谢!我现在正在努力。交叉手指!
    • 我想是的。但是请提供带有完整管道的简单可重现示例。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2013-03-02
    • 2012-09-04
    • 2016-07-02
    • 2021-02-02
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多