请注意,word2vec 本质上并不是一种对句子进行建模的方法,而只是对单词进行建模。因此,没有单一的官方方法来使用 word2vec 来表示句子。
一次快速而粗略的方法是通过对所有词向量进行平均来为句子(或其他多词文本)创建一个向量。它速度快,总比没有好,并且可以完成一些简单的(广泛主题的)任务 - 但不能很好地捕捉文本的完整含义,特别是任何依赖于语法、一词多义的含义,或复杂的上下文提示。
尽管如此,您仍然可以使用它来获取每个短文本的固定大小的向量,并计算这些向量之间的成对相似度/距离,并将结果输入到降维算法中以用于可视化或其他目的。
其他算法实际上为较长的文本创建向量。与 word2vec 密切相关的浅层算法是“段落向量”,在 Gensim 中可用作为Doc2Vec
班级。但它仍然不是很复杂,并且仍然不具备语法意识。许多更深层次的网络文本模型(例如 BERT、ELMo 等)可能是可行的。
Word2vec 及相关算法非常需要数据:它们的所有有益品质都源于同一个单词的许多不同用法示例之间的拉锯战。因此,如果您有一个玩具大小的数据集,您将不会获得一组具有有用相互关系的向量。
而且,较大数据集中的稀有单词不会获得良好的向量。在训练中,通常会丢弃出现在某些单词下面的单词,就好像它们根本不存在一样。min_count
频率 - 因为它们的向量不仅会因为一个或几个特殊的样本使用而变得很差,而且因为总共有很多这样的代表性不足的单词,所以保留它们往往会使other词向量也更糟。它们是噪音。
所以,你提出的采取的想法个人的实例travel
用单一外观标记替换它们很可能会产生有趣的结果。降低你的min_count
到 1 将为您提供每个变体的向量 - 但它们的质量会比其他单词向量差得多(并且更加随机),与其他单词相比,它们受到的训练关注相对较少,并且每个变体都完全受到他们周围的几个单词(而不是所有周围上下文的整个范围)都有助于对统一的有用定位做出贡献travel
token).
(你也许可以通过(1)保留句子的原始版本来稍微抵消这些问题,所以你仍然得到travel
向量; (2) 多次重复你的标记损坏的句子,并重新排列它们以出现在整个语料库中,以在某种程度上模拟你的合成上下文的更真实的情况。但如果没有真正的多样性,此类单上下文向量的大多数问题仍将存在。)
另一种可能的比较方法travel_sent_A
, travel_sent_B
等将忽略确切的向量travel
or travel_sent_X
完全,而是为该单词周围的 N 个单词编译一个摘要向量。例如,如果您有 100 个该词的示例travel
,创建 100 个向量,分别代表 N 个单词around旅行。这些向量可能会显示一些模糊的簇/邻域,特别是在单词具有非常不同的替代含义的情况下。 (一些研究采用 word2vec 来解决一词多义问题,使用这种context vector
影响/选择替代词义的方法。)
您可能还会发现这项关于将单词建模为从话语的替代“原子”中提取的研究很有趣:词义的线性代数结构 http://www.offconvex.org/2016/07/10/embeddingspolysemy/
如果您有类似标题的短文本,并且只有词向量(没有进行更深入建模的数据或算法),您可能还需要研究“词移动器距离”计算来比较文本。它不是将单个文本简化为单个向量,而是将其建模为“词向量包”。然后,它将距离定义为将一个包转换为另一个包的成本。 (更多相似的单词比不太相似的单词更容易相互转换,因此非常相似的表达方式,仅替换了几个同义词,报告为非常接近。)
计算较长的文本可能会非常昂贵,但对于短语和小标题/推文/等可能效果很好。它可以在 Gensim 上使用KeyedVector
类为wmdistance() https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.FastTextKeyedVectors.wmdistance。本文中的一个示例说明了它可能有助于发现相关性:使用 Word Mover’s Distance 导航餐厅评论中的主题 http://tech.opentable.com/2015/08/11/navigating-themes-in-restaurant-reviews-with-word-movers-distance/