当前位置: 首页 > 编程日记 > 正文

周伯文对话斯坦福AI实验室负责人:下一个NLP前沿是什么?

640?wx_fmt=png

出品 | AI科技大本营(ID:rgznai100)

10 月 31 日,在北京智源大会上,京东集团副总裁兼人工智能事业部总裁、智源-京东联合实验室主任周伯文,斯坦福人工智能实验室负责人(SAIL)Christopher Manning,以《Next NLP Frontier After Deep Learning: A Conversation about Conversation and Beyond》为题,从语义、语境和知识,当前NLP的典型技术或应用以及以任务为导向的多轮和多模态对话三大部分出发,对下一个自然语言处理最前沿的课题展开尖峰对话。

以下为对话内容实录,AI科技大本营(ID:rgznai100)整理,有删改:

语义、语境和知识

周伯文:我们的对话是比较学术的。对话的第一部分会谈一下语义学、语境和知识。我选择这三个词是非常谨慎的,因为它是来自于 Christopher 在 2015 年的《科学》杂志发表的文章。在您的结论部分提到,语义学、语境和知识方面的难题要解决,需要在语言学和在推理方面真正有一些新突破。四年已经过去了,现在您对四年前的阐述是否要做一些调整?

Christopher Manning:这是一个非常有意思的问题。我的答案确实已经出现了一些变化,但是有些还没有变化。关于人工智能我的看法是,我们的进展并没有那么大,还无法使人工智能建模利用知识和语境,像人类那样去应用。另一方面,要承认人工智能在过去几年中一些思维方式有了一些变化,可以看到通过建立新的深度学习网络的系统,可以更好地去对更复杂的系统进行建模,这增强了我们的一些能力和知识。

现在要进一步推动深度学习的发展,深度学习现在也可以推动人工智能取得巨大的进展,确实也是如此。但是在接下来的五年中,我相信这样的方法还是有很大的进展空间,我们还需要做重大的发现。

周伯文:2015 年到 2016 年是自然语言处理发展的转折点,在这一年中我们看到在深度学习方面足够的能力。您是否觉得要关注语义学的发展,才能把机器翻译向前推进呢?有时这个事情被我们搞的特别复杂了。如果让很多人都注意到这个领域,必须要确保大家要齐头增效才行,在不同层面都投入研究才能做出小小的成就。

Christopher Manning:我觉得我们需要开放地探寻其他的方法。通过指针代表不同符号的方法,实际上是非常有用的做法。它找到了广泛的应用领域,比如在所有神经网络技术过程中都是这样。实际上我不会投反对票,因为我发现很多人找到了全新的方法。我觉得在某种程度上,我们可以模拟人推理的过程,现在已经基本上可以用迭代的计算,并模拟人的记忆,把输入的信息结合在一起,一步一步去做成所以这是非常有用的定义。

周伯文:我会觉得光靠这方面肯定是不足够的,所以接下来比较可能的一点,就是我们要找到一些全新的方向,未来必须要了解到可能更复杂的领域。

Christopher Manning:我们必须要取得进步的一个领域,就是如何能够大规模将记忆、内存、知识为我们所用,用知识触发理解。我觉得在某种程度上可以去做,但是无法做到更大规模,无法在现有的知识和记忆中找到蛛丝马迹。

周伯文:回顾一下,你觉得自然语言处理在过去十年中最大的成果是什么?

Christopher Manning:十年以前包罗万象,包括所有现在的神经自然语言处理,可以关注到很多点。我会觉得,从某种程度上来讲,它的起源点超过十年。因为在世纪之交,有很多同仁希望词语可以分布式代表,可以用来进行预测。比如大家会有一些符号表示,不会受到其他的多向性的影响。当时我们觉得这好像是挺不起眼的想法,但后来就火起来了,且现在越来越知名。在 2013 年,当时有很多人都专注于这个模型的研究,这种方法非常好用,但只是第一步。

此后,大家想了这样的一种方法。我们可以用测序的方式,可以用解码器的编码,帮助我们最后用NLP做机器翻译,做自然语言的生成包括对话模型等。过去几年,大家已经取得了很多的成功。
事情发展得非常快,在过去两到三年中,我了解到一个基于强 Tensor 的模型是最强悍的了。我发现在过去 18 个月中,最大的一个发展就是可以了解到深度语义的表示。有一个根据序列的模型,在序列之后有 GPT-2 等的模型,我觉得非常强大,能够让自然语言学习模型从广泛的文本中学习。其中非常成功的一点,是在任何 AI 领域中大家可以做自我监督学习。
而且我们在很多的任务中取得了更好的结果,比如问答、舆情分析等。我觉得自然语言处理这一块取得了很多的进步,当然在这个过程中,包括语音识别也发生了转型,整个神经模型大大改变了这一点,我们要感谢深度学习。
周伯文:我们知道每一个人都意识到 Bert 模型出来之后,NLP 会发生变化,大家不会觉得这是一个重大的突破?从它带来结果的角度上的确是一个突破。另一方面,大家害怕的是只关注深度学习,不关注其他领域。如果 NLP 的一切都可以简化为特性为基础的分析,就像在工程学中,我们现在做了分类学加上大规模可学习工程的分类。这是否和我们对于最开始的语义、语境、知识、语言的学习,以及自然因果推理背道而驰了呢?
我觉得如果只是对功能进行工程设计,再加上分类可能是不够的,我们希望在不同的方向应该也有所发展才行,其中还有很多需要深挖。

当前NLP的典型技术或应用是什么?
周伯文:你觉得现在 NLP 最具有典型性、标志性的应用和技术是什么?
什么叫做典型性技术或者应用?必须要有几个标准,其中第一个标准是这样的技术或应用程序取得了进步,大家都会觉得这是自然语言处理的进步。第二个标准是这个技术和应用本身有很大的影响力,能够进行商用化,而且它能够在真实世界中得到应用和部署,能够分享一下你的想法吗?
Christopher Manning:我本来想说具体是哪种技术通过自然语言处理、机器学习、深度学习得到受益,然后是怎样的技术能够看到一个问题被解决,取得了足够的进步。我会觉得也许是机器翻译,有非常明显的进步,以前是统计机器翻译,它的能力得到了加强,后来有了 Transformer 模型。在这个过程中,我们发现机器翻译质量不断提高。
从某个角度来说,机器翻译可以用来衡量行业中的发展变化。但是有它的局限性,因为从它对社会产生影响的角度来讲,机器翻译会影响社会。比如你想在异国他乡不知道发生了什么情况,机器翻译会帮助你。而且它可能对商业产生积极影响,比如高质量的翻译产品能够促进国际商业的发展。但在日常生活中,大多数人其实也不需要机器翻译。
从这个角度来讲,我觉得有更好的答案,我们现在很多人都非常关注这个领域中我们如何利用自然语言处理技术打造更好的对话 agent?这种对话 agent 的机制指的是你可以跟它说话,它能懂你说什么,然后给你回答或信息。比如你想买个服务,你提出一个问题让它帮你搜索或回答,这是更难取得进步的领域。
但是,我们逐渐看到越来越好的计算机对话系统,这个领域肯定在接下来会产生很大的经济方面的影响。希望能够出现一些计算机,它可以非常智能地与人进行对话,像人与人之间对话一样。
周伯文:在我们考虑自然语言处理时,社区谈到了很多层面,有人会讲最基础层,语法、语义、学习等。还有人会说到另一个层次,核心能力、自然语言的理解、如何生成自然语言、如何做对话、如何做多模式的推理。在此之上,商用级别还有很多应用,它们对社会的影响力都不容小视。
今天之所以进行尖峰对话谈自然语言,就是因为我们深信不疑的一点是,如果自然语言有作用的话,人机互动全新的算法将会有万亿级的市场。
回顾自然语言处理标志典型的技术和发展过程,我会觉得中间灰色的层实际上都是实至名归,都应该被放在中间层。但是我自己可能会有一点偏见,叫做任务导向型的多轮跨模态的对话,这对于我们整个社区在接下来几年中都是很大的挑战。原因很简单,当你进行对话处理时必须要取得进步才行,必须要让机器了解语义和语言,并了解人的常识才行,因为人的语言中有一些言外之意,这些知识是在语境中没有的。
大家可以看一下,作为一个智能对话还要具备的一个前提是必须要有情商,必须要知道对话的走向和方向是什么,对话的目的是什么?如果我们把多模态对话加入其中,就加大了难度系数,如何从对一个模态的支持转成另外一种模态的知识,一方面可以很高地提供底层技术,包括表示学习、符号学习、语义学等。我们发现,对话是下一个非常大的研究话题。
Christopher Manning:我在这里只分享几点。大部分人工智能的研究人员都过多关注个人智能和智慧,而忽视了对话和沟通对于人类智能的重要性。大家可以想一想人类的历史,在出现语言之前早期的人类和大猩猩没有太大区别,那个时候也可以提前做好计划完成一些任务。
但是这并没有发展出更多的智能,整个人类的进化都是在不久的过去实现的,在几百万年之前实际上人类是和大猩猩比较相似,但是后来人类发展出了语言,进化就越来越迅速了,人们现在能够建立这样的网络、超级计算,在不同的人类大脑之中利用语言进行沟通。
一旦有了语言之后,我们就可以去计划一系列人类群组的活动,我们也可以在人类之间进行知识的传递,这给我们带来了很多益处。我们现在可以用手机进行存储知识,一眨眼,技术就出现了这么大的变化。
当然还有一个非常大的问题,人类的沟通是非常缓慢的,人类的沟通不像 5G 网络和现在的计算机网络传输信息那样快,但是人类的沟通速度还是可以的,也非常有效。为什么呢?因为我们的沟通是不明确的,主要取决于聆听者是否聪明,他必须要有一些常识和共同的理解(知识)。这样,我们只是说一些少量的词,他们就可以根据语境知道我们说的是什么意思。
在对话当中,我们要取得进展,必须要对人们的常识和文本理解进行建模,这也是人工智能的一个核心。我想在接下来的十年当中,我们要进行更好对话的话,这样的对话系统不仅需要考虑到商业的使用性,也是我们改进人工智能技术所面临的一个核心挑战。

如何实现以任务为导向的多轮和多模态对话?
周伯文:我们达成了一个共识,这引出了我们下一个对话主题。如果我们这里有任务导向的多轮对话、跨模态的对话,我们需要做什么去实现这样的目标?
我们确实还需要做大量的事情来共同实现这样的任务进行多轮跨模态的对话,我们可以看看这三个组成部分。实际上在现代学习的基础上,还是有很大改进的余地,我们要建造基于目标的对话系统,进行手动对话树的描述,来驱动这个人实现对话目标。但是到现在为止,我们还没有建立这样的基于深度学习的系统。
这样的系统要了解我们的世界,要了解与之沟通的人,要去了解一个对话局部的目标并不容易,我们甚至不明确如何去实现这样的目标,我不知道您是否有一些建议帮助我们实现这样的目标?
我们确实需要做很多的努力,关于理论上的分析,如何学习、进行对话,我们要从这样的语料库当中进行对话,吸取信息进行对话是一个很大的挑战。因为这里面有很多组成部分,我们也不知道架构是什么样的。除了这样的挑战,我们所面临的另外两个挑战,首先是没有一个真正的语料库,这样的语料库要模拟人和人之间的沟通,我们需要建立这样的语料库也让机器去学习。
基于目标导向的对话很重要,为什么呢?因为可以去支撑这样的对话是否是成功的也就意味着对话是否满足了目的,目标是否实现了。比如 AlphaGo 的目标就是要去赢得围棋比赛,对机器学习来说知道明确的目标非常重要,因为有非常多的结果,它要去了解这些参数。可能会有一些传播方面的失误,但是在研究方面缺失这样的语料库,也缺失一些平台。我们需要这样的平台来帮助小群体的研究人员、大学研究机构的研究人员进行自我的端对端的对话。
我想我们必须要做一些事情,解决数据的问题和平台的问题,使研究人员可以具有更大的创造力。
640?wx_fmt=png
Christopher Manning:前面我们也谈到了阻碍对话研究方面的一个重要障碍是缺乏数据。在张幻灯片中看到有很多语料库得到应用,主要是基于任务的对话系统,像 DSTC 对话、状态追踪。再比如机器翻译的对比、问答环节等,对于他们来说有非常多的数据库可以利用,这样他们取得了很大进展。
当然在对话方面还是有很多挑战,我们谈到必须要有目标,也谈到必须要进行强化学习。我们在人工智能方面,看到了基于游戏的系统,比如 AlphaGo 都进行了深层的强化学习,这是一种非常有效的学习方式和渠道。但是我想这里还有很多的挑战。
我们的对话如此的不同,是由于到目前为止这样的对话的方向是非常远的。当我们进行翻译时,我们有多种方式进行翻译。但是这些选择也是有限的,我们必须在翻译时保持译文和原文尽可能接近。但是当我们去看对话时会发现,接下来的对话引导方向是可以有多个的。你可以问一个客户他们在哪里经营,也可以问他们,他们的问题是什么。当有了问题之后可以马上提出解决方案让他们尝试一下,对话接下来引导的方向非常多。即使我们有了海量的数据,我们要去预测这些对话接下来的走向也具有很大的挑战。
除了缺乏数据之外还存在着很多挑战,在过去的几年中我们也谈到了语言学习,谈到了我们应该在强化学习语境中有更多通用的行为和能力。
周伯文:我们确实有了非常多的数据,要充分利用这些数据。现在我们有非常多的语料数据,希望 AI 系统在这些语料库中进行学习和机器对话,以生成更多数据,这样可以进行更好的对话。

(*本文为 AI科技大本营原创文章,转载请微信联系 1092722531


精彩推荐



2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。5 折票倒计时 1 天!

640?wx_fmt=png


推荐阅读

相关文章:

IOS8中SWIFT 弹出框的显示

弹出框不管是在网页端,还是在手机APP端,都是常用的控件.在网页中实现个简单的弹出框只需要调用alert,在IOS中,也不是那么复杂,也是容易使用的. 我先用xcode6创建一个名为iOS8SwiftAlertViewTutorial,设置好相关的信息. 在Storyboard中调整好视图显示方式 拖动一个按钮到主视图…

Maven学习笔记(二) :Maven的安装与配置

在Windows上安装Maven: 1. 首先检查安装JDK通过命令行运行命令:echo %JAVA_HOME%和java -version,能够查看当前java的安装文件夹及java的版本号,maven要求JDK的版本号必须在1.4以上。2. 下载Maven前往maven的下载页面:http://ma…

swift闭包

其实闭包就是函数 作为条件的函数 闭包表达式 首先声明一个数组 <code class"hljs cs has-numbering" style"display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, mono…

吴恩达老师深度学习视频课笔记:自然语言处理与词嵌入

Word representation&#xff1a;词嵌入(word embedding)&#xff0c;是语言表示的一种方式&#xff0c;可以让算法自动理解一些类似的词比如男人、女人&#xff0c;国王、王后等。通过词嵌入的概念&#xff0c;即使你的模型标记的训练集相对较小&#xff0c;也可以构建NLP(自然…

高文院士:为什么中国的AI发展必须要有开源开放平台?

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会围绕人工智能基础研究现状及面临的机遇和挑战、人工智能技术未来发展的核心方向等话题&#xff0c;…

libcurl断点下载遇到的问题

最近游戏把资源&#xff08;图片、配置、lua&#xff09;的加载、更新全部改了 &#xff0c;加载其实还好&#xff0c;就是不走之前的zip解压方式。 以前的大体流程&#xff1a; 下载 –> 启动 –> 解压 –> 更新 –> 进入游戏 现在的大体流程&#xff1a; 下载 –…

sqlite3数据的使用(xcode 7,ios9)

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

吴恩达老师深度学习视频课笔记:序列模型和注意力机制

基础模型&#xff1a;比如你想通过输入一个法语句子来将它翻译成一个英语句子&#xff0c;如下图&#xff0c;seq2seq模型&#xff0c;用x<1>一直到x<5>来表示输入句子的单词&#xff0c;然后我们用y<1>到y<6>来表示输出的句子的单词&#xff0c;如何训…

七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大

2015年&#xff0c;马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell 这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是&#xff0c;这么知名的游戏公司开发团队当时却不足7人&#xff01;整个团队好像cell一样&am…

Linux学习笔记之文件管理和目录管理类命令

在开始理解Linux文件管理和目录类命令之前&#xff0c;有必要先说一下&#xff0c;关于操作系统在计算机中都做了哪些工作。0、操作系统的工作1、文件管理&#xff0c;增删改查2、目录管理3、进程管理4、软件安装5、运行程序6、网络管理7、设备管理本次笔记介绍的是文件管理和目…

张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”

整理 | AI科技大本营编辑部出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会吸引了国际人工智能领域的顶级专家学者参加&#xff0c;围绕人工智能基础…

ssqlit3.0数据库使用方法

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

GCC中通过--wrap选项使用包装函数

在使用GCC编译器时&#xff0c;如果不想工程使用系统的库函数&#xff0c;例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数&#xff0c;可以有两种方法&#xff1a; (1). 使用LD_PRELOAD环境变量&#xff1a;可以设置共享库的路径&…

[原]对Linux环境下任务调度一点认识

我一直以来有一个误解&#xff0c;那就是在终端运行某个程序时&#xff0c;按下Ctrl D时我误以为就是杀死了这个进程&#xff0c;今天才知道原来不是。比如我利用libevent在Linux环境下写了一个网络监听程序&#xff0c;当启动程序之后&#xff0c;就会一直监听本地的6789端口…

决策树的C++实现(CART)

关于决策树的介绍可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78880934 CART算法的决策树的Python实现可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78881143 这里参考 https://machinelearningmastery.com/impl…

iOS开发-由浅至深学习block

作者&#xff1a;Sindri的小巢&#xff08;简书&#xff09; 关于block 在iOS 4.0之后&#xff0c;block横空出世&#xff0c;它本身封装了一段代码并将这段代码当做变量&#xff0c;通过block()的方式进行回调。这不免让我们想到在C函数中&#xff0c;我们可以定义一个指向函数…

Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream

【进群了解最新免费公开课、技术沙龙信息】作者 | Jesus Rodriguez译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型&#xff0c;最近&#xff0c;谷歌和微软分别…

fragment 横竖屏 不重建

2019独角兽企业重金招聘Python工程师标准>>> android:configChanges"screenSize|orientation" 这样设置 切屏时都不会重新调用fragment里面的onCreateView了 转载于:https://my.oschina.net/u/1777508/blog/317811

二叉树简介及C++实现

二叉树是每个结点最多有两个子树的树结构&#xff0c;即结点的度最大为2。通常子树被称作”左子树”和”右子树”。二叉树是一个连通的无环图。 二叉树是递归定义的&#xff0c;其结点有左右子树之分&#xff0c;逻辑上二叉树有五种基本形态&#xff1a;(1)、空二叉树&#xf…

swift实现ios类似微信输入框跟随键盘弹出的效果

为什么要做这个效果 在聊天app&#xff0c;例如微信中&#xff0c;你会注意到一个效果&#xff0c;就是在你点击输入框时输入框会跟随键盘一起向上弹出&#xff0c;当你点击其他地方时&#xff0c;输入框又会跟随键盘一起向下收回&#xff0c;二者完全无缝连接&#xff0c;那么…

行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...

作者 | Jiaxu Miao、Yu Wu、Ping Liu、Yuhang Ding、Yi Yang译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】在以人搜人的场景中&#xff0c;行人会经常被各种物体遮挡。之前的行人再识别&#xff08;re-id&#xff09;方法…

WinAPI: Arc - 绘制弧线

为什么80%的码农都做不了架构师&#xff1f;>>> //声明: Arc(DC: HDC; {设备环境句柄}X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL;//举例: procedure TForm1.FormPaint(Sender: TObject); constx1 10;y1 10;…

提高C++性能的编程技术笔记:跟踪实例+测试代码

当提高性能时,我们必须记住以下几点&#xff1a; (1). 内存不是无限大的。虚拟内存系统使得内存看起来是无限的&#xff0c;而事实上并非如此。 (2). 内存访问开销不是均衡的。对缓存、主内存和磁盘的访问开销不在同一个数量级之上。 (3). 我们的程序没有专用的CPU&#xff…

2019年不可错过的45个AI开源工具,你想要的都在这里

整理 | Jane 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100)一个好工具&#xff0c;能提高开发效率&#xff0c;优化项目研发过程&#xff0c;无论是企业还是开发者个人都在寻求适合自己的开发工具。但是&#xff0c;选择正确的工具并不容易&#xff0c;有时这甚至是…

swift中delegate与block的反向传值

swift.jpg入门级 此处只简单举例并不深究&#xff0c;深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的&#xff0c;所以我的建议和体会就是&#xff0c;理不理解咱先不说&#xff0c;我先把这个格式记住&#xff0c;对就是格式&#xff0c;delegate或blo…

Direct2D (15) : 剪辑

为什么80%的码农都做不了架构师&#xff1f;>>> 绘制在 RenderTarget.PushAxisAlignedClip() 与 RenderTarget.PopAxisAlignedClip() 之间的内容将被指定的矩形剪辑。 uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject); varcvs: TDirect2DCanvas;…

女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖

作者 | 叶圣出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】随着计算机和AI新技术及其涉及自然科学的飞速发展&#xff0c;整个社会上的管理系统高度大大提升&#xff0c;人们对类似人与人之间的交流日渐疲劳而希望有机器的理解。计算机系统和机械人如果需要…

提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

对象的创建和销毁往往会造成性能的损失。在继承层次中&#xff0c;对象的创建将引起其先辈的创建。对象的销毁也是如此。其次&#xff0c;对象相关的开销与对象本身的派生链的长度和复杂性相关。所创建的对象(以及其后销毁的对象)的数量与派生的复杂度成正比。 并不是说继承根…

swim 中一行代码解决收回键盘

//点击空白收回键盘 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { view.endEditing(true) }

WinAPI: SetRect 及初始化矩形的几种办法

为什么80%的码农都做不了架构师&#xff1f;>>> 本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Butto…