AI大模型系列:自然语言处理,从规则到统计的演变

AI大模型系列文章目录

  1. 文明基石,文字与数字的起源与演变
  2. 自然语言处理,从规则到统计的演变
  3. AI魔法师,提示工程的力量

自然语言处理,从规则到统计的演变


  自然语言处理(Natural Language Processing,NLP)是人工智能的一个重要分支,主要研究如何让计算机理解、解释和生成人类语言。从自然语言处理的字面上来看,最重要的是“语言”二字,语言则是通过语法规则将一个个毫无联系的文字、数字和字母串联起来的。

  文字的出现是因为咱们祖先为了记录所见所闻和所思所想(传送门),咱们的祖先再将文字、字母和数字进行信道编码就成为了我们日常使用的语言。简单来讲,我们把一个要表达的意思,通过中文的一句话表达出来,就是在头脑中用中文的编码方式对其进行编码,然后得到一串汉字。对方如果懂得中文,在接收到之后就可以在头脑中使用中文的解码方式来解码,进而获得说话人想要表达的信息。

  世界上存在的每一种语言都有自己独有的语法规则,从而都拥有自己独有的编解算法,即这就是语言在数学上的本质。

人类还是机器?

  1946年,冯·诺伊曼体系的现代计算机出现以后,计算机在很多领域的很多工作做得都比人还好。既然如此,当时的科学家们就提出了计算机能不能懂得自然语言的课题,由此开启了自然语言处理研究的漫漫长路。

  最早提出机器智能设想的是,计算机科学之父的阿兰·图灵(Alan Mathison Turing,1912年6月23日—1954年6月7日),没错这是电影《模仿游戏》中的那个阿兰·图灵(传送门)。1950年他在《思想》杂志上发表了一篇题为“计算的机器和智能”的论文,并在论文中提出了一种验证机器是否有智能的方法:让人和机器进行交流,如果人无法判断自己交流的对象是人还是机器,那么就说明这个机器拥有了智能。这个方法被后人称为“图灵测试”,自此拉开了自然语言处理的序幕。

  自然语言处理发展虽然经过几十年的发展,但基本上可分为语言语法规则、数学模式统计和深度学习这么几个阶段。

探索

  时间回到1950年代到1970年代,当时的学术界对人工智能自然语言处理的统一认识就是:要让机器完成翻译或者语音识别等只有人类才能做的事情,就必须先让计算机理解自然语言,而要做到这一点就必须让计算机拥有类似人类这样的智能。

  之所以会这样的认为,是因为咱们的大脑在解决问题或者学习技能时,首先会寻找与要解决或学习事物类似的事物进行模仿研究,进而完成仿制。正如有人认为怀特兄弟发明飞机仅仅是通过模仿鸟儿飞行,但是殊不知怀特兄弟成功发明飞机靠的不是仿生学而是空气动力学。同样在自然语言处理早期咱们的科学家也就走了弯路,企图使用仿生学来让计算机拥有处理语言的能力。

  基于上述共识科学家在分析语句和获取语义上花费了大量的功夫,并在1954年,乔治城大学和IBM合作开发了第一个机器翻译系统,这个机器翻译系统的底层原理就是通过分析语句、获取语义然后使用语法规则来处理语言,并且其运行几乎依赖于手工编写的规则来解析和处理语言。
image.png
  此阶段虽然有不少的研究成果,但是整体的研究成果乏善可陈。因为世界上语言众多,哪怕只是覆盖一种语言的语法规则的工作量也是巨大的,并且还存在方言、多义性和上下文的问题。自此当时的科学家渐渐地丧失了信心,自然语言发展也进入了蛰伏期。

破局

  1970年代基于规则的句法分析走到了尽头,但是自然语言处理的研究并没有因此停滞不前,历史的齿轮再一次转到,佛里德里克·贾里尼克(Frederick Jelinek)和他领导的IBM华生实验室(T.J.Watson)摒弃使用语法规则来解决语音识别问题,开始转而使用基于统计的方法,一下子就将IBM的语音识别率从70%提升到了90%,同时语音识别的规模也从几百单词上升到了几万单词,这就表示语音识别有从实验室走向实际应用的可能,同时也表示在自然语言处理上有了新的研究方向。

  虽然贾里尼克使用统计学的方法在自然语言处理上取得了突破,但是碍于当时算力不足和顽固派的阻挠整体发展还是相当的缓慢。虽然在1988年,IBM的彼得·布朗(Peter Brown)等人提出了基于统计的机器翻译方法,同样也碍于算力不足和没有足够强大的模型从而没有得到突破。

  1990年代统计方法开始成为自然语言处理的主流方法,并在1990年美国计算语言学会(ACL)成立了。同时在隐马尔可夫模型的加持,推动了自然语言处理研究发展进入了快车道。1993年,第一个基于统计的机器翻译系统IBM Model 1发布。这个时期的自然语言处理系统开始使用大量语料库进行训练,提高系统的准确性和鲁棒性。

  隐马尔可夫模型被任务是解决大多数自然语言处理问题最为快速、有效的方法,在成功地解决了复杂的语音识别、机器翻译等问题。最关键的是它并不是一个复杂的数学模型,理解和实现的难度都不大。

  2000年-2010年这十年深度学习崛起,并开始在自然语言处理中崭露头角。2001年,神经概率语言模型(Neural Probabilistic Language Model)被提出,为后来的深度学习自然语言处理中的应用奠定了基础。并经过多年的研究发展,2018年谷歌又一次打出了王炸—BERT(Bidirectional Encoder Representations from Transformers)模型刷新了多个自然语言处理任务的记录。此后自然语言处理领域继续快速发展,各种预训练模型如GPT、RoBERTa、XLNet等不断刷新纪录。

  同时,自然语言处理开始与其他领域如计算机视觉、语音识别等结合,形成了多模态学习的趋势。此外,自然语言处理技术开始在工业界得到广泛应用,如智能客服、机器翻译、情感分析等。


一键三连,让我的信心像气球一样膨胀!


http://www.ppmy.cn/embedded/25689.html

相关文章

这些Linux运维实用技巧,为什么我给满分?

需求 在运维工作中随着我们积累的经验不断增多,不知你是否遇到过以下几个场景: Linux 如何快速删除大量文件? Vsphere 如何在不重启的情况下识别新添加的 iscsi 硬盘? Linux中 rm 命令如何做到防误删? 不同 Linux …

Swift中TableView的下拉刷新和上拉加载

在Swift中,可以使用UIRefreshControl来实现TableView的下拉刷新。首先,需要在ViewDidLoad方法中创建一个UIRefreshControl的实例,并添加到TableView的subview中。然后,设置refreshControl的action为TableView的下拉刷新函数&#…

使用RTSP将笔记本摄像头的视频流推到开发板

一、在Windows端安装ffmpeg 1. 下载ffmpeg:下载ffmpeg 解压ffmpeg-master-latest-win64-gpl.zip bin 目录下是 dll 动态库 , 以及 可执行文件 ;将 3 33 个可执行文件拷贝到 " C:\Windows " 目录下 ,将所有的 " .dll " 动态库拷贝到 " C:\Windows\Sy…

华为OD机试 - 任务处理、可以处理的最大任务数(Java JS Python C C++)

须知 哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以添加客服微退款。感谢支持持持持持 文章目录 须知题目描述输入描述输出描述解题思路:JS算法源码Java算法源码Python算法源码C算法源码题目描述 在某个项目中有多个任务(用task数组表示)需要你进行处理,…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt,也学习了如何用/etc/rc.local启动控制台程序,那今天我们继续学习一下如何利用树莓…

环形链表查找入环节点

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 目录 问题展示一. 前言二. 查找入环节点2.1. 查找方法2.2. 解析 三. 代码展示四. 结语 问题展示…

开源代码分享(24)-考虑柔性负荷的综合能源系统低碳经济优化调度

参考文献: [1]薛开阳,楚瀛,凌梓,等.考虑柔性负荷的综合能源系统低碳经济优化调度[J].可再生能源, 2019, 37(08): 1206-1213. [2]刘蓉晖,李子林,杨秀,等.考虑用户侧柔性负荷的社区综合能源系统日前优化调度[J].太阳能学报, 2019, 40(10):2842-2850. 1.基本原理 基…

LeetCode55:跳跃游戏

题目描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 解题思想 每次…

JavaScript数组

JavaScript数组 数组(Array)是属于内置对象,数组和普通对象的功能类似,都可以用来存储一些值。不同的是: 普通对象是使用字符串作为属性名,而数组是使用数字作为索引来操作元素。索引:从 0 开…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…

【国产NI替代】NI-9235 10 kS/s/ch,120 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch,120 Ω四分之一桥应变计,8通道C系列应变/桥输入模块 NI‑9235可同步测量所有通道的动态应变,从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用(例如冲击测试)非常重要。\n\nNI…

react中useReducer若有多个值怎么操作?

当 initialState 包含多个对象值时,你的 reducer 函数需要针对每个属性维护其各自的状态更新逻辑。reducer 函数应该返回一个新的状态对象,其中包含了所有必要的属性,保持未更改的属性不变,同时更新那些需要变化的属性。 下面是一…

删除docker的容器与镜像

如果您想要卸载通过 docker pull influxdb 命令下载的 InfluxDB 容器,您需要执行以下步骤: 1. **停止正在运行的 InfluxDB 容器**: 首先,您需要停止任何正在运行的 InfluxDB 容器。您可以使用以下命令来查找正在运行的 InfluxD…

利用GaussDB的可观测性能力构建故障模型

D-SMART高斯专版已经开发了几个月了,目前主要技术问题都已经解决,也能够初步看到大概的面貌了。有朋友问我,GaussDB不已经有了TPOPS了,为什么你们还要开发D-SMART高斯专版呢? 实际上TPOPS和D-SMART虽然都可以用于Gaus…

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步 文章目录 1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步每博一文案1.1 什么是 Bean 的生命周期1.2 Bean 的生命周期 …

HTTP:强缓存优化实践

强缓存:浏览器不会向服务器发送任何请求,直接从本地缓存中读取文件 强缓存是指浏览器在向服务器请求资源时,判断本地是否存在该资源的缓存,并判断是否过期。 如果本地缓存未过期,浏览器就直接使用本地缓存&#xff0c…

C++11 设计模式5. 原型模式

什么是原型模式? 原型模式⼀种创建型设计模式,该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。在原型模式中,通常有⼀个原型对象,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来…

C++可调用对象的绑定器和包装器

包装器和绑定器 乃神器也可调用对象、包装器std:function、绑定器std:bind应用场景:可变函数和参数、回调函数、取代虚函数 可调用对象 在C中,可以像函数一样调用的有:普通函数、类的静态成员函数、仿函数、lambda函数、类 的成员函数、可被转换为函数的类的对象…

设计模式学习笔记 - 项目实战一:设计实现一个支持各种算法的限流框架(分析)

概述 从本章开始,我们进入项目实现模块。在开源实战中,我带你一块分析了几个比较著名的开源项目,比如 Spring、Mybatis、Google Guava 等,剖析了它们背后蕴含的设计思想、原则和模式。 前面开源实战是学习别人怎么做&#xff0c…

CDA一级备考策略分享

但对于很多考生来说,没有备考经验,不知道应该如何备考?今天,我来指导大家应该如何备考,让大家充分准备,拿下CDA考试。在CDA考试大纲中为新考生讲解备考经验一下。 1、数据分析概述与职业操守、数据结构 考…