词嵌入:探索、解释和利用(含Python代码)2025年3月6日 | 阅读11分钟 引言自然语言处理(NLP)极大地改变了机器与人类语言交互的方式。NLP技术是我们日常使用的许多应用的核心,无论是文本的自动翻译,还是社交媒体或其他平台上的公众舆论的判断。这些进步的核心是一种称为词嵌入的方法——将词语转换为密集向量空间中向量的方法。它促进了机器以高效率生成人类语言的方式来学习语言。 词嵌入现在是大多数NLP领域分析的中心;它们使机器能够理解词语的含义,依靠高维空间中的特征,其中相似的词语彼此靠近。这种方法与早期编码方式(如独热编码)截然不同,独热编码稀疏且无法捕捉词语之间的交互。 本文将首先定义词嵌入,然后讨论根据应用需求可以利用词嵌入的途径和方式。我们将提供词嵌入的理论背景,讨论如何使用Python语言实现它们,并演示如何使用它们来解决一些现实生活中的情况。阅读本文后,读者将能够掌握词嵌入的概念及其实现,并认识到词嵌入在NLP不同过程中的用途。 探索:理解词嵌入什么是词嵌入?词向量是词语特征的密集表示。同样,意义相近的词语被放置在相同的向量空间中,但处于连续且可微分的空间中。这种方法使模型能够区分词语的含义,例如,相似词语之间的关系、类比和共现。 例如,假设“国王”、“女王”、“男人”和“女人”是特征空间中的四个向量。要求“国王”和“女王”的特征向量之差与“男人”和“女人”向量的特征空间之差非常相似,或者一般来说,与向量算术相似。 历史背景:从独热编码到密集向量 在使用词嵌入之前,词语是通过独热编码方法进行编码的,该方法有其自身的缺点。独热编码使用编码向量,其中词汇表中的每个词都等于一个长度为词汇表大小的0和1的向量。向量在该词对应的位置上只有一个“1”;所有其他位置都是“0”。 然而,独热编码有几个局限性:
词嵌入通过将词语映射到高维度的实数向量空间来解决这些问题。这些向量是低维的,因此计算上很容易处理,并且与词语之间的语义关系非常相关。 流行的词嵌入技术生成词嵌入有几种方法。主要的方法是Word2Vec(由Mikolov等人[12]开发)、GloVe(由Pennington等人[14]开发)和FastText(由Joulin等人[6]开发)。接下来将简要分析上述每种技术,包括它们的优缺点。 1. Word2Vec Word2Vec,由Google的Mikolov等人提出,是最常用的词嵌入方法之一。它有两种形式:连续词袋模型(CBOW)和Skip-gram模型。
2. GloVe GloVe由斯坦福大学的Pennington、Smithend和Socher设计;它代表Global Vectors for Word Representation(词表示的全局向量)。Word2Vec在学习嵌入时依赖于局部上下文。相比之下,GloVe在学习嵌入时,是基于语料库的全局词语共现统计的结果。概念是词语一起出现的概率应该传达语义信息,而这正是嵌入的目标。 3. FastText 该模型是Facebook开发的Word2Vec模型的扩展,称为FastText。FastText能更有效地学习词向量,因为它不为整个词语学习向量,而是为“n-gram”学习向量。执行相同的操作很有用,因为它能够更有效地处理词汇表中未出现的词,因为新词的嵌入可以从子词嵌入中派生出来。 解释:在Python中使用词嵌入如上所述,我们现在有了词嵌入的理论背景,这使我们能够进入实践。首先,对于Word2Vec嵌入,我们将使用Python中的Gensim库,然后研究预训练GloVe嵌入的细节。 安装必需的库 在开始编码之前,让我们安装必要的库。 训练Word2Vec嵌入 作为热身,我们将从使用小型文本语料库训练Word2Vec模型开始,其大小对模型来说并不重要。Gensim使这个过程变得容易。 输出 [ 0.00765647 0.00171521 -0.00943224 0.00718394 0.00831698 -0.00709062 0.00467283 -0.00783045 -0.00896769 -0.00422929 -0.00108115 0.00304883 0.00876332 -0.00983494 -0.00326822 -0.00449258 -0.00747072 -0.00518299 0.00567512 -0.00852403 -0.00369456 -0.00712544 -0.00489777 0.00424892 0.00591239 0.00069563 -0.00313559 -0.00915095 -0.00943353 0.00184728 -0.00647396 -0.00428071 0.00522386 -0.00674524 -0.00489522 0.00183748 -0.00824755 0.00414997 0.00280534 0.00675074 -0.00939749 -0.00561745 0.00446288 0.00862263 -0.00230841 0.00692879 0.0046679 0.00951745 -0.00261154 0.00598421] 说明
探索预训练GloVe嵌入 然而,通常在需要更频繁地训练嵌入时,尤其是在处理大型语料库时:在这种情况下,预训练的嵌入效果更好。GloVe嵌入被频繁使用,并且有许多预训练的嵌入选择。 可以从该工具的官方网站直接下载预训练的GloVe嵌入,并且是该项目中使用的选项,无需从源下载。以下是如何加载和使用它们的示例: 输出 [ 0.51895 0.42425 -0.34174 -0.02522 0.01265 0.43894 0.71951 -0.51261 -0.55819 0.3688 0.57391 0.16774 0.24249 -0.65402 0.03224 -0.34158 0.52374 -0.2776 -0.5508 -0.21965 0.24052 0.34793 0.47645 0.32499 -0.32833 1.4773 0.12035 -0.12845 -0.10456 0.0428 1.0577 -0.0873 -0.38275 -0.25789 -0.60523 0.45259 -0.28269 0.1884 -0.50379 -0.07928 -0.35584 0.46026 0.29064 0.36497 -0.53152 -0.31896 0.00528 -0.07153 0.34042 0.14777] 说明
应用:词嵌入的一些用途因此,在接下来的材料中,我们将基于词嵌入的概念,解释如何解决现实世界的NLP问题。我们将涵盖三个常见应用:情感分析、文档聚类和词语匹配。 词嵌入在情感分析中的应用 这是将给定文本分类为积极、消极、中性或其他相关类别的过程。词嵌入可用于获取文本的向量表示,然后可以将这些向量再次馈送到机器学习模型中进行分类。 输出 Sentiment: Positive 说明
文档相似性词嵌入还可以用于模拟文档之间的距离。它们尝试计算文档中每个词的词向量的平均值,然后使用余弦相似度计算所得向量之间的相似度。 这是一个示例 输出 Document similarity: [[0.7910344]] 说明
结论词嵌入通过以新的方式表示NLP数据,改变了NLP领域。该技术将词语映射到高维的量化空间。这些表示对于编码语义含义和促进机器处理人类语言至关重要。在本文中,我们学习了词嵌入,如何在Python中使用它们,以及在自然语言处理中的一些用例场景。 这只是一个提醒,随着您在词嵌入方面做得更深入,嵌入词语的方式以及所选模型将在您的NLP应用中发挥更重要的作用。因此,无论您是在进行情感分析还是为其创建内容,比较文档或进行词语类比,词嵌入都是多功能且强大的工具。 下一个主题将字典写入Python文件 |
我们请求您订阅我们的新闻通讯以获取最新更新。