赞
踩
大家好,我是尚拙谨言。欢迎来到大道至简专栏之自然语言处理学习路线。在本系列往期文章中,我介绍过学习自然语言处理技术的技术路线,也就是你大概需要先学会哪些基本知识。没看过的朋友可以回到那篇看一下,链接在文章开头。那么,本篇开始,我们就针对这一系列基础进行进一步介绍。
另外,之所以我把这一系列博客的撰写前置到另外一个【大道至简】机器学习系列,是因为最近chatGPT实在太火了,如果你还没有了解这一领域的技术,真的就落后了。可能有的小伙伴说:“我又不是搞NLP的,我是搞图像的。”那你就大错特错了,可以说chatGPT的诞生,严格上来讲,影响的不仅仅是某个特定技术领域,大家都知道,它是一个大模型,这个大模型已经能够涵盖住诸如机器翻译、图像、问答、推荐、搜索等许多领域,也就是说它是个多模态或者说它已经开辟了多模态融合技术的新路线。除此之外,它又一次为大家打开了强化学习思想的大门,而且这一新兴的训练思想被验证是有效的!所以,chatGPT在我看来,其意义不仅仅是chatGPT(一句废话),更大的意义在于它是一个新的技术思想的开门人:大模型+多模态+强化学习。
而不得不承认,chatGPT其属性仍然是NLP技术的范畴,所以,想要懂chatGPT,NLP我们又不得不学,学习NLP,接下来及其以后我介绍的这些NLP基础知识又不得不学,所以可以说,我即将写的这些文章,是我们掌握前沿技术的敲门砖。
这一节要聊的是一个比较容易理解和掌握的非常经典和基础的技术:N-Gram语言模型。我们直接步入正文。
目录
你现在在看我的文章,这是一些文字,但是这些文字实质上是以像素点的形式呈现给你的,所以不要以为这些文字是计算机理解的元素,它不过是一些像素点组合出的可视化图像而已。可是我们现在有很多时候不仅仅是想让文字呈现在我们计算机屏幕上这么简单,更多的是想让计算机接收到一些文字信息后能够在它“心里”对这些文字信息进行理解、分析和处理,怎么办呢?这个时候,语言模型就派上用场了。我们知道,计算机接收到的所有类型的信息,本质上都是转化成“0、1”这两个数进行存储或者处理的,语言文字也不例外。事实上,0和1这两个数更偏向计算机底层所用,我们大多数情况下,都是会将不同长度不同组合方式的0-1串转化成更直观的一些整数、浮点数等,但总之都是“数”。所以,语言模型本质上就是要将来自客观世界的文字实体通过一定的逻辑处理,处理成能够很好的代表这些文字信息的“数字”,而这里的“逻辑处理”的工具,就是所有我们所了解的自然语言处理领域的模型。
从大的方向上说,语言模型的“样子”可以分为两种,一种是传统的基于概率统计学的统计模型,它是一些计算好的统计数字,可能是浮点数,也可能是整数,如果是浮点数,它可能是0~1之间的频率或者概率,如果是整数,它基本上就是一些字词出现的频数。另一种是进阶的基于神经网络的函数模型,模型中的参数也是浮点数,可能有正的有负的,每个数字没有人类可理解的直观意义,它们表达了能够计算语言特征的算子,它们是某些高阶的,存在客观意义的函数参数,基于神经网络的语言模型,它本质上是一系列矩阵,这些矩阵可以类比成y=ax+b中的a和b,最简单的理解就是x为某个字词,经过函数计算后输出为y,那么这个y就是一个能够非常好的表达这个字词的且计算机能够理解和处理的向量,只不过对于神经网络来说,其要表达的函数远不止y=ax+b这么简单,但是本质上是一样的。
介绍完了语言模型的本质,我们可以介绍N-Gram了,那么这个N-Gram就是传统的基于概率统计的语言模型。它是个什么东西呢?我们思考这么一件事:
一天,你偶然遇见了一个许久未见的老友,见面时,老友开口第一句话是说“好久不见!最近过得还好吗?”,现在我们来看下这句话,当你的老友说“好久”二字的时候,你的脑海里已经大概率猜出他后面会说“不见”二字?当他说“最近过”的时候,你脑海里又大概率猜到他是想说“得还好吗”,也就是你听到“好久”或者“最近过”的时候,你就知道十有八九“好久”后接的是“不见”,“最近过”后面接的是“得还好吗”。为什么呢?是因为在你的大脑库中,你已经存储了海量的先验知识,这其中就包括“好久不见”和“最近过得还好吗”这两句话。加上当时场景的加持,经验上来说,你就是这么猜到的,而且很准。为什么说需要有场景的加持?因为“好久”后面仍然可以是“好久”或者“没吃了”、“没去了”等,“最近过”后面也可以是“得不怎么样”、“去了吗”等,但是相比于当时的环境(和许久未见的老友偶然相遇)来说,“最近过得还好吗”以及“好久不见”出现的概率显然要高一些。对于环境的加持这一部分概念,不是本章的重点,但是是自然语言处理的重点,即所谓的“上下文”,这个以后我们再讲。
不知道各位对上述例子是否有所体会。其实N-Gram的思想就来源于淳朴的人类的语言习惯。由于CSDN公式里不支持中文,所以我这边再举个例子:假如有这么一句话“artificial intelligence is crazy”。好了,现在你把自己想象成一台计算机,这个时候交给你两个任务:第一个任务是当我说出artificial的时候,你要猜出我要说的是啥。第二个任务是当你听到artificial intelligence is crazy的时候你要判断这句话是不是一句正常的人类语言。
我们来看下你会怎么做。首先,你需要阅读大量的文章,从这些文章中,你学习到以下信息:
出现的组合 | 出现次数 |
总词数 | 1000 |
artificial | 500 |
artificial intelligence | 90 |
artificial xxx | 10 |
artificial intelligence is | 70 |
artificial intelligence xxx | 10 |
artificial intelligence is crazy | 50 |
artificial intelligence is xxx | 10 |
从上述表格可以看出,在所有与artificial组合成的二元词的情况中,artificial intelligence出现的次数最多,因此你就认为artificial后接intelligence的可能性最大,那么你就会告诉我,当你听到artificial后,大概率你就会接着听到intelligence。而当你听到artificial intelligence后,你又知道了在所有与artificial intelligence组合而成的三元词组中,artificial intelligence is出现的次数最多,同样你就猜到你会听到artificial intelligence is这句话,同样在所有和arithmetic intelligence is组合而成的四元词组中,artificial intelligence is crazy的次数最多,所以你就判断出我说了artificial这个词后,我大概率要说的是artificial intelligence is crazy。这样一来,第一个任务你就完成了。
那么第二个任务呢?让你判断artificial intelligence is crazy是不是一句符合人类语言逻辑的正常的话,这个事儿本质是啥?事实上,要判断一句话是不是一句符合语言逻辑的话,就是让你判断这句话能够出现的概率是多少。也就是说,你需要从你的先验知识中(也就是你看过的大量的文章),计算出,看看这个概率值究竟高不高,如果很高(大于某个阈值),说明在你的知识体系中,这句话出现的次数最多,那么你就认为它是一句你曾经在许多文章中见过的正常的句子,这里假设你见过的文章都是标准的符合人类语言逻辑的语言。相反如果很低,说明你从没见过这样的说话方式,你就会觉得这句话不伦不类胡说八道,于是你就会对这句话的意思表示很困惑,这就涉及到一个很重要的概念:困惑度,这个我们后面讲,先来看看上面提到的P咋求。
还记得概率论中的条件概率计算公式吗?P(A|B)=P(A, B)/P(B)->P(A, B)=P(A|B)P(B),所以P有如下计算方式:
【字体有点小,请点击放大
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。