白话NLP技术的演进发展

自然语言处理是人工智能的一个重要分支,旨在让计算机能够理解、生成和处理人类语言。我们每天都在使用自然语言,比如与人对话、阅读文章、撰写邮件等。NLP的目标就是要让机器也能像人一样处理语言,从而实现人机交互、信息检索、机器翻译、情感分析等多种应用。

要让机器理解自然语言,首先需要将语言数字化。最常见的方法是one-hot encoding,即为词表中的每个词设置一个等长的向量,该词对应位置为1,其余为0。例如:

词表 = ["我", "爱", "自然语言", "处理"] 
"我"  = [1, 0, 0, 0]
"爱"  = [0, 1, 0, 0]
"自然语言" = [0, 0, 1, 0]
"处理" = [0, 0, 0, 1]

这种表示简单直观,但当词表很大时,向量会变得非常稀疏和高维。为解决这个问题,word2vec等词嵌入模型被提出。它们用低维稠密向量来表示词,且在向量空间中语义相近的词离得更近。

假设有如下一段文本: “北京是中国的首都。上海是中国最大的城市。” 使用word2vec训练后,我们可以发现"北京"和"上海"的向量非常接近,因为它们都是中国的大城市。同时"中国"和"首都"的向量也比较接近,因为它们在句子中的共现概率较高。Word2vec通过这种方式,可以自动学习到词之间的语义关系。

假设我们有如下一段文本: “The cat sits on the mat. The dog plays with the ball.”。对这段文本进行分词后,得到词表: [“the”, “cat”, “sits”, “on”, “mat”, “dog”, “plays”, “with”, “ball”]

使用one-hot encoding对每个词进行编码,会得到一个9维的稀疏向量。而word2vec通过训练,可以学习到一个更低维度(如3维)的稠密向量来表示每个词。例如:

Copy code"the":  [0.2, -0.1, 0.3]
"cat":  [0.4, 0.5, -0.2] 
"sits": [0.1, 0.3, -0.4]
"on":   [0.3, -0.3, 0.5]
"mat":  [0.5, 0.4, -0.3]
"dog":  [0.7, 0.8, -0.5]
"plays":[0.2, 0.1, -0.1] 
"with": [0.4, -0.2, 0.6]
"ball": [0.9, 0.7, -0.4]

可以看到,每个词都被表示为一个3维的实数向量。这种稠密向量有以下优点:

  1. 降低了维度,节省了存储空间,提高了计算效率。
  2. 向量中的每个元素都可以被解释为词在某个潜在语义维度上的强度。
  3. 语义相近的词,其向量在空间中也更接近。例如"cat"和"dog"都是宠物,它们的向量相似度较高。同时"cat"和"mat"在句中紧邻出现,它们的向量也有一定相关性。
  4. 向量之间可以进行数学运算,比如vec(“king”) - vec(“man”) + vec(“woman”) ≈ vec(“queen”),这展现了词向量的类比推理能力。

需要注意的是,以上词向量数值是随机生成的,并不是真实的word2vec结果。实际训练中,词表通常有几十万个词,向量维度也达到几百维,需要在大规模语料上进行长时间的训练才能得到优质的词向量。同时word2vec也有多种优化算法和目标函数,如Skip-gram、CBOW等。

Word2vec的提出开启了词嵌入的新纪元,此后又涌现出GloVe、FastText等众多优秀的词嵌入模型。词向量作为NLP的基础设施,在文本分类、情感分析、命名实体识别等任务中发挥着重要作用。

希望通过这个例子,你能对word2vec词向量有一个直观的认识。在实际应用中,我们可以利用现有的词向量模型,也可以在自己的语料上训练词向量。词向量质量的好坏,将直接影响到下游NLP任务的性能。

有了词的数字化表示,接下来就是理解句子和篇章的含义。传统方法主要基于规则和统计,如:

  • 分词(tokenization):将句子拆分成词的序列
  • 词性标注(POS tagging):标注每个词的词性(名词、动词等)
  • 句法分析(parsing):分析句子的语法结构
  • 命名实体识别(NER):识别文本中的人名、地名、机构名等

在传统的NLP方法中,比较有代表性的有:

  • 基于规则的方法:人工定义一系列语言学规则,如正则表达式、上下文无关文法等,用于文本解析和处理。
  • 基于统计的方法:利用大规模语料库,统计词与词之间的共现频率,构建语言模型,如N-gram、HMM等。
  • 基于知识的方法:利用外部知识库如WordNet等,获取词汇之间的语义关系,指导NLP任务。

这些方法在早期取得了不错的效果,但难以处理语言的歧义性、灵活性和上下文相关性。

深度学习技术的兴起为NLP带来了革命性的变化。基于神经网络的序列模型,如RNN、LSTM等,能够建模文本的上下文信息,从大规模语料中自动学习语言的内在规律。近年来,深度学习技术给NLP带来了革命性的变化。除了前面提到的RNN、LSTM等序列模型,还有一些里程碑式的工作:

  • Seq2Seq模型:基于Encoder-Decoder框架,将输入序列编码为向量,再解码生成输出序列,广泛用于机器翻译、对话生成、文本摘要等任务。
  • 注意力机制:让模型能够动态地关注输入数据的不同部分,提高了对长序列的建模能力,成为NLP模型的标配。
  • Transformer模型:摒弃了RNN中的循环连接,完全基于注意力机制构建,并引入了自注意力、位置编码等创新,大幅提升了并行计算效率和长程依赖建模能力。
  • 预训练语言模型:在大规模无监督语料上预训练通用的语言表示,再针对具体任务进行微调,显著提高了NLP任务的性能,代表工作有BERT、GPT、XLNet等。

以机器翻译为例:

# 基于Seq2Seq和注意力机制的神经机器翻译模型
encoder = Encoder(vocab_size, embed_size, hidden_size) 
decoder = AttentionDecoder(vocab_size, embed_size, hidden_size)for x, y in data:# x: 源语言句子  y: 目标语言句子encoder_out, hidden = encoder(x)output = decoder(y, hidden, encoder_out)loss = cross_entropy_loss(output, y)  # 计算损失loss.backward()  # 反向传播optimizer.step()  # 梯度下降,更新模型参数

以上模型输入源语言句子,输出对应的目标语言翻译。Encoder对源语言编码为语义向量,Decoder根据该向量和之前的输出,解码生成目标语言。其中注意力机制能动态决定翻译当前词时应该重点关注源语言的哪些部分。此外,Transformer、BERT等预训练语言模型进一步引领了NLP的发展。
除机器翻译外,NLP还有很多令人兴奋的应用,例如:

  • 对话系统:让机器能理解并回复用户的问题
  • 信息检索:用自然语言搜索大规模文本数据
  • 情感分析:判断一段文本表达的情感是正面还是负面
  • 自动摘要:总结长文档的核心要点
  • 文本分类:给文档分配预定义的类别标签

2018年之后,NLP进入了预训练大模型的时代。研究人员构建了拥有海量参数(数亿到上千亿)的语言模型,在超大规模语料上进行自监督预训练,使模型学会了强大的语言理解和生成能力。代表工作包括:

  • GPT-3:拥有1750亿参数,可以在少样本或零样本条件下完成对话、写作、编程等多种任务,接近甚至超越人类的表现。
  • Switch Transformer:引入了MoE(Mixture of Experts)结构,不同的子网络专门处理不同的子任务,显著提升了模型的容量和泛化能力,参数量达到1.6万亿。
  • CPM:华为发布的中文预训练大模型,拥有2600亿参数和100GB中文训练数据,在中文NLP任务上取得了领先的性能。

大模型的出现,使得NLP在许多应用中达到了产品化的水平,如智能写作、虚拟助手、知识问答等。同时,大模型在few-shot和zero-shot学习上的突破,降低了NLP应用的开发成本。未来,NLP大模型将向更大规模、跨模态、多语言、知识增强等方向发展。

大语言模型(Large Language Model,LLM)的崛起,尤其是ChatGPT和LLaMA的出现,给NLP领域甚至整个AI领域带来了革命性的影响。
ChatGPT是由OpenAI开发的大型对话生成模型,基于GPT-3.5架构,拥有1750亿个参数。它通过在海量的互联网对话数据上进行预训练,再利用人类反馈进行微调,从而掌握了惊人的语言理解和生成能力。ChatGPT可以进行开放域对话、回答问题、编写代码等多种任务,其生成的文本通畅自然,常识知识丰富,推理能力出色。ChatGPT的问世引发了全民AI热潮,被誉为NLP发展的里程碑。

LLaMA是Meta(前Facebook)发布的一个开源大语言模型。与GPT-3等模型动辄上千亿参数相比,LLaMA最大的特点是在保持较强性能的同时,大幅降低了模型规模(最高770亿参数)。这使得LLaMA可以在普通消费级GPU上进行推理,极大降低了应用门槛。同时Meta也开放了LLaMA的训练代码和数据集,推动了学术界对LLM的研究。

ChatGPT、LLaMA等大语言模型的出现,正在深刻影响着NLP技术的发展和应用:

  1. 自然交互:LLM让人机对话变得无比自然,人们可以用口语化的表达与AI无障碍沟通,这将极大改变人机交互的方式。
  2. 知识获取:LLM从海量文本中学习到了丰富的世界知识,使得知识获取变得前所未有的便捷,有望彻底改变教育、科研、商业等领域。
  3. 内容创作:LLM可以自动撰写文案、生成故事、创作诗歌等,极大提升了内容创作的效率,同时也带来了知识产权、伦理道德等新的挑战。
  4. coding助手:LLM强大的代码理解和生成能力,使其成为程序员的得力助手,可以提供编程建议、查找bug、优化代码等,提高开发效率。
  5. 通用智能:LLM在众多NLP任务上展现出了通用智能的特点,使得构建通用人工智能(AGI)的梦想更近了一步。

当然,大语言模型也存在一些局限和风险:

  • 安全隐患:LLM可能被用于生成虚假信息、恶意代码等,对社会安全构成威胁。
  • 公平偏差:LLM从互联网数据中学习,可能继承了其中的偏见和歧视,从而产生不公平的结果。
  • 可解释性:LLM是黑盒模型,其决策过程难以解释,这对于一些关键应用场景是不可接受的。
  • 资源消耗:LLM的训练需要大量的算力和能源,带来了环境可持续性的挑战。

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

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

相关文章

Golang | Leetcode Golang题解之第66题加一

题目&#xff1a; 题解&#xff1a; func plusOne(digits []int) []int {n : len(digits)for i : n - 1; i > 0; i-- {if digits[i] ! 9 {digits[i]for j : i 1; j < n; j {digits[j] 0}return digits}}// digits 中所有的元素均为 9digits make([]int, n1)digits[0]…

如何基于nginx组建多个子目录网站

华子目录 实验要求实验步骤 实验要求 组建多个子目录网站www.openlab.com&#xff0c;该网站有2个子目录www.openlab.com/sxhkt和www.openlab.com/zywww.openlab.com/sxhkt使用http读取www.openlab.com/zy使用https读取 实验步骤 准备工作 [rootserver ~]# setenforce 0[ro…

串口单线半双工转换电路

用来把单线半双工模式的串口转换成双线&#xff0c;然后才能连接到普通的双线USB 串口模块&#xff0c;比如CH340 之类的。电路设计来自大佬的博客&#xff1a;AVR half-duplex software UART supporting single pin operation。他在Arduino 上用软件模拟串口功能&#xff0c;利…

测试PG中事务隔离级别

我们知道事务隔离级别有&#xff1a;读未提交&#xff0c;读已提交&#xff0c;可重复读&#xff0c;可序列化。 读未提交 存在 脏读&#xff0c;不可重复读&#xff0c;幻读&#xff1b; 读已提交 存在 不可重复读&#xff0c;幻读 可重复读 存在 幻读 PG 下默认为读已提交…

微信小程序使用蓝牙连接硬件

目录 一、蓝牙官方api文档 二、蓝牙重要参数介绍 三、案例教程 1. 获取蓝牙权限&#xff08;openBluetoothAdapter&#xff09; 2. 开始搜索蓝牙设备(startBluetoothDevicesDiscovery) 3. 监听搜索到新设备的事件(onBluetoothDeviceFound) 4.连接蓝牙设备&#xff08;crea…

【RYG】Python技能练习场—查漏补缺(二)

1、PASS关键字 通常用作占位符&#xff0c;表示不执行任何操作&#xff0c;主要用于语法结构中要求有语句的地方&#xff0c;但又不需要做任何实际操作的情况。例如&#xff0c;在定义一个函数或类时&#xff0c;如果暂时不需要写函数体或方法体&#xff0c;可以使用"pas…

SpringData JPA - ORM 框架下,打造高效数据访问层

目录 一、SpringData JPA 概述 1.1、什么是 JPA 1.2、什么是 ORM 1.3、什么是 Hibernate 1.4、JPA 和 Hibernate 的关系 1.5、JPA 的优势 二、SpringData JPA 实战开发 2.1、依赖 2.2、配置文件 2.3、启动类 2.4、创建实体 2.5、基于 JpaRepository 的 CRUD 三、…

网络安全审计

一、什么叫网络安全审计 网络安全审计是按照一定的安全策略&#xff0c;利用记录、系统活动和用户活动等信息&#xff0c;检查、审查和检验操作时间的环境及活动&#xff0c;从而发现系统漏洞、入侵行为或改善系统性能的过程&#xff0c;它是提高系统安全性的重要手段。 系统…

String 最多能存储多少个字符/String 字符串的最大长度/String 字符串有没有长度限制

文章目录 1.编译时字节限制2.运行时长度限制3.小结4.补充 基于 JDK8 进行分析 1.编译时字节限制 String s "11111...1111"; // 其中有 10 万个字符 "1"当我们使用如上形式定义一个字符串的时候&#xff0c;当我们执行 javac 编译时&#xff0c;是会抛出异…

数据结构:时间复杂度/空间复杂度

目录 一、时间复杂度 定义 常见的时间复杂度 如何计算时间复杂度 计算方法 三、实例分析 二、空间复杂度 定义 重要性 常见的空间复杂度 二、空间复杂度 定义 重要性 常见的空间复杂度 计算方法 三、实例分析 大O的渐进表示法 最好情况&#xff08;Best Case…

Deep Learning Part Eight Attention--24.5.3~24.5.4

注意力是全部。 --&#xff08;你若安好&#xff0c;就是夏天&#xff09;安夏的座右铭 00.引子 上一章我们使用 RNN 生成了文本&#xff0c;又通过连接两个 RNN&#xff0c;将一个时序数据转换为了另一个时序数据。我们将这个网络称为 seq2seq&#xff0c;并用它成功求解了简…

spring框架学习记录(1)

前半个月一直在应付期中考试&#xff0c;快被折磨似了orz 文章目录 SpringIoC(Inversion of Control) 控制反转与DI(Dependency Injection)依赖注入bean相关bean配置bean实例化bean的生命周期 依赖注入相关依赖注入方式依赖自动装配 容器创建容器获取bean Spring IoC(Inversi…

leetcode295. 数据流的中位数

class MedianFinder {//A为小根堆&#xff0c;B为大根堆List<Integer> A,B;public MedianFinder() {A new ArrayList<Integer>();B new ArrayList<Integer>();}public void addNum(int num) {int m A.size(),n B.size();if(m n){insert(B,num);int top …

DAY123

将STM32内部的供电方案大致分为3部分&#xff1a; 第一部分&#xff08;最上边的&#xff09;&#xff1a;模拟部分供电&#xff0c;VDDA&#xff08;VDD Analog&#xff09; 这部分电路供电的正极是VDDA&#xff0c;负极是VSSA&#xff0c;其中AD转换器还有两根参考电压的供电…

BeanFactory 源码浅析

BeanFactory 功能介绍 BeanFactory 是核心容器&#xff0c;负责管理 Bean 对象 BeanFactory 接口的功能只有一个 getBean() 方法BeanFactory 的实现类&#xff08;DefaultListableBeanFactory&#xff09;包含&#xff1a;控制反转、基本的依赖注入、Bean 生命周期的各种功能…

从浏览器输入url到页面加载(八)你的web网站有几台服务器?

你有没有想过一个问题&#xff0c;做为一名前端开发&#xff0c;你的网站上线后&#xff0c;准备了几台服务器&#xff1f;前端静态资源用了几台&#xff0c;你调接口的那个后端部署了几台&#xff1f; 目录 1 没接触过这个问题很正常 2 当访问量上升的时候 2.1 提升带宽 …

绝了!这是我见过最详细的HashMap源码解析

1 概述 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只适用于单线程环境,多线程环境可以采用并发包下的concurrentHashMap HashMap 实现了Serializable接口&#x…

五个衰落的编程语言

编程语言为开发人员提供了一种与计算机交互的方式。 然而&#xff0c;随着技术的发展&#xff0c;一些编程语言的使用范围越来越窄&#xff0c;或者被其他语言替代。 本文盘点了五种编程语言&#xff1a;Ruby、Visual Basic、Perl、Delphi和Haskell。 1.Ruby Ruby是一种动态…

2024牛客五一集训派对day2

这套题目我总结一下就是 python嘎嘎乱杀&#xff0c;真的嘎嘎乱杀&#xff0c;我真的长见识了&#xff0c;我真的&#xff0c;真的佩服 A. Groundhog and 2-Power Representatio 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 Groundhog to…

ArmSoM-Sige5 RK3576开发板 正式发布!

简介​ ArmSoM-Sige5 采用Rockchip RK3576第二代8nm高性能AIOT平台&#xff0c;6 TOPS算力NPU&#xff0c;最大可配16GB大内存。支持8K视频编解码&#xff0c;拥有丰富的接口&#xff0c;支持双千兆网口&#xff0c;WiFi6 & BT5和多种视频输出。支持多种操作系统&#xff…