【问题标题】:How do we use a Random Forest for sentence-classification using word-embedding我们如何使用随机森林进行词嵌入的句子分类
【发布时间】:2023-03-23 20:32:01
【问题描述】:

当我们有一个随机森林时,我们有 n 个输入和 m 个特征,例如我们有 3 个观察值和 2 个特征

X = [[1,23],[0,-12],[-0.5,29]]
y = [1,0,1]

我们可以训练一个随机森林

from sklearn.ensemble import RandomForestClassifier
model = RandomForest()
model.fit(X,y)

如果我使用 100 维向量进行词嵌入,我们如何创建 X 矩阵,其中每个输入都是一个句子?

假设我们有以下单词["I","like","dogs","cats"]的3维嵌入:

I = [-0.5,0,1]
like = [5,2,3]
dogs = [1,2,3]
cats = [3,2,1]

那么数据集 ["I like dogs","I like cats"] 将是

X = [
[[-0.5,0,1], [5,2,3], [1,2,3]],
[[-0.5,0,1], [5,2,3], [3,2,1]]
]
y = ["dog-lover","cat-lover"]

RF 自然无法训练从而给出错误ValueError: Found array with dim 3. Estimator expected <= 2.

除了 RF 可能不适合 NLP - 有没有办法这样做?

【问题讨论】:

    标签: python nlp random-forest word-embedding


    【解决方案1】:

    我认为在 3 维输入上执行随机森林分类器是不可能的,但作为一种替代方法,您可以使用 句子嵌入 而不是词嵌入。因此,您的输入数据将是此分类器预期的二维 ((n_samples, n_features))。
    获取句子嵌入向量的方法有很多种,包括Doc2VecSentenceBERT,但最简单常用的方法是对所有单词做一个element-wise average嵌入向量。
    在您提供的示例中,嵌入长度被认为是 3。假设句子是“我喜欢狗”。所以句子嵌入向量将计算如下:

    I = [-0.5,0,1]
    like = [5,2,3]
    dogs = [1,2,3]
    cats = [3,2,1]
    
    # sentence: 'I like dogs'
    sentence = [-0.5+5+1, 0+2+2, 1+3+3] / 3
             = [5.5, 4, 7] / 3
             = [1.8333, 1.3333, 2.3333]
    

    【讨论】:

    • 您对此有任何参考吗?我在训练神经网络时遇到了同样的问题(例如每个特征都是 100 维)
    • this tutorial的第三部分有一些关于向量平均方法的很好的解释。 This code 也用于 RandomForest 分类器的相同方法。但是神经网络在处理词嵌入时应该没有任何问题。例如,您可以使用 Keras 库中的 Embedding Layer 处理这些向量。
    猜你喜欢
    • 2022-06-11
    • 2018-05-18
    • 2017-05-28
    • 2019-09-05
    • 2013-09-22
    • 2018-02-18
    • 2015-09-23
    • 2014-03-08
    • 2014-03-25
    相关资源
    最近更新 更多