tokenizer(词元化方法),嵌入向量

2024-08-25 11:12

本文主要是介绍tokenizer(词元化方法),嵌入向量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 词元化方法 BPE (Byte-Pair Encoding)

BPE 是一种常用的词元化方法,主要用于处理文本中的词汇表。

  • 工作原理:BPE 是一种数据压缩算法,通过反复合并文本中最频繁出现的字符对,生成新的子词单元。例如,在英语中,可能会将 “l” 和 “o” 合并为 “lo”,然后再将 “lo” 和 “ve” 合并为 “love”。
  • 优点:BPE 生成的子词单元可以有效减少词汇表大小,能够处理罕见词或未见词(out-of-vocabulary words)。它在 NLP 中常用于分词处理,特别是在构建神经网络模型的输入时。

2. Word2Vec 嵌入

Word2Vec 是一种将词汇映射为向量(嵌入)的技术,通过将词汇表示为高维连续向量,捕捉词汇的语义信息。

  • 工作原理:Word2Vec 有两种主要架构:CBOW (Continuous Bag of Words) 和 Skip-Gram。它们通过预测上下文来学习词汇的分布式表示。
  • 嵌入向量:每个词汇被映射到一个固定维度的向量空间中,这些向量捕捉到词汇之间的语义关系。例如,词向量之间的相似度(如“king” - “man” + “woman” ≈ “queen”)可以反映词汇的语义相似性。

3. Skip-Gram 架构

Skip-Gram 是 Word2Vec 的一种训练架构,通过预测一个词的上下文来学习词向量。

  • 工作原理:给定一个中心词,Skip-Gram 模型通过尝试预测这个中心词的上下文词汇来学习。模型的输入是中心词,输出是其周围的词汇。通过训练,模型能够学习到每个词的语义向量表示。
  • 优点:Skip-Gram 在处理大型语料库时非常有效,尤其在建模低频词汇时表现出色。它适合捕捉词汇在不同上下文中的语义信息。

总结与关系

  • BPE 是一种词元化方法,用于将文本分解成子词或词元,为后续的嵌入步骤准备输入。
  • Word2Vec 是一种将词汇映射到向量空间的嵌入方法,用于表示词汇的语义信息。
  • Skip-Gram 是 Word2Vec 的一种架构,用于通过预测上下文来训练词向量。

三者共同作用,可以先用 BPE 进行词元化处理,然后使用 Word2Vec 和 Skip-Gram 生成词汇的向量表示,帮助模型理解词汇的语义关系。

在大模型(如 GPT 系列、BERT、T5 等)的处理中,tokenizer 步骤是将原始文本输入转化为模型可以处理的嵌入向量的关键步骤之一。假设使用 BPE(Byte-Pair Encoding)作为词元化方法,以下是文本从经过 BPE 切分到变成嵌入向量的一般流程:

1. 输入文本的预处理

  • 文本清理:包括去除无用的字符(如空格、标点符号)、处理大小写、标准化文本(如 Unicode 规范化)。
  • 添加特殊标记:根据模型的需要,添加特殊的开始标记 (<s>)、结束标记 (</s>)、填充标记 (<pad>)、未见词标记 (<unk>)、分类标记 ([CLS]) 或分隔标记 ([SEP]) 等。

2. BPE 词元化

  • 初始词元分割:首先,文本被分割为最小的单元(通常是字符或字符片段)。
  • 子词生成:通过 BPE 算法逐步合并最频繁的字符对,生成子词单元。例如,单词 happily 可能被分解为 happily
  • 映射到词元 ID:每个子词在词汇表中对应一个唯一的词元 ID,这些 ID 会在后续步骤中被模型处理。

3. 词元序列的处理

  • 添加位置信息:为每个词元 ID 添加位置信息(位置编码)。这种位置编码帮助模型理解词元在序列中的顺序关系。
  • Segment Embeddings(分段嵌入):对于需要区分不同句子或段落的任务,可能会添加一个额外的段嵌入向量,用于区分来自不同段落的词元。

4. 嵌入向量生成

  • 查找嵌入矩阵:将每个词元 ID 输入嵌入层,这个嵌入层本质上是一个查找表,将每个词元 ID 映射到一个固定维度的嵌入向量。嵌入向量通常是高维连续值向量,如 768 维、1024 维等。
  • 位置编码的加和:位置编码会与词元的嵌入向量相加,产生最终的词嵌入表示。这一步骤有助于模型理解输入序列的顺序。
  • 段嵌入的加和(如果有):对于使用 Segment Embeddings 的模型,将段嵌入向量与词元嵌入和位置编码的和相加。

5. 经过嵌入向量处理后的输入

  • 输入到 Transformer 模型:这些嵌入向量会被输入到 Transformer 模型的编码器或解码器层,用于后续的计算。
  • 多层注意力机制处理:模型通过多层的自注意力机制和前馈神经网络处理这些嵌入向量,最终产生用于预测、分类或生成任务的输出。

总结与整体流程

  • 预处理:原始文本清理,并添加必要的标记。
  • BPE 词元化:文本分割为子词单元,并映射到词元 ID。
  • 嵌入生成:词元 ID 转换为嵌入向量,并结合位置编码和可能的段嵌入。
  • 输入到 Transformer:最终的嵌入向量输入到 Transformer 模型,进行进一步的处理。

通过这些步骤,模型能够将原始文本转换为数值化的表示,供后续层次的神经网络进行复杂的计算和推理。这种流程在许多现代大模型中是通用的,但在特定任务和模型架构中可能会有所调整。

要详细理解词汇表的训练过程、BPE 词元化如何确保每个词都有对应的词元 ID,以及嵌入向量查找表的训练过程,首先要了解这些步骤的背景和工作原理。

1. 词汇表的训练过程

  • 初始文本语料:训练过程开始于一个大型的文本语料库。这个语料库包含了模型将要处理的多种语言和领域的文本。

  • 字符级初始化:最初,词汇表只包含基本的字符集合,如字母、数字、标点符号等。这意味着最小的初始单元是单个字符。

  • BPE 训练:在初始的字符级别基础上,BPE(Byte-Pair Encoding)算法开始对语料库进行处理。BPE 的核心思想是通过统计最频繁的字符对并将它们合并来生成新的子词单元。

    • 统计频率:BPE 算法首先会统计语料库中所有相邻字符对的出现频率。
    • 合并字符对:然后,它会选择最频繁的字符对,将它们合并成一个新的子词单元(如“h”和“e”合并为“he”)。
    • 更新语料和词汇表:合并后,语料中的所有出现位置都会更新,继续重复这一过程。每次合并都会生成一个新的子词单元,并将其加入到词汇表中。
    • 迭代过程:这一过程会反复进行,直到词汇表达到设定的大小限制或没有新的高频字符对可以合并为止。
  • 最终词汇表:通过这个迭代过程,BPE 生成了一个包含子词单元的词汇表,这些子词可以组合来表示更长的词汇。这个词汇表记录了每个子词及其对应的唯一 ID。

2. 确保 BPE 词元化后的每个词都有对应的词元 ID

  • 灵活的子词表示:由于 BPE 通过频繁的字符对合并生成子词单元,这些子词既可以是完整的单词,也可以是单词的一部分。即使一个词没有出现在词汇表中,它也可以被分解为词汇表中的子词单元。
    • 例如,“unhappiness” 可以被分解为 ["un", "happiness"],如果“happiness”不在词汇表中,它还可以进一步分解为 ["happ", "iness"]
  • 罕见词和未见词的处理:如果词汇表中没有直接的词元表示,BPE 能够通过子词组合来表示它。这种分解方式确保了所有可能的词汇都有对应的词元表示,从而能够在词汇表中找到对应的词元 ID。

3. 嵌入向量查找表的训练过程

  • 嵌入层初始化:在深度学习模型中,嵌入层通常初始化为一个随机的矩阵。这个矩阵的行数是词汇表的大小,列数是嵌入向量的维度(如 768 维或 1024 维)。

    • 随机初始化:每个词元 ID 在最开始都被随机赋予一个向量表示,这些表示并没有语义信息。
  • 模型训练与调整:随着模型的训练,嵌入层会被反向传播算法不断调整。

    • 损失函数计算:模型在处理输入数据时,通过计算预测结果与真实标签之间的损失来指导参数调整。损失函数的梯度会通过模型反向传播到嵌入层。
    • 嵌入向量更新:在反向传播过程中,嵌入层中的向量会根据梯度信息逐步更新。这意味着每个词元的向量表示逐渐被优化,捕捉到词汇之间的语义关系。
  • 语义关系的捕捉:经过大量训练数据的反复调整,嵌入向量开始反映词汇之间的语义关系。例如,语义相似的词汇(如“king”和“queen”)在嵌入空间中会更接近。

  • 最终查找表:经过训练后的嵌入层成为一个查找表,模型输入的每个词元 ID 都可以通过查找表映射到它的嵌入向量,这些向量作为模型进一步处理的输入。

总结

  • 词汇表训练:通过 BPE 算法,从初始字符级词元开始,逐步合并生成子词单元,构建词汇表,确保所有词都能在词汇表中找到表示。
  • 词元 ID 的获取:BPE 词元化能够将所有词汇分解成词汇表中的子词单元,从而为每个词元分配一个唯一的词元 ID。
  • 嵌入查找表训练:随机初始化的嵌入矩阵通过模型训练逐步优化,捕捉词汇的语义关系,形成一个可查找的嵌入向量表。

在大模型中,嵌入矩阵的训练更复杂,结合了 Transformer 架构和多任务学习的最新进展。以下是大模型中嵌入矩阵的具体训练步骤。

1. 嵌入层的初始化

  • 随机初始化:嵌入矩阵的初始化通常是随机的,这意味着每个词元 ID 对应的向量在初始阶段没有语义信息。
  • 维度选择:嵌入向量的维度(例如 768 或 1024 维)通常取决于模型的设计,决定了每个词元的向量表示的复杂性。

2. 训练数据的准备

  • 大量预训练语料库:大模型通常使用非常大的语料库进行预训练,这些语料库包含多种语言、领域的文本数据。
  • 目标任务的定义:模型会在无监督或自监督任务下进行预训练,如掩码语言模型 (MLM) 或自回归语言模型 (Causal Language Modeling, CLM)。

3. 损失函数的设计

  • 自监督任务:与 Skip-Gram 的预测目标类似,大模型使用自监督任务来优化嵌入矩阵。例如,BERT 使用掩码语言模型 (MLM) 任务,随机遮掩输入序列中的某些词元,并训练模型去预测这些词元。这样,嵌入矩阵中的词向量会根据其上下文信息逐步优化。
  • 多任务学习:最新的大模型可能会结合多个任务进行训练,包括文本分类、序列标注、生成任务等。这些任务共享同一个嵌入矩阵,使得嵌入向量能够在多种任务下进行优化,捕捉更加丰富的语义信息。

4. 嵌入矩阵的优化过程

  • 前向传播:模型通过嵌入层将输入的词元 ID 映射到嵌入向量,然后通过多层 Transformer 编码这些向量以生成输出。
  • 计算损失:基于任务的目标(如预测被遮掩的词元、生成下一个词元等),计算预测输出与真实标签之间的差异(损失)。
  • 反向传播与梯度下降:模型的所有参数(包括嵌入矩阵)通过反向传播算法更新。损失的梯度信息会通过网络层层传递,最终更新嵌入矩阵中的向量,使它们更好地反映输入数据的语义关系。

5. 在大模型中的具体实现

  • 共享嵌入层:在一些 Transformer 架构中,编码器和解码器可能共享相同的嵌入层,这种共享机制可以提高模型的参数效率和嵌入向量的通用性。
  • 预训练与微调:模型通常会先进行大规模的预训练,然后在特定任务上进行微调。在微调阶段,嵌入矩阵会根据特定任务的数据进一步优化,这种方式能够增强模型在特定任务上的表现。
  • 对比学习:一些最新的模型(如 CLIP)结合了对比学习的思想,通过在多模态(如文本和图像)之间建立对应关系,进一步优化嵌入表示,使其在多模态任务中更具表达力。

6. 结合最新进展的优化

  • 高效训练技术:为了加速嵌入矩阵的训练,新的优化技术如混合精度训练、知识蒸馏和梯度累积被广泛应用。这些技术有助于减少计算资源需求,并提高嵌入矩阵的训练效果。
  • 稀疏化嵌入表示:一些模型引入稀疏化机制,减少嵌入矩阵中的冗余信息,使得嵌入向量在高维空间中更具辨别力。

总结

嵌入矩阵的训练过程确实类似于 Skip-Gram 架构的核心思想,但在大模型中,它通过自监督任务、多任务学习以及最新的优化技术得到了更广泛的扩展和应用。这些方法共同作用,使得嵌入向量能够捕捉更丰富、更通用的语义信息,为模型的强大表现奠定基础。

当前许多研究确实会单独训练一个 tokenizer,然后将其与预训练模型拼接在一起,再进行模型的训练和推理。这样做主要是为了利用已经优化和验证过的 tokenizer,从而减少整体模型的训练成本和复杂性。以下是如何理解这种方法以及它与嵌入层和 Transformer 架构共同优化的关系:

1. 单独训练 Tokenizer 的原因

  • 减少复杂性: 训练一个好的 tokenizer 需要大量的数据和计算资源,而许多研究和应用可以直接利用已经训练好的 tokenizer,而不必从头开始训练。比如,常用的 BPE、WordPiece、SentencePiece 等方法在很多场景下都表现良好,因此它们被广泛复用。
  • 领域适应: 预训练好的 tokenizer 可以直接用于特定领域的数据,而不需要重新训练整个模型的 tokenizer。这样可以确保在新领域中,tokenizer 的表现依然稳健。
  • 提高效率: 直接使用已有的 tokenizer 可以节省大量的时间和计算资源,尤其是在大模型训练中,这些资源节省尤为重要。

2. 基于预训练 Tokenizer 的嵌入层处理

  • 词元 ID 映射: 当使用预训练的 tokenizer 时,它将文本输入切分为预定义的词元,并将这些词元映射为对应的 ID。这些 ID 就成为嵌入层的输入。
  • 嵌入层的初始化: 嵌入层的参数依然是随机初始化的,尽管 tokenizer 是预训练的。嵌入层的初始表示与模型的其他部分无关,它将在后续的训练过程中与 Transformer 层一起优化。

3. 嵌入层与 Transformer 层的共同优化

  • 嵌入与 Transformer 协同优化: 在训练过程中,虽然 tokenizer 是预训练的,但嵌入层和 Transformer 层的参数依然是同时优化的。即使 tokenizer 已经确定了词元 ID,嵌入向量的优化依然需要与模型其他部分一起完成,以确保这些向量能够适应模型的特定任务和数据。
  • 一致性与泛化能力: 由于 tokenizer 已经通过预训练保证了较好的词元切分效果,嵌入层的优化会更聚焦于如何在高维向量空间中表示这些词元,使得它们与 Transformer 层的参数更好地协作,从而提升模型的整体表现。

4. 模型训练中的实际操作

  • 利用预训练 tokenizer: 研究者们会选择已经预训练好的 tokenizer,将其用于特定任务的数据预处理。这样得到的词元 ID 序列直接输入到模型中,经过嵌入层和 Transformer 层的处理。
  • 进行模型训练: 虽然 tokenizer 已经确定,模型的训练依然需要在整个架构上进行。训练过程中,嵌入层和 Transformer 层的参数会随着损失的最小化一起优化。
  • 推理阶段: 在推理过程中,输入的文本数据会使用相同的 tokenizer 进行切分,然后通过训练好的嵌入层和 Transformer 层进行处理,最终输出模型的预测结果。

总结

使用预训练的 tokenizer 可以显著简化大模型的训练过程,但嵌入层和 Transformer 层的参数优化依然是在同一个训练过程中进行的。这种方法能够平衡效率与性能,在充分利用已有资源的同时,确保模型在特定任务上的表现达到最佳。

最新的 tokenizer 训练方法结合了先进的技术和思想,尤其是在大规模预训练模型和多模态任务中,tokenizer 的训练有了一些新的发展。以下是最新 tokenizer 训练方法的概述:

1. 自监督学习与语料库的选择

  • 大规模语料库:与早期使用小型专用数据集不同,现代 tokenizer 通常在非常大规模的多领域、多语言语料库上训练。这些语料库可能包括互联网爬取的数据、新闻、书籍、代码等内容。
  • 自监督学习:许多 tokenizer 采用自监督学习的方式进行训练,特别是在语言模型预训练阶段。自监督方法不需要人工标注,模型可以通过预测下一个词元、恢复被遮蔽的词元等任务,学习词元化的规则。

2. 词元化方法的改进

  • BPE(Byte-Pair Encoding)扩展:虽然 BPE 是常见的词元化方法,但它有局限性,尤其在处理多语言和罕见词汇时。最新的 BPE 变种(如 Unigram Language Model)会通过更复杂的统计方法,在词元切分时考虑更多的上下文信息。
  • SentencePiece:SentencePiece 是 Google 推出的一个工具,能够处理不同的字符集(如中文、日文),并能在不依赖空格分词的情况下进行词元化。它结合了 BPE 和 Unigram Language Model 的思想,并在最新的大模型中被广泛应用。
  • WordPiece:原用于 BERT 模型的 WordPiece 在训练过程中使用了基于最大似然估计的方法,以确保词元切分的统计稳定性和置信度。

3. 多语言与多模态支持

  • 多语言支持:现代 tokenizer 通常是跨语言训练的,可以处理多种语言。通过多语言语料库的训练,tokenizer 学习到不同语言之间的共享词元表示,从而在处理跨语言任务时表现更好。
  • 多模态支持:最新的 tokenizer 还被训练用于多模态任务,如文本-图像联合任务。CLIP 模型中使用的 tokenizer 就是在图像和文本配对数据上训练的,通过对比学习,tokenizer 学习到了文本与视觉内容之间的对应关系。

4. 新型的 Tokenization 方法

  • T5 的 Span-BPE:T5 模型引入了 Span-BPE 词元化方法,它不是简单地对单词进行分割,而是通过最大化片段(spans)的覆盖率来选择最优的词元切分方式。这种方法在保证信息量的前提下减少了词元的数量。
  • Mert Tokenizer:Facebook AI Research 推出的 Mert 是一种新的词元化方法,它通过最小熵正则化 (Minimum Entropy Regularization) 的方式来确定最优的词元集合。Mert 的目标是最小化词元化的不确定性,从而提高模型的稳定性和效率。

5. 训练流程

  • 预处理数据:首先,将大规模的文本数据进行预处理,包括去除噪声、统一格式等。对于多语言任务,还需要对不同语言进行统一的字符标准化。
  • 生成初始词汇表:根据选择的词元化算法(如 BPE 或 WordPiece),在语料库上进行统计分析,生成一个初始的词汇表。这个词汇表会根据统计频率、上下文相关性等因素进行优化。
  • 迭代优化:在生成初始词汇表后,使用一个迭代过程逐步优化词元切分规则。每次迭代都会调整词汇表,以进一步提高词元的表示效果。
  • 词汇表精简:在经过多轮优化后,会对词汇表进行精简,去除冗余或低频的词元,以确保模型的效率和稳定性。

6. 基于预训练模型的联合优化

  • 模型与 tokenizer 联合训练:在某些情况下,tokenizer 会与预训练模型一起进行联合优化。这种方法能够更好地适应特定的模型结构和任务要求。例如,GPT-4 等最新模型可能在训练过程中不断调整词汇表和词元表示,以提高任务的性能。
  • 知识蒸馏与微调:在特定任务上,tokenizer 可能会通过知识蒸馏或微调进一步优化。这种方式能够让预训练好的 tokenizer 更好地适应下游任务的需求。

总结

最新的 tokenizer 训练方法强调在大规模、多语言、多模态的数据上进行自监督学习,结合改进的词元化算法和联合优化技术,使得词元化过程更加稳定和高效。随着自然语言处理技术的不断发展,tokenizer 的训练也在不断演变,以适应新的挑战和需求。

这篇关于tokenizer(词元化方法),嵌入向量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105398

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法