文档向量中的哪些“信息”使情感预测起作用?
What “information” in document vectors makes sentiment prediction work?
基于文档向量的情绪预测效果很好,如示例所示:
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 获得的并且训练有素,预测测试集 80如果直接用作逻辑回归的输入,% 是正确的):
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 对单值输入的大致所有操作都是尝试选择一个阈值数字,当您的距离位于该阈值的一侧时,预测 class – 而在另一侧边,预测不是-class。
将单阈值距离重铸回原来的 100 维 space,它本质上是试图在随机点周围找到一个超球面,它可以很好地收集所有单个 class 在其体积内部或外部。
在复杂的高维 space 中,您随机放置的中心点加上一个可调半径可以做到这一点的几率是多少?我的直觉是:不是很多。而你的结果,并不比随机猜测好多少,似乎也是如此。
可访问完整 100 维的 LogisticRegression 找到一个判别边界,用于分配由 100 个系数和一个截距值描述的 class——所有这 101 个值(自由参数)都可以进行调整以提高其 class 化性能。
相比之下,只能访问一个 'distance-from-a-random-point' 维度的替代 LogisticRegression 只能选择一个系数(用于距离)和一个 intercept/bias。它有 1/100 的信息可以使用,而且只有 2 个免费参数可以调整。
作为类比,考虑一个更简单的 space:地球表面。选择一个 'random' 点,比如南极。如果我然后告诉你你在距南极 8900 英里的一个未知地方,你能回答你更有可能在美国还是在中国吗?几乎没有——这两个 'classes' 的位置都有很多距离南极 8900 英里的实例。
只有在极端情况下,距离才能确定您在哪个 class(国家/地区)– 因为美国阿拉斯加和夏威夷的部分地区比中国部分地区更南北。但即使在那里,您也无法仅使用一个阈值来很好地管理:您需要一个规则 "less than X or greater than Y, in USA; otherwise unknown"。
Doc2Vec 向量(或其他丰富的数据源)的 100 维 space 通常只能根据更复杂的规则进行合理划分。而且,我们对基于 2 维或 3 维 spaces 的距离和体积的直觉常常会使我们误入歧途,在高维度上。
不过,地球类比确实提出了一条前进的道路:地球上有 一些参考点 会更好,当你知道它们的距离时,在决定如果你在美国或中国。特别是,位于美国中心或中国中心的一个点会非常有效。
同样,如果您选择 (a) 已知 class 的任何点,而不是随机 fix_vec
,您可能会获得更好的 class化准确度;或 (b) 一个 class 的所有已知点的某个平均值。在任何一种情况下,您的 fix_vec
都可能是 "in a neighborhood" 相似示例,而不是某个随机点(与您的 classes 没有比南极更重要的关系北半球温带国家)。
(另外:或者选择 N 个多个随机点,然后将 N 个距离输入回归,将保留原始 Doc2Vec 数据的更多 information/shape,从而给出 class ifier 更有可能找到有用的分离阈值。两个可能比你的一个距离做得更好,100 个可能接近或超过 100 个原始维度。)
最后,关于 Doc2Vec 方面的一些评论:
Doc2Vec 优化了在其约束模型中在预测文本单词方面表现较好的向量。积极情绪词往往会一起出现,消极情绪词也是如此,因此经过训练的文档向量在需要预测相似含义的词时倾向于将自己安排在相似的位置。因此,doc-vector space 的 'neighborhoods' 可能与主要的积极情绪或消极情绪词相关,因此与积极或消极情绪相关。
这些不一定是两个巨大的社区,'positive' 和 'negative',由一个简单的边界隔开——甚至是少数符合我们 3-D 实体体积想法的社区。许多交流的微妙之处——比如讽刺、引用一个不被接受的观点来批评它、花更多的时间在消极方面但最终得出积极的结论等——意味着替代情感词对文本的侵入。完全理解语言的人类代理可以理解这些以得出 'true' 情绪,而这些基于单词出现的方法仍然会感到困惑。
但是如果有足够的模型和适当数量的自由参数,classifier 可能会捕捉到一些关于高维 space 的普遍洞察力。在这种情况下,您可以使用 Doc2Vec 维度实现相当不错的预测——正如您在完整的 100 维向量上看到的 ~80%+ 结果。
基于文档向量的情绪预测效果很好,如示例所示: 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 获得的并且训练有素,预测测试集 80如果直接用作逻辑回归的输入,% 是正确的):
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 对单值输入的大致所有操作都是尝试选择一个阈值数字,当您的距离位于该阈值的一侧时,预测 class – 而在另一侧边,预测不是-class。
将单阈值距离重铸回原来的 100 维 space,它本质上是试图在随机点周围找到一个超球面,它可以很好地收集所有单个 class 在其体积内部或外部。
在复杂的高维 space 中,您随机放置的中心点加上一个可调半径可以做到这一点的几率是多少?我的直觉是:不是很多。而你的结果,并不比随机猜测好多少,似乎也是如此。
可访问完整 100 维的 LogisticRegression 找到一个判别边界,用于分配由 100 个系数和一个截距值描述的 class——所有这 101 个值(自由参数)都可以进行调整以提高其 class 化性能。
相比之下,只能访问一个 'distance-from-a-random-point' 维度的替代 LogisticRegression 只能选择一个系数(用于距离)和一个 intercept/bias。它有 1/100 的信息可以使用,而且只有 2 个免费参数可以调整。
作为类比,考虑一个更简单的 space:地球表面。选择一个 'random' 点,比如南极。如果我然后告诉你你在距南极 8900 英里的一个未知地方,你能回答你更有可能在美国还是在中国吗?几乎没有——这两个 'classes' 的位置都有很多距离南极 8900 英里的实例。
只有在极端情况下,距离才能确定您在哪个 class(国家/地区)– 因为美国阿拉斯加和夏威夷的部分地区比中国部分地区更南北。但即使在那里,您也无法仅使用一个阈值来很好地管理:您需要一个规则 "less than X or greater than Y, in USA; otherwise unknown"。
Doc2Vec 向量(或其他丰富的数据源)的 100 维 space 通常只能根据更复杂的规则进行合理划分。而且,我们对基于 2 维或 3 维 spaces 的距离和体积的直觉常常会使我们误入歧途,在高维度上。
不过,地球类比确实提出了一条前进的道路:地球上有 一些参考点 会更好,当你知道它们的距离时,在决定如果你在美国或中国。特别是,位于美国中心或中国中心的一个点会非常有效。
同样,如果您选择 (a) 已知 class 的任何点,而不是随机 fix_vec
,您可能会获得更好的 class化准确度;或 (b) 一个 class 的所有已知点的某个平均值。在任何一种情况下,您的 fix_vec
都可能是 "in a neighborhood" 相似示例,而不是某个随机点(与您的 classes 没有比南极更重要的关系北半球温带国家)。
(另外:或者选择 N 个多个随机点,然后将 N 个距离输入回归,将保留原始 Doc2Vec 数据的更多 information/shape,从而给出 class ifier 更有可能找到有用的分离阈值。两个可能比你的一个距离做得更好,100 个可能接近或超过 100 个原始维度。)
最后,关于 Doc2Vec 方面的一些评论:
Doc2Vec 优化了在其约束模型中在预测文本单词方面表现较好的向量。积极情绪词往往会一起出现,消极情绪词也是如此,因此经过训练的文档向量在需要预测相似含义的词时倾向于将自己安排在相似的位置。因此,doc-vector space 的 'neighborhoods' 可能与主要的积极情绪或消极情绪词相关,因此与积极或消极情绪相关。
这些不一定是两个巨大的社区,'positive' 和 'negative',由一个简单的边界隔开——甚至是少数符合我们 3-D 实体体积想法的社区。许多交流的微妙之处——比如讽刺、引用一个不被接受的观点来批评它、花更多的时间在消极方面但最终得出积极的结论等——意味着替代情感词对文本的侵入。完全理解语言的人类代理可以理解这些以得出 'true' 情绪,而这些基于单词出现的方法仍然会感到困惑。
但是如果有足够的模型和适当数量的自由参数,classifier 可能会捕捉到一些关于高维 space 的普遍洞察力。在这种情况下,您可以使用 Doc2Vec 维度实现相当不错的预测——正如您在完整的 100 维向量上看到的 ~80%+ 结果。