我在对自然语言编写的文档进行分类和聚类时,想到了一个问题…
由于word2vec和glove等技术将词映射到分布式空间中,我很好奇是否有推荐的或常用的方法来使用词向量对文档进行向量化。
例如,
文档1:”如果你追逐两只兔子,你会两手空空。”
可以被向量化为,
[0.1425, 0.2718, 0.8187, …. , 0.1011]
我知道还有被称为doc2vec的方法,该文档有n个维度,就像word2vec一样。但这是一个1 x n的维度,我一直在测试以找出使用doc2vec的限制。
因此,我想了解其他人如何将词向量应用于固定大小的应用中。
简单地将m个词的向量堆叠起来将形成m x n维的向量。在这种情况下,向量的维度将不会是统一的,因为维度m取决于文档中的词数。
如果:[0.1018, … , 0.8717]
你:[0.5182, … , 0.8981]
…:[…]
第m个词:[…]
这种形式不利于运行一些机器学习算法,如CNN。有什么建议的方法可以使用词向量生成固定形式的文档向量吗?
如果能提供相关论文就更好了。
谢谢!
回答:
当你只有词向量时,从文本中获得固定大小的向量的最简单方法是将所有词向量平均在一起。(这些向量可以加权,但如果它们没有进行单位长度归一化,它们在训练中的原始大小在某种程度上是它们单一意义强度的指示——多义/模糊的词往往具有较小的向量大小。)这种方法在许多情况下都效果不错。
如果训练文本已经与已知类别相关联,词向量可以专门训练以更好地进行这种组合。Facebook的FastText在其“分类”模式下就这样做;词向量在预测它们出现的文本的输出类别方面进行了优化,与预测其上下文窗口邻居(经典的word2vec)一样多,甚至更多。
“段落向量”技术,通常称为“doc2vec”,为每个训练文本提供了一个类似浮动的伪词,它有助于每个预测,从而最终获得一个类似词向量的位置,可能代表整个文本,而不是个别词/上下文。
还有许多进一步的变体,包括一些基于更深的预测网络(例如“Skip-thought Vectors”),或者稍微不同的预测目标(例如“fastSent”中的相邻句子),或者其他泛化方法,甚至可以在训练期间包括符号和数值输入/目标的混合(Facebook的StarSpace的一个选项,它探索了与词向量和类似FastText的分类需求相关的其他实体向量化可能性)。
如果你不需要将文本折叠成固定大小的向量,而只是比较文本,还有像“词移动距离”这样的技术,它可以对一个文本和另一个文本的“词向量袋”进行处理,并给出一个相似性分数。