
入门GPT | 词的向量表示(Word2Vec和Embedding)
在自然语言处理(NLP)领域,我们面临的第一个挑战就是如何让计算机理解人类的语言。
计算机不认识汉字或字母,它们只懂数字。
因此,我们需要一种方法,将词语转换成计算机可以处理的数字形式。
1. 什么是词向量?
我们不能直接把"苹果"这两个字输入到机器学习模型中。模型无法进行任何计算。我们需要先把它变成一组数字。
早期的方法
早期自然语言处理方法,如独热编码和词袋模型,虽然对某些机器学习任务有用,但并不能捕捉到词的意义或上下文信息。这意味着潜在的关系,如语境相近性,无法在词集合中捕捉到。
例如,独热编码无法捕捉到"狗"和"猫"都指的是经常在家庭宠物上下文中讨论的动物这类简单关系。这类编码通常为简单的自然语言处理任务提供了基准(例如,电子邮件垃圾邮件分类器),但对于更复杂的任务,如翻译和语音识别,则缺乏足够的复杂性。
本质上,这些传统的自然语言处理方法并不能捕捉词组之间语法(结构)和语义(意义)的关系,因此它们是以一种非常简单的方式来表示语言。
现代的方法:分布式表示 (Distributed Representation)
为了解决以上问题,研究者们提出了"分布式表示"的思想。这种方法不再使用稀疏的高维向量(如独热编码),而是用一个稠密的、低维的向量来表示一个词,这就是词向量,或者叫词嵌入(Word embedding)
分布式表示 (Distributed Representation) 是⼀种表示⽅法,它将离散的符号(如单词)映射到连续的向量空间中。在这个空间中,每个维度不是对应单个符号,⽽是表示符号的某种特征或属性。分布式表示通过捕获单词之间的相似性和关系,能更好地描述和处理⾃然语⾔数据。
分布式表示这个概念最早可以追溯到1986年,当时,杰弗⾥·⾟顿、⼤卫·鲁梅尔哈特和罗纳德· 威廉姆斯在⼀篇名为《Learning representations by back-propagating errors》(通过反向传播误差进⾏表示学习)的论⽂中描述了⼀种通过反向传播(backpropagation)算法训练多层神经⽹络的⽅法,这种⽅法使得神经⽹络能够学到输⼊数据的分布式表示。
然⽽,分布式表示很晚才在NLP领域得到应⽤。20世纪90年代,约书亚·本吉奥和其他研究⼈员开始尝试将神经⽹络应⽤于词汇和句⼦表示的学习,推进了神经⽹络语⾔模型的发展,以及后来的Word2Vec等词嵌⼊技术的出现。
在稀疏向量中,⼤部分元素的值为0,只有少数元素的值⾮零。稀疏向量通常⽤于表示⾼维数据,其中许多维度的值为零。
词袋模型就是⼀种稀疏向量表示。在词袋模型中,每个⽂档⽤⼀个向量表示,向量的⻓度等于词汇表中的词数量,向量的每个元素表示相应词在⽂档中出现的次数。由于⼤部分单词可能不会出现在给定⽂档中,因此词袋模型中的向量通常是稀疏的。⽽我们常⽤的One-Hot编码,当然更是稀疏了,每⼀个One-Hot编码中,都有⼤量的0,⽽只有⼀个1。
稠密向量中的元素⼤部分为⾮零值。稠密向量通常具有较低的维度,同时能够捕捉到更丰富的信息。Word2Vec就是⼀种典型的稠密向量表示。稠密向量能够捕捉词与词之间的语义和语法关系,使得具有相似含义或相关性的词在向量空间中距离较近。
相比之下,词向量将单词表示为多维连续的浮点数,其中语义相似的单词被映射到几何空间中的邻近点。
简单来说,一个词向量是一行实数值,其中每个数值捕捉单词意义的一个维度,而语义相似的单词具有相似的向量。
这意味着像轮子和发动机这样的词应该与汽车有相似的词向量(因为它们的意义相似),而香蕉则应该相距甚远。换句话说,语义上相似的词会在一个邻近的向量空间中被映射。
将单词表示为向量的美妙之处在于,它们可以应用于数学运算。例如,我们可以对向量进行加减运算——这里的一个经典例子是通过使用词向量,我们可以确定:
king - man + woman = queen
我们可以从"king"(即男性)的词向量中减去一个含义,再加上另一个含义(女性),从而显示这个新的词向量(king - man + woman)与"queen"的词向量最为接近。
词向量中的数字代表该词在各个维度上的分布权重。简单来说,每个维度代表一个含义,词在该维度上的数值权重反映了其与该含义的相关性。因此,词的语义是嵌入在向量的各个维度中的。
那么,我们如何才能得到这种神奇的词向量呢?这就引出了 Word2Vec。
2. 什么是 Word2Vec?
Word2vec 是自然语言处理(NLP)中用于获取词向量表示的技术。这些向量通过周围词汇来捕捉词义信息。word2vec 算法通过建模大规模语料库中的文本来估算这些表示。一旦训练完成,此类模型可以检测同义词或为不完整句子提供额外词汇建议。
Word2vec 是在 2013 年由 Mikolov 领导的谷歌研究团队创建、专利并发布的,基于两篇论文
《Efficient Estimation of Word Representations in Vector Space》:https://arxiv.org/abs/1301.3781
《Distributed Representations of Words and Phrases and their Compositionality》:https://arxiv.org/abs/1310.4546
Word2vec 可以使用两种模型架构来生成词的分布式表示(distributed representations):CBOW 和 Skip-gram。
使用 Word2vec 算法创建的嵌入向量相比于早期算法(例如使用 n-grams 和潜在语义分析的算法)具有一些优势。
Word2vec 将一个词表示为捕捉词间关系的高维数字向量。特别是,出现在相似上下文中的词会被映射到通过余弦相似度衡量的邻近向量。这表明词之间的语义相似程度,例如 walk 和 ran 的向量相近,"but"和"however"的向量相近。
这个算法⽐以前的⽅法更加⾼效,能够轻松地处理⼤规模的⽂本数据。因此,Word2Vec迅速流⾏起来。
截至 2022 年,传统的 Word2vec 方法被描述为"过时"。
基于Transformer的模型,如 ELMo 和 BERT,在类似于 Word2vec 的词嵌入模型上增加了多个神经网络注意力层,已被认为是自然语言处理领域的最先进技术。
3. CBOW (Continuous Bag-of-Words) 连续词袋模型
CBOW 的目标是根据上下文来预测中心词。
想象一句话:"the quick brown fox jumps over the lazy dog"。我们的任务是根据 fox
前后各两个词(即 {quick, brown, jumps, over}
)来预测 fox
。
工作原理:
CBOW模型的核心思想是利用周围的上下文词汇来预测目标中心词。
具体来说,首先选择一个中心词(Target Word)并定义一个"窗口大小"(Window Size),比如窗口大小为2,那么对于中心词 fox
,它的上下文(Context)就是它前后各2个词:{quick, brown, jumps, over}
。
接下来,模型将上下文中所有词的词向量提取出来,通过求和或平均的方式将这些上下文词向量合并成一个综合的上下文向量,然后将这个综合向量输入到神经网络中,网络会输出一个概率分布,表示词汇表中每个词作为中心词的可能性。
训练过程中,模型不断调整词向量的参数,使得根据上下文 {quick, brown, jumps, over}
预测出 fox
的概率达到最高,通过这种方式,语义相似的词会在向量空间中聚集在一起。
4. Skip-gram (跳字模型)
Skip-gram 的思路和 CBOW 正好相反,它的目标是根据中心词来预测上下文。
还是用那句话:"the quick brown fox jumps over the lazy dog"。
工作原理:
Skip-gram模型的核心思想是利用中心词来预测其周围的上下文词汇。
具体来说,首先选择一个中心词作为输入,比如 fox
,然后定义一个窗口大小(Window Size),假设窗口大小为2,那么模型需要预测的上下文就是中心词前后各2个词:{quick, brown, jumps, over}
。
模型将中心词 fox
的词向量输入到神经网络中,网络会为每个可能的上下文位置输出一个概率分布,分别预测在这些位置上出现各个词汇的可能性。
训练过程中,模型不断调整词向量的参数,使得根据中心词 fox
能够准确预测出其真实的上下文词汇 {quick, brown, jumps, over}
的概率达到最高。
与CBOW不同的是,Skip-gram为每个中心词-上下文词对都进行独立的学习,这使得它能够更好地处理低频词,因为即使是生僻词也能通过多个上下文位置得到充分的训练。
Word2Vec对整个⾃然语⾔处理领域产⽣了巨⼤的影响。
后来的许多词嵌⼊⽅法,如GloVe和fastText这两种被⼴泛应⽤的词向量,都受到了Word2Vec的启发。
如今,Word2Vec已经成为词嵌⼊领域的基⽯。它的出现使得更复杂的NLP任务,如⽂本分类、情感分析、命名实体识别、机器翻译等,处理起来更轻松。这主要是因为Word2Vec⽣成的词向量能够捕捉到单词之间的语义和语法关系。
值得注意的是,Word2Vec本身并不是⼀个完善的语⾔模型,尽管CBOW和Skip-Gram模型在训练过程中学习了单词之间的关系,但它们并未直接对整个句⼦的概率分布进⾏建模。⽽后来的模型,如基于循环神经⽹络、⻓短期记忆⽹络和Transformer的模型,则通过对上下⽂进⾏建模,更好地捕捉到了语⾔结构,从⽽成为更为强⼤的语⾔模型。
本文转载自AI取经路,作者:AI取经路
