畅谈自然语言处理——初识NLP
文章目录
- 畅谈自然语言处理——初识NLP
- 一、引言
- 二、NLP技术的定义分类
- 三、三个发展阶段
- 1、基于规则的算法
- 2、基于统计的NLP算法
- 3、基于深度学习的NLP算法
 
- 结语
 
一、引言
最近,一个名为ChatGPT的模型将计算机领域震撼,它以对话的方式进行交互,对话形式使 ChatGPT 能够回答后续问题、承认错误、挑战不正确的前提并拒绝不适当的请求。使人们感受到了人工智能越来越接近人类智能。
作为目前人工智能领域最前沿的研究成果之一,
ChatGPT的实现与自然语言处理—NLP技术息息相关。
二、NLP技术的定义分类
自然语言处理(Natural Language Processing)简称NLP,是人工智能的一个重要领域,NLP技术通过让计算机模拟人类语言的交际过程,使计算机理解和运用人类社会的各种语言,实现人机间的自然语言交流,从而代替人的部分脑力劳动,包括:查阅资料、解答问题、翻译等
我们使用自然语言时,需要经过哪些步骤呢?
很明显是先听,再理解,之后思考,最后说这四个步骤。计算机进行自然语言处理时也遵循这四个步骤。
按着四个步骤分为四种技术,分别为语音识别、自然语言理解、自然语言生成和语言合成。
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tDWM4QVq-1682319045069)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144633914.png)]](https://img-blog.csdnimg.cn/d9622842f2d4466da73a3887fd56bf57.png)
其中自然语言理解和自然语言生成是NLP技术中最核心、最热门也是最复杂和最有趣的技术研究方向。
三、三个发展阶段
说完了NLP技术的定义与分类
接下来我们聊一聊NLP算法的三个发展阶段
在NLP发展初期,计算机的运算速度很慢,科学家们只能通过总结规律来判断自然语言的意图,用预先准备好的知识来实现自然自然语言理解。因此出现了专家系统等基于规则的NLP算法
1、基于规则的算法
在NLP发展初期,计算机的运算速度很慢,科学家们只能通过总结规律来判断自然语言的意图,用预先准备好的知识来实现自然自然语言理解。
最初的智能语音遥控系统结构长这样
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2otpDkq-1682319045070)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144706550.png)]](https://img-blog.csdnimg.cn/1269c8cf83c84f53a38a638d20de57e5.png)
当用户对智能助手说出:好热啊,能帮我打开空调吗?
那么满足了起始词、命令和结束词后就会执行相应的程序来帮用户打开空调啦。
但如果句子很长的话,构建的语法树就会很大,很复杂。且用规则处理法在多义性很难处理,因为多义词严重依赖上下文语境。但科学家们很快就解决了这个难题,在1970年以后统计语言学家的出现使得NLP重获新生
2、基于统计的NLP算法
基于统计的NLP算法是一种以基于语料库的统计分析为基础的经验主义方法。曾广泛应用于翻译、语音识别、智能客服、专家系统中。
基于统计的NLP最初是为了解决语言识别问题,常见的语言识别流程很简单,从声音到句子,一般有五个步骤
1、把音波数据分成帧
2、把帧识别成状态
3、把状态组合成音素
4、把音素转换成字
5、把字组合成句子
有了音素如何拼出合理的句子呢?如“WO3ZAI4SHANG4HAI3”是表示“我在上海”呢?还是“我载尚海”呢?
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-19lz5xFL-1682319045071)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144803124.png)]](https://img-blog.csdnimg.cn/5326386bbf3d4bdab876c8db128555f1.png)
判断一个句子是否合理,就要通过一系列算法,例如
马尔科夫算法来判断这个句子在人类正常语言中出现的概率
设S为句子,句子是由汉字组成的,所以我们用
  
      
       
        
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          , 
         
        
          … 
         
        
          , 
         
         
         
           w 
          
         
           n 
          
         
        
       
         w_1,w_2,\dots,w_n 
        
       
     w1,w2,…,wn
 表示有序的汉字列表。“我在上海”就可以表示为
  
      
       
        
         
         
           w 
          
         
           1 
          
         
        
          = 
         
        
          我 
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          = 
         
        
          在 
         
        
          , 
         
         
         
           w 
          
         
           3 
          
         
        
          = 
         
        
          上 
         
        
          , 
         
         
         
           w 
          
         
           4 
          
         
        
          = 
         
        
          海 
         
        
       
         w_1=我,w_2=在,w_3=上,w_4=海 
        
       
     w1=我,w2=在,w3=上,w4=海
 我们用P()表示概率,设“我在上海”为S,那么P(S)就是这句话在人类对话中可能出现的概率。
随后把P(S)中的每个字按照概率论公式进行展开,
(读作:“在S的条件下w1的概率”乘以“在w1的条件下w2的概率”…)
  
      
       
        
        
          P 
         
        
          ( 
         
        
          S 
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           1 
          
         
        
          ∣ 
         
        
          < 
         
        
          S 
         
        
          > 
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           2 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           3 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          ⋅ 
         
        
          ⋅ 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           n 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          , 
         
        
          … 
         
        
          , 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
       
         P(S) = P(w_1|<S>)·P(w_2|w_1)·P(w_3|w_1,w_2)····P(w_n|w_1,w_2,\dots,w_{n-1}) 
        
       
     P(S)=P(w1∣<S>)⋅P(w2∣w1)⋅P(w3∣w1,w2)⋅⋅⋅⋅P(wn∣w1,w2,…,wn−1)
 S这个句子出现的概率等于每一个字出现的条件概率的乘积。
以“我在上海”为例,我们可以列出下面的公式:
  
      
       
        
        
          P 
         
        
          ( 
         
        
          S 
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           1 
          
         
        
          ∣ 
         
        
          < 
         
        
          S 
         
        
          > 
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           2 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           3 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           4 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          , 
         
         
         
           w 
          
         
           2 
          
         
        
          , 
         
         
         
           w 
          
         
           3 
          
         
        
          ) 
         
        
       
         P(S) = P(w_1|<S>)·P(w_2|w_1)·P(w_3|w_1,w_2)·P(w_4|w_1,w_2,w_3) 
        
       
     P(S)=P(w1∣<S>)⋅P(w2∣w1)⋅P(w3∣w1,w2)⋅P(w4∣w1,w2,w3)
其中P(w1|<S>)是第一个字“我”出现在句首的概率。
P(w2|w1)是已知第一个字是“我”的前提下,第二个字“在”出现的概率
同理P(w3|w1,w2)是已知第一个字是“我”,且第二个字是“在”的前提下,第三个字“上”出现的概率。
为了解决计算概率时指数爆炸的难题,马尔科夫算法将
上述式子简化为二元模型
  
      
       
        
        
          P 
         
        
          ( 
         
        
          S 
         
        
          ) 
         
        
          = 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           1 
          
         
        
          ∣ 
         
        
          < 
         
        
          S 
         
        
          > 
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           2 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           1 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           3 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           2 
          
         
        
          ) 
         
        
          ⋅ 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           4 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           3 
          
         
        
          ) 
         
        
       
         P(S) = P(w_1|<S>)·P(w_2|w_1)·P(w_3|w_2)·P(w_4|w_3) 
        
       
     P(S)=P(w1∣<S>)⋅P(w2∣w1)⋅P(w3∣w2)⋅P(w4∣w3)
 化成——》
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           n 
          
         
        
          ∣ 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          = 
         
         
          
          
            P 
           
          
            ( 
           
           
           
             w 
            
            
            
              n 
             
            
              − 
             
            
              1 
             
            
           
          
            , 
           
           
           
             w 
            
           
             n 
            
           
          
            ) 
           
          
          
          
            P 
           
          
            ( 
           
           
           
             w 
            
            
            
              n 
             
            
              − 
             
            
              1 
             
            
           
          
            ) 
           
          
         
        
       
         P(w_n|w_{n-1}) = \frac{P(w_{n-1},w_n)}{P(w_{n-1})} 
        
       
     P(wn∣wn−1)=P(wn−1)P(wn−1,wn)
 所以只要求出
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           n 
          
         
        
          ∣ 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          , 
         
         
         
           w 
          
         
           i 
          
         
        
          ) 
         
        
          和 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          ,即可求出 
         
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           n 
          
         
        
          ∣ 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          了 
         
        
       
         P(w_n|w_{n-1},w_i)和P(w_{n-1}),即可求出P(w_n|w_{n-1})了 
        
       
     P(wn∣wn−1,wi)和P(wn−1),即可求出P(wn∣wn−1)了
 但这时需要借助语料库了,语料库的大小和能力成正相关(数据量和复杂度图)
假设语料库有2000亿条内容,
“我在”于语料库中出现了1000万次,那么
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           1 
          
         
        
          ∣ 
         
         
         
           w 
          
         
           2 
          
         
        
          ) 
         
        
          = 
         
         
          
          
            1000 
           
          
            万 
           
          
          
          
            2000 
           
          
            亿 
           
          
         
        
          = 
         
        
          0.00005 
         
        
       
         P(w_1|w_2)=\frac{1000万}{2000亿}=0.00005 
        
       
     P(w1∣w2)=2000亿1000万=0.00005
 就是1000万除以2000亿,等于0.00005
 
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          = 
         
         
          
          
            2 
           
          
            亿 
           
          
          
          
            2000 
           
          
            亿 
           
          
         
        
          = 
         
        
          0.00001 
         
        
       
         P(w_{n-1})=\frac{2亿}{2000亿}=0.00001 
        
       
     P(wn−1)=2000亿2亿=0.00001
 “我”于语料库出现了2亿次,那么P(wn-1)就是2亿除以2000亿,等于0.001
因此可以求得
‘我在’出现的条件下‘我’出现的概率为
  
      
       
        
        
          P 
         
        
          ( 
         
         
         
           w 
          
         
           n 
          
         
        
          ∣ 
         
         
         
           w 
          
          
          
            n 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          = 
         
         
          
          
            P 
           
          
            ( 
           
           
           
             w 
            
            
            
              n 
             
            
              − 
             
            
              1 
             
            
           
          
            , 
           
           
           
             w 
            
           
             n 
            
           
          
            ) 
           
          
          
          
            P 
           
          
            ( 
           
           
           
             w 
            
            
            
              n 
             
            
              − 
             
            
              1 
             
            
           
          
            ) 
           
          
         
        
          = 
         
         
         
           0.00005 
          
         
           0.001 
          
         
        
          = 
         
        
          0.05 
         
        
       
         P(w_n|w_{n-1}) = \frac{P(w_{n-1},w_n)}{P(w_{n-1})}= \frac{0.00005}{0.001}= 0.05 
        
       
     P(wn∣wn−1)=P(wn−1)P(wn−1,wn)=0.0010.00005=0.05
 以此类推,最后选取组合概率最高的词,计算概率后,“我在上海”比“我载尚海”的可能性更高。由此就可以准确地识别语音啦。
但这个算法也存在这问题,即数据稀疏问题。由于语料库不能覆盖所有词语,在计算时会出现大多数的数值缺失,数据越稀疏结果越不准确。为了解决这个问题,在2003年研究者尝试用神经网络来研究语言模型。
3、基于深度学习的NLP算法
伴随着计算处理能力的提升,深度学习有了较快的发展。
在2003年这个想法被提出后,2011年罗南·科洛伯特等人用一个简单的深度学习模型在命名实体识别(NER)、**词性标注(POS tagging)**等NLP任务中取得SOTA(技术发展最新水平)成绩(画:No.1)
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NafKyqwR-1682319045071)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144836440.png)]](https://img-blog.csdnimg.cn/fd9c66bfe55548c9b943e9fd03026272.png)
2013年,以Word2vec为代表的词向量模型开始普及,此外基于深度学习的研究经历了CNN、RNN、Transformer等特征提取器。
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAPPevcW-1682319045072)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144855437.png)]](https://img-blog.csdnimg.cn/3038ac507e39455ab05da4eaf2454132.png)
2019年至2020年,谷歌公司的BERT模型、OpenAI的GPT-3模型在很多指标上超越了人类。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kMd73gqF-1682319045072)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230424144916725.png)]](https://img-blog.csdnimg.cn/0f8e0e08f85c47feaa7d23ee776bfc8d.png)
2023年3月14日基于GPT-4的Chat-GPT的回答准确性不仅大幅提高,还具备更高水平的识图能力,且能够生成歌词、创意文本,实现风格变化。
深度学习经过几十年的发展,深度学习的成功秘诀有以下三点
(1)海量数据(big data)
(2)深度神经网络模型
(3)大规模并行计算
Chat-GPT离不开这三个要素,当然也离不开科研人员的辛勤付出。
结语
我还为大家准备了相关习题和资料以便课后学习,谢谢大家。
http://nlp.aitianhai.top/#/Nlp


















