1

基于文档向量的情绪预测效果很好,如示例所示: 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。(注意,文档向量是从 genism doc2vec 获得的并且经过良好训练,如果直接用作逻辑回归):

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%....所以,我的问题是,向量中有什么“信息”,如果不是,则使基于向量的预测有效向量的相似性?还是我的方法根本无法正确捕获向量的相似性?

4

1 回答 1

1

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

你的方法是将 100 维折叠成一个维度——到你的随机点的距离。然后,您希望单一维度仍然可以预测。

大致上,LogisticRegression 对单值输入所能做的就是尝试选择一个阈值,当你的距离在该阈值的一侧时,预测一个类别——而在另一侧,预测不是那个类别。

将该单阈值距离重铸回原始的 100 维空间,它本质上是在尝试在您的随机点周围找到一个超球体,它可以很好地收集其体积内部或外部的所有单个类。

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

可以访问完整 100 维的 LogisticRegression 找到了分配由 100 个系数和一个截距值描述的类的判别边界——并且所有这 101 个值(自由参数)都可以调整以提高其分类性能。

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

作为一个类比,考虑一个更简单的空间:地球表面。选择一个“随机”点,比如南极。如果我告诉你你在一个距离南极 8900 英里的未知地方,你能回答你更可能在美国还是中国?几乎没有——这两个“类别”的位置都在距南极 8900 英里的地方有很多实例。

只有在极端情况下,距离才能确定你所在的阶级(国家)——因为美国阿拉斯加和夏威夷的部分地区比中国部分地区更南北。但即使在那里,你也不能只用一个阈值来很好地管理:你需要一个规则,“在美国小于 X大于 Y;否则未知”。

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

尽管如此,地球的类比确实提出了一条前进的道路:地球上有一些参考点会更好地工作,当你知道它们的距离时,决定你是在美国还是中国。特别是,在美国中心或中国中心的一个点会非常有效。

fix_vec类似地,如果您选择(a)类已知的任何点,而不是随机的,您可能会获得更好的分类准确度;或 (b) 一类所有已知点的平均值。无论哪种情况,您fix_vec都可能在类似示例的“附近”,而不是某个随机地点(与您的班级没有比南极与北半球温带国家更重要的关系)。

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

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

Doc2Vec 在其受约束的模型中优化了在预测文本单词方面有些好的向量。积极情绪词往往一起出现,消极情绪词也是如此,因此当需要预测相似意义的词时,训练好的文档向量倾向于将自己排列在相似的位置。因此,文档向量空间中可能存在与主要是积极情绪或消极情绪的词相关的“邻域”,从而与积极或消极的情绪相关。

这些不一定是两个巨大的邻域,“正”和“负”,被一个简单的边界隔开——或者甚至是与我们的 3-D 实体体积想法相匹配的少数邻域。交流的许多微妙之处——例如讽刺、引用一个不持有的观点来批评它、花更多的时间在消极方面但最终得出积极的结论等——意味着另类情感词对文本的侵入。一个完全理解语言的人类代理可以理解这些来得出“真实”的情绪,而这些基于单词出现的方法仍然会被混淆。

但是有了一个合适的模型和正确数量的自由参数,一个分类器可能会捕捉到一些关于高维空间的普遍见解。在这种情况下,您可以使用 Doc2Vec 维度实现相当好的预测——正如您在完整的 100 维向量上看到的 ~80%+ 结果一样。

于 2017-06-01T20:06:09.300 回答