Word2Vec 是一种非常流行的自然语言处理技术,它将每个单词表示为高维向量,并且通过向量之间的相似度来表示单词之间的语义关系。
1 One-Hot 编码🍂
在自然语言处理任务中,我们需要将文本转换为计算机可以理解的形式,即向量表示。One-Hot 编码是一种常见的文本向量化方法,它将每个单词表示为一个长度为词汇表大小的向量,其中只有一个元素为1,其余元素都为0,该元素的位置表示单词在词汇表中的索引。
"cat": [1, 0, 0, 0]
"dog": [0, 1, 0, 0]
"apple": [0, 0, 1, 0]
"orange": [0, 0, 0, 1]
例如,假设有一个包含4个单词的词汇表[“cat”, “dog”, “apple”, “orange”],则对应的 One-Hot 编码如上所示。
但是设想一下词汇表包含上万个单词呢,那么就意味着每一个单词的 One-Hot 编码向量长度都是上万的,这无疑添加了计算的复杂度。
1.1 优缺点🍁
虽然 one-hot 编码是一种简单有效的表示方法,但它也存在一些缺点。
- 线性表示:由于每个单词只有一个维度为1,其余维度都是0,因此 one-hot 编码的向量是线性表示的。这意味着,单词之间的关系只能通过向量之间的距离来衡量,而无法通过其他非线性的方式来表示单词之间的语义和语法关系,也就是无法度量词语之间的相似性。
- 稀疏性:one-hot 编码的向量通常非常稀疏,其中大部分维度都是0。这导致 one-hot 编码需要存储大量的无用信息,使得向量变得非常庞大,且容易出现维度灾难,从而增加了计算的复杂度和存储成本。
- 无法处理未知词:由于 one-hot 编码只能表示已知单词,因此它无法处理未知词汇。当出现新单词时,必须重新调整向量空间的维度,并重新训练模型,这会带来很大的计算成本和时间开销。
尽管 one-hot 编码有一些缺点,但它仍然是一种简单而有效的文本向量化方法,尤其适用于一些简单的自然语言处理任务,例如文本分类等。同时,one-hot 编码也是其他文本表示方法的基础。
2 Word2Vec🌸
因此,针对上述 one-hot 编码缺点,近年来出现了很多新的词向量表示方法,例如 Word2Vec、GloVe 等,它们能够更好地捕捉单词之间的语义和语法关系,同时也具有更高的计算效率和更小的存储空间。
Word2Vec 是一种广泛使用的自然语言处理技术,用于将单词映射到低维向量空间中。它是由谷歌公司的研究人员在2013年提出的,主要用于解决语言模型中的词汇丰富性和数据稀疏性问题。
Word2Vec 算法通过训练神经网络模型来学习单词的分布式表示,这些分布式表示可以用于表示单词的语义和语法特征。具体来说,Word2Vec 算法包括两个主要的模型:连续词袋模型(CBOW)和 Skip-gram 模型。
2.1 CBOW🌹
连续词袋模型(CBOW)是一种根据上下文单词来预测目标单词的模型。具体来说,给定一个窗口大小为 n 的上下文单词序列,连续词袋模型的任务是预测中间的目标单词,如下图所示。
连续词袋模型的优点是:由于它是基于上下文单词来预测目标单词的,因此它可以利用上下文单词的信息来推断目标单词的语义和语法特征;模型参数较少,训练速度相对较快。
2.2 Skip-gram🌍
Skip-gram 模型是一种根据目标单词来预测上下文单词的模型。具体来说,给定一个中心单词,Skip-gram 模型的任务是预测在它周围窗口大小为 n 内的上下文单词,如下图所示。
Skip-gram 模型的优点是:由于它是基于目标单词来预测上下文单词的,因此它可以利用目标单词的语义和语法特征来预测上下文单词;模型能够生成更多的训练数据,因此可以更好地训练低频词汇的表示;Skip-gram 模型在处理大规模语料库时效果比 CBOW 模型更好。
总的来说,CBOW 模型适合用于训练低频词汇的表示,并且可以较快地训练;Skip-gram 模型适合用于处理大规模语料库,并且可以更好地学习单词之间的语义和语法关系。
2.3 负采样(negative sampling)☎️
Word2Vec 技术中使用负采样(negative sampling)的主要目的是加速训练过程,同时也可以提高模型的准确性。在 Word2Vec 模型中,Skip-gram 和 CBOW 模型都需要对每个单词计算 softmax 概率,这个过程需要对整个词汇表进行计算,计算量非常大,因此会导致训练速度非常慢。为了解决这个问题,Mikolov 等人在2013年提出了负采样的方法。
负采样的基本思想是对每个训练样本,随机选择一定数量的负样本,并令它们的标签为0,然后将这些正样本和负样本送入模型进行训练。这样做可以避免对整个词汇表进行 softmax 计算,从而大大降低了计算量。
具体来说,对于每个正样本,我们随机选择 k 个负样本(即从词汇表中随机选取k个单词),并将它们与 target word 组成 k+1 个样本,其中正样本的标签为1,负样本的标签为0。然后,我们使用 sigmoid 函数将这 k+1 个样本的得分(即向量点积)转换为概率,并将其作为模型的输出,然后通过反向传播算法更新模型参数。
通过负采样,Word2Vec 模型的训练速度得到了极大的提升,同时也可以提高模型的准确性。在实践中,通常将k的取值设为5-20之间,较小的 k 可以加快训练速度,但可能会影响模型的准确性,较大的 k 可以提高模型的准确性,但会增加计算量。
3 GloVe⚽️
虽然 word2vec 是一种非常流行的词向量模型,但它也有一些缺点。
- Out-of-vocabulary 问题:如果 word2vec 没有在训练数据中看到某个单词,则它无法将其表示为向量。
- 上下文窗口大小的选择:word2vec 中上下文窗口大小的选择对最终词向量的质量有很大影响。如果窗口大小太小,则可能无法捕捉到单词之间的语义关系;如果窗口大小太大,则可能会引入太多的噪音。
- 训练时间长:word2vec 的训练时间通常很长,特别是对于大型语料库和高维词向量来说。
- 无法处理多义词:word2vec 为每个单词生成唯一的向量表示,因此它不能处理多义词,即一个单词有不同的含义,例如 “bank” 既可以表示银行,也可以表示河岸。
相比之下,GloVe 是一种基于全局矩阵分解的词向量模型,它可以缓解一些 word2vec 的缺点,以下是一些 GloVe 的优点。
- 处理多义词能力:GloVe 使用词与词之间的共现统计信息来学习词向量,因此它可以将多个含义相似的单词映射到同一个向量空间中。
- 更好的向量质量:由于 GloVe 使用全局矩阵分解来学习词向量,因此它可以利用整个语料库中的统计信息来学习更准确的词向量。
- 更少的超参数:GloVe 中只有一个超参数,即词汇表大小,而 word2vec 需要选择多个超参数,例如上下文窗口大小和负采样数量。
虽然 GloVe 相对于 word2vec 具有一些优点,但它也有一些缺点,例如它的训练时间可能比 word2vec 更长。在选择哪种词向量模型时,需要考虑特定任务的要求以及可用的计算资源和数据量等因素。
4 Supplement🏀
除了one-hot 编码、Word2Vec 和 GloVe 等常见的文本向量表示方法外,还有许多其他的方法可以将文本表示为向量,下面列举了几种比较常见的方法:
- FastText:FastText 是 Facebook 于2016年提出的一种文本向量表示方法,它基于 Word2Vec 模型,但是将单词视为子词的集合,通过子词级别的向量表示来表示单词。这种方法不仅能够表示常见单词,还能够表示罕见单词和未知单词,因此在自然语言处理中得到了广泛应用。
- Paragraph Vector(Doc2Vec):Paragraph Vector 是一种将文本表示为向量的方法,它是在Word2Vec 的基础上进行扩展,可以同时将单词和文本表示为向量。Paragraph Vector 通过在训练中使用文本标签来捕捉文本的上下文信息,从而提高了文本向量的质量。
- ELMo:ELMo 是一种基于深度双向语言模型的文本向量表示方法,它可以为每个单词生成多个不同的向量表示,每个向量表示都捕捉了不同层次的语义信息。这种方法能够更好地捕捉单词的多义性和上下文相关性,因此在自然语言处理中得到了广泛应用。
- Transformer:Transformer 是一种基于自注意力机制的神经网络结构,它在机器翻译任务中表现出了优异的性能。Transformer 可以将文本表示为向量序列,每个向量捕捉了该位置的语义信息和上下文相关性。这种方法不仅能够捕捉单词之间的语义和语法关系,还能够处理长文本和多语言文本等复杂情况。
这些方法各有特点,可以根据不同的任务需求选择合适的方法进行文本表示。