自然语言处理(NLP)
15年的 Advances in Natural Language Processing 综述详细介绍了NLP的迭代
NLP的任务:
1、进行词性标注(Part of speech)
2、命名实体识别(Named entity recognition):识别出特定的人名、日期、地点等
3、共指消解(Co-reference):代词与上文出现的事物进行替代识别
4、基本依赖关系(Basic dependenxies):主谓宾等关系
完成这些完任务后,我们可以将NLP应用到不同的领域,如搜索引擎上。
以下是自然语言处理所所能做的事:
结构化的知识(Structural Knoeledge):
如何从文本中抽取知识,从而理解文本中的关键信息,比如三元组来表示两个实体间的关系
知识图谱(Knowledge Graph):
将丰富多彩的知识以结构化和可连接的方式呈现,让计算机能容易理解、查询和推理这些知识。
机器阅读(Machine Reading)能够从文本中提取出结构化知识,结构化知识能够扩大和更新知识图谱
词表示(Word Representation)
能够将词符号转换为机器可理解的意思
目标:
1.能够计算词之间的相似性,motel与hotel
2.能够推断词之间的关系,China;Beijing与Japan ; Tokyo
同义词或上位词的一些问题:忽略同义词之间的细微差别;忽略了新词的意思;主观因素;数据吸收;需要大量的人工维护词表
方法:
1、首先提出的是唯热编码(One-Hot),它对于文档编码是有效的,可以唯一标识一个文档中几百个词,但
缺点是一些有相近意思的词之间的相似度会均为0,因为编码的唯一性,各个向量之间是两两正交的。
2、为了解决以上问题,提出了上下文表示(Contextual representation),利用这个词其上下文出现的词的出现频率或重要性进行编码,利用这个稠密向量算出两个词之间的相似度。
缺点是当随着词表中单词数目的增多,导致需要大量的存储空间,且对于出现频率较低的词,其上下文的词也很少导致模型的效果不好
3、解决以上问题,深度学习或大模型采用的是单词嵌入(Word Embedding)的方式,是一种分布表示(Distributed Representation)的方法,具体为:为每个单词构建一个稠密向量(dense vector),这个稠密向量是从大范围的语料库中学习的,学习方法代表作为Word2Vec,后面会进行介绍。
语言模型(Language Model)
它是一个预测即将到来的词的任务
他是一个在一个单词序列上的概率分布
目标:
1、计算一个单词序列的联合概率分布(一系列单词序列能够构成句子的概率)
2、计算即将出现单词出现的概率
对第一点的理解:
为什么计算一系列单词组成句子的概率是求它的联合概率分布?
因为一个句子的构建是一个序列生成的过程
假设我们有一系列单词 w_1, w_2, w_3, ..., w_n,它们组成一个句子。句子的生成过程可以看作是逐个生成单词的过程,每个单词的生成都依赖于前面已生成的单词。
根据条件概率的定义,一个句子的概率可以表示为:
P(w_1, w_2, w_3, ..., w_n) = P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1, w_2) \cdot ... \cdot P(w_n|w_1, w_2, w_3, ..., w_{n-1})
其中,P(w_i|w_1, w_2, w_3, ..., w_{i-1})表示在已知前面所有单词的情况下,生成第 i 个单词的条件概率;\cdot为概率论中的乘法运算。
由此我们得到语言概率的公式:
方法:
1.N-gram Model:
经典的方法,是基于统计的,其中 n-gram 表示一个文本系列中的连续n个项的集合。该模型的原理是:统计这个n个项集合出现的频率,并使用这一频度预测接下来的词。注意:这里只考虑带上要预测的单词后的n个词集合,他是基于马尔可夫的猜想的,例如:
4-gram :
, 其中的never 就没再考虑了。
count() 就是表示我们在大规模的语料库里对()中n个单词组成的句子出现频度的统计量
缺点:
1.需要存储所有出现的 n-grams 情况,因此模型的大小为 O(exp(n))
2.n 越大,统计的频度越稀疏,因此 n 一般取1 or 2
2. Neural Language Model:
是基于deeping learning的,首先将这n个单词,第n 个为要预测的,前n-1 个各单词利用 distributed representation 方法得到各单词的低维上下文向量,再将各个低维向量拼接在一起形成一个高维上下文向量,由非线性函数 tanh 等许多操作得到最终向量并用来预测第n 个单词
大模型基础
为什么大模型或大规模预训练模型很重要?
首先阐述一下两者的异同点:大模型和大规模预训练模型大致可以看作是相关的概念,但大模型通常是指具有大量参数的神经网络模型,可达数十亿到数百亿;而大规模预训练模型是指在大规模无监督数据上进行预训练的模型,通过阅读大量文本或图像提取特征。
性能强、准确率高、不需要或仅需要少量的样本就能从文本或图像中学习到知识(与经典深度学习的有监督训练是不同的)等
大模型背后的范式:
预训练语言模型一个核心的要素是可以从无标注的数据中进行学习,通过自监督的任务进行预训练,得到丰富的知识。
预训练-微调范式是:
首先通过大量的无标记数据训练出一个预训练模型,这个预训练模型只是对于一些通用知识的学习,再将特定任务训练数据加入预训练模型中来调整这个预训练模型,将与任务不相关的数据刨除,训练出适用于具体任务的模型,最终得到最终的模型。这就是一种预训练-微调范式。
这种范式可以追溯到迁移学习
神经网络基础
对于输出层:
二分类问题用sigmoid 函数作用后的结果作为输出,如对于Linear output 的 y ,我们用sigmoid函数得到新的y = sigmoid(y),得到的结果是 y 为一种类别的概率,1 - y为另一种类别的概率;
多分类则用 softmax 函数作为输出 ,得到的各个结果即为不同类别的概率。
对于训练目标:
1.平均平方损失(Mean Squared Error)函数:适用于回归问题,所谓回归问题就是给计算机读入一系列的属性值,计算机由这些属性值预测出一个具体的值,此时就用到MSE,我们的训练目标就是使MSE最小。MSE 可作为损失函数LOSS。
2.交叉熵损失(Cross-entropy)函数:适用于分类预测问题,公式为: