# 什么是用于文本的词嵌入？

> 原文： [https://machinelearningmastery.com/what-are-word-embeddings/](https://machinelearningmastery.com/what-are-word-embeddings/)

词嵌入是一种单词表示，允许具有相似含义的单词具有相似的表示。

它们是文本的分布式表示，这可能是深度学习方法在挑战自然语言处理问题上令人印象深刻的表现的关键突破之一。

在这篇文章中，您将发现用于表示文本数据的嵌入方法。

完成这篇文章后，你会知道：

*   用于表示文本的单词嵌入方法是什么以及它与其他特征提取方法的区别。
*   从文本数据中学习单词嵌入有 3 种主要算法。
*   您可以训练新的嵌入或在自然语言处理任务中使用预先训练的嵌入。

让我们开始吧。

![What Are Word Embeddings for Text?](img/23e8161466890c5f0b0351c94167ab1f.jpg)

什么是词嵌入文本？
照片来自 [Heather](https://www.flickr.com/photos/woolgenie/32248092754/) ，保留一些权利。

## 概观

这篇文章分为 3 部分;他们是：

1.  什么是词嵌入？
2.  单词嵌入算法
3.  使用词嵌入

## 什么是词嵌入？

单词嵌入是文本的学习表示，其中具有相同含义的单词具有相似的表示。

正是这种表达文字和文档的方法可能被认为是深刻学习挑战自然语言处理问题的关键突破之一。

> 使用密集和低维向量的一个好处是计算：大多数神经网络工具包不能很好地处理非常高维，稀疏的向量。 ......密集表示的主要好处是泛化能力：如果我们认为某些特征可能提供类似的线索，那么提供能够捕获这些相似性的表示是值得的。

- 第 92 页，[自然语言处理中的神经网络方法](http://amzn.to/2wycQKA)，2017。

字嵌入实际上是一类技术，其中各个单词在预定义的向量空间中表示为实值向量。每个单词被映射到一个向量，并且向量值以类似于神经网络的方式被学习，因此该技术经常被集中到深度学习领域。

该方法的关键是为每个单词使用密集的分布式表示。

每个单词由实值向量表示，通常为数十或数百个维度。这与稀疏字表示所需的数千或数百万维度形成对比，例如单热编码。

> 将词汇表中的每个词与分布式词特征向量相关联...特征向量表示词的不同方面：每个词与向量空间中的点相关联。特征的数量......远小于词汇的大小

- [神经概率语言模型](http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf)，2003。

基于单词的使用来学习分布式表示。这允许以类似方式使用的单词导致具有相似的表示，自然地捕获它们的含义。这可以与一袋单词模型中清晰但脆弱的表示形成对比，除非明确管理，否则不同的单词具有不同的表示形式，无论它们如何被使用。

该方法背后有更深层次的语言学理论，即 Zellig Harris 的“_ 分布假设 _”，可归纳为：具有相似语境的词语具有相似的含义。有关更深入的信息，请参阅 Harris 的 1956 年论文“[分布式结构](http://www.tandfonline.com/doi/pdf/10.1080/00437956.1954.11659520)”。

这个概念让这个词的用法定义了它的含义可以通过 John Firth 经常重复的讽刺来概括：

> 你应该知道它所保留的公司的一句话！

- 第 11 页，“[语言学理论概要 1930-1955](http://annabellelukin.edublogs.org/files/2013/08/Firth-JR-1962-A-Synopsis-of-Linguistic-Theory-wfihi5.pdf) ”，1963 年至 1955 年语言分析研究。

## 单词嵌入算法

单词嵌入方法从文本语料库中学习预定义固定大小的词汇表的实值向量表示。

学习过程要么与某个任务的神经网络模型联合，例如文档分类，要么是无监督的过程，使用文档统计。

本节介绍了可用于从文本数据中学习单词嵌入的三种技术。

### 1.嵌入层

由于缺少更好的名称，嵌入层是与特定自然语言处理任务（例如语言建模或文档分类）的神经网络模型联合学习的单词嵌入。

它要求清理和准备文档文本，使得每个单词都是单热编码的。向量空间的大小被指定为模型的一部分，例如 50,100 或 300 维。向量用小的随机数初始化。嵌入层用于神经网络的前端，并且使用反向传播算法以监督方式拟合。

> ...当神经网络的输入包含符号分类特征（例如，采用 k 个不同符号之一的特征，例如来自封闭词汇表的单词）时，通常将每个可能的特征值（即词汇表中的每个单词）相关联对于某些 d，使用 d 维向量。然后将这些向量视为模型的参数，并与其他参数一起训练。

- 第 49 页，[自然语言处理中的神经网络方法](http://amzn.to/2wycQKA)，2017。

单热编码的单词被映射到单词向量。如果使用多层感知机模型，则在作为模型的输入馈送之前，将字向量连接起来。如果使用循环神经网络，则每个字可以作为序列中的一个输入。

这种学习嵌入层的方法需要大量的训练数据并且可能很慢，但是将学习嵌入特定文本数据和 NLP 任务的嵌入。

### 2\. Word2Vec

Word2Vec 是一种有效学习从文本语料库中嵌入独立单词的统计方法。

它由 Tomas Mikolov 等人开发。 2013 年谷歌作为回应使嵌入式神经网络训练更有效率，从那时起已成为开发预训练字嵌入的事实标准。

此外，工作涉及学习向量的分析和对单词表示的向量数学的探索。例如，从“`King`”中减去“ _man-ness_ ”并添加“ _women-ness_ ”会产生“`Queen`“，捕捉类比”_ 国王是女王，男人是女人 _“。

> 我们发现这些表示在捕获语言中的句法和语义规律方面令人惊讶地擅长，并且每个关系的特征在于特定于关系的向量偏移。这允许基于单词之间的偏移的面向向量的推理。例如，自动学习男/女关系，并且通过诱导的向量表示，“King - Man + Woman”产生非常接近“Queen”的向量。

- [连续空间词表示中的语言规则](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/rvecs.pdf)，2013。

引入了两种不同的学习模型，可以作为 word2vec 方法的一部分来学习嵌入一词;他们是：

*   连续的词袋，或 CBOW 模型。
*   连续 Skip-Gram 模型。

CBOW 模型通过基于其上下文预测当前单词来学习嵌入。连续跳过 - 克模型通过预测给定当前单词的周围单词来学习。

连续跳过 - 克模型通过预测给定当前单词的周围单词来学习。

![Word2Vec Training Models](img/f09c74451d303a15ece34698c6e6adca.jpg)

Word2Vec 训练模型
取自“向量空间中词表示的高效估计”，2013

两个模型都专注于在给定其本地使用上下文的情况下学习单词，其中上下文由相邻单词的窗口定义。该窗口是模型的可配置参数。

> 滑动窗口的大小对得到的向量相似性具有强烈影响。大窗户倾向于产生更多的局部相似性[...]，而较小的窗口往往产生更多的功能和句法相似性。

- 第 128 页，[自然语言处理中的神经网络方法](http://amzn.to/2wycQKA)，2017。

该方法的主要优点是可以有效地学习高质量的词嵌入（低空间和时间复杂度），允许从更大的文本语料库（数十亿个单词）学习更大的嵌入（更多维度）。

### 3\. GloVe

用于 Word 表示的全局向量或 GloVe 算法是用于有效学习单词向量的 word2vec 方法的扩展，由 Pennington 等人开发。在斯坦福大学。

使用诸如潜在语义分析（LSA）之类的矩阵分解技术开发了单词的经典向量空间模型表示，该技术在使用全局文本统计方面做得很好，但是在捕获意义和在任务上演示时，不像 word2vec 这样的学习方法。比如计算类比（例如上面的国王和王后例子）。

GloVe 是一种将矩阵分解技术（如 LSA）的全局统计与 word2vec 中的本地基于上下文的学习相结合的方法。

GloVe 不是使用窗口来定义本地上下文，而是使用整个文本语料库中的统计量构造显式的单词上下文或单词共现矩阵。结果是学习模型可能导致通常更好的词嵌入。

> GloVe 是一种新的全球对数双线性回归模型，用于无监督学习单词表示，在单词类比，单词相似度和命名实体识别任务方面优于其他模型。

- [GloVe：Word 表示的全局向量](https://nlp.stanford.edu/pubs/glove.pdf)，2014。

## 使用词嵌入

当您在自然语言处理项目中使用单词嵌入时，您有一些选择。

本节概述了这些选项。

### 1.学习嵌入

您可以选择为您的问题学习嵌入字。

这将需要大量的文本数据以确保学习有用的嵌入，例如数百万或数十亿个单词。

训练单词嵌入时，您有两个主要选项：

1.  **学习它独立**，其中训练模型来学习嵌入，嵌入被保存并在以后作为另一个模型的一部分用于您的任务。如果您想在多个模型中使用相同的嵌入，这是一个很好的方法。
2.  **共同学习**，其中嵌入是作为大型任务特定模型的一部分学习的。如果您只打算在一个任务上使用嵌入，这是一个很好的方法。

### 2.重复使用嵌入

研究人员通常可以免费提供经过预先训练的单词嵌入，通常是在许可许可下，这样您就可以在自己的学术或商业项目中使用它们。

例如，word2vec 和 GloVe 字嵌入都可以免费下载。

这些可以在您的项目中使用，而不是从零开始训练您自己的嵌入。

在使用预先训练好的嵌入时，您有两个主要选项：

1.  **静态**，其中嵌入保持静态并用作模型的组件。如果嵌入非常适合您的问题并提供良好的结果，这是一种合适的方法。
2.  **更新了**，其中预训练嵌入用于为模型播种，但嵌入在模型训练期间联合更新。如果您希望充分利用模型并嵌入任务，这可能是一个不错的选择。

### 你应该选择哪种选择？

探索不同的选项，如果可能的话，测试哪个选项可以最好地解决您的问题。

也许从快速方法开始，例如使用预先训练的嵌入，并且如果它能够在您的问题上获得更好的表现，则只使用新的嵌入。

## 进一步阅读

如果您要深入了解，本节将提供有关该主题的更多资源。

### 用品

*   [维基百科上的词嵌入](https://en.wikipedia.org/wiki/Word_embedding)
*   [维基百科上的 Word2vec](https://en.wikipedia.org/wiki/Word2vec)
*   维基百科上的 [GloVe](https://en.wikipedia.org/wiki/GloVe_(machine_learning))
*   [词汇嵌入概述及其与分布式语义模型的联系](http://blog.aylien.com/overview-word-embeddings-history-word2vec-cbow-glove/)，2016。
*   [Deep Learning，NLP 和 Representations](http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/) ，2014。

### 文件

*   [分布结构](http://www.tandfonline.com/doi/pdf/10.1080/00437956.1954.11659520)，1956。
*   [神经概率语言模型](http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf)，2003。
*   [自然语言处理的统一架构：具有多任务学习的深度神经网络](https://ronan.collobert.com/pub/matos/2008_nlp_icml.pdf)，2008。
*   [连续空间语言模型](https://pdfs.semanticscholar.org/0fcc/184b3b90405ec3ceafd6a4007c749df7c363.pdf)，2007。
*   [向量空间中词表示的有效估计](https://arxiv.org/pdf/1301.3781.pdf)，2013
*   [单词和短语的分布式表示及其组合](https://arxiv.org/pdf/1310.4546.pdf)，2013。
*   [GloVe：Word 表示的全局向量](https://nlp.stanford.edu/pubs/glove.pdf)，2014。

### 项目

*   Google 代码上的 [word2vec](https://code.google.com/archive/p/word2vec/)
*   [GloVe：用于词表示的全局向量](https://nlp.stanford.edu/projects/glove/)

### 图书

*   [自然语言处理中的神经网络方法](http://amzn.to/2wycQKA)，2017。

## 摘要

在这篇文章中，您发现了词嵌入作为深度学习应用程序中文本的表示方法。

具体来说，你学到了：

*   表示文本的嵌入方法是什么，以及它与其他特征提取方法的区别。
*   从文本数据中学习单词嵌入有 3 种主要算法。
*   您可以在自然语言处理任务中训练新的嵌入或使用预先训练的嵌入。

你有任何问题吗？
在下面的评论中提出您的问题，我会尽力回答。