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

news2024/11/25 20:54:45

本文简要介绍一些深度学习在自然语言应用的基本任务,词表示,文本翻译和机器翻译。

一、典型任务

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

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 )的词,w_{k} 的概率为:

训练过程中,作为希望输出的词 w_{t+j} 的交叉熵损失为:

2.3.2 目标函数

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

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

  • 在所有给定输入 w_{1},w_{2},w_{3},...w_{T} 上求平均

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

2.3.3 softmax的替代方法

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

其中 k=1,...,|V|

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

替代方法:

  • 层次化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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF入门第二篇 MVVM与Binding

MVVM与Binding MVVM,即Model-View-ViewModel的首字母缩写,在这种开发模式下常用binding来对View和ViewModel进行绑定。 添加三个文件夹,分别命名为Models、Views、ViewModels。 在Model文件夹中,添加Student类,并将…

Java学到什么程度可以找工作?这10点赶紧自查!

最近收到了不少私信,询问Java学到什么程度可以找工作。 我也去问了几个同组大佬的想法,总结了10点,大家可以对照自查一下,看看你都做到了吗? 基本技能自查 1、Java SE基础 推荐学习Java8,这依旧是个有代表…

【2023最新】腾讯云注册域名及服务器使用宝塔绑定域名教程

1 在腾讯云注册域名 在官网:https://buy.cloud.tencent.com/domain,注册想要的域名,需要认证信息模板 注册好以后,在右上角输入框,输入域名,查找并进入到域名控制台 在域名控制台,添加记录&…

基础算法系列之排序算法(一)[快速排序,归并排序,二分查找]

文章目录前言快速排序关键点实现选角排序重复实现稳定性分析记忆模板归并排序关键点实现二分查找总结前言 先来一波预热,本次寒假将要更新的博文系列为:基础算法部分,最新前言论文研读(不包含论文复现-耗时太长)&…

day21【代码随想录】二叉树的层序遍历、二叉树的层序遍历|| 、二叉树的层平均值 、二叉树的锯齿形层序遍历 、二叉树的右视图 、N叉树的层序遍历

文章目录前言一、二叉树的层序遍历(力扣102)二、二叉树的层序遍历||(力扣107)三、二叉树的层平均值(力扣637)四、二叉树的锯齿形层序遍历(力扣103)五、二叉树的右视图(力…

吃透Chisel语言.39.Chisel实战之单周期RISC-V处理器实现(一)——需求分析和初步设计

Chisel实战之单周期RISC-V处理器实现(一)——需求分析和初步设计 需求分析 首先明确我们要做的是什么,这个在标题里面已经说明了,我们要做的是一个单周期RISC-V处理器。 但光是个短语不足以支撑我们开展项目,我们需…

大数据学习:shell基础(3)

文章目录history命令参数说明任务一:查看历史操作记录任务二:查看最近10条历史命令任务三:查看最开始10条历史命令任务四:曾多少次使用vim编辑文本文件?任务五:执行历史第5条命令任务六:执行上一…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Recurrent Neural NetWork(RNN)

文章目录一、Slot Filling二、Recurrent Neural NetWork(RNN)三、Bidirectional RNN(双向RNN)四、Long Short Term Memory(LSTM)五、Learning Target六、RNN 很难 Train七、Helpful Techniques7.1 LSTM7.2 …

CSDN竞赛14期·12月11日考试

CSDN竞赛14期12月11日考试 1、题目名称:字符串全排列 // 请关闭中文输入法,用英文的字母和标点符号。 // 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮, //…

半入耳式蓝牙耳机哪款音质好?音质好的半入耳式蓝牙耳机推荐

对于喜欢听歌的朋友来讲,你只佛会关注到蓝牙耳机的佩戴舒适度,音质清晰这种情况,入耳式的带有耳塞,往往更加佩戴有更好的密闭性,半入耳的不完全进入耳道,佩戴更加舒适,下面整理了几款音质不错的…

[附源码]Python计算机毕业设计非处方药的查询与推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Prometheus+Grafana监控一网打尽

PrometheusGrafana监控一、Prometheus介绍二、监控组件node-exportermysqld-exportercadvisorprometheus三、Grafana 展示平台docker启动配置Data sources导入Dashboard模板Linux主机监控Mysql监控Nginx监控Redis监控PostgreSQL监控Kafka监控ElasticSearch监控一、Prometheus介…

这四类项目经理一定带不好项目

项目经理就一定可以带好项目嘛?,当然不一定 失败的项目不少,除去一些本身就很坑的项目,大多项目失败,都和项目经理的个性有关。 也总结了2组极端特质: 第一,烂好人VS劳模型 第二,马…

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-059(CVE-2019-0230)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

JavaEE-多线程初阶3

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录volatile关键字wait 和 notify多线程案例单例模式饿汉模式懒汉模式volatile关键字 volatile : 易变的,易失的 vo…

关于实体类中VO、DTO、Entity的区别

关于实体类中VO、DTO、Entity的区别 1、entity 里的每一个字段,与数据库相对应, 2、vo 里的每一个字段,是和你前台 html 页面相对应, 3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。(DTO中拥…

leetcode: 1091. 二进制矩阵中的最短路径

1091. 二进制矩阵中的最短路径 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/shortest-path-in-binary-matrix/description/ 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通…

刚刚接触编程,纠结应该先学Python还是Java?看完心里就有数了。

准备学习编程前,你一定会打开电脑搜索一下“先学Python还是先学Java?”扑面而来的是海量回答。 如果你问一名Java程序员,肯定会建议你先学Java,因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员,可…

MacOS Ventura 13.1 (22C65) 正式版带 OC 0.8.7 and winPE 双分区原版黑苹果镜像

12 月 14 日,苹果向 Mac 电脑用户推送了 macOS 13.1 更新(内部版本号:22C65),本次更新距离上次发布隔了 34 天。本次更新引入了无边记应用,旨在让用户在空白的白板式画布上进行素描、绘画和写作&#xff0c…

[附源码]Nodejs计算机毕业设计基于Web的在线音乐网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…