我们如何使用随机森林使用词嵌入进行句子分类

How do we use a Random Forest for sentence-classification using word-embedding

当我们有一个随机森林时,我们有 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 矩阵,其中每个输入都是一个句子?

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

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

那么数据集[“我喜欢狗”,“我喜欢猫”]将是

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 - 有没有办法做到这一点?

我不认为对 3 维输入执行随机森林分类器是可能的,但作为替代方法,您可以使用 句子嵌入 而不是词嵌入。因此,您的输入数据将是此分类器预期的二维 ((n_samples, n_features))。
获取sentence embedding vector的方法有很多,包括Doc2VecSentenceBERT,但是最简单常用的方法是做一个element-所有词嵌入向量的明智平均。
在您提供的示例中,嵌入长度被认为是 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]