大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
个人主页-Sonhhxg_柒的博客_CSDN博客
欢迎各位→点赞 + 收藏⭐️ + 留言
系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟
文章目录
One-Hot 表示
计数向量
TF-IDF 向量化
什么是词嵌入?
词嵌入的不同方法
Sentence Embeddings
ELMo
通用句子编码器
来自 Transformers 的双向编码器表示
结论
文档分类、情感分析、聚类和文档摘要等 NLP 任务需要处理和理解文本数据。这些任务的实施取决于人工智能系统如何处理和理解数据。一种方法是使用一些统计方法将文本表示转换为数字形式,例如词频-逆文档频率(TF-IDF)、计数向量等,但这些方法不考虑句子的含义并且只处理句子中单词的出现。
随着时间的推移,已经开发了多种语义方法,例如解析树、上下文语法、本体等,但是这些方法需要大量的人力来准备标记的训练数据。在过去几年中,计算能力的广泛可用性使得使用基于神经网络的方法来完成这些任务成为可能。
One-hot 表示是最常用和最基本的文本表示方法之一。它涉及使用二进制编码(即 0 和 1)来表示单词。它还可以用于表示分类属性。
RED | BLUE | GREEN | |
1 |
1 |
0 |
0 |
2 |
0 |
1 |
0 |
3 |
0 |
0 |
1 |
例如,第一个数据点在红色列中的值为 1,在其他列中的值为 0。这意味着最初该数据点具有红色颜色列的值。红色在one-hot encoding中表示为[1 0 0],因为蓝色1占据第二个位置,绿色1在第三个位置。这是一个三维向量。one-hot 表示扩展了特征向量,因为现在每个颜色类别本身就是一个特征。
现在,当我们谈论文本句子的单热编码时,它不关心单词在句子中出现的顺序,实际上忽略了单词的语义。这种方法在语料库较小,需要用到一些传统NLP方法的场景下效果最好。
在上一节中,我们看到了如何根据单词的出现而不是它们的出现频率来生成句子的单热表示。单个句子的计数向量是根据特定单词在句子中出现的次数生成的。语料库中独特的词构成了词汇表。
Sentence 1:The blue bird is flying in the clear blue sky.
Sentence 2: The sky is clear today.
is | bird | blue | flying | In | the | sky | clear | today |
|
Sentence 1 | 1 |
1 |
2 |
1 |
1 |
2 |
1 |
0 |
0 |
Sentence 2 | 1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
矩阵中的行代表句子,列代表矩阵中对应词的词向量。矩阵的大小为 S × T,其中 S 是句子的数量,T 是术语或单词的数量。
确定句子之间的相似性
查询相关文档的标识
文件摘要
例如,我们展示了如何用数学方法计算句子之间的相似性。句子 1 的计数向量是 [1 1 2 1 1 2 1 0 0],句子 2 的计数向量是 [1 0 0 0 0 1 1 1 1]。可以使用以下数学表达式计算余弦相似度。
这里,x和y是两个计数向量。|| x || 是向量x的欧几里德范数。
所以,
xy = 1x1 + 1x0 + 2x0 + 1x0 + 1x0 + 2x1 + 1x1 + 0x1 + 0x1 = 4
Sim = 4/ (3.6 * 2.24) = 0.49
这个计算意味着这两个句子彼此相似,相似度得分为 49% (0.49)。相似度值总是介于 0 和 1 之间,其中 1 表示最大相似度,0 表示没有相似度。
one-hot representation和 count vector 方法是最基本的方法,它们实际上没有考虑特定单词在句子和语料库中的重要性。对于某些 NLP 项目(如搜索引擎),了解查询中的词对语料库中文档中的词的重要性以确定文档与该查询的相关性非常重要。一些经常出现的英语单词(例如,“is”、“the”、“a”等)将出现在所有文档中。尽管它们的数量更高,但在执行与 NLP 相关的任务时它们没有用。为了克服计数向量的这个缺点,使用了 TF-IDF。TF-IDF 是各种应用中最流行的技术之一,因为它能够对一般出现频率更高的词进行加权。
在 TF-IDF 中,我们以类似于之前方法的方式形成词汇表。词汇表由整个语料库中的独特单词组成。现在计算词汇集中每个单词的词频。单词或术语 t 的词频 (TF) 对应于它在文档 d 中所有出现的次数与文档中的术语数。
TF =(术语 t 在文档中出现的次数 / 文档中的术语数)
我们通过计算出现该术语的文档的数量来计算逆文档频率 (IDF) 。IDF 告诉我们一个术语或单词提供了多少信息。它会告诉您某个词是否在所有文档中通用。IDF 是文档总数与出现术语 t 的文档数之比的对数值。
IDF = log(N/n) 其中 N 是语料库中的文档总数,n 是出现术语 t 的文档数
TF-IDF 是 TF 和 IDF 的产物。
TF-IDF (t, document) = TF (t, document) * IDF(t)
例如,我们使用前面的两个例句,其中句子 1 和句子 2 对应两个文档。
句子 1 中单词“blue”的 TF = 2
IDF = log (2/1) = 0.3
句子 1 中单词“blue”的 TF-IDF = 2*0.3 = 0.6
类似地,句子 2 中单词“is”的 TF-IDF 值为 0,因为它的 IDF 分数为 0。这表示单词“is”没有任何重要性,因为它在所有文档中都很常见并且存在。
TF-IDF 、计数向量和单热编码等方法易于计算,但它们无法捕获文档中的语义(或单词出现的顺序)。使用这些方法表示的单词或句子不提供任何上下文信息。尽管可以使用它们执行许多 NLP 任务,但总体结果很一般,尤其是在训练数据稀疏的情况下。因此,需要一种更好的技术来捕获有用的语言信息,同时提高几乎所有 NLP 问题的泛化和性能。
在下一节中,我们将讨论一种这样的方法,即词嵌入,其中词的向量表示包含上下文信息。
与one-hot表示相比,词嵌入通常是低维(通常是 50-600 维)和密集的单词或句子表示 。当使用 one-hot representation 时,特征向量随着词汇集的大小而增加。另一方面,词嵌入更有效。他们有概括的能力。语义相似的词更有可能具有相似的向量表示。因此,与单热表示相比,这些向量在用于 NLP 任务(例如文档摘要、句子或文档相似性等)时将为您提供更相关的结果。
词嵌入也称为分布式表示或分布式语义模型或语义向量空间。这里的“语义”一词突出了词嵌入的意义,因为它旨在将具有相似含义的词归类在一起。例如,网球、足球和游泳等运动应该放在靠近的地方,而与动物有关的词应该远离这些词。从更广泛的意义上说,词嵌入将创建与运动相关的词的向量表示,这些词将远离动物词的向量表示。主要目标是让具有相似上下文的单词占据最近的空间位置。
嵌入通常是在较低维度上确实表示单词的向量。神经网络目前也被用于生成词嵌入。它提高了从最后一组文本数据中学习或概括表示的能力。神经网络模型可以学习词汇集中单词的足智多谋的特征,同时减少文本数据的维度。事实证明,词嵌入在 NLP 任务、文本分类、文档聚类等方面非常有用。有多种神经网络词嵌入模型可用,例如 Word2vec、GloVe、ELMo 和 BERT,其中 BERT 已被证明是目前最先进的 NLP 任务的最佳选择。
有不同的方法来生成词嵌入,它们的实现方法也不同。接下来我们详细讨论其中的一些。
Word2vec
Word2vec是一种浅层的双层神经网络词嵌入技术,其中词在向量空间中表示。在输入层和输出层之间只有一个隐藏层的神经网络被称为浅层神经网络。Word2vec 是一个双层网络,具有一个输入层、一个隐藏层和一个输出层。它以文本语料库作为输入,并给出一组向量作为输出。特征向量表示语料库中的单词。表示单词的向量称为神经词嵌入。
这种向量表示维护了文档或语料库中单词之间的语义关系。具有相似含义的词将在向量空间中彼此非常靠近,而不同的词则位于很远的地方。语义关系是通过 Word2vec 重建单词的语言上下文来实现的。语言语境可以理解为句子的主要目的。例如,在“What date is today?”这句话中,一个人想知道今天的日期,这实际上是句子的上下文。主要上下文可以通过语言周围的单词和句子来揭示。当给定足够的文本语料库时,可以借助 Word2vec 准确地猜测一个词与其他词的关联。
Word2vec 能够针对输入文本数据中的相邻单词训练单词。它可以通过两种方式实现:连续词袋(CBOW)和skip gram。这是用于创建词嵌入表示的 Word2vec 的两个实现。在 CBOW 中,上下文用于预测目标词,而在 skip gram 中,一个词用于预测目标上下文。
Continuous Bag of Words
CBOW架构 尝试使用上下文窗口词来预测目标词。中心词或目标词是在周围词或源上下文词的帮助下预测的。Word2vec 模型是无监督模型,这意味着我们只需要提供输入语料库而不需要任何关于输出的额外信息。为了获得 CBOW 词嵌入,该模型遵循监督分类方法,将语料库作为输入 X 并预测目标词 Y。
[(painting, belongs), Queen Elizabeth]
[(This, beautiful), painting].
输入层将具有上下文词(即“This”和“beautiful”)的单热表示,输出层将显示语料库中所有词的概率分布,其中词“painting”的概率得分为最高的一个。
Skip Gram Model
skip gram 模型是一种无 监督学习技术,它可以在目标词周围找到最相关的词。在这种情况下,使用目标词来预测词。它与 CBOW 方法相反。这里目标词是输入,上下文词是输出。这是一项相对困难的技术,因为要预测不止一个上下文词。如 skip-gram 模型架构(图3-3)所示,输入是目标词 W(t),输出是上下文词的向量表示。
这通常是按照以下方法计算的。该输入向量与权重矩阵之间的点积由一个隐藏层获得。类似地,在输出层中,计算隐藏层的输出向量与输出层的权重矩阵之间的点积。然后使用 softmax 激活函数计算 W(t) 上下文中单词 to 的概率。
隐藏层是权重矩阵,其中行对输出词有贡献。例如,如果权重矩阵是 4 × 4 维并且输入是一个单热编码词,那么将从与输入向量中的行对应的矩阵中选择一行。
这个词向量是在隐藏层被馈送到输出层之后得到的,它产生一个介于 0 和 1 之间的输出。输出层是一个 softmax 回归分类器,它给出了输出词在输入附近的那个上下文位置 的概率目标词。
GloVe
GloVe(全局向量) 是一种无监督技术,用于全局语料库中单词的向量表示。词向量是通过考虑语料库的全局和局部统计信息而获得的。局部统计对应于单词的局部上下文信息,而全局统计由单词共现捕获。
尽管 Word2vec 的性能相当令人满意,但仍然需要一种更好的方法,因为 Word2vec 只考虑周围的词,有时可能无法捕捉到一个词与其他词之间的有用关系。在 Word2vec 的情况下学习的语义仅依赖于本地信息并受相邻单词的影响。另一方面,在 GloVe 中,可以借助整个语料库的结构来获取单词的含义。这构成了词频和共现计数。该模型主要依赖于直觉,即单词到单词的共现概率有助于编码某种形式的含义,使其比 Word2vec 具有额外的优势。
GloVe 训练这些聚合的全局词-词共现统计数据并最小化最小二乘误差。这导致词向量空间的有意义的线性子结构。例如,“man”和“woman”在描述人的上下文中相似,但这两个词也是相反的。为了尽可能多地捕捉这两个词指定的含义,我们需要更大的信息语料库。这两个词之间的区别是基于性别的,性别可以由其他词对指定,如 husband-wife、brother-sister 等。
词嵌入 通过仅考虑相邻词而不是其他句子来生成词的向量表示。为了捕捉句子之间的关系,句子嵌入是最好的方法。这些是文档中句子的向量表示。句子嵌入模型是必不可少的,因为它们能够捕获词嵌入模型无法捕获的上下文信息。如前所述,词嵌入表示句子或对话中词的含义。它们是单词在 N 维向量空间中的表示。然而,这些方法往往会忽略必要的信息,如以下示例中所述。
Sentence 1: The sky is clear not cloudy today.
Sentence 2: The sky is cloudy not clear today.
这里,句子 1 和句子 2 具有相似的表示,但它们的含义完全不同。词嵌入将无法区分这两个句子,因为这些句子中出现的词的向量表示几乎相同。句子嵌入可用于实现这种区分。
在 ML 管道中处理文本数据时,我们确实遇到了计算句子嵌入的需要,以便我们能够将完整的句子嵌入到向量空间中。句子嵌入可以捕捉句子、段落、文档之间的语义相似性或相关性。
“The bird is flying in sky.” – [0.1, 0.7,0.4, …]
要为一个句子生成句子嵌入,最基本的方法是对该句子中出现的所有单词进行平均词嵌入。
可以使用词嵌入的加权平均来获得句子嵌入并降低维度。除了这种方法之外,还引入了其他方法,例如 Universal Sentence Encoder 和 ELMo,这些方法已被证明对 NLP 相关任务 非常有用。
与 Word2vec 不同,ELMo 在使用它们的上下文中分析单词。它不会为单词字典创建向量;相反,向量是通过将文本传递给深度学习模型来创建的。单词的表示取决于传递给模型的整个句子语料库。它不为每个单词使用固定的嵌入;相反,在将嵌入分配给一个词之前,先查看整个句子。它能够理解一个词的含义以及它所在的上下文。因此,它能够连同上下文信息一起捕捉意义。与单词相关的上下文信息可能因使用该单词的句子而异。这使它比 Word2vec 和 GloVe 更具优势。预训练语言嵌入,当添加到现有模型时,
ELMo模型 是一个相当复杂的神经语言模型,它试图在给定一些先前看到的单词历史的情况下计算一个单词的概率。ELMo架构(参考图3-5) 有一个双层双向 LSTM 作为它的骨干。这种双层双向 LSTM 模型有助于模型理解句子中的下一个词和前一个词。第一层和第二层通过残差连接连接,残差连接可以跳过一个或多个层,因为该层馈入下一层并直接进入层跳跃。它们用于使更深层次的网络更易于优化。在 ELMo 语言模型中,每个标记都使用字符嵌入转换为适当的表示形式。我们使用一维 CNN 获得这些字符级嵌入以获得单词的数字表示。即使对于不在词汇集中的单词,这也允许有效表示。然后使用各种数量和类型的过滤器将其通过卷积层。最后,在作为输入传递给 LSTM 层之前,它会通过一个两层高速公路网络。这种高速公路网络可以通过输入更顺畅地传输信息。这些对输入标记的转换允许选择形态特征、n-gram 特征等。这有助于建立一个强大的句子表示。
假设我们正在查看输入中的第 i 个词。以图3-5为参考,单词“blue”的 ELMo 表示是转换后的单词表示 x i以及两个双向表示 h 1i和 h 2i的输出的组合。函数 f 对输入执行以下操作。
ELMo i task = γi . (s0 task . xi + s1 task . h1, i + s2 task . h2, k)
这里,γ i 和sk是在特定任务模型中学习的权重因子。因此,当我们使用 ELMo 时,我们冻结权重,然后将每个标记的 ELMo i 任务连接到输入表示 。
最近推出了Universal Sentence Encoder ,它已成为最流行的句子嵌入预训练模型之一。它能够将句子转换为向量表示。这种通用的句子嵌入模型可以学习丰富的语义信息,从而使用迁移学习,通过重新训练架构的最后一层,可以从其他任务中学习句子表示。
该句子编码器模型可用于各种 NLU 任务。编码器使用的 Transformer 网络是在一个大的、变化多端的数据语料库上训练的。输入文本(可以是句子、短语或短段落)被编码为高维向量。这里,输入长度可以是可变的,但输出是一个 512 维向量。这可以为文本分类、聚类、语义相似性等广泛的下游任务生成句子嵌入。
universal-sentence-encoder-large
universal-sentence-encoder-lite
universal-sentence-encoder-multilingual
universal-sentence-encoder-multilingual-large
universal-sentence-encoder-multilingual-qa
Google 的研究人员介绍了来自 Transformers (BERT) 的双向编码器表示。用于语言建模的双向转换器使得 BERT 在各种 NLP 任务以及问答中得到广泛应用。这使得它不同于以前的模型,在以前的模型中,序列只在一个方向上拍摄,从左到右或从右到左。
双向编码器采用两个序列进行编码,其中一个是正常序列,另一个是它的反序列。它由两个编码器组成,用于对两个序列进行编码。对于最终输出,两种编码结果都被考虑在内。语言模型的双向训练让他们更深入地了解语言的上下文。如图3-7所示,它对于理解文本的含义确实很重要。
Sentence 1: I got scared on seeing a bat flying in my room.
Sentence 2: The player held the bat firmly while smashing a ball with it.
图 3-8 BERT变压器
BERT 使用两种策略来超越单向约束。BERT 在这两个 NLP 任务上进行了预训练:掩码语言建模 (MLM)和下一句预测 (NSP)。MLM 通过从输入文本中随机屏蔽标记来协助预训练双向变换器,而 NSP 任务联合预训练文本对表示。BERT 在训练期间最小化这两个任务的组合损失函数。
BERT模型有两种实现,BERT基础模型和BERT大模型。
BERT Base Model
BERT Large Model
BERT Large Model 是预训练的 BERT 模型,有 24 层或 transformer 块,每层有 1,024 个隐藏单元,有 3.4 亿个参数。它还可以进一步分为 BERT large-cased 和 BERT large-uncased。该模型比 BERT base 需要更多的内存。
本章介绍了word embeddings、sentence embeddings,以及它们的不同实现方式,如Word2vec、GloVe、Universal Sentence Encoder等。我们还讨论了 BERT 及其变体(即基本模型和大型模型)。在下一章中,我们将更深入地研究 BERT 及其不同的实现。