了解AIGC——自然语言处理与生成
AIGC——自然语言处理与生成:揭秘AI如何生成语言
近年来,AIGC(AI Generated Content)技术迅猛发展,自然语言处理(Natural Language Processing, NLP)与生成技术的结合,使得机器不仅能够理解人类语言,还能进行文本的创作和生成。这一能力广泛应用于文本创作、对话系统、语言翻译、内容推荐等场景。本文将深入探讨自然语言处理与生成的核心技术、关键模型,以及如何通过代码实现一些重要功能。
1. 自然语言处理与生成的背景
自然语言处理(NLP)是人工智能的重要分支,旨在让机器理解和生成自然语言。自然语言生成(Natural Language Generation, NLG)是 NLP 的一个重要任务,涉及根据输入信息生成合乎逻辑的自然语言文本。近年来,随着 Transformer 结构和大规模预训练语言模型(如 GPT 系列、BERT 等)的发展,NLG 的能力得到了极大的提升。
2. 自然语言处理的核心技术
NLP 涉及多个核心技术,包括文本预处理、词向量表示、语言模型、注意力机制等。这些技术为实现语言理解和生成奠定了基础。
2.1 文本预处理
文本预处理是 NLP 的第一步,旨在将自然语言文本转化为计算机可以理解的结构化数据。文本预处理通常包括以下步骤:
- 分词:将文本切分为单个词语或子词单元。
- 去停用词:去除“的”、“和”等没有实际意义的高频词。
- 词干提取:将词语还原为基本形式,例如“running”还原为“run”。
以下是使用 Python 进行简单文本预处理的代码示例:
import re
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmernltk.download('stopwords')
nltk.download('punkt')text = "Natural Language Processing makes it easy for machines to understand language."# 分词
tokens = nltk.word_tokenize(text)# 去停用词
stop_words = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word.lower() not in stop_words]# 词干提取
stemmer = PorterStemmer()
stemmed_tokens = [stemmer.stem(word) for word in filtered_tokens]print("原始文本:", text)
print("分词后:", tokens)
print("去停用词后:", filtered_tokens)
print("词干提取后:", stemmed_tokens)
2.2 词向量表示
词向量是将词语表示为计算机可以理解的向量形式,用于捕捉词汇之间的语义关系。常见的词向量表示方法包括:
- Word2Vec:通过上下文关系训练词向量,使相似的词在向量空间中靠近。
- GloVe:基于词频统计训练的词向量,能够捕捉全局语义信息。
- Transformer Embedding:通过 Transformer 结构生成的上下文嵌入,捕捉更复杂的语义关系。
以下是使用 Gensim 实现 Word2Vec 的示例:
from gensim.models import Word2Vec
from nltk.tokenize import word_tokenizesentences = ["Machine learning is fun", "Natural language processing is a branch of AI"]
tokens = [word_tokenize(sentence.lower()) for sentence in sentences]# 训练 Word2Vec 模型
model = Word2Vec(tokens, vector_size=100, window=5, min_count=1, workers=4)# 查看词向量
word_vec = model.wv['machine']
print("'machine' 的词向量:", word_vec)# 查看相似词
similar_words = model.wv.most_similar('machine', topn=3)
print("与 'machine' 最相似的词:", similar_words)
2.3 语言模型
语言模型是 NLP 中的核心组件,用于预测文本中的下一个词。经典语言模型有 n-gram 模型、循环神经网络(RNN)、长短期记忆网络(LSTM)等。而如今更强大的 Transformer 结构成为了主流,尤其是基于 Transformer 的预训练模型,如 GPT 系列。
以下是一个使用 LSTM 构建简单语言模型的示例:
import torch
import torch.nn as nn
import torch.optim as optim# 定义 LSTM 语言模型
class LSTMLanguageModel(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim):super(LSTMLanguageModel, self).__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim)self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True)self.fc = nn.Linear(hidden_dim, vocab_size)def forward(self, x):x = self.embedding(x)out, _ = self.lstm(x)out = self.fc(out)return out# 模拟训练过程
vocab_size = 1000
embedding_dim = 128
hidden_dim = 256model = LSTMLanguageModel(vocab_size, embedding_dim, hidden_dim)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 随机生成训练数据
inputs = torch.randint(0, vocab_size, (10, 5)) # 10 个样本,每个样本 5 个词
labels = torch.randint(0, vocab_size, (10, 5))# 训练过程
for epoch in range(10):optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs.view(-1, vocab_size), labels.view(-1))loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/10], Loss: {loss.item()}')
3. 自然语言生成的关键模型
在自然语言生成中,预训练模型(如 GPT-2、GPT-3、BERT)具有突出的效果。这些模型基于 Transformer 结构,经过大量文本数据的预训练,可以理解上下文并生成流畅的自然语言。
3.1 Transformer 结构
Transformer 是目前最流行的深度学习模型之一,广泛应用于 NLP 任务中。它的核心是自注意力机制,能够有效捕捉句子中不同词语之间的依赖关系。
以下是使用 PyTorch 实现 Transformer 编码器的简化示例:
class TransformerEncoder(nn.Module):def __init__(self, input_dim, num_heads, hidden_dim):super(TransformerEncoder, self).__init__()self.attention = nn.MultiheadAttention(input_dim, num_heads)self.fc = nn.Sequential(nn.Linear(input_dim, hidden_dim),nn.ReLU(),nn.Linear(hidden_dim, input_dim))def forward(self, x):# 自注意力机制attn_output, _ = self.attention(x, x, x)# 残差连接和前馈网络x = x + attn_outputx = self.fc(x)return x# 测试 Transformer 编码器
input_dim = 64
num_heads = 8
hidden_dim = 128encoder = TransformerEncoder(input_dim, num_heads, hidden_dim)
x = torch.randn(10, 5, input_dim) # 10 个样本,每个样本 5 个词,词向量维度为 64
output = encoder(x)
print("Transformer 编码器输出维度:", output.shape)
3.2 GPT-2 文本生成
GPT-2 是一个非常强大的文本生成模型,使用自回归的方式生成文本。GPT-2 基于 Transformer 解码器结构,能够生成高质量的连贯文本。
以下代码展示了如何使用 transformers
库调用 GPT-2 进行文本生成:
from transformers import GPT2LMHeadModel, GPT2Tokenizer# 加载 GPT-2 模型和分词器
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")# 输入提示文本
prompt = "Artificial intelligence is transforming the world"
input_ids = tokenizer.encode(prompt, return_tensors='pt')# 生成文本
output = model.generate(input_ids, max_length=50, num_return_sequences=1, no_repeat_ngram_size=2)# 解码并打印生成的文本
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print("生成的文本:", generated_text)
在上面的代码中,我们使用 transformers
库中的 GPT-2 模型,根据提示文本生成了一个长度为 50 的连贯文本。GPT-2 在对话、故事生成等任务中表现出了极高的流畅性和创造力。
4. 自然语言生成的应用场景
4.1 文本摘要
自动文本摘要可以从长篇文档中提取关键信息,生成简洁的摘要。这类任务中可以使用 BERT 这样的预训练模型来理解上下文,并通过生成模型生成摘要。
4.2 对话系统
对话系统(如聊天机器人)需要理解用户输入,并生成合适的回复。生成式对话模型(如基于 GPT-3 的模型)可以生成上下文相关且连贯的回复,使对话体验更加自然。
4.3 机器翻译
机器翻译是一种典型的 NLG 应用,通过将源语言文本转换为目标语言。Transformer 在机器翻译中取得了显著的进展,特别是 Google 的神经机器翻译(GNMT)系统采用了基于 Transformer 的结构。
5. NLP 与生成中的挑战
5.1 数据隐私问题
大规模预训练模型通常需要大量的文本数据,而这些数据中可能包含敏感信息。在实际应用中,需要特别注意数据隐私保护,例如差分隐私和数据加密技术的使用。
5.2 偏见与公平性
由于训练数据可能存在偏见,生成模型也可能会产生带有偏见的文本。因此,在训练和使用 NLP 模型时,需要关注数据的公正性,以减少模型偏见的影响。
5.3 高计算成本
预训练语言模型(如 GPT-3)通常需要大量计算资源,训练成本高昂,部署也需要高性能的硬件支持。如何减少模型的计算复杂度是一个重要的研究方向。
6. 结论
自然语言处理与生成技术为 AIGC 的发展提供了强大的动力。通过本文的介绍,我们了解了 NLP 的核心技术、主要的自然语言生成模型以及一些实际的代码实现。自然语言生成在文本摘要、对话系统和机器翻译等方面的应用越来越广泛,但也面临着数据隐私、模型偏见和高计算成本等挑战。未来,NLP 和 NLG 的研究将继续朝着更高效、更公平、更安全的方向发展。
参考资料
- Vaswani, A., et al. (2017). Attention is All You Need. NeurIPS.
- Radford, A., et al. (2019). Language Models are Unsupervised Multitask Learners. OpenAI.
- Devlin, J., et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.
- PyTorch Documentation:
- HuggingFace Transformers:
相关文章:
了解AIGC——自然语言处理与生成
AIGC——自然语言处理与生成:揭秘AI如何生成语言 近年来,AIGC(AI Generated Content)技术迅猛发展,自然语言处理(Natural Language Processing, NLP)与生成技术的结合,使得机器不仅…...
Modern CMake 简明教程(8)- 集成Qt
在项目中集成 Qt 库需要先使用 find_package 查找 Qt 的安装位置。对于 Qt4, CMake 使用 Module 模式进行查找(FindQt4.cmake 由 CMake 提供),而 对于 Qt5、Qt6,则是使用 Config 模式进行查找,相应的 config 文件位于类似下面的目录中 D:\Qt\5.15.2\msvc2019\lib\cmake。…...
人脸应用实例:性别年龄预测
在当今科技飞速发展的时代,人脸识别技术已经从科幻电影走进了我们的日常生活。通过算法来识别人脸的特征,进而判断身份、年龄和性别,这一技术正逐步改变着我们的生活方式。今天,我们就来探讨一下基于深度学习的人脸应用实例——性…...
学习threejs,通过THREE.Raycaster给模型绑定点击事件
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Raycaster光线投射概…...
Jackson Json序列化反序列化的两个坑
Jackson is a suite of data-processing tools for Java (and the JVM platform) Jackson最常用的Json序列化功能,引入如下的包即可: <properties>...<!-- Use the latest version whenever possible. --><jackson.version>2.17.1<…...
k8s_Pod健康检查
Kubernetes 3种探针介绍 LivenessProbe(存活探针) LivenessProbe 用于检查容器是否仍然活着。如果探针检测到容器已经失去响应,Kubernetes 将重启该容器。这通常用来修复由于内部状态错误或死锁引起的程序失效问题。 作用:检测容器…...
基于DDPG算法的股票量化交易
项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【基于PyQTFaceNet卷积神经网络实现的学生人脸识别考勤系统】 2.【卫星图像道…...
eIQ笔记(UI介绍+Loss曲线+OpenART例程)
This is a very beginner-friendly article ^o^ 目录 🍂一、训练器设置 input size: learning rate: learning rate decay: Epochs: Decay Rate: Linear Decay: Batch Size: Epochs to Train: QAT(Quantization Aware Training)量化感知训练: Pruning剪枝…...
微信小程序——消息订阅
首先用到的就是wx.requestSubscribeMessage接口。 注意:用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合,一次调用最多可…...
网络原理(传输层)->TCP协议解
前言 大家好!我是小帅,今天我们来学习TCP协议,个人主页 文章目录 1. TCP协议2. TCP的核心机制2.1TCP核心机制一:确认应答2.2 TCP核心机制二:超时重传2.3 TCP核心机制三:连接管理2.4 TCP核心机制四…...
oracle imp和exp 导入不同库的用户和表空间
参考: oracle 导入(imp)数据时的表空间(tablespace users)问题_imp tablespace-CSDN博客 网上的解决办法大概都是这种,但是实际测试19c数据库并不能成功,所以最后采取在导出文件上强行修改表空间的办法,改完后再继续执行导出导入…...
滚珠丝杆的精度级别如何分?
滚珠丝杆是一种常见的线性传动装置,广泛应用于各种机械设备和自动化系统中。滚珠丝杆的精度等级划分是评估其传动精度和运动平稳度的重要标准,滚珠丝杆的精度级别划分主要基于传动中实际移动距离与理想移动距离的偏差,偏差越小,精…...
ComfyUI初体验
ComfyUI 我就不过多介绍了,安装和基础使用可以看下面大佬的视频,感觉自己靠图文描述的效果不一定好,大家看视频比较方便。 ComfyUI全球爆红,AI绘画进入“工作流时代”?做最好懂的Comfy UI入门教程:Stable D…...
DPI-C动态库so的使用
文章目录 前言一、方法介绍二、demo演示2.1 文件准备2.2 执行仿真2.3 仿真结果 总结 前言 在做IC验证EDA仿真过程中,有时候需要调用C实现的参考模块,我们可以利用DPI-C的功能,实现SV侧调用C侧的函数。 在具体实现过程中,我们可以…...
Java避坑案例 - 高并发场景下的分布式缓存策略
文章目录 概述缓存常见问题及解决方案把 Redis 当作数据库常用的数据淘汰策略如何选择合适的驱逐算法 缓存雪崩问题复现解决方案 缓存击穿(热点缓存失效)问题复现解决方案 缓存穿透问题复现解决方案缓存穿透 vs 缓存击穿 缓存与数据库的一致性先更新缓存…...
Python中的字符串修剪:strip()、lstrip() 和 rstrip()
Python中的字符串修剪 Python 中的字符串修剪:strip()、lstrip() 和 rstrip()strip()lstrip()rstrip()应用场景结论 Python 中的字符串修剪:strip()、lstrip() 和 rstrip() 在 Python 开发中,我们经常需要处理字符串,其中一项常见…...
K8S配置storage-class
简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展࿰…...
多线程——线程池
目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 (1)corePoolSize 与 maximumPoolSize (2)keepAliveTime 与 unit (3)workQueue&am…...
VScode插件:前端每日一题
大文件上传如何做断点续传? 在前端实现大文件上传的断点续传,通常会将文件切片并分块上传,记录每块的上传状态,以便在中断或失败时只上传未完成的部分。以下是实现断点续传的主要步骤和思路: 1. 文件切片 (File Slici…...
Android跨进程通信
1、跨进程通信的几种方式 在 Android 中,跨进程通信 (IPC, Inter-Process Communication) 方式有多种,主要用于在不同的应用或进程之间传递数据。常见的跨进程通信方式包括: AIDL (Android Interface Definition Language) • 描述ÿ…...
【初阶数据结构】计数排序 :感受非比较排序的魅力
文章目录 前言1. 什么是计数排序?2. 计数排序的算法思路2.1 绝对位置和相对位置2.2 根据计数数组的信息来确认 3. 计数排序的代码4. 算法分析5. 计数排序的优缺点6.计数排序的应用场景 前言 如果大家仔细思考的话,可能会发现这么一个问题。我们学的七大…...
前后双差速轮之LQR控制
在之前的代码中,我们实现了前后两对双差速轮AGV的运动学正解和逆解。但为了实现对AGV的精确路径跟踪和姿态控制,我们需要引入控制算法。线性二次型调节器(LQR)是一种常用的最优控制方法,可以有效地将系统的状态误差最小化。本文将详细说明如何在之前的C++代码中加入LQR控制…...
Linux之远程连接服务器
1、远程连接服务器简介 (1)什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面…...
k8s 部署 nexus3 详解
创建命名空间 nexus3-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: nexus-ns创建pv&pvc nexus3-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: nfs-pvnamespace: nexus-ns spec:capacity:storage: 3GiaccessModes:- ReadWriteM…...
从“摸黑”到“透视”:AORO A23热成像防爆手机如何改变工业检测?
在工业检测领域,传统的检测手段常因效率低下、精度不足和潜在的安全风险而受到诟病。随着科技的不断进步,一种新兴的检测技术——红外热成像技术,正逐渐在该领域崭露头角。近期,小编对一款集成红外热成像技术的AORO A23防爆手机进…...
让你的 IDEA 使用更流畅 | IDEA内存修改
随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …...
docker run 命令解析
docker run 命令解析 docker run 命令用于从给定的镜像启动一个新的容器。这个命令可以包含许多选项,下面是一些常用的选项: -d:后台运行容器,并返回容器ID;-i:以交互模式运行容器,通常与 -t …...
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十七集:制作第一个BOSS苍蝇之母
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、战斗场景Battle Scene相关逻辑处理 1.防止玩家走出战斗场景的门2.制作一个简单的战斗场景二、制作游戏第一个BOSS苍蝇之母 1.导入素材和制作相关动画2.制作…...
【Nginx系列】499错误
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Springboot项目控制层注释
Springboot主流的 ----------------------- 简略写法 package com.dx.wlmq.controller;import com.dx.wlmq.domain.Address; import com.dx.wlmq.service.AddresssService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.b…...
网站上资源截图怎么做/人工智能培训一般多少钱
2019独角兽企业重金招聘Python工程师标准>>> 在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒…...
广州行业门户网站建设/网络营销常用的工具有哪些
关于vue slot 的多级传递使用 关于slot 以及scope-slot的基本使用,官方文档已经有了详细的介绍:点击这里查看,这里就不复述了。 但是在实际的使用过程中,常常会出现外部组件内容需要多级嵌套传递到目标组件,那么slot可…...
公司做网站设计要注意/南京谷歌推广
上个月把VPS迁到budgetVM,终于不用再受digitalOcean的气了,入手很方便,重点是支持支付宝付款——paypal的界面真是不习惯,开通速度挺快的,1G的内存够我折腾一段时间了~,额外送了俩IP,过段时间再…...
西安模板建站定制/快速排名优化公司
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼咱们现在安装的Linux版本,都会装有SSH,默认就是OpenSSH,可以通过 ssh -V 命令来查看安装的ssh版本信息:[rootxiaoluo xiaoluo]# ssh -VOpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 201…...
it人力外包和项目外包/廊坊优化技巧
目录1.题目2.题目分析 算法分析 算法实现3.参考代码4.测试结果1.题目 约瑟夫(Josephus)环问题。 约瑟夫环是由古罗马的史学家约瑟夫提出来的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达43天之后。…...
专业做网站系统/总裁培训班
先简单自我介绍下:能源学院、控制工程。教研室偏硬件方向。自学的软件(数据挖掘、分布式方向),一年左右,比不上那些大牛。Resume我投的岗位“软件研发工程师”。到了面试现场,选择了Java语言(有对应的面试官࿰…...