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

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
图片翻译,图片翻译 100张
简介: 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


相关文章
|
2月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
416 29
|
2月前
|
设计模式 人工智能 自然语言处理
3个月圈粉百万,这个AI应用在海外火了
不知道大家还记不记得,我之前推荐过一个叫 Agnes 的 AI 应用,也是当时在 WAIC 了解到的。
326 1
|
2月前
|
人工智能 缓存 运维
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
本文介绍联调造数场景下的AI应用演进:从单Agent模式到多Agent协同的架构升级。针对复杂指令执行不准、响应慢等问题,通过意图识别、工具引擎、推理执行等多Agent分工协作,结合工程化手段提升准确性与效率,并分享了关键设计思路与实践心得。
418 20
【智造】AI应用实战:6个agent搞定复杂指令和工具膨胀
|
2月前
|
人工智能 安全 数据可视化
Dify让你拖拽式搭建企业级AI应用
Dify是开源大模型应用开发平台,融合BaaS与LLMOps理念,通过可视化工作流、低代码编排和企业级监控,支持多模型接入与RAG知识库,助力企业快速构建安全可控的AI应用,实现从原型到生产的高效落地。
Dify让你拖拽式搭建企业级AI应用
|
2月前
|
自然语言处理 数据挖掘 关系型数据库
ADB AI指标分析在广告营销场景的方案及应用
ADB Analytic Agent助力广告营销智能化,融合异动与归因分析,支持自然语言输入、多源数据对接及场景模板化,实现从数据获取到洞察报告的自动化生成,提升分析效率与精度,推动数据驱动决策。
|
11月前
|
机器学习/深度学习 运维 安全
深度学习在安全事件检测中的应用:守护数字世界的利器
深度学习在安全事件检测中的应用:守护数字世界的利器
414 22
|
8月前
|
机器学习/深度学习 编解码 人工智能
计算机视觉五大技术——深度学习在图像处理中的应用
深度学习利用多层神经网络实现人工智能,计算机视觉是其重要应用之一。图像分类通过卷积神经网络(CNN)判断图片类别,如“猫”或“狗”。目标检测不仅识别物体,还确定其位置,R-CNN系列模型逐步优化检测速度与精度。语义分割对图像每个像素分类,FCN开创像素级分类范式,DeepLab等进一步提升细节表现。实例分割结合目标检测与语义分割,Mask R-CNN实现精准实例区分。关键点检测用于人体姿态估计、人脸特征识别等,OpenPose和HRNet等技术推动该领域发展。这些方法在效率与准确性上不断进步,广泛应用于实际场景。
1050 64
计算机视觉五大技术——深度学习在图像处理中的应用
|
12月前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
977 6
|
10月前
|
机器学习/深度学习 人工智能 运维
深度学习在流量监控中的革命性应用
深度学习在流量监控中的革命性应用
361 40
|
8月前
|
机器学习/深度学习 数据采集 存储
深度学习在DOM解析中的应用:自动识别页面关键内容区块
本文探讨了如何通过深度学习模型优化东方财富吧财经新闻爬虫的性能。针对网络请求、DOM解析与模型推理等瓶颈,采用代理复用、批量推理、多线程并发及模型量化等策略,将单页耗时从5秒优化至2秒,提升60%以上。代码示例涵盖代理配置、TFLite模型加载、批量预测及多线程抓取,确保高效稳定运行,为大规模数据采集提供参考。
189 0