ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【莫烦Python】机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记

2021-10-25 15:59:44  阅读:187  来源: 互联网

标签:NLP 莫烦 BERT 代码 py 模型 向量 语言


【莫烦Python】机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记

教程与代码地址

笔记中,图片和代码基本源自up主的视频和代码

视频地址: 【莫烦Python】机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT
代码地址: https://github.com/MorvanZhou/NLP-Tutorials
讲义地址:https://mofanpy.com/tutorials/machine-learning/nlp/
如果想要爬虫视频网站一样的csdn目录,可以去这里下载代码:https://github.com/JeffreyLeal/MyUtils/tree/%E7%88%AC%E8%99%AB%E5%B7%A5%E5%85%B71

P1 NLP行业大佬采访

动手敲代码,复现代码,做项目最重要

P2 NLP简介

将文本转化成一串数字(encode),然后让机器去理解,再生成一串数字,再转化成文本(decode)。

P3 1.1 课程目标

P4 2.1 搜索引擎简介

在一篇文章可以被搜索之前,搜索引擎安排小蜘蛛spider爬取网页重点部分,分别对待,比如重点关注标题、时间、正文。将这些信息给予不同的权重后,存储在便于快速检索的数据库中。

传统的构建索引方法:索引图片视频等是基于它周围的文字信息,如标题等。

深度学习的构建索引方法:在用户用文字搜索时,将搜索的文字内容转换成深度学习能识别的数字内容,然后再和之前存储的图片、视频数字信息进行匹配,对比两种数字之间的关联性,然后找到最相近的内容。这种搜索,我们有一个专业名词叫作"多模态"搜索。

批量召回,粗排数据量都非常大,精排的数据量小,适合用深度学习
在这里插入图片描述假设你开了家咨询公司,手上有100篇材料。这时有人来找你咨询NLP的问题,你会怎么在这100篇材料中找到合适的内容呢?

正排索引:我们一篇一篇地阅读,找到所有包含NLP内容的材料,然后返回给提问者。
缺点:这种方法需要我们在每次搜索的时候,都对所有材料进行一次阅读,然后在材料中找到关键词,并筛选出材料,效率其实非常差。

倒排索引:我们在第一次拿到所有材料时,把它们通读一遍,然后构建关键词和文章的对应关系。当用户在搜索特定词的时候,比如“红”,就会直接返回“红”这个【关键词索引】下的文章列表。
优点:能够将这种索引,放在后续的搜索中复用,搜索也就变成了一种词语匹配加返回索引材料的过程。

问题:但当处理的是海量数据的时候,通过倒排索引找到的文章可能依然是海量。
解决:对这些文章进行排序操作,再选取排名靠前的文章列表也能帮我们节省大量的时间。处理匹配排序,最有名的算法之一叫做TF-IDF。

TF-IDF用于粗排
在这里插入图片描述

TF是词频,计算词在当前文章中出现的频率,频率越高,越能代表文章
在这里插入图片描述
但像“我”、“是”这种词也很高频,这时候就需要IDF了。

IDF是逆文本频率指数,计算词在这么多篇文章中出现的频率的倒数,在多篇文章都出现,频率就越高,频率的倒数就越小,表示这个词在多篇文章中没有区分度;只在少数的文章中出现,甚至只在一篇文章中出现,频率就越低,频率的倒数就越大,表示这个词在多篇文章中有很高的区分度,能代表这篇文章。
在这里插入图片描述结合TF和IDF就是TF-IDF了
在这里插入图片描述

P5 2.2 搜索引擎算法(TF-IDF 检索)

代码见tf_idf.py,这个是up自己写的

写路径的时候,字符串最好使用原始字符串,即

str = r‘./image/xxx.jpg’

P6 2.3 Sklearn 搜索的扩展

代码见tf_idf_sklearn.py,可以使用sklearn现成的方法去写

全局指的事数据库的全局,不是互联网的全局

Query -> 搜索词标准化 -> 搜索算法 -> 搜索结果
在这里插入图片描述

P7 3.1 词向量可以这样理解

P8 3.2 训练词向量 W2V CBOW算法

代码见CBOW.py

词仅在词向量空间进行相加,而没有在前后文空间进行相加,相比之下,Skip Gram更好。

P9 3.3 词向量Skip Gram 算法

代码见skip-gram.py

CBOW和Skip Gram都没有办法处理一词多义的问题。

P10 4.1 理解句子 句向量

简而言之,Encoder负责理解上文,Decoder负责将思考怎么样在理解的句子的基础上做任务。这一套方法就是在自然语言处理中风靡一时的Seq2Seq框架。

P11 4.2 Seq2Seq 语言生成模型

代码见seq2seq.py

decoder预测
在这里插入图片描述

在使用GreedyEmbeddingSampler()作为decode的方法是有局限性的,有时候会因为忽略了前期的低分数而错过了后期的整体高分策略, 类似于前面芝麻最好,所以捡了芝麻,但后面却错过了捡西瓜的机会。而这种因局部信息不全而导致的策略不优,可以靠Beam search的筛选策略弥补。 如果使用 beam search, 我们不仅仅关注当前最优策略, 而且每预测一个词时,还保持关注当时刻所有候选词的N个最优策略,结束预测时,就有很大概率能够找到全局比较优的路径。 举个例子,如果我们用beam search size = 2, 意味着每次预测都记录最优的两个预测,然后沿着这两个预测继续预测, 每次后续的预测都只挑选下一步最好的两个预测。 这样加大了搜索范围,使我们有机会接触到全局较优路径。

P12 4.3 CNN也能理解语言

代码见cnn-lm.py

CNN做句向量encoding的时候有一个局限性,它要求有个句子最长的限制,句子如果超过这个长度,那么就最好截断它。 因为就像在给图像做卷积,图像也是要定长定宽的,不然卷积和池化会有尺度上的问题。这是一个相比RNN的硬伤。之后我们在介绍Transformer类型的语言模型时, 也会介绍到这个硬伤。

P13 5.1 注意力 语言模型

P14 5.2 Attention 注意力算法

P15 5.3 请注意 注意力

Transformer模型:多层注意力的叠加,它使用的是一个个注意力矩阵来表示在不同位置的注意力强度。通过控制强度来控制信息通道的阀门大小。
在这里插入图片描述

P16 5.4 Transformer 自注意语言模型

代码见transformer.py

P17 6.1 大规模预训练模型

P18 6.2 一词多义 ELMo

代码见ELMo.py

ELMo对你来说,只是另一种双向RNN架构。ELMo里有两个RNN(LSTM), 一个从前往后看句子,一个从后往前看句子,每一个词的向量表达,就是下面这几个信息的累积:

  1. 从前往后的前文信息;
  2. 从后往前的后文信息;
  3. 当前词语的词向量信息。
    在这里插入图片描述

P19 6.3 GPT 单向语言模型

代码见GPT.py

GPT 单向语言模型
在这里插入图片描述

P20 6.4 BERT 双向语言模型

P21 7.1 语言模型的应用

标签:NLP,莫烦,BERT,代码,py,模型,向量,语言
来源: https://blog.csdn.net/sinat_39448069/article/details/120918347

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有