Una breve introducción a la PNL de inteligencia artificial

Equipo técnico de Zhengcaiyun.png

Jin Chen.png

1. Concepto

NLP [Procesamiento del lenguaje natural] se denomina procesamiento del lenguaje natural. El lenguaje natural se entiende como algunos datos de texto no estructurados, incluidos los datos de texto en varios países, como el chino y el inglés. El NLP necesita convertir y procesar una serie de datos para que la máquina pueda comprender el lenguaje natural.

Las funciones básicas se muestran en la figura:

2. Generar fondo

En la actualidad es familiar la aplicación de la inteligencia artificial en diversos campos, pero en la actualidad las aplicaciones más extensas se distribuyen principalmente en el campo de las imágenes, las empresas, escuelas y diversas instituciones tienen sus propios datos masivos, pero estos datos no se limitan a datos de imagen. , pero más de algunos datos de texto;

En términos de la cantidad de datos en sí, quizás la mayor cantidad de datos en la actualidad deberían ser las vastas páginas web en Internet, y la utilización de estas vastas páginas web aún es relativamente superficial en esta etapa. Estas páginas web todavía tienen un gran valor para que las exploren los gigantes de Internet como Google y Baidu, y casi todas las páginas web tienen una cierta cantidad de contenido de texto.El contenido está en lenguaje natural. Entonces, el valor de investigación del procesamiento del lenguaje natural es bastante obvio. Si desea extraer en profundidad el valor de las páginas web, debe tener buenos métodos de procesamiento del lenguaje natural.

3. Una breve historia del desarrollo

la etapa uno

1) uno caliente

Concepto: codificar todas las palabras que aparecen en el corpus en un vector, la longitud del vector es el tamaño del diccionario, hay uno y solo un bit en el vector es 1, el resto son 0 y la posición de 1 representa el vector de palabra correspondiente.

Ejemplo:

Número total de un diccionario: {"Juan": 1, "me gusta": 2, "a": 3, "ver": 4, "películas": 5, "también": 6, "fútbol": 7, " juegos”: 8, “Mary”: 9, “también”: 10}

La representación one-hot de una palabra:

Juan: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Me gusta: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

también: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

Las palabras restantes se representan de manera similar.

  • ventaja:
  1. Resuelve el problema de que el clasificador no es bueno para manejar datos discretos.

  2. Hasta cierto punto, también desempeña el papel de funciones de expansión.

  • defecto:
  1. No se considera el orden entre palabras (la información del orden de las palabras en el texto también es muy importante)

  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 定时任务

雪花算法详解

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

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

招贤纳士

El equipo técnico de Zhengcaiyun (Zero), un equipo lleno de pasión, creatividad y ejecución, la Base se encuentra en la pintoresca Hangzhou. El equipo cuenta actualmente con más de 300 socios de I+D, incluidos soldados "veteranos" de Ali, Huawei y NetEase, así como recién llegados de la Universidad de Zhejiang, la Universidad de Ciencia y Tecnología de China, la Universidad de Hangdian y otras escuelas. Además del desarrollo comercial diario, el equipo también lleva a cabo exploración técnica y práctica en los campos de la nube nativa, blockchain, inteligencia artificial, plataforma de código bajo, middleware, big data, sistema de materiales, plataforma de ingeniería, experiencia de rendimiento, visualización, etc. Y aterrizó una serie de productos de tecnología interna y continuó explorando nuevos límites de tecnología. Además, el equipo también se ha dedicado a la creación de comunidades. Actualmente, son colaboradores de muchas comunidades excelentes de código abierto, como google flutter, scikit-learn, Apache Dubbo, Apache Rocketmq, Apache Pulsar, CNCF Dapr, Apache DolphinScheduler, alibaba Seata , etc. Si quieres cambiar, te han tirado con cosas, y quieres empezar a tirar cosas; si quieres cambiar, te han dicho que necesitas más ideas, pero no puedes romper el juego; si quieres cambiar, tienes la capacidad de hacer eso, pero no te necesitas, si quieres cambiar lo que quieres hacer, necesitas un equipo que lo apoye, pero no hay lugar para que lideres a la gente; si quieres cambiar, tienes un buen entendimiento, pero siempre existe esa capa de papel borroso... Si crees en el poder de la creencia, creo que la gente común puede lograr cosas extraordinarias, y creo que pueden cumplir un yo mejor Si desea participar en el proceso de despegue a medida que despega el negocio y promover personalmente el crecimiento de un equipo técnico con un conocimiento profundo del negocio, un sistema técnico sólido, tecnología que crea valor e influencia indirecta, creo que deberíamos hablar. En cualquier momento, esperando que escribas algo, envíalo a  [email protected]

Cuenta pública de WeChat

El artículo se publica simultáneamente, la cuenta pública del equipo técnico de Zhengcaiyun, bienvenido a prestar atención.

政采云技术团队.png

Supongo que te gusta

Origin juejin.im/post/7116672966984728589
Recomendado
Clasificación