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

news2024/9/23 9:20:57

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

在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时间,探究 TTS 技术的演变历程,重点关注如何通过先进的算法和计算模型,实现从一段静态文本到仿若真人般自然流畅语音的转化。我们将深入了解深度学习的革命性影响,如何推动着 TTS 技术向着更高的自然度和理解力迈进,特别是谷歌的 Tacotron 和 DeepMind 的 WaveNet 如何在这个领域设定了新的标准。随着技术的不断成熟,未来的 TTS 系统将更加智能、灵活,并且能够在更广泛的应用场景中提供个性化和情感丰富的语音交互体验。

1.TTS before End-to-end

1.1 Concatenative Approach(拼接式方法)

Concatenative Approach(拼接式方法)是传统的文本到语音(Text-to-Speech,TTS)合成技术之一。这种方法主要特点是 speeches from a large database,即通过拼接已经录制好的语音片段来合成语音。这些语音片段可以是单个的音素(语音的基本单位)、音节、词或者短语等,录制时覆盖了不同的发音、语调和情感。

拼接式方法的优点是合成的语音通常听起来非常自然,因为它们是基于真实的人声录制的。然而,这种方法也有一些局限性和缺点:

  • 资源消耗大:因为需要维护一个庞大的语音单元库,这会占用大量的存储空间。
  • 灵活性有限:如果遇到数据库中没有包含的新词或特别的发音,系统可能无法合成出自然的语音。
  • 制作成本高:语音单元库的制作需要专业的录音设备和环境,以及大量的时间来录制和处理语音,因此制作成本相对较高。

1.2 Parametric Approach(参数化方法)

在文本到语音(Text-to-Speech,TTS)合成中,参数化方法(Parametric Approach)是一种模型合成语音的技术。与拼接式方法(Concatenative Approach)直接使用录制的语音片段不同,参数化方法使用数学模型来模拟人声的特性,并根据这些模型合成语音。以下是参数化 TTS 系统的基本工作流程:

  1. 文本分析:输入的文本首先经过分析,包括文本规范化、词汇分析和句法分析,然后,文本被转换成音素序列,音素是语音的基本发音单位;
  2. 语音建模:
    • 特征提取:首先,从大量的人类语音记录中提取声学特征,这些特征代表了语音的基本属性,包括基频(音高)、共振峰(代表声带和口腔形状)、音素时长、能量等。
    • 声学模型训练:使用提取的特征来训练声学模型,这些模型旨在学习文本特征(如音素、音调标记)和声学特征之间的关系。
  3. 参数生成:使用声学模型根据音素序列预测声学参数,包括基频(音高)、共振峰(代表声带和口腔形状)、音素时长、能量等;
  4. 声音合成:将预测的声学参数输入到声码器,声码器根据这些参数生成合成语音的数字信号。
  5. 语音合成:最终的数字信号被转换为听得见的语音,输出给用户。下图描述了参数化方法 HTS(HMM/DNN-based Speech Synthesis System,HTS 通常指的是 HMM-based Speech Synthesis)的工作流程

参数化方法的主要优势在于:

  • 资源占用小:不需要存储大量的语音录音片段,模型参数通常占用的存储空间相对较小。
  • 高度可控制:通过调整模型参数,可以改变合成语音的各种特性,如语调、语速和情感等。
  • 灵活性:理论上可以合成任何文本,包括新词和非标准词汇,而不受预录语音片段的限制。
  • 声码器依赖:输出的音质很大程度上取决于声码器的性能,一些传统声码器可能造成音质损失。然而,参数化方法也有一些挑战:
  • 自然度:传统的参数化 TTS 系统通常比基于拼接的方法或最新的深度学习方法合成的语音听起来更机械和不自然。
  • 模型复杂性:构建一个准确模拟人类语音行为的声学模型非常复杂,对于特定的语言和语音特性可能需要大量的调整和优化。

随着技术的发展,深度学习技术已被应用于 TTS 系统,如端到端的神经网络模型 Tacotron 和 WaveNet,它们可以直接从文本生成语音,不再依赖于预先录制的语音片段,解决了拼接式方法的一些局限性。HTS 主要基于传统的统计模型和声学理论,而 Tacotron 则更多地依赖深度学习和大数据。HTS 系统在计算效率和资源需求方面具有优势,但 Tacotron 能够生成更自然的语音输出。随着技术的不断进步,Tacotron 及其变体正在逐渐成为业界新标准,特别是在追求高质量语音合成的场景中。

1.3 Deep Voice

Deep Voice 是由 Baidu Research 开发的一系列文本到语音(TTS)合成系统。Deep Voice 项目标志着基于深度学习的 TTS 技术的重大进步,它旨在通过使用深度神经网络来生成更加自然和高效的语音输出。Deep Voice 的第一个版本,即 Deep Voice 1,于 2017 年发布,它是一个端到端的系统,采用多个深度学习模型来处理不同的 TTS 任务,如文本分析、音素持续时间预测、基频预测和音频合成。与传统的参数化 TTS 系统相比,Deep Voice 1 的一个显著改进是使用深度神经网络生成声码器参数,这提高了合成语音的自然度。随后,Baidu Research 进一步发布了 Deep Voice 2 和 Deep Voice 3(end to end)。每一个新版本都在模型架构、训练速度、语音质量和系统灵活性方面带来了改进。

  • Deep Voice 2 开始引入了多说话人支持,允许模型学习和合成不同说话人的声音。

  • Deep Voice 3 集成了改进的 WaveNet 模型作为其声码器,用以生成最终的语音波形,增强了语音的自然度。

2. Tacotron: End-to-end TTS

2.1 Before Tacotron

在讲解 Tacotron 模型架构之前,先理解一下 RNN 和 Seq2Seq 架构的基本概念,帮助我们更好理解 Tacotron 模型

2.1.1 循环神经网络

RNN 是一种拥有短期记忆力的神经网络,在处理序列数据方面有很好的效果,广泛应用于语音识别、语言翻译、tts 等任务。RNN 的基本工作原理:想象一下你在看电影,当你观看当前的画面时,你的理解不仅仅基于当前的场景,还基于你对电影之前情节的记忆。RNN 正是在这个原理上工作的:每处理一个新的输入(比如一个新的单词或者时间点上的数据),它都会考虑之前处理过的信息, 让神经网络有一个短期的记忆力,那么神经网络就可以像人脑一样去分析识别。

2.1.2 序列到序列架构(seq2seq)

是一种特殊的神经网络设计,用于处理那些输入和输出都是序列形式的问题。这类问题在自然语言处理(NLP)中非常常见,例如机器翻译(将一种语言的句子转换成另一种语言),文本摘要(缩短长文章为摘要),语音识别(将语音转换为文本)等。Seq2seq 架构通常包含两个主要部分:

  • 编码器(Encoder): 编码器的任务是读取和理解输入序列。想象一下你正在阅读一句话。当你读到句尾时,你已经理解了整句话的含义。编码器也是如此,它 “读取” 整个输入序列(例如,一句话),然后将理解到的信息压缩成一个固定大小的“上下文向量”(Context Vector),这个向量是编码器对整个输入序列理解的表示。

  • 解码器(Decoder): 解码器的任务是使用编码器提供的上下文向量生成输出序列。继续上面的比喻,如果你被要求用另一种语言复述你刚才读到的那句话,你将使用你的理解来表达相同的意思。同样,解码器也会 “翻译” 这个上下文向量,逐步构建输出序列(例如,另一种语言的句子)。

为了在每个步骤中保持信息,编码器和解码器通常使用循环神经网络(RNN)或其改进版本(如 LSTM 或 GRU)。这些网络类型能够处理序列数据并记住之前的信息,这对于序列任务至关重要。

2.1.3 注意力机制(Attention Mechanism)

在早期的 seq2seq 模型中,编码器将整个输入序列压缩成一个单一的上下文向量。然而,这样做会导致一些信息丢失,尤其是在处理长序列时。注意力机制是作为一个解决方案被引入的。它允许解码器在生成输出时 “关注” 输入序列的不同部分。这样,解码器可以更有效地利用输入信息,尤其在模型需要处理较长输入时。想象一下你正在做一个语音识别的任务,你要把一段语音转换成文本。这段语音对应的是一句话:“I am learning about artificial intelligence.”(我正在学习人工智能。)在没有注意力机制的 seq2seq 模型中,情况可能是这样的:

  1. 编码器一次性听完整句话,并试图记住它,然后生成一个代表整句话内容的固定向量(一长串数字)。

  2. 解码器根据这个向量,一次性写下整句话的翻译或转录。然而,句子可能很长,编码器很难记住每个细节,而解码器在没有额外信息的情况下翻译或者转录也可能会出错。

如果我们加入了注意力机制,工作方式将发生变化:

  1. 编码器还是听完整句话,但它会为句子中的每一个单词创建一个向量,这样就形成了一个向量序列,每个向量代表句子中的一个单词。
  2. 解码器开始工作时,并不是一次性写下整个句子。相反,它会一步步地进行,每写一个单词就停一下。在写下每个单词时,注意力机制会计算编码器生成的每个向量的重要性,并将焦点放在最相关的那些向量上。

比如,在写下 “I”(我)这个词时,注意力可能主要集中在 “I am learning” 这个片段上;而到了 “artificial”(人工)这个词时,注意力会集中在 “about artificial intelligence” 这一部分。通过这种方式,解码器在写下每个单词时都能 “回顾” 语音中最相关的部分,就像是有一个指导者在提示它:“听,现在我们要写下’artificial’,请专注于那段提到’artificial intelligence’的语音片段。” 这使得最终的文本更加准确,减少了错误和遗漏。

2.2 Tacotron 模型(2017)

Tacotron 是由 Google 的研究团队开发的文本到语音(TTS)合成系统。它首先在 2017 年通过一篇名为《Tacotron: Towards End-to-End Speech Synthesis》的论文被公开介绍。它的特点如下:

  • 端到端架构:Tacotron 是一个端到端的 TTS 模型,它采用序列到序列(seq2seq)架构,其中包含编码器、注意力机制和解码器组件,直接将输入的字符序列转换为声学特征,由此生成语音波形。
  • 注意力机制:Tacotron 使用注意力机制来处理文本和语音之间的时间对齐问题,这个机制可以自动学习文本的哪些部分应该对应语音的哪些部分。
  • WaveNet 集成:在 Tacotron 2 中,集成了 WaveNet 声码器,这使得生成的语音在自然度上有了显著提升。
  • 自然听感的语音:与传统的参数化或拼接式 TTS 模型相比,Tacotron 能够生成听起来更为自然和连贯的语音。

Encoder

Grapheme-to-phoneme 编码器的角色和作用:想象一下你想对电脑说一句话,并希望电脑用语音说出来。你写下了这句话,然后电脑需要理解它并准备发声。Tacotron 系统中的编码器就扮演了这个 “理解” 的角色。编码器的工作是接收你写的文本,并将它转换成电脑能理解的格式。它做了几件事情:

  • 解析文本:编码器首先查看你写的每个字母或单词,并将它们转换成数学上的向量。这个过程就像是给每个字母或单词赋予一个特殊的代码,电脑可以通过这些代码来识别和处理它们。
  • 考虑顺序:然后编码器会考虑这些字母或单词的顺序。在语言中,顺序很重要,比如,“猫追狗”和 “狗追猫” 意思完全不同。编码器使用一种特殊的模式(通常是循环神经网络,简称 RNN)来保持这个顺序的信息。
  • 准备好输出:编码器处理完文本后,会产生一个新的数学向量序列,这个序列包含了整个句子的信息。这些向量包括了关于句子的所有重要信息,比如单词是如何组合在一起的,哪个单词更重要等等。

简而言之,编码器的作用就是把你写的文本转换成电脑可以理解并准备发声的一种数学形式。完成这一步之后,编码器就会把这些信息传递给解码器,解码器随后会用这些信息来实际生成语音。

Decoder

想象一下如果你是一个演讲者,你的大脑就像是解码器,你的演讲稿就像是编码器处理过的文本。当你开始演讲时,你会一段一段地讲,每次只关注一小部分内容,并决定应该如何使用你的声音来传达这些内容。这正是 Tacotron 中解码器的作用

  • 语音生成:解码器逐步生成语音,每一步产生的可能是一个音节的声音,直到整个句子的语音都生成完成。它像是一个有经验的朗读者,可以根据已经理解的文本内容,决定每一个音节应该是什么声音。
  • 时间控制:解码器负责确定每个音节或单词的持续时间,也就是说它控制说话的节奏和速度。它确保语音听起来自然,而不是机械地一个音接一个音。
  • 音调和语调:解码器还负责语音的音调,可以让语音听起来更像是在问问题、表示惊讶或是其他情感,而不是单调的声音。
  • 工作配合注意力机制:注意力机制非常像是你在读书时用手指指着你正在读的那一行。当你的眼睛移动到下一行时,你的手指也跟着移动,这样你不会丢失位置,也能保持阅读的连贯性,同样地,Tacotron 中的注意力机制保证在产生语音的过程中,模型能够跟踪正在转换成语音的文本的正确位置。

Pre-net

Pre-net 在解码器接收到编码器输出的信息之前对信息做一些预处理。简单来说,pre-net 帮助准备和改进了这些信息,让后面生成语音的过程能够更顺利进行。应用在 pre-net 中的 dropout 是一种用在神经网络训练中的技巧,目的是防止网络对训练数据 “学得太过头了”。这种过度学习叫做 “过拟合”,就像是一个学生只会做课本上的题目,但是一遇到新题就不会做了。Dropout 通过在训练时随机关闭(或 “丢弃”)网络中的一些连接(想象成神经网络中的神经元间的连线),迫使网络不要过分依赖任何一个部分,这样网络就能更好地泛化,也就是对新情况的适应力更强。

Post processing

想象一下你拍了一张照片,想要分享到社交媒体上。你可能直接上传原图,但你也可能会先对照片进行编辑,比如调整亮度、对比度,或者加上滤镜,使得照片看起来更加美观或者有特定的风格,然后再上传。这个编辑照片的过程,就是一种后处理。在 Tacotron 这样的文本到语音(TTS)系统中,后处理模块的作用与此类似。Tacotron 的主要任务是将文本转换为语音,但生成的语音在最初可能还不够完美,可能会有一些机械的感觉,或者声音的质量还不够自然。这时候,后处理模块就发挥了作用,它对初步生成的语音进行额外的处理和改进,来提升最终语音的质量。这些处理可能包括:

  • 调整音频特性:比如调整音量、音高,确保语音在整个句子中听起来平衡一致。

  • 去除噪音:消除生成过程中可能产生的任何静电噪音或杂音,使得语音更加清晰。

  • 加强自然感:通过添加呼吸声、口腔和喉咙的微小动作声音,使得机器生成的声音听起来更像是真人发出的声音。

How good is Tacotron

WaveNet(2016)

WaveNet 是一种深度学习模型,并由 DeepMind 于 2016 年开发。WaveNet 的核心是一个深度卷积神经网络,它可以生成连贯且逼真的语音波形。这种技术标志着文本到语音 (TTS) 系统的一个重要进步,因为它产生的语音比以前的技术更加自然。在 Tacotron 2 中,WaveNet 的作用是将 Tacotron 生成的梅尔频谱图(Mel-spectrogram)转换成可以听到的语音波形。在语音合成中,这个步骤被称为声码器(vocoder)操作。声码器的任务是把一种较为抽象的表示(如梅尔频谱图)转换成原始的音频信号。

想象一下,你有一张描绘风景的草图。这张草图虽然描绘了山川、树木和天空,但它没有颜色,也缺乏细节,你只能从轮廓大致识别出各个元素。Tacotron 模型生成的梅尔频谱图,就有点像这张草图——它包含了语音信号的基本结构,但它还不是可以听到的声音。现在,假设你有一位艺术家(WaveNet 声码器),他能够看着这张草图,然后画出一幅生动、充满颜色和细节的画作。艺术家的作品不仅忠实于原始的草图,而且还加入了精细的纹理和色彩,让整个画面栩栩如生。WaveNet 声码器就是这样一个艺术家,它将 Tacotron 生成的梅尔频谱图转换成细腻、连贯的音频波形。在 Tacotron 2 中,这个过程是这样的:

  1. Tacotron 部分接收文本输入,并生成对应的梅尔频谱图。这个频谱图大致表示了应该生成的语音的内容和特征,但它还不是最终的音频形式。

  2. WaveNet 声码器接管这个过程,它查看梅尔频谱图,然后生成一系列的音频样本(即波形)。WaveNet 通过(自回归模型)自回归的方式,每次生成一个样本,并使用之前生成的样本来帮助预测下一个样本。

  3. 通过这种方式,WaveNet 逐步构建起完整的音频信号,这些信号在人耳听起来就像是连续自然的语音。

WaveNet 的引入大大提高了 Tacotron2 生成语音的自然度和质量。它能够捕捉人类语音中的细微差别,并准确地生成各种语音波动和声调变化。这就是为什么它被用作 Tacotron2 中的声码器的原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据权限的设计与实现系列7——前端筛选器组件Everright-filter用法说明

背景 官方给了全局性的介绍和示例,不过到了具体使用环节,介绍就不是那么清楚明确了,往往是直接放 demo,需要去推测和揣测,然后动手验证。去百度了下,也没找到现成的对该组件的使用说明,得以开荒…

Unreal Fest 2024 虚幻引擎影视动画制作的普遍问题

一 毛发缓存数据巨大的问题(及5个解决方案) 在引擎里模拟毛发,并且把它缓存下来,我们就不需要从外部导入了,所以我们要解决的问题就是怎么样在引擎里自由地控制毛发 1.物理场控制 延申 [技术分享]《UE中的世界物理场…

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介&am…

P1071 [NOIP2009 提高组] 潜伏者

1.题目太长要耐性总结出题目的要求 2.map中count的使用方法 #include <bits/stdc.h> using namespace std; map<char, char>m0, m1;//m0记录密文对明文&#xff0c;m1记录明文对密文int main() {string x, y, z ;//x为密文&#xff0c;y为明文&#xff0c;z为待翻…

SpringBoot+Redis极简整合

1 前言 Redis是现在最受欢迎的NoSQL数据库之一&#xff0c;下面将以最简洁的代码演示&#xff0c;在SpringBoot中使用redis。 2 下载安装Redis 2.1 下载 Redis3.x windows安装版下载地址 2.2 安装到任意位置 一直Next到完即可。 2.3 启动 打开安装目录&#xff0c;点击…

【数据结构】堆——堆排序与海量TopK问题

目录 前言一、堆排序1.1 整体思路1.2 代码部分1.3 建堆的时间复杂度1.4 堆排序的总结 二、向下调整算法的时间复杂度三、向上调整算法的复杂度四、海量TopK问题4.1 TopK题目 总结 前言 上一篇我们学习了堆的数据结构&#xff0c;现在我们来看看堆的日常应用和排序 一、堆排序 …

内网安全-横向移动【3】

1.域横向移动-内网服务-Exchange探针 Exchange是一个电子右键服务组件&#xff0c;由微软公司开发。它不仅是一个邮件系统&#xff0c;还是一个消息与协作系统。Exchange可以用来构建企业、学校的邮件系统&#xff0c;同时也是一个协作平台&#xff0c;可以基于此开发工作流、…

用广播星历计算卫星运动的平均角速度

用广播星历计算卫星位置 1.计算卫星运动的平均角速度 首先根据广播星历中给出的参数计算参考时刻的平均角速度: 式中&#xff0c;GM为万有引力常数G与地球总质量M之乘积&#xff0c;其值为GM3.98600510^14b m3/s2。 然后根据广播星历中给定的摄动参数计算观测时刻卫星的平均…

模版方法模式template method

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

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresearch/segment-…

C++-----STL简介(了解)

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

手撕Python之生成器、装饰器、异常

1.生成器 生成器的定义方式&#xff1a;在函数中使用yield yield值&#xff1a;将值返回到调用处 我们需要使用next()进行获取yield的返回值 yield的使用以及生成器函数的返回的接收next() def test():yield 1,2,3ttest() print(t) #<generator object test at 0x01B77…

MATLAB-基于高斯过程回归GPR的数据回归预测

目录 目录 1 介绍 1. 1 高斯过程的基本概念 1.2 核函数&#xff08;协方差函数&#xff09; 1.3 GPR 的优点 1.4. GPR 的局限 2 运行结果 3 核心代码 1 介绍 高斯过程回归&#xff08;Gaussian Process Regression, GPR&#xff09;是一种强大的非参数贝叶斯方法&…

JAVA- 多线程

一&#xff0c;多线程的概念 1.并行与并发 并行&#xff1a;多个任务在同一时刻在cpu 上同时执行并发&#xff1a;多个任务在同一时刻在cpu 上交替执行 2.进程与线程 进程&#xff1a;就是操作系统中正在运行的一个应用程序。所以进程也就是“正在进行的程序”。&#xff0…

Java 数据类型详解:基本数据类型与引用数据类型

在 Java 编程语言中&#xff0c;数据类型主要分为两大类&#xff1a;基本数据类型和引用数据类型。理解这两种类型的区别、使用场景及其转换方式是学习 Java 的基础。本文将深入探讨这两类数据类型的特点&#xff0c;并展示自动类型转换、强制类型转换以及自动拆箱和封箱的使用…

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retr…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月8日新模型预测第81弹

经过80期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大…

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大&#xff0c;需要补充太多的知识点&#xff0c;教授讲得内容跨越较大&#xff0c;一般一节课的内容是书本上的一章节内容&#xff0c;所以看视频比较吃力&#xff0c;需要先预习课本内容后才能够很好的理解教授讲…

代码日常问题 --day01

1.刚开始我遇到的问题 1.1项目场景&#xff1a; 首先&#xff0c;请确认已经成功创建了一个Maven项目。 接下来&#xff0c;为了验证JDK和Maven配置是否正确&#xff0c;我需要访问项目的设置页面。 操作路径是点击“File”菜单栏选项&#xff0c;然后选择“Settings”。 …