自然语言处理学习——CS224课程笔记

2024-01-07 12:48

本文主要是介绍自然语言处理学习——CS224课程笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自然语言处理学习——CS224课程笔记

第一部分:词向量(Lecture 1)

对于自然语言处理问题,涉及到的基本处理单元是一个个单词(英文为单词,中文为词汇),将单词表示成计算机能够理解的符号是解决自然语言处理问题的基础。词向量就是目前发展出的分布式表示单词语义信息的关键方法。在正式介绍词向量之前,先介绍一下其它几种表示单词和文档的方法。

1. one-hot编码方式与词袋模型(bag of words)

one-hot编码是一种离散式的单词表示方式。先综合所有单词,计算单词的数量N,从而建立N维向量,用每个维度的单位向量表示一个单词。比如对于 “I love china”, 使用 [1, 0, 0] 表示 ” I ", 使用 [0, 1, 0] 表示 " love ", 使用 [0, 0, 1] 表示 " china "。one-hot 尽管可以用向量的方式表示单词,但是无法表达出单词之间的关系,同时对于较大的语料库,容易出现表示向量维度过大且过于稀疏的问题。

在 one-hot编码的基础上,可以对文档进行相应的编码。一篇文档由n个单词组成,可以将这n个单词的向量加总得到最终的向量。这样的方法被成为词袋模型(Bag of words)。从根本上开看,词袋模型通过统计各个单词出现的次数来表示一篇文档。词袋模型的问题在于1、没有考虑不同单词之间的关系,2、没有考虑不同单词的相对重要性。对于第二点,实际上,不同单词由于在所有文档中出现的频次不同,因此其对于文档的表示重要性也是不同的,由此进一步发展处理考虑单词重要性信息的TF-IDF方法。

2. TF-IDF

TF表示单篇文档中的词频,IDF表示逆向文档频率。TF考虑了不同单词在数据库中出现的频次不同,通过计算在文档中的”相对出现频率“来表示单词,相当于做了归一化处理。而IDF则考虑了不同单词在各个文档中的分布情况。综合TF-IDF可以更好地表示文档信息。
在这里插入图片描述

3. N-gram方法

N-gram方法考虑了单词的出现顺序。对于一段话而言,不同单词不是随机出现的,而是有很强的相互关系。N-gram 通过建立条件概率模型(马尔可夫模型),计算N个单词同时出现的概率,从而将N个单词作为整体用概率的形式表示出来。N-gram尽管考虑了单词的顺序,然而其序列会随着语料库快速膨胀,并且存在严重的数据稀疏问题。

以上的集中方法都是离散式的表示方法,主要有以下缺点:
(1)无法衡量词向量之间的关系
(2)词表维度随着原料库的增加而膨胀
(3)普遍存在数据稀疏问题

为了解决以上问题,词的分布式表示方法被提了出来。词的分布式表示的基本思想是语义相近的词,对应的词向量也应该相近。Word2Vec 方法是计算分布式词向量的关键方法。

Word2Vec

Word2Vec 利用大量的语料信息将单词表示成词向量,在词向量的生成过程充分利用了语句中的上下文信息,从而使得词向量能够反映出语义信息。Word2Vec可以将one-hot编码的稀疏词向量表示成稠密编码的低维词向量,并使得词向量具有语义信息。有两种处理方式:CBOW (continuous bag of words ) 方法和Skipgrams方法。
CBOW通过建立全连接神经网络,使用一段语句中的n-1个词预测剩下的一个词,从而获得该单词对应的隐向量,并将该向量最为词向量。模型结构如下所示。
在这里插入图片描述
Skipgrams 通过建立利用类似的方法来获得词向量。不过神经网络的输入是要表示的单词,而输出则是剩下的n-1个的单词。模型结构如下所示。

在这里插入图片描述
两种方法最后得到的词向量都具有表示语义的功能。语义相近的单词,对应的词向量也相近,从而很好的解决了单词离散表示方法存在的问题。

第二部分:词向量和词义(Lecture 2)

1. 关于word2vec的详细解释

第一部分谈到word2vec的实现有两种方式,Skipgrams和CBOW。两个模型除了使用的输入单词和输出单词不同外,各自对应的模型也不太相同。CBOW结合了神经网络方法和哈夫曼树,采用了一种”级联“的Softmax函数,Skipgrams模型相对而言要简单的多。这里以Skipgrams为例来进行说明。
在这里插入图片描述
对于Skipgrams方法,这的关键是通过神经网络模型学习两个大的矩阵系数,第一个矩阵为图中的W,用来表示单词语义的矩阵(W和onehot词向量相乘后会得到词向量的嵌入式表达),第二个矩阵是图中的W’,用来表示上下文信息的矩阵。onehot形式的词向量进入网络后先后和W, W’相乘,从而得到上下文的单词,这里使用softmax方法进行表示,并利用标记数据(onehot形式)进行训练。训练方法是”万能“的梯度下降法,具体的推导过程在这里不详细展示了。
尽管上述Skipgrams思路在理论上可行,但是在实际操作中依然需要解决很多”工程性“的问题。它包括以下几个方面。1、最后的softmax操作计算量太大,网络更新速度缓慢;2、某些高频词,如the等,会对模型产生不好的影响。解决方法也很简单,对于问题1,可以使用负采样的方法进行解决。这里负采样是指在隐藏层输出V维向量时(V是词库中单词总数),接下来只考虑正确的单词和其它采样的k个单词所对应的维度信息,通过设计所及回归损失函数,只更新和这k+1个维度相关的网络系数,从而大大加快了网络的训练速度。同时这里的在采样其它k个单词时,可以通过各个单词出现的频率或类似函数关系进行操作。对于问题2,直接不考虑包含某些高频词(如the)的训练数据即可。

2. Count-based模型

Word2Vec方法是通过神经网络监督训练的方式直接预测单词的语义矩阵,从而预测词向量。而Count-based模型则通过频率计数的方式表示词向量,其中的典型代表是SVD分解法。
首先可以根据文档内容,确定共现矩阵,如下所示。
在这里插入图片描述
共现矩阵是一个V×V的矩阵(V为词库单词数量),往往非常稀疏。可以通过SVD方法进行降维处理。而计算得到的S矩阵就可以看成是V个单词词向量组合的结果。
以下是Count-based 方法和Word2Vec方法(直接预测方法)的比较:
在这里插入图片描述

3. GloVe算法

GloVe算法据说可以综合Count-based模型和直接预测模型的优点,思路清奇。以下简单介绍以下。
在这里插入图片描述
对于共现矩阵,两个单词同时出现的概率是极低的,也就意味条件概率值很小,难以用于计算。但是同一单词对应的其它不同单词条件概率的比率却可以很高。于是,可以引出建模问题:
在这里插入图片描述
也就是使用词向量的函数来表达贡献概率的比值。更进一步,作者通过分析词向量函数应该满足的关系,直接反推出了词向量函数的表达式。
经过一系列的“推测”,最后显性的表达公式为:
在这里插入图片描述
到这一步就可以通过设立一个损失函数来使得上式尽可能满足,并学习到词向量。损失函数设定为:
在这里插入图片描述
f(x)为权重系数函数。

参考博客: https://blog.csdn.net/wuzhongqiang/article/details/106979179#t0

第三部分:子词模型(Lecture 3)

在做自然语言处理任务时,前文介绍的方法都是以一个单词为基本单元,以词向量的表示和学习为基础。而实际上也可以从另外的角度出发,在语音里面音素就可以作为比单词更基本的单元,实际上在自然语言处理里面也可以选择比单词更小的单元”子词”来作为分析的基础。这里有两种思路,一种思路是以单个字符为单元,建立字符级模型进行进一步的分析处理;另一种思路是建立比字符“大”而比单词“小”的“子词”模型进行分析处理。以下将分别进行介绍。

1. 字符级模型

字符级模型也有两种思路,一种思路是直接以单个字符进行处理,另一种思路是以单个字符为基础表示词嵌入向量,再利用词向量进行后续的分析处理。这两种方法都可以解决“陌生词”的问题。不过相比于直接的词向量模型,字符级模型存在序列长、处理速度慢等问题。
2017年的一篇论文:Fully Character-Level Neural Machine Translation without Explicit Segmentation 是以单个字符表示词向量的经典之作,其思路如下:
在这里插入图片描述
2018年的论文Revisiting Character-Based Neural Machine Translation with Capacity and Compression则展示了纯字符模型的效果。研究发现,在某些复杂的语言中,比如捷克语,字符级模型可以大幅提高翻译准确性,而在简单的语言中,比如英语和法语,字符级模型没有显著的提高。另外,对于较小的模型,单词级模型处理效果较好,而对于较大的模型,字符级模型处理效果较好。

2. 子词模型

除了选择单词和字符作为基本单元,也可以选择介于单词和字符之间的“子词”作为基本单元。子词模型也有两种思路,一种思路是用word pieces来代替word,整体思路和词模型相似;另一种思路是采取单词、字符同时存在的混合模型。混合模型主要包括单词、字符和字符块。其中生成字符块的关键算法叫Byte Pair Encoding算法,以下将进行简单介绍。
在这里插入图片描述
BPE的基本思想是先以单个字符词典,然后使用n-gram方法将频率最高的字符串加入到词典中,通过不断重复这样的过程来扩充词典。最后以词典里面的“单词”为基本单元进行处理。
实际上,在实际应用中可以灵活使用单词级模型和子词模型,比如混合两种模型的 Hybrid NMT方法。其核心思想是在输入为正常单词的时候使用单词级进行处理,而在输入为稀有词或者词库中不存在的词时使用字符级模型进行处理。

这里特别提一下fastText方法。fastText方法可以使用“子词”单元来生成嵌入词向量。
在这里插入图片描述
参考博客: https://blog.csdn.net/weixin_42691585/article/details/107009195

第四部分 语义环境词嵌入模型(Contextual Word Embeddings)

前面谈到了对于自然语言处理任务,词向量的学习表示是基础。而对于词向量的学习表示方法,有one-hot编码方式,TF-IDF模式,word2vec, GloVe等方法。这些方法应用在特定任务的训练集上。然而,词向量的事先学习无法解决一词多义的问题。基于语义环境的词嵌入模型由此被提出解决这一问题。语义环境词嵌入模型的核心在于通过具体的上下文语义环境确定词向量,“一句一词一向量”。比较典型的代表有ELMo, GPT, Bert等,以下讲分别进行介绍。

1. ELMo

ELMo(Embeddings from Language Models)利用语言模型通过上下文来确定词向量。在ELMo被提出之前,TagLM被提出了进行语音词嵌入,模型比ELMo简单。其先使用无监督数据预训练词向量和语言模型,接着将词向量和由语言模型得到的单词编码组合作为有标记的序列模型的输入,然后训练有标记的序列模型。其示意图如下:
在这里插入图片描述
ELMo在TagLM的基础上进行了进一步的拓展,采用了更加复杂的模型,其采用两层的Bi-LSTM模型来学习单词的表示。单词的表示既可以是各个隐藏层权重的和,也可以是特定隐藏层的权重。对于较简单的任务,一般选择浅层网络层的系数,而对于较复杂的任务,一般选择深层网络层的系数。ELMo的结构如下所示。
在这里插入图片描述

2. Transformer 与迁移学习

Transformer完全使用注意力机制的模型,不再采用CNN或者RNN的结构,里面的self attention的结构实现了并行计算的功能,其示意图如下。
在这里插入图片描述
Transformer包括encoder和decoder两个部分,由于self attention结构没有考虑到单词的位置信息,所以在模型输入中特意加上了单词的位置信息。对于Transformer的具体结构和功能,这里不做详细介绍。

Howard and Ruder (2018)的论文 Universal Language Model Fine-tuning for Text Classification,提出了使用迁移学习来进行文本分类的方法,并取得了良好的效果。其基本做法是:首先在一个非常大的数据集上(和任务不相关)训练一个语言模型,接着利用任务数据集对该模型进行微调,然后利用该模型在分类任务中进行进一步训练,得到最终结果。迁移学习的引入极大地提高了准确性,成为后来一系列复杂模型的基本处理方法。

3. GPT, Bert, GPT2

GPT, Bert, GPT2等一众模型继承了上文提到的(ULMT)采取的迁移学习的思路。GPT使用了单向结构来对单词进行表示,基本模型为Transformer中的Decoder部分。Bert则使用了双向结构,基本模型为Transformer中的Encoder部分。Bert的训练效果由于GPT。GPT2模型和GPT基本一致,不过有更多的参数,同时在更大的训练集中进行训练,取得了比Bert更优的结果。
最后对语义环境词嵌入各个模型的比较如下:
在这里插入图片描述

这篇关于自然语言处理学习——CS224课程笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579961

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识