简介
在我之前写的一篇文章中,我们学习了如何使用 PyTorch 的nn.Embedding层将单词转换为密集向量。但是这些向量缺乏任何语义含义,因为嵌入层未经训练。默认情况下,PyTorch 使用随机权重初始化嵌入层,使得生成的向量几乎毫无意义。今天,我们将改变这种情况,并希望为我们的嵌入赋予一些真正的意义。
我们将创建一个小型 Word2Vec 模型。换句话说,我们将使用 Word2Vec 方法来训练我们的嵌入层。
Word2Vec 是一种非常流行的方法,用于从大型文本语料库中学习单词的向量表示。这些向量携带语义信息,因此具有相似含义的单词会映射到向量空间中的附近点。因此,例如,“happy”、“joyful”和“cheerful”这几个词的嵌入会彼此接近。类似地,“car”、“automobile”和“vehicle”会聚在一起。
这些向量实际上反映了训练好的 Word2Vec 模型如何内化各种概念,例如性别差异、地理关系和分类分组(如动物、水果、衣服等),这些概念对于自然语言理解至关重要。
测试和使用您自己训练的词向量是一种神奇的体验。想象一下能够进行向量数学运算并做出这样的推论:技术 + 自然 - 行业 = 可持续性。
当然,构建高性能、全球规模的 Word2Vec 模型通常是资源充足的公司才会做的任务。它需要处理数 TB 的文本,并利用数百个 GPU 或 TPU 进行训练。因此,我们将创建一个微型玩具模型,仅作为 POC。