赞
踩
==词嵌入的主要思想是将文本转化为数字,==然后通过深度学习等算法可以摄取和处理数字,以形成对自然语言的理解。小说家 EL Doctorow 的一句可爱的话,他非常诗意地表达了这个想法:
It’s like numbers are language, like all the letters in the language are turned into numbers, and so it’s something that everyone understands the same way. You lose the sounds of the letters and whether they click or pop or touch the palate, or go ooh or aah, and anything that can be misread or con you with its music or the pictures it puts in your mind, all of that is gone, along with the accent, and you have a new understanding entirely, a language of numbers, and everything becomes as clear to everyone as the writing on the wall. So as I say there comes a certain time for the reading of the numbers.
翻译如下:
它就像数字是一种语言,好像语言中的所有字母都被转换成了数字,因此每个人都以相同的方式理解它。你失去了字母的声音,不管它们是点击声、爆破声、触碰到上颚的声音,还是发出“噢”或“啊”的声音,以及任何可能被误读的东西,或者那些通过它们的音乐或者它们在你脑海中勾画的画面来欺骗你的东西,所有这些都消失了,连同口音一起,你完全获得了一种新的理解,一种数字的语言,一切对每个人来说都像墙上的文字一样清晰。所以正如我所说,阅读数字的时刻到了。
作者通过比喻的方式表达了一种观点:如果语言中的文字和声音都被转化为数字,那么语言的理解就会变得非常直接和清晰,没有了误解和个人情感色彩的干扰。数字作为一种更加客观和精确的表达方式,可以消除语言中的歧义和主观性,让信息的传递变得像“墙上的文字”一样明显和易于理解。这里提到的“阅读数字的时刻”意味着在某个特定时刻,人们会更依赖数字这种形式的语言来交流和理解世界。
这种数字转化是必要的,因为许多机器学习算法(包括深度网络)要求其输入是连续值的向量;换句话说,机器学习算法需要能够进行数学计算的数据格式,而文本字符串无法直接提供这种格式。这就是为什么我们需要词嵌入技术来将文本转化为数值向量的原因。这种转换使得文本数据可以被算法“理解”和使用。
因此,像词嵌入这样的自然语言建模技术用于将词汇表中的单词或短语映射到相应的实数向量。除了易于通过学习算法进行处理之外,这种向量表示还有两个重要且有利的属性:
目前常用的几种词嵌入方法:
Word2Vec:由Google提出的一种基于神经网络的词嵌入方法。
GloVe:由斯坦福大学提出的方法,它通过统计语料库中词与词共现的频率矩阵,并对矩阵进行因式分解,从而获得词的向量表示。
BERT:由Google提出的一种预训练语言模型,使用Transformer架构,能够生成上下文相关的词嵌入。
实现Word2Vec主要有两种方法:CBOW(Continuous Bag of Words)和Skip-gram。CBOW通过上下文预测中心词,Skip-gram通过中心词预测上下文。
CBOW模型的目标是通过一个词的上下文(即周围的词)来预测这个词本身。在这个模型中,输入是一个词的上下文,模型会输出一个预测的目标词。例如,如果我们的句子是“猫坐在垫子上”
,而目标词是“垫子”
,那么其上下文可能是“猫”
、“坐”
、“在”
、“上”
。CBOW模型会尝试根据这些上下文词来预测“垫子”
。
Bag of Words
在自然语言处理(Natural Language Processing, NLP)中,“词袋”(Bag of Words, 简称BoW)是一种简单但有效的文本表示方法。这种方法不考虑文本中单词的顺序和语法结构,只关注各个词汇在文本中出现的频率。具体来说,词袋模型会创建一个词汇表,并将每个文本(如句子或文档)表示为该词汇表中词汇的频率向量。
例如,如果有一个词汇表包含“苹果”,“橙子”,和“香蕉”,而一个句子是“苹果和橙子”,在词袋模型中,这个句子将被转换成向量[1, 1, 0]
,表示“苹果”和“橙子”各出现一次,“香蕉”未出现。
词袋模型的优点是实现简单,计算上也非常高效。然而,它的缺点是忽略了词汇的上下文信息,可能导致一些语义信息的丢失。此外,这种模型可能面临维度灾难,特别是在词汇表非常庞大的情况下。尽管如此,词袋模型在许多基础的文本分类和聚类任务中仍然非常有用。
与CBOW相反,Skip-gram模型的目标是通过一个词来预测它的上下文。在这个模型中,输入是一个词,输出是它周围的上下文。继续使用上面的例子,“垫子”
是输入词,而模型需要预测的上下文词则可能是“猫”
、“坐”
、“在”
、“上”
。
输入单词作为 one-hot 编码向量传入。这将进入线性单元的隐藏层,然后进入 softmax 层进行预测。这里的想法是训练隐藏层权重矩阵来找到我们单词的有效表示。这个权重矩阵通常称为嵌入矩阵,可以作为查找表进行查询。
你可能会问——“那个one-hot编码向量几乎全为零……这会产生什么影响?”如果将 1 x 10,000
one-hot 向量乘以 10,000 x 300
矩阵,它实际上只会选择与“1”对应的行矩阵。这是一个小例子,可以直观地看到:
这意味着该模型的隐藏层实际上只是作为查找表运行。隐藏层的输出只是输入单词的“词向量”。
单词表示的全局向量 (GloVe) 是一种强大的单词嵌入技术,它通过考虑单词在语料库中的共现概率来捕获单词之间的语义关系。 GloVe 有效性的关键在于单词上下文矩阵的构建以及后续的分解过程。
它是斯坦福大学开发的一种无监督学习算法,用于通过聚合语料库中的全局词-词共现矩阵来生成词嵌入。由此产生的嵌入显示了向量空间中单词的有趣的线性子结构。
这种类型的表示在许多机器学习算法中非常有用。
GloVe 机制的第一步涉及创建单词上下文矩阵。该矩阵旨在表示整个语料库中给定单词出现在另一个单词附近的可能性。矩阵中的每个单元格保存单词在特定上下文窗口中一起出现的频率的共现计数。
让我们考虑一个简化的例子。假设我们的语料库中有以下句子:
“Word embeddings capture semantic meanings.”
“GloVe is an impactful word embedding model.”
单词上下文矩阵可能如下所示:
在这里,每一行和每一列对应于语料库中的一个唯一单词,单元格中的值表示这些单词在某个上下文窗口中一起出现的频率。
单词上下文矩阵就位后,GloVe 转向矩阵分解。这里的目标是将这个高维矩阵分解为两个较小的矩阵——一个代表单词,另一个代表上下文。让我们将它们表示为
W
W
W(表示单词)和
C
C
C(表示上下文)。理想的情况是
W
W
W 和
C
T
C T
CT 的点积(
C
C
C 的转置)近似于原始矩阵:
X
≈
W
⋅
C
T
X \approx W \cdot C T
X≈W⋅CT
通过迭代优化,GloVe 调整
W
W
W 和
C
C
C,以最小化
X
X
X 和
W
⋅
C
T
W \cdot C T
W⋅CT 之间的差异。这个过程为每个单词生成精细的向量表示,捕捉它们共现模式的细微差别。
经过训练后,GloVe 会为每个单词提供一个密集向量,该向量不仅捕获本地上下文,还捕获全局单词使用模式。这些向量对语义和句法信息进行编码,根据单词在语料库中的整体用法揭示单词之间的相似性和差异。
优点:
有效捕获语料库的全局统计数据。
擅长表示语义和句法关系。
有效捕捉词语类比。
缺点:
需要更多内存来存储共生矩阵。
对于非常小的语料库来说效果较差。
BERT的关键技术创新是将流行的注意力模型Transformer的双向训练应用于语言建模。
BERT 利用 Transformer,这是一种学习文本中单词(或子词)之间的上下文关系的注意力机制。在其普通形式中,Transformer 包括两个独立的机制 :一个读取文本输入的编码器和一个为任务生成预测的解码器。由于 BERT 的目标是生成语言模型,因此只需要编码器机制。
BERT和Word2Vec和GloVe在词嵌入的方法上有一些不同之处。其中最主要的区别是BERT引入了位置编码和段落编码,而Word2Vec和GloVe没有考虑这些信息。
此外,BERT不需要像其他序列模型(如LSTM或GRU)那样使用掩码,因为BERT是一个Transformer架构的模型,它可以同时处理句子中的所有token,并且通过自注意力机制实现对上下文的建模。因此,BERT能够更好地捕捉句子中的双向上下文信息,而无需使用掩码来指示哪些部分是上下文,哪些是填充。
Tokenization(分词):
首先,文本被分割成词(或子词)单元,这些单元称为token。通常使用WordPiece或Byte Pair Encoding(BPE)等算法进行分词。
加入特殊标记:
在分词的过程中,BERT会在句子的开头和结尾加入特殊的标记,例如
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。