分词与嵌入层是将自然语言输入转换为模型可处理的数值表示的重要步骤。在文本处理中,分词器通过将句子拆分成独立词语或标记,将语言数据转换为向量表示,为模型提供基础特征。嵌入层将这些标记转换为稠密向量,使得词语之间的语义关系能够被模型有效捕捉。
本节首先介绍分词器如何将文本转换为嵌入向量,然后详细说明如何使用PyTorch构建嵌入层并将分词结果输入模型中。
分词器是将原始文本转换为模型可接收的输入向量的工具。分词器的工作包括将句子分解成词或子词标记,并将其映射到词汇表中的索引,随后通过嵌入层将这些索引转换为稠密向量,从而保留语义信息,供模型处理。常见的分词器有Casual Tokenizer(因果分词器)、Casual 3D CNN分词器等。因果分词器架构如图1-3所示。
图1-3 因果分词器架构图
嵌入层是将分词后的词汇索引转换为模型可用的稠密向量表示的关键部分。通过PyTorch的nn.Embedding模块,可以将离散的词汇索引映射到低维连续空间,每个词语的嵌入向量表示其在语义空间中的位置。常见的嵌入层多为旋转嵌入层,即对输入词向量进行旋转放缩后再通过嵌入层进行词嵌入,如图1-4所示。嵌入层的输入是分词器生成的词汇索引序列,输出为词汇索引对应的稠密向量矩阵。
图1-4 旋转词向量嵌入层架构图
在后续的模型处理中,嵌入层将帮助模型捕捉词汇之间的语义关系。以下代码将展示如何使用PyTorch实现嵌入层,接收分词后的索引序列并输出对应的嵌入向量。
代码解析如下:
(1)Tokenizer:分词器将文本转换为词汇索引。首先对文本进行清洗、分割,并通过词汇频率构建词汇表,然后使用text_to_sequence方法将输入文本转换为索引序列。
(2)TextEmbedding:嵌入层定义了一个nn.Embedding层,将输入的词汇索引序列映射到稠密向量。嵌入层的输入是词汇索引序列,输出为相应的稠密向量。
(3)嵌入层训练:模拟嵌入层的训练过程,计算嵌入输出与随机目标嵌入向量的均方误差损失,通过反向传播更新嵌入矩阵的权重,展示训练过程中的损失变化。
代码运行结果如下:
结果解析如下:
(1)分词后的索引序列:展示分词器将输入文本“the quick brown fox”转换为词汇索引。
(2)嵌入向量:嵌入层将索引序列转换为稠密向量,每个词对应一个8维向量表示。
(3)训练后的损失:显示训练损失,模拟嵌入层优化的效果。
(4)嵌入层的权重矩阵:展示嵌入矩阵的部分权重,表示词汇在稠密空间中的分布。