Word Embedding文本向量化和可视化

通过本文可以了解:本文涵盖了词嵌入的基础,一个热编码,文本向量化,嵌入层,和一个NLP的神经网络体系结构的例子

词嵌入是自然语言处理(NLP)中最重要的概念之一,将词汇表中的单词或短语(即字符串)映射到实数向量。将字符串映射为实数向量的需要源于计算机无法对字符串进行运算。

将字符串转换为有代表性的数字

1、 One Hot Encoding

可以通过创建一个具有整个词汇表长度的零向量来实现一次热编码。然后,我们只把“1”放在单词所在的索引中。对于每个单词,我们创建相同的向量。下面你可以看到一个热编码的例子,我们对句子His dog is two years old”进行编码。

One Hot Encoding for “His dog is two years old” (Figure by Author)

随着词汇表大小的增加,向量的大小也会增加。热编码通常被认为是一种低效的向量化字符串的方法。正如您在上面的示例中所看到的,大多数值都是零。这种方法被认为是一种不必要的计算复杂性。

02 Encoding with a Unique Number

您可以选择为每个单词分配一个唯一的ID号,而不是为句子中的每个单词创建一个零向量。因此,您可以将1指定为“dog”,2指定为“his”,3指定为“is”,4指定为“old”,5指定为“two”,6指定为“years”,而不是使用字符串。这样,我们就可以将字符串“His dog is two years old”表示为[2,1,3,5,6,4]。

Encoding with a Unique ID Number for “His dog is two years old” (Figure by Author)

正如您所看到的,创建它要容易得多。但是,它附带了一个约定:这些数字没有任何关系表示,因为编码是任意的。没有什么能阻止我们改变编码方式。因此,这些值不能捕获单词之间的关系。关系表示的缺乏使得模型很难解释这些值,因为特性的值(分配的数字)没有任何意义。因此,使用唯一的ID号进行编码也不是捕获模式的好方法。

3、 Word Embedding

由于one-hot encoding 效率很低,并且使用唯一id进行编码不提供关系表示,因此我们必须依赖于另一种方法。这种方法就是单词嵌入。如上所述,单词嵌入是将单词转换为向量的任务。

A Basic 3-Dimensional Word Embedding for “His dog is”

Deep Learning for the Vectorization

在理想的情况下,我们的目标是为每个单词找到完美的向量权值,以便它们的关系能够被恰当地表示出来。但是我们如何知道一个词与另一个词是否密切相关呢?

当然,我们有一种直觉,因为我们一直在学习语言。但是,我们的模型必须接受分析这些单词所需的训练。因此,我们需要一个机器学习问题。

我们可以采用监督学习、无监督学习和半监督学习的方法进行词汇嵌入。在这篇文章中,我们将处理一个有监督的学习问题来向量化我们的字符串。

01 词嵌入的神经网络结构

我们需要创建一个神经网络来为每个单词找到理想的向量值。在这个阶段,我们需要的是:

1、文本矢量化层Text Vectorization layer转换文本到一维张量的整数
2、一个嵌入层Embedding layer,将整数的一维张量转换为固定大小的稠密向量。
3、用于反向传播和代价函数以及其他深度学习任务的全连接神经网络fully connected neural network

02 Text Vectorization Layer

文本向量化是一个实验层,它为文本预处理自动化提供了很多价值。该层执行以下步骤:

  • 用小写字母和去掉标点符号来规范每个句子

  • 把每个句子分成单词

  • 将单词重新组合成符号tokens

  • 索引这些tokens

  • 使用索引将每个句子转换为整数标记索引或浮点值的1D张量。

在这里插入图片描述

我们首先根据上面的示例创建一个词汇表。接着,创建一个TextVectorization层, 再利用Keras Sequential API建立虚拟模型。

我们输入几个句子来创建一个整数的一维张量的列表:

The I/O of the Operations with TextVectorization Layer

一维输出张量的长度是3因为我们把它设为3。请随意尝试其他的数值。

03 Embedding Layer

嵌入层有一个简单的功能:它将正整数(索引)转换为固定大小的密集向量。

在这里插入图片描述

我将TextVectorization示例的输出作为输入传递,并将输出维设置为2。因此,每个输入的整数现在都用一个二维向量表示。输入形状是(3,3),输出形状是(3,3,2)。

The I/O of the Operations with Embedding Layer

通过改变输出dim,可以很容易地生成更复杂的向量空间,这将增加计算复杂度,但可以潜在地捕获更多的模式。

04 A Set of Fully Connected Layers

在TextVectorization和嵌入层之后,我们最终得到了所需的向量空间。但是,这些值仍然是随机的。因此,我们需要一个计算成本函数并通过反向传播调整值的优化器。这个优化器应该在一组完全连接的层之上运行。在某些情况下,还可以添加其他类型的层,如LSTM、GRU或Convolution层。为了简单起见,我将它们称为一组完全连接的层。

A Basic Example of A Set of Fully Connected Layers

如果你的嵌入输出有任何可能的可变长度,请确保在一组完全连接的层之前添加一个全局池层。

使用一组完全连接的层,我们可以根据标签输入字符串来调整矢量值。例如,假设我们有一个带有情感标签(如积极或消极)的句子数据集。然后,我们可以用我们从自己独特的词汇中创造的词汇来矢量化和嵌入这些句子。然后我们可以创建一组完全相连的层次来预测他们的情绪是积极的还是消极的。我们可以使用标签反向传播我们的模型来优化这些向量。

我们的结果类似于这样:

Word Embedding created using Word2vec

05 Final Notes

粗略地说,用于Word嵌入的神经网络架构是这样的:

A Basic Artificial Neural Network Architecture for Word embedding

正如我上面提到的,复杂的单词嵌入模型需要其他层,如全局池、LSTM、GRU、卷积等。然而,结构保持不变。

练手项目:

我们使用IMDB Reviews数据集对单词进行矢量化并训练它们的值。

我们将在Google Colab使用简单的Keras模型和IMDB Reviews数据集来训练单词嵌入。然后,我们使用 Embedding Projector可视化他们。

01 下载IMDB Reviews Dataset

IMDB评论数据集是一个大型的电影评论数据集,由Andrew L. Maas从流行的电影评级服务IMDB收集和准备。IMDB Reviews数据集用于二元情感分类,无论一个评论是正面的还是负面的。它包含25000个用于培训的电影评论和25000个用于测试的电影评论。所有这50000条评论都是标记数据,可以用于监督深度学习。此外,还有另外5万条未标注的评论,我们将不在本案例研究中使用。在这个案例研究中,我们将只使用训练数据集。

我们可以使用tf.keras.utils从斯坦福的相关目录中下载数据集。Get_file函数,如下所示:

在这里插入图片描述

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

02 Dataset Creation

我们需要一些内务管理来创建适当的数据集。控件查看我们的主目录

在这里插入图片描述

如下所示,我们有了train和test文件夹。对于本研究,我们将只使用/train文件夹。

通过以下几行,让我们查看/train子目录下的内容:

在这里插入图片描述

The Content of Sub-Directory, “aclImdb/train”

我们有消极情绪和积极情绪的评论。

下一步,我们将删除unsup文件夹,其中包含未标记的评论。因为我们在本教程中研究的是一个监督学习问题,所以我们不需要它。

在这里插入图片描述

我们移除了unsup文件夹多亏了theshutil库:

03 Create the Dataset

现在我们已经清理了目录,我们可以创建Dataset对象。为此,我们可以使用thetf.keras.preprocessing。

text_dataset_from_directory函数。顾名思义,该函数允许我们直接从一个目录创建文本数据集。

我们选择了80/20的训练和验证分割,但是可以随意调整validation_split参数。
在这里插入图片描述

正如您在下图中所看到的,我们有20,000个培训评审和5,000个验证评审。

让我们使用.take()函数并运行for循环来检查数据集的外观。注意,我们的数据集是一个TensorFlow数据集对象。它需要更多的努力来打印它的元素。下面这行代码就是这样做的:

在这里插入图片描述

这是结果:

The First Five Reviews from the Training Dataset with Their Sentiment Info in the Beginning

04 Configure the Dataset

现在,由于我们处于深度学习的领域,优化对于可承受的训练体验至关重要。TensorFlow有一个实验工具,我们可以使用它来优化工作负载,并缩短预处理、训练和其他并行操作所需的时间。我们可以通过以下线路优化我们的管道:

在这里插入图片描述

Text Preprocessing

01 Custom Standardization

我们将创建一个自定义字符串标准化函数来充分利用标准化。标准化可以被描述为一组用于NLP研究的预处理操作,包括小写、标签去除和标点删除。在下面的代码中,我们实现了以下目标:

在这里插入图片描述

现在我们的数据将更加标准化与我们的自定义功能。

02 TextVectorization

因为我们创建了自定义标准化函数,所以我们可以在从TensorFlow导入的TextVectorization层中传递它。TextVectorization是一个用于将字符串映射为整数的层。我们将传入我们的自定义标准化功能,我们将使用最多10,000个惟一的单词(词汇表),并且每次复习最多保留100个单词。检查以下几行:

在这里插入图片描述

我们将从train数据集中删除标签,并调用.adapt()函数来构建以后要使用的词汇表。注意,我们还没有对数据集进行向量化。刚创建的词汇表如下:

Model Building and Training

01 Model Creation

我们将进行初始导入,其中包括用于构建模型的Sequential API 和我们将在模型中使用的Embedding, GlobalAveragePooling, Dense layers。

我们将嵌入维数设置为16,所以每个单词将有16个代表值。在上面的代码中,我们将词汇表的大小限制为10,000。我们在Keras模型中添加了以下图层:

1、一个文本矢量化层,用于将字符串转换为整数;
2、嵌入层转换整数值与16维向量;
3、一个全局平均池1D层,以解决有不同长度的问题;
4、有16个神经元的致密层,具有relu激活层
5、最后一个密集层有1个神经元来分类评论是否有积极情绪或消极情绪。

在这里插入图片描述

02 Set Up Callbacks for TensorBoard

因为我们想要了解我们的模型是如何随着时间的推移而发展和执行的,我们将使用以下行来配置我们的回调设置:

在这里插入图片描述

我们将使用这些回调来使用TensorBoard在每个epoch中可视化我们的模型性能。

03 Set Up Callbacks for TensorBoard

然后,我们将配置我们的模型与Adam作为优化器和Binary Crossentropy二进制交叉熵作为损失函数,因为这是一个二元分类任务,选择准确性作为我们的性能指标。

在这里插入图片描述

04 Start the Training

现在我们的模型已经配置好了,我们可以使用.fit()函数来开始训练。我们将运行15个epoch并记录TensorBoard的回调。

在这里插入图片描述

Visualize the Results

现在我们结束了模型训练,让我们做一些可视化来更好地理解我们构建和训练的内容。

01 The Summary of the Model

我们可以很容易地通过.summary()函数看到模型的摘要,如下所示:
在这里插入图片描述

下图显示了我们的模型的外观,并列出了每个层的参数数量和输出形状:


02 Training Performance on TensorBoard

让我们看看我们的模式在IMDB审阅数据集上是如何发展的。我们可以使用TensorFlow的可视化工具包TensorBoard。TensorBoard可用于多种机器学习可视化任务。

在这里插入图片描述

===

03 Visualization with Embedding Projector

我们的模型看起来不错,在短短15轮,它学到了很多东西。但是,本教程的主要目标是创建一个单词嵌入。在本教程中,我们不会预测评论情绪。相反,我们将可视化我们的词嵌入云使用Embedding Projector。

Embedding Projector是一个基于TensorBoard的工具。它是一个有用的工具来分析数据和可视化嵌入值相对于彼此的位置。使用Embedding Projector,我们可以用像PCA这样的算法简化高维嵌入以图形化的方式表示。

04 Get the Vector Values and Vocabulary Data

我们将首先为每个单词获取16维的嵌入值。同样,我们将得到一个我们嵌入的所有单词的列表。我们可以通过以下代码实现这两个任务:

在这里插入图片描述

让我们通过一个随机的例子来看看单词和它的向量值是什么样子的。我们选择了带有索引号的单词。500,用下面的代码可视化它:

在这里插入图片描述

向量值和对应的字为索引号,可以随意更改索引值,以查看其他单词的向量值。500如图所示:

A Random Example of Word-Vector Pair

05 Save the Data to New Files

现在我们有了整个单词列表(词汇表)及其对应的16维向量值。我们将把单词名称保存到元数据中。TSV文件和矢量值的矢量。tsv文件。以下几行创建新文件,将数据写入这些新文件,保存数据,关闭文件,并将它们下载到本地机器:

在这里插入图片描述

06 Load to Embedding Projector

然后,我们点击左边的“Load”按钮来加载vectors.tsv和metadata.tsv文件。然后,我们可以点击弹出窗口以外的任何地方。

Our Word Embedding Trained on IMDB Reviews Dataset

注意,embedectors运行一个PCA算法来减少16维向量空间到3维,因为这是唯一的方法来可视化它。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值