machine-learning - 文档向量中的哪些“信息”使情感预测起作用?

标签 machine-learning sentiment-analysis gensim feature-selection doc2vec

如示例所示,基于文档向量的情感预测效果很好。
https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-IMDB.ipynb
http://linanqiu.github.io/2015/10/07/word2vec-sentiment/

我想知道向量中有什么模式使之成为可能。我认为向量的相似性应该可以实现。 Gensim相似性度量依赖于余弦相似性。因此,我尝试了以下方法:

随机初始化一个固定的“比较”向量,获得“比较”向量与训练和测试集中所有其他向量的余弦相似度,使用训练集的相似度和标签估计逻辑回归模型,并使用测试集。

看起来像这样,其中train / test_arrays包含文档矢量,而train / test_labels标签包含0或1。逻辑回归):

fix_vec = numpy.random.rand(100,1)
def cos_distance_to_fix(x):
    return scipy.spatial.distance.cosine(fix_vec, x)

train_arrays_cos =  numpy.reshape(numpy.apply_along_axis(cos_distance_to_fix, axis=1, arr=train_arrays), newshape=(-1,1))
test_arrays_cos = numpy.reshape(numpy.apply_along_axis(cos_distance_to_fix, axis=1, arr=test_arrays), newshape=(-1,1))

classifier = LogisticRegression()
classifier.fit(train_arrays_cos, train_labels)
classifier.score(test_arrays_cos, test_labels)


事实证明,这种方法行不通,只能将测试集预测为50%。
因此,我的问题是,向量中的“信息”是什么,如果不是向量的相似性,那么基于向量的预测就可以工作吗?还是我的方法根本不可能捕获向量的相似性正确?

最佳答案

这不是关于Doc2Vec的问题,而是关于具有高维数据的机器学习原理的问题。

您的方法是将100维压缩为一个维,即到随机点的距离。然后,您希望单一维度仍然可以预测。

几乎所有LogisticRegression都可以使用该单值输入来尝试选择一个阈值数,当您的距离在该阈值的一侧时,该阈值将预测一个类别,而在另一侧,则将预测非该类别。

将单阈值距离重现回原始的100维空间,它实际上是在寻找随机点附近的超球面,从而很好地收集了单个类在其体积之内或之外的所有内容。

在复杂的高维空间中,您随机放置的中心点加上一个可调整的半径可以做到的几率是多少?我的预感是:不多。而且,您的结果似乎比随机猜测更好,但这似乎暗示了相同的结果。

可以访问全部100维的LogisticRegression可以找到一个区分边界,以分配用100个系数和一个截距值描述的类-可以调整所有101个值(自由参数)以提高其分类性能。

相比之下,仅访问一个“距随机点的距离”维的替代LogisticRegression只能选择一个系数(用于距离)和截距/偏差。它具有1/100的可用信息量,并且只有2个免费参数可调整。

打个比方,考虑一个更简单的空间:地球表面。选择一个“随机”点,例如南极。如果我然后告诉您,您在距南极8900英里的不知名地方,您能否回答您在美国还是中国的可能性更大?几乎没有-这两个“类”的位置在距南极8900英里处都有很多实例。

只有在极端情况下,距离才能确定您所处的国家(国家),因为美国阿拉斯加和夏威夷的某些地区比中国的其他地区更南北。但是即使到了那里,您也不能仅凭一个门槛就能很好地进行管理:您需要一条规则说:“在美国小于X或大于Y,否则未知”。

Doc2Vec向量(或其他丰富数据源)的100维空间通常只能被更复杂的规则合理地划分。而且,我们对基于二维或三维空间的距离和体积的直觉通常会使我们误入歧途,在高维度上。

尽管如此,地球的类比确实提出了一个前进的方向:地球上有一些参考点,当您知道它们之间的距离时,在决定您在美国还是中国时,它们会更好地工作。尤其是,在美国中心或中国中心的一点会很好地工作。

同样,如果您选择(a)任何已知类的点,而不是随机的fix_vec,则分类精度可能会更高。 (b)一类所有已知点的平均值。无论哪种情况,您的fix_vec都可能是在“相似”示例的“附近”中,而不是某个随机的点(与南极对北半球温带地区的国家相比,与您的班级没有本质的关系)。

(此外:或者选择N个多个随机点,然后将N个距离输入到回归中,将保留更多原始Doc2Vec数据的信息/形状,从而使分类器有更好的机会找到有用的分离阈值。两个可能比您的一个距离要好,而100个可能会接近或超过100个原始尺寸。)

最后,关于Doc2Vec方面的一些评论:

Doc2Vec在其受约束的模型内优化了一些在预测文本单词方面比较好的矢量。正情感词倾向于与负情感词一起出现,因此,经过训练的文档向量在需要预测相似含义的单词时,倾向于将自己排列在相似的位置。因此,doc-vector空间可能存在与“主要是正面情绪”或“负面情绪”单词相关的“邻居”,因此与正面情绪或负面情绪相关。

这些不一定是两个大的邻域,“正”和“负”,它们之间由简单的边界分隔开来,也不一定是与我们的3D立体体积概念相匹配的少数邻域。沟通的许多微妙之处(例如讽刺,引用不被接受的意见进行批评,在消极方面花费更多时间,但最终得出肯定的结论等)意味着在文本中引入了替代情感词。具备全语言能力的人员可以理解这些内容,从而得出“真实”的情感,而这些基于单词出现的方法仍然会感到困惑。

但是,有了适当的模型和适当数量的自由参数,分类器可能会获得有关高维空间的一些可概括的见解。在这种情况下,您可以使用Doc2Vec维度获得合理良好的预测-正如您在整个100维向量上获得的〜80%以上的结果所看到的那样。

关于machine-learning - 文档向量中的哪些“信息”使情感预测起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306123/

相关文章:

text-mining - 使用 OpenNLP 进行情感分析

python - 当我必须手动运行迭代时,Doc2Vec 和训练中的纪元是什么意思?

python - 是否有可能在 Keras 中实现一个最大池化层,它提供给定池大小的最大 n 值?

python - 是否有推荐的Python机器学习包?

python - python中for循环的聚合结果

python - 情感分析 - 天赋预训练模型分类器。如何加速

tensorflow - 选择每个 Epoch 的步数

python - 如何提取多类分类的随机森林树规则?

python - 我应该如何在布朗语料库上训练 gensim

Gensim LDA 主题分配