人工智能 NLP 简述

政采云技术团队.png

瑾辰.png

一.概念

NLP【Natural Language Processing】全称为自然语言处理,自然语言理解为一些非结构化文本数据,包括中文,英文等各种国家的文本形式数据,NLP 需对一系列的数据进行转换、处理,使得机器等够理解自然语言。

基本功能如图所示:

二.产生背景

目前人工智能在各个领域的应用已是耳熟能详,但是目前来说最为广泛的应用主要分布在图像领域,公司,学校,各种机关都有各自海量的数据,但是这种数据并不局限于图像数据,更多的反而是一些文本数据;

从数据量本身来说,或许目前最大的数据量应该是互联网上茫茫多的网页,现阶段对这些茫茫多的网页的利用度还是比较浅的。这些网页对包括 Google、百度等互联网巨头来说还有很大的价值需要去挖掘,而几乎每个网页都有一定量的文本内容,绝大部分网页完全靠文本来展现其核心内容,而这些文本内容都是自然语言。那么自然语言处理的研究价值就相当明显了,想要深度去挖掘网页的价值,就必须有好的自然语言处理手段。

三.发展简史

阶段一

1)one-hot

概念:对语料库中所有出现过的字编码成向量,向量的长度为字典的大小,向量中有且只有一位是1,其余的都是 0,1 的位置代表对应的字向量。

举例:

一个字典的总数:{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10}

词的 one-hot 表示:

John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

剩余词的表示类似。

  • 优点:
  1. 解决了分类器不好处理离散数据的问题。

  2. 在一定程度上也起到了扩充特征的作用。

  • 缺点:
  1. 不考虑 词与词之间的顺序(文本中词的顺序信息也是很重要的)

  2. 它假设词与词相互独立(在大多数情况下,词与词是相互影响的)

  3. 简单粗暴,未考虑词频与词间关系

  4. 它得到的特征是离散稀疏的 (这个问题最严重)

2)bag-of-words

概念:词袋模式,即在 one-hot 编码的基础上针对句子进行编码,将一句话中的所有 one-hot 编码相加得到句子的向量表示

举例:

假设需要对句子编码:List item John likes to watch movies. Mary likes too

字典总数:

{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5,“also”: 6,“football”: 7, “games”: 8, “Mary”: 9, “too”: 10, “List”: 11, "item":12, }

根据字典对每一个字进行 one-hot 编码,在将 one-hot 编码相加:

[1, 2, 1, 1, 1, 0, 0, 0, 1, 1],当前向量完成对句子的表示

  • 特点:
  1. 带词频统计的数字表示词在句子中出现的次数,则频率高的词有着更高的重要度,但是出现多次的词并不一定是更重要的词

  2. 词袋模型很难知道这个词是否重要

  3. 然而某些情况下,词频与其关键度并不是正相关

小结:

词袋模式在一定程度上完成了对句子的向量表示,但词袋模型基于 one-hot 编码,所以对于句子的表示仍然较为稀疏;另一方面,词袋模式的表示仅对词频进行了统计,而一个句子的表示中,尤其是中文句子,一个句子的表述会存在很多 “的” “了” 等词,而这些词对句子本身的表达意思相关性较低,甚至没有作用,导致句子向量。

3)TF-IDF

全称 Term Frequency-Inverse Document Frequency【词频逆文档频率】,是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术,是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度,字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降

通过 TF-IDF 就可以在解决上述词袋模式产生的问题,可以去除一些“的”,“了”等无关词造成的影响。

基于统计的方法,会需要有一些基础的语料,比如可以准备一些基础的阅读文章,作为基础语料,并统计其中的概率分布。

具体的计算过程如下:

词频(TF)= 某个词在文章中出现的次数/文章的总次数

或者 词频(TF)=某个词在文章中出现的次数/该文章出现最多的词出现的次数

逆文档频率(IDF)= log(语料库的文档数/(包含该词的文档数+1))

从中可以看出,如果一个词出现的越多,那么分母就越大,IDF 就越接近于 0,以此来消除上述词袋模式产生的问题。 最终:

TF - IDF = TF * IDF

小结:

从算式中可以看到,TF-IDF 与一个词在文中出现的频率成正比,又与该词在所有文档中出现的次数成反比。

4)n-gram

N-Gram 是一种基于统计语言模型的算法,它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。

第 N 个词的出现只与前面 N-1 个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积 。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到。

常用的是二元的 Bi-Gram 和三元的 Tri-Gram

举例:

以最为常见的 2-gram 为例,即一个词的出现只和其前面的一个字相关;由于 n-gram 是基于统计的方法,所以需要一个语料库【corpus】,一下列举语料库如下:

1,你说谢谢他

2,他今天作业很

3,政采云主要做政府采购业务

4,政采云还做企业采购的业务

用上面的语料,来计算“业”之后是“务”的概率,可写成 P(务|业),当前为一个条件概率:

P(务|业) = “业务”出现的次数/“业”出现的次数 = 2/3 = 0.667

这是因为“业”出现之后出现“很”的概率是1/3,而出现“务”的概率是2/3,其中2/3>1/3,所以“业务”一个词的概率会大一些。

小结:

n-gram 可以在前期算法的演变中,逐渐引入了词之间的相关性,但也只是表征的相关性,并不存在语义的相关性;并且无法在语义上将词或者句子向量化。

阶段二

1)word2vec

2013年,Tomas Mikolov 连放几篇划时代的论文,其中最为重要的是两篇,《Efficient estimation of word representations in vector space》首次提出了 CBOW 和 Skip-gram 模型;word2vec 的出现,极大的促进了 NLP 的发展,尤其是促进了深度学习在 NLP 中的应用(不过有意思的是,word2vec 算法本身其实并不是一个深度模型,它只有两层全连接)。

利用预训练好的词向量来初始化网络结构的第一层几乎已经成了标配,尤其是在只有少量监督数据的情况下,如果不拿预训练的 embedding 初始化第一层,几乎可以被认为是在蛮干。

虽然咿咿呀呀囫囵吞枣似的刚开始能够说得三两个词,然而这是 “NLP 的一小步“,人类 AI 的一大步。

我们的最终目的是想将一个语言表达表示为一个数值化的向量表示,例如最开始所说的 one-hot 编码,但是 word2vec 则是另一种编码方式,采用三层神经网络训练模型,再进行编码。

我们需要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入(word embedding) 的一种。

  • 如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』
  • 而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』

基本原理:word2vec 首先将各个字以 one-hot 编码作为初始向量,作为输出,然后将初始向量输入到模型中,再大量样本的训练基础上,保存模型的权重,当新的词向量作为输出时,根据权重可得到一个降维之后的稀疏程度较低的向量表示,即为 word2vec 得到的词嵌入。

  • 假设全世界所有的词语总共有 V 个,这 V 个词语有自己的先后顺序,

  • 假设『吴彦祖』这个词是第 1 个词,『我』这个单词是第 2 个词,那么『吴彦祖』就可以表示为一个 V 维全零向量

  • 把第 1 个位置的 0 变成 1 ,而『我』同样表示为 V 维全零向量

  • 把第 2 个位置的 0 变成 1。

  • 这样,每个词语都可以找到属于自己的唯一表示。

x通过神经网络的传递,只有 1 所在位置的权重将被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 vx 来表示 x,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 vx 就可以用来唯一表示 x,y 是在这 V 个词上输出的概率,我们希望跟真实的 y 的 one-hot encoder 一样,通过反向传播完成对神经网络的训练。

skip-gram 的训练方式如下:即通过单个词来预测向上下文,完成模型训练。

CBOW 的训练方式如下:根据上下文预测中间词,完成模型训练。

小结:

通俗理解 skip-gram 和 CBOW 的区别。

  • skip-gram 里面,每个词在作为中心词的时候,实际上是 1 个学生 VS K 个老师,K 个老师(周围词)都会对学生(中心词)进行“专业”的训练,这样学生(中心词)的“能力”(向量结果)相对就会扎实(准确)一些,但是这样肯定会使用更长的时间;

  • cbow 是 1 个老师 VS K 个学生,K 个学生(周围词)都会从老师(中心词)那里学习知识,但是老师(中心词)是一视同仁的,教给大家的一样的知识。至于你学到了多少,还要看下一轮(假如还在窗口内),或者以后的某一轮,你还有机会加入老师的课堂当中(再次出现作为周围词),跟着大家一起学习,然后进步一点。因此相对 skip-gram,你的业务能力肯定没有人家强,但是对于整个训练营(训练过程)来说,这样肯定效率高,速度更快。

阶段三

1)ELMO

2018 年的早些时候,AllenNLP 的 Matthew E. Peters 等人在论文《Deep contextualized word representations》(该论文同时被 ICLR 和 NAACL 接受,并且还获得了 NAACL 最佳论文奖,可见这篇论文的含金量)中首次提出了 ELMo,它的全称是 Embeddings from Language Models,从名称上可以看出,ELMo 为了利用无标记数据,使用了语言模型。 模型结构如下图:

其中 x1 首先采用 word2vec 完成嵌入,作为输入,再训练模型,进一步优化词嵌入。

特点:

  • A forward LM + A backward LM
  • 采用 bi-lstm

优点:

  • 解决了一词多义问题
  • 可以根据预训练模型向不同的下游任务进行 Fine-tuning

缺点:

  • 非真正意义上的双向:两个方向的 RNN 是分开训练的,最后的 output 层是简单的相加,导致对各个方向的单词来说在其 encoding 时是看不到另一侧单词的,而显然句子中有的单词的语义会同时依赖于它左右两侧的某些词,仅仅从单方向做 encoding 是不能描述清楚的。
  • 采用传统的 lstm 来提取特征,表达能力与训练速度均弱于后来的 Transformer
  • ELMo 预训练的语言模型结构和下游的 NLP 任务的模型经常会不一致,因此在做迁移学习时经常没法将两者的模型直接进行融合。

2)GPT

大规模语料集上的预训练语言模型这把火被点燃后,整个业界都在惊呼,原来预训练的语言模型远不止十年前 Bengio 和五年前 Mikolov 只为了得到一个词向量的威力。

然而,当大家还在惊呼,没过几个月,很快在 2018 年 6 月的时候,不再属于“钢铁侠”马斯克的 OpenAI,发了一个大新闻(相关论文是《Improving Language Understanding by Generative Pre-Training》),往这把火势正猛的烈焰上加了一剂猛料,从而将这把火推向了一个新的高潮。

目前 GPT 经过优化存在 GPT1,2,3,其中最大的不同点是训练数据量级的提升,再模型结构上的变化并不大,基本结构如下图:

GPT 系列从 1 到 3,通通采用的是 transformer 架构【采用 decoder 模块】,可以说模型结构并没有创新性的设计。

在微软的资金支持下,这更像是一场赤裸裸的炫富:1750 亿的参数,31 个分工明确的作者,超强算力的计算机,1200 万的训练费用,45TB 的训练数据(维基百科的全部数据只相当于其中的);

GPT-3 对 AI 领域的影响无疑是深远的,如此强大性能的语言模型的提出,为下游各种类型的 NLP 任务提供了非常优秀的词向量模型,在此基础上必将落地更多有趣的 AI 应用,例如文章生成,代码生成,机器翻译,Q&A 等。

近年来,硬件的性能在飞速发展,而算法的研究似乎遇见了瓶颈,GPT-3 给冷清的 AI 领域注入了一剂强心剂,告诉各大硬件厂商它们的工作还要加油,只要算力足够强,AI 的性能还有不断提升的上界。

GPT-3 还有很多缺点的:

  • 对于一些命题没有意义的问题,GPT-3 不会判断命题有效与否,而是拟合一个没有意义的答案出来;
  • 由于 40TB 海量数据的存在,很难保证 GPT-3 生成的文章不包含一些非常敏感的内容,例如种族歧视,性别歧视,宗教偏见等;
  • 受限于 transformer 的建模能力,GPT-3 并不能保证生成的一篇长文章或者一本书籍的连贯性,存在下文不停重复上文的问题。

3)BERT

2018年的10月11日,这似乎是个绝对平凡的日子( OpenAI 在其博客中放出 GPT 工作的时间恰好不多不少是 4 个整月前,即2018年6月11日),然而 Google AI 的 Jacob Devlin 和他的合作者们悄悄地在 arxiv 上放上了他们的最新文章,名为《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,随后先是在 Twitter 上引发了一波浪潮。

同样是 Google AI 团队的 Thang Luong 在其 Twitter 上直言这项工作是一个划时代的工作(原话 “A new era of NLP has just begun a few days ago.”)

BERT 和 GPT,ELMO 的结构对比如下:

主要特点:

  • 采用 Tansformer encoder 单元
  • MaskLM
  • Next Sentence Prediction 构造句子级的分类任务【目前也有一些研究表明 NSP 对模型的优化没有作用】

BERT 以 transfomer 以特征提取器,并结合上下文,解析句子语义级关系,实现多种下游任务,文本分类,智能问答,实体识别,词性标注等,同时对比 GPT 和 ELMO 具有较好的效果。 原文作者在不同的基础上对比不同方法的效果:

优点:

  • Transformer Encoder 因为有 Self-attention 机制,因此 BERT 自带双向功能
  • 因为双向功能以及多层 Self-attention 机制的影响,使得 BERT 必须使用 Cloze 版的语言模型 Masked-LM 来完成 token 级别的预训练
  • 为了获取比词更高级别的句子级别的语义表征,BERT 加入了 Next Sentence Prediction来和 Masked-LM 一起做联合训练
  • 为了适配多任务下的迁移学习,BERT 设计了更通用的输入层和输出层
  • 微调成本小

缺点:

  • task1 的随机遮挡策略略显粗犷,推荐阅读《Data Nosing As Smoothing In Neural Network Language Models》
  • [MASK] 标记在实际预测中不会出现,训练时用过多 [MASK] 影响模型表现;
  • 每个 batch 只有 15% 的 token 被预测,所以 BERT 收敛得比 left-to-right 模型要慢(它们会预测每个 token)
  • BERT 对硬件资源的消耗巨大(大模型需要16个 tpu,历时四天;更大的模型需要64个 tpu,历时四天。

针对不同的下游任务,现阶段也出现了大量在 BERT 基础上优化的模型:较为轻量的模型 AlBERT,结合知识图谱的 K-BERT,RoBERT 等。

针对 BERT 的内部语义解析,也可以看出 BERT 双向的意义,下图中 The 和 cat 的具有较强的关系【图中,两个词的连线越深,说明关系越密切】

以上就是本文主要内容,如有问题,欢迎指正!

推荐阅读

浅析 ElasticJob-Lite 3.x 定时任务

雪花算法详解

基于流量域的数据全链路治理

一次接口响应时间过长的性能分析及排查过程

招贤纳士

政采云技术团队(Zero),一个富有激情、创造力和执行力的团队,Base 在风景如画的杭州。团队现有300多名研发小伙伴,既有来自阿里、华为、网易的“老”兵,也有来自浙大、中科大、杭电等校的新人。团队在日常业务开发之外,还分别在云原生、区块链、人工智能、低代码平台、中间件、大数据、物料体系、工程平台、性能体验、可视化等领域进行技术探索和实践,推动并落地了一系列的内部技术产品,持续探索技术的新边界。此外,团队还纷纷投身社区建设,目前已经是 google flutter、scikit-learn、Apache Dubbo、Apache Rocketmq、Apache Pulsar、CNCF Dapr、Apache DolphinScheduler、alibaba Seata 等众多优秀开源社区的贡献者。如果你想改变一直被事折腾,希望开始折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊……如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的技术团队的成长过程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 zcy-tc@cai-inc.com

微信公众号

文章同步发布,政采云技术团队公众号,欢迎关注

政采云技术团队.png