AI遮天传 DL-深度学习在自然语言中的应用

简介: AI遮天传 DL-深度学习在自然语言中的应用

一、典型任务

  • 词性标注和句法分析
  • 问答和对话系统
  • 文本/文档分类
  • 情感分析和观点挖掘
  • 机器翻译
  • 文本生成
  • ......

1.1 词性标注和句法分析

词性(POS)标注即对句子里的每个词给出它的词性如名词、动词等:

句法分析即分析其主、谓、宾等结构:

1.2 问答和对话系统

用户问出一个问题,对话系统能够做出回答,这便是该系统主要关注的任务。

左边是简单的一问一答的形式,而后面则是有前后呼应的对话。

1.3 文本/文档分类

比如情感分类,积极、消极、中性的:

文档分类处理的对象会长一些,不是简单的几句话,而是一整片文章或是几页:

1.4 机器翻译

机器翻译顾名思义就是把一种语言翻译成另外一种语言。

1.5 其它

NLP的应用还有很多,比如对联、古诗生成~

couplet.msra.cn

九歌——人工智能诗歌写作系统 (thunlp.org)

二、词表示

2.1 词表示

自然语言处理的最基本的对象就是,词构成句子,句子构成段落,段落构成文章。

那么我们如何来表示一个词呢?大家最先能想到的就是以one-hot的形式,如:

但是这样,维度、词汇表的大小|V| 可能是数百万。且如词与词之间意思相近或者意思没什么关系又无法表述:dist(“kid”, “child”) 、dist(“flower”, “car”)

  • 维度太高
  • 没有表达词之间的关系

动机:用一个词的邻居来表示这个词 “You shall know a word by the company it keeps”

我们可以看到上面两句话都和词“banking”有关,我们就可以用它周围的这些词,即这段话里的词来表示“banking”的含义。

如何去表示呢?

在深度学习兴起之前,人们的一个典型的想法是用共现矩阵去表示。

2.1.1 基于窗口的共现矩阵

以下面示例语料集为例

  • 我们选定一个窗口,为方便起见我们选定窗口长度为1(通常是5-10)。
  • 这个窗口的作用是来选的某个词左边1个词和右边1个词出现的频率。

上面语料集一共出现7个词,所以矩阵是7*7的。


以like这行为例,可以看到它左右距离为1的窗口出现单词I有两次,deep一次,NLP一次,其它都为0次。


但是,这种共现矩阵的表示法,依然是有多少个词,向量的长度就是多少,依然不那么"经济实惠",但是相比于独热编码,它没有那么稀疏了(但还是比较稀疏)。

  • 维度太高
  • 表示稀疏使模型不够鲁棒
  • 在词汇表中添加一个单词时需要重新计算所有单词的表示形式

2.1.2 用低维向量表示单词

目标: 以固定的、低维度的向量存储“大多数”重要信息(密集向量):


通常约25-1000维

基于这种表示,很容易来执行任务(分类,生成等)

方法:


神经概率语言模型

Bengio et al., A neural probabilistic language model. Journal of  Machine Learning Research, 2003.

最近更简单更快的模型: word2vec (继承自神经概率语言模型)

Mikolov et al., Distributed representations of words and phrases and  their compositionality, NeurIPS 2013神经概率语言模型的影响

2.2 word2vec的主要思想

2.2.1 思想介绍

核心思想:不统计词的共现数,而是预测每个词周围的词。

如图,输入一个词(one-hot编码),中间做一个神经网络的隐层,这个隐层很简单,没有非线性(没有激活函数,即线性映射)。最后做出输出(每个输出也是one-hot),预测t-2, t-1, t+1, t+2时刻的词(和窗口大小有关)。

  • |V|大概上万维-百万维
  • d大有50~1000,即先高维映射到低维,然后再映射回高维。

第一步:词wt乘以权重C得到vwt ,其实就是得到了C的那一列。

第二步,vwt 与 K  相乘,又得到回一个V维的向量,这个一列向量的每一行都表示和K这一行(这个词)在这个时刻(举例)的相似性(得分)。再经过一个softmax把结果压在0-1之间,根据结果大小如,投影为 t-2 位置的词。

  • C的每一列对应一个词:“输入向量”
  • K的每一行对应一个词:“输出向量”

注意:

  • 需要预定义C的列与语料库中词之间的对应关系
  • 必须再K中使用同顺序的行。

经过学习后,C的第i列与K的第i行可以平均来表示第i个词。

图示如下:

以当前词为France为例:

经过投影后,我们得到France这个词的输入向量"France",与K相乘得到一个高维的实数向量,经过softmax得到0-1之间某时刻的输出向量。


在t-2时刻,我们还有一个标准答案"captial"对应的独热编码,这也说明K的最后一行表示captial。


同样,其它词如of应该是t-1时刻的,那么K的对应of的那一行(对应的输出向量)在该时刻也应该与输入向量France相似,才能得到of.

2.3 训练方式

目标: 给定一个输入词,最大化周围词的概率

2.3.1 skip-gram模型

skip-gram模型:用当前词预测周围词的概率

以t-1时刻的词为例,来最大化这个词的概率。

处于位置 t+j ( j = -2,-1,1,2 )的词, 的概率为:

训练过程中,作为希望输出的词 的交叉熵损失为:

2.3.2 目标函数

  • 我们在窗口的其他位置有同样的要求。对所有位置的损失求和

       其中c是窗口大小, 表示所有参数

  • 在所有给定输入 上求平均

  • 相当于最大化平均对数概率
  • 用反向传播算法和SGD训练模型

2.3.3 softmax的替代方法

在窗口的每一个位置,softmax的输出为

其中

这种方法的问题在于:归一化项的计算耗时长。

替代方法:

  • 层次化softmax
  • 负采样

2.4 结果

可以看到下面一些有意思的现象:

国家都在左边,首都都在右边,且举例相似,也都基本平行。

向量German和向量airlines相加,得到的结果和他们的航空公交公司很像...

如何表示一个句子或一个段落?

三、神经网络进行文本分类

在我们获得每个词的词向量后,如何表示一个句子或一个段落?

3.1 CNN进行文本分类

答:我们把这些词向量按照一定的顺序拼接起来,得到一个二维矩阵,这个二维矩阵就可以是一个句子/段落新的表示。之后对句子/段落进行分类,其实就是对二维矩阵进行分类。我们此时就可以用以前那些处理图像的方法来处理这些二维矩阵了。

卷积核kernel的宽度和词向量的宽度都是K,所以卷积后得到一个向量而不是一个矩阵。

再对每个句子上进行MaxPooling,每次MaxPooling都会得到一个数,有几个kernel就会有几个元素。

最后就可以做一个全连接网络进行句子分类。

3.1.1 这个模型有什么问题?

深度不够

  • 一层卷积和一层池化

特征不够多样化

  • 每个卷积核会产生一个1维的特征图,即一个特征向量
  • 在一个特征向量上应用全局最大池化,即对所有时间做最大池化,这会产生一个标量。

3.1.2 一个更深的模型

  • 确定到底要多长的句子,选择使用动态的K-Maxpooling,使得得到的结果等长。

3.2 RNN进行文本分类

我们上面说到CNN进行文本分类,RNN一般用来处理持续性信息,其实我们用RNN去进行文本分类会更加的自然,也是现在主流的选择。


以Elman网络为例,其中x是每个时刻的输入(每个时刻的词), r最后时刻出现,我们把隐层进行展开...


RNN文章: AI遮天传 DL-反馈神经网络RNN_老师我作业忘带了的博客-CSDN博客


可以使用 LSTM 或者 GRU

可以使用双向 RNN

四、神经网络进行机器翻译

介绍一种很典型的模型,序列到序列的学习模型。

通常会涉及两个RNN: 编码器(encoder)和解码器(decoder)


许多NLP任务可以表述为序列到序列:


机器翻译 (法语 → 英语)

总结 (长文本 → 短文本)

对话 (先前的话语 → 接下来的话语)

代码生成 (自然语言 → Python 代码)

旋律产生 (一个乐句 → 下一个乐句)

语音识别 (声音 → 文本)

4.1 机器翻译 (NMT)

如下:法语-英语

左侧,编码器RNN 产生一个源语句的编码

右侧,解码器RNN生成以编码为条件的目标句子

对于编码器和解码器


对于编码器,可以使用预训练词向量,例如word2vec ,或者one-hot形式词向量

对于解码器,使用one-hot形式表示输出

编码器和解码器的字典


对于一些任务,例如,机器翻译,它们是不同的

对于其他任务,例如,总结和对话任务,它们是相同的

编码RNN和解码RNN通常是不同的,也可以使用深度RNN。

4.2 训练 NMT 系统

首先我们要有很多的语料集,法语->英语,法语->英语,法语->英语,...,法语->英语


把法语输入给Encoder RNN,英语输入给Decoder RNN


每个时间都会输出一个单词,使用交叉熵函数计算,把所时刻的交叉熵计算结果加起来,取个平均得到J,最小化这个J,反向传播(多个单词 就有多个loss),调整Encoder RNN 和 Decoder RNN里面的参数。

模型问题

上图画圈处的地方,是Decoder的唯一输入,我们期望Encoder在这个时候的状态包含了之前的原语句的所有信息。但是只用这一个向量来表示这个句子的所有信息,对它的要求是不是有点高了?

解决办法注意力机制

注意力机制提供了一个解决瓶颈问题的方法

4.3 注意力机制(Attention)

核心思想: 解码器的每一步中,关注于源序列的特定部分。

当前我要输出某个词的时候, 我们就去原序列集中注意去找哪些词和它的关系最强。

注意力机制有很多形式 ,下面将展示一个例子:

4.3.1 带有Attention的Seq2seq

我们从第一个时刻出发,要预测第一个时刻的输出,把Decoder里隐层的向量与Encoder隐层的向量进行点积,每个地方得到一个标量,标量有大有小,有的可能超过1,有的可能是负数:

此时做一个softmax转换到0-1之间,表示Encoder里每一个向量与Decoder当前向量的距离/相似度。

可见Decoder里第一个词与Encoder里第一个词很相似。

我们把softmax后的这些结果(相当于权重)与Encoder里的向量相乘,进行加权求和:

在加权求和结果里,第一个向量的成分/比例是最大的。

将加权求和之后的结果Attention与当前时刻的Decoder时刻的隐层状态把他俩拼起来,经过一个softmax去预测当前时刻应该输出什么:

同样,下一时刻也是如此:

对应公式:

五、主要参考文献及延伸阅读

Kim (2014) Convolutional neural networks for sentence classification arXiv preprint arXiv:1408.5882

Bengio, Ducharme, Vincent, Jauvin (2003) A neural probabilistic language model  Journal of Machine Learning Research

Mikolov, et al.  (2013) Distributed representations of words and phrases and their  compositionality NeurIPS

Sutskever, Vinyals, Le (2014) Sequence to Sequence Learning with Neural Networks NeurIPS

Vaswani, Shazeer, Parmar, et al. (2017) Attention Is All You Need NeurIPS

Devlin, Chang, Lee, Toutanova (2019) BERT: Pre-training of Deep Bidirectional Transformers for Language  Understanding NAACL


相关文章
|
8月前
|
人工智能 自然语言处理 安全
ChatBI,用AI自然语言与数据对话
在数字经济快速发展的2025年,企业数据量激增,市场对快速决策和深度分析提出更高要求。本方案介绍如何通过阿里云Quick BI工具,结合AI能力,帮助商业分析师高效应对数据洪流,实现智能化分析、快速决策,提升业务洞察力与决策效率。
ChatBI,用AI自然语言与数据对话
|
10月前
|
机器学习/深度学习 人工智能 供应链
从概念到商业价值:AI、机器学习与深度学习全景指南
在这个科技飞速发展的时代🚀,人工智能正以惊人的速度渗透到我们的生活和工作中👀。但面对铺天盖地的AI术语和概念,很多人感到困惑不已😣。"AI"、"机器学习"、"深度学习"和"神经网络"到底有什么区别?它们如何相互关联?如何利用这些技术提升工作效率和创造价值?
535 0
|
8月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
786 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
627 15
|
11月前
|
机器学习/深度学习 编解码 人工智能
计算机视觉五大技术——深度学习在图像处理中的应用
深度学习利用多层神经网络实现人工智能,计算机视觉是其重要应用之一。图像分类通过卷积神经网络(CNN)判断图片类别,如“猫”或“狗”。目标检测不仅识别物体,还确定其位置,R-CNN系列模型逐步优化检测速度与精度。语义分割对图像每个像素分类,FCN开创像素级分类范式,DeepLab等进一步提升细节表现。实例分割结合目标检测与语义分割,Mask R-CNN实现精准实例区分。关键点检测用于人体姿态估计、人脸特征识别等,OpenPose和HRNet等技术推动该领域发展。这些方法在效率与准确性上不断进步,广泛应用于实际场景。
1331 64
计算机视觉五大技术——深度学习在图像处理中的应用
|
人工智能 自然语言处理 数据可视化
AutoAgents:比LangChain更激进的AI开发神器!自然语言生成AI智能体军团,1句话搞定复杂任务
AutoAgents 是基于大型语言模型的自动智能体生成框架,能够根据用户设定的目标自动生成多个专家角色的智能体,通过协作完成复杂任务。支持动态生成智能体、任务规划与执行、多智能体协作等功能。
1759 91
|
11月前
|
人工智能 自然语言处理 API
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题
香港大学推出的AutoAgent框架通过自然语言交互实现零代码创建AI智能体,支持多模型接入与自动化工作流编排,在GAIA基准测试中表现优异。
1476 16
AutoAgent:无需编程!接入DeepSeek用自然语言创建和部署AI智能体!港大开源框架让AI智能体开发变成填空题
|
11月前
|
机器学习/深度学习 人工智能 运维
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
AI“捕风捉影”:深度学习如何让网络事件检测更智能?
437 8
|
11月前
|
人工智能 自然语言处理 测试技术
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
Codex CLI是OpenAI推出的轻量级AI编程智能体,基于自然语言指令帮助开发者高效生成代码、执行文件操作和进行版本控制,支持代码生成、重构、测试及数据库迁移等功能。
2367 0
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动