当我对用自然语言编写的文档进行分类和聚类时,我想出了一个问题......
作为word2vec和手套,等等,在分布式空间中对单词进行矢量化,我想知道是否有任何推荐或常用于文档向量化的方法使用单词向量。
例如,
文件1:"如果你追逐两只兔子,你将失去它们。"
可以被矢量化为,
[0.1425,0.2718,0.8187,......,0.1011]
我知道一个也称为doc2vec的文件,这个文件有n个维度,就像word2vec一样。但这是1 x n维,我一直在测试,以找出使用doc2vec的限制。
所以,我想知道其他人如何将单词vector用于稳定大小的应用程序。
仅使用m个单词堆叠向量将形成m×n维向量。在这种情况下,矢量维度不会是统一的,因为维度m将取决于文档中的单词数。如果:[0.1018,...,0.8717]
你:[0.5182,...,0.8981]
..:[...]
字:[...]
这种形式不适合运行某些机器学习算法,如CNN。使用单词向量以稳定形式生成文档向量的建议方法是什么?
如果提供论文也会很棒。
谢谢!
答案 0 :(得分:2)
从文本中获取固定大小的向量的最简单方法是,当你所有的都是单词向量时,将所有单词向量平均在一起。 (矢量可以加权,但如果它们没有经过单位长度标准化,那么它们的训练原始幅度有点指示它们的单一意义强度 - 多义/模糊单词倾向于具有较小幅度的向量。)它可用于许多目的。
如果训练文本已经与已知类相关联,则可以专门训练单词向量以更好地进行这样的构图。 Facebook的“分类”模式的FastText就是这样做的;为了预测它们出现的文本的输出类,单词向量被优化得更多或更多,因为它们用于预测它们的上下文窗口邻居(经典的word2vec)。
“段落矢量”技术,通常称为“doc2vec”,为每个训练文本提供一种浮动的伪词,它有助于每个预测,因此最终会出现一个类似于矢量的位置,可能代表完整文本,而不是单个单词/上下文。
还有许多其他变体,包括一些基于更深层预测网络(例如'Skip-thought Vectors'),或稍微不同的预测目标(例如'fastSent'中的邻近句子),或其他甚至可能包含混合物的泛化培训期间的符号和数字输入/目标(Facebook的StarSpace中的一个选项,它探索与字向量和类似快速文本的分类需求相关的其他实体向量化可能性)。
如果您不需要将文本折叠为固定大小的向量,而只是比较文本,那么还有一些技术,例如“Word Mover的距离”,它将“文字向量包”作为一个文本,另一个文本,并给出相似度分数。