ChatGPT+AI技术项目实战,打造多端智能虚拟数字人
分享课程——ChatGPT+AI技术项目实战,打造多端智能虚拟数字人,附源码。
ChatGPT全称为Chat Generative Pre-trained Transformer,一个基于深度学习的大型语言模型,其模型结构使用了Transformer网络 。这个网络可以从输入的文本中学习语言的规律和模式,并用这些规律和模式来预测下一个单词或字符。
在chatGPT的训练过程中,chatGPT接受了海量的文本数据,这些数据包括各种来源,例如维基百科、新闻文章、小说、网页等等。这些庞大的数据集被用来形成一个模仿人脑的深度学习神经网络,在学习过程中,chatGPT试图学习这些数据中的语言规则和模式,预测文本序列中的下一个单词或字符,以提高自己的准确性。
ChatGPT整个工作的核心是“Transformer”,这是一种用于处理自然语言数据的神经网络。神经网络通过互连节点层处理信息来模拟人脑的工作方式。将神经网络想象成一个曲棍球队:每个球员都有一个角色,但他们在具有特定角色的球员之间来回传递冰球,所有人一起努力得分。
AI的算法结构,也是经过了漫长的探索与积累之后,才有了今天Transformer的质变。
第一个阶段:模式匹配,给AI输入一些列的逻辑与规则,AI根据规则来进行判断与推理。代表性有符号逻辑,联结主义等,主要应用在包括象棋和国际象棋等游戏。
第二阶段:机器学习,让计算机不需要显式的程序也可以具备学习的能力,以处理更复杂的任务。代表性的算法包括反向传播、决策树、神经网络和规则引擎等。主要应用在语音识别、图像识别和机器翻译等领域。
第三阶段:人工神经网络,随着数据量的增加和计算能力的提升,一种基于神经网络结构的机器学习算法。这个时期的经典算法包括支持向量机、朴素贝叶斯、卷积神经网络和循环神经网络等。
第四阶段:深度学习神经网络,一种模仿人脑的复杂、多层、加权算法,它能够学习文本数据中的模式和关系,并利用创建类似人类的能力。通过预测任何给定句子中接下来应该出现的文本来做出响应。 代表算法有Transformer。
打开命令行进行交互测试,请使用以下代码进行模型测试,目前使用一些小方法可实现正常对话,这里可能要多尝试几次(已经更新了cli_demo.py和web_demo.py可运行,推荐使用A100含以上的显卡)
解压启动文件到模型存放路径并启动
cd /home/aistudio/data/data203501
unzip chatglm-6b.zip
cd
python /home/aistudio/work/ChatGLM-6B/cli_demo.py
分析了ChatGLM模型文件的整体结构后,我对整体的模型运行逻辑进行了一个分析,后续如果有能力调整的可参考一下
models
——config.json # 模型的基本信息,包括运行时要调用的py文件和函数,模型的结构参数都放在该json
——configuration_chatglm.py # 设置模型的基本参数的py文件
——modeling_chatglm.py # 组网程序,也是模型主程序,后续调整环境需要对这个文件进行大幅调整
——quanitization.py # 量化程序,主要是为了调整Tensor的精度,默认是bfloat16
——tokenization_chatglm.py # 词嵌入程序,主要是为了将语句输入转化为词嵌入向量(token)形式,之后将其送进模型进行推理
——tokenizer_config.json # tokenizer的基本设置文件,可查看句子是通过何种方式进行向量化的
虚拟数字人(Digital Human / Meta Human),是运用数字技术创造出来的、与人类形象接近的数字化人物形象。
虚拟数字人系统一般情况下由人物形象、语音生成、动画生成、音视频合成显示、交互等5个模块构成。
3D超写实虚拟数字人制作主要核心技术:
建模设计技术:明确形象设计方向,根据平面形象,进行3D模型搭建;
动捕驱动技术:通过捕捉技术采集真人演员的动作和面部表情数据,之后将这些数据迁移合成到虚拟数字人身上;
渲染技术:将场景、人物、角色、特效已经配音进行后期合成,最后渲染成片。
现实中的机器人技术主要的难点在于能源和控制系统这两方面,原因如下:
1.能源:机器人需要稳定的能源供应来运行和执行任务。然而,为机器人提供高效、持久的能源仍然是一个挑战。机器人通常需要小型而高能量密度的能源来源,以满足其动力需求。电池技术在这方面取得了一些进展,但仍存在容量、充电速度和寿命等方面的限制。为机器人提供长时间的能源供应,特别是在远离电源的环境中,仍然是一个重要难题。
2.控制系统:机器人的控制系统涉及对机器人的感知、决策和执行能力的整合和优化。机器人需要具备高度精确的感知能力来感知和理解周围环境,并能做出适应环境变化的决策。同时,机器人还需要高精度的运动控制能力来实现准确的操作和移动。这就涉及到传感器技术、算法、运动控制和人工智能等方面的复杂问题。确保机器人能够稳定、安全地运行并完成任务需要高度可靠的控制系统,这是目前仍然具有挑战性的领域。
现如今的分布式项目,微服务项目都是通过maven来构建的聚合工程,聚合工程利于维护,利于可扩展,提高项目的可维护性。以下为顶级pom中的相关依赖,可以结合项目进行参考:
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mysql-connector-java.version>5.1.41</mysql-connector-java.version>
<mybatis-spring-boot-starter.version>2.1.0</mybatis-spring-boot-starter.version>
<mapper-spring-boot-starter.version>2.1.5</mapper-spring-boot-starter.version>
<pagehelper-spring-boot-starter.version>1.2.12</pagehelper-spring-boot-starter.version>
<okhttp.version>4.2.2</okhttp.version>
<jackson.version>2.10.2</jackson.version>
<commons-codec.version>1.11</commons-codec.version>
<commons-lang3.version>3.4</commons-lang3.version>
<commons-fileupload.version>1.4</commons-fileupload.version>
<google-guava.version>28.2-jre</google-guava.version>
<springfox-swagger2.version>2.4.0</springfox-swagger2.version>
<swagger-bootstrap-ui.version>1.6</swagger-bootstrap-ui.version>
<fastdfs.version>1.27.2</fastdfs.version>
<slf4j.version>1.7.21</slf4j.version>
<joda-time.version>2.10.6</joda-time.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- SpringCloud 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 引入 mongodb 依赖 -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<!--mongodb-driver.version-->
<version>3.11.1</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<!-- 通用mapper逆向工具 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper-spring-boot-starter.version}</version>
</dependency>
<!--pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- apache 工具类 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!-- google 工具类 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${google-guava.version}</version>
</dependency>
<!-- swagger2 配置 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-swagger2.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger-bootstrap-ui.version}</version>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs.version}</version>
</dependency>
<!-- joda-time 时间工具 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- Java 编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
![QQ截图20231130143547.png](https://static.golangjob.cn/231130/5da7e215a85768cf0f51f3b82d2b40b3.png)
有疑问加站长微信联系(非本文作者)