第四周深层神经网络
4.1 深层神经网络4.2 前向和反向传播4.3 深层网络中的前向传播4.4 核对矩阵的维数.png4.5 为什么使用深层表示.png4.6 搭建深层网络块4.7 参数vs超参数4.8 这和大脑有什么关系
图文并茂深入学习哈希表 (上)
一、哈希表简介哈希表也称为散列表底层是由数组+单链表+红黑树实现编辑添加、搜索、删除的流程(1)利用hash函数生成key对应的数组索引 index O(1)(2)根据index操作定位数组元素 O(1)哈希表采用 空间换时间的思路1. 哈希冲突2个不同的key,经过哈希函数计算出相同的结果解决方法:(1) 开放定址法按照一定规则向其他地址探测,直到遇到空 线性探测 平方探测 (2) 再哈希法设计多个哈希函数(3) 链地址法比如通过链表将同一index的元素串接起来(4) 折叠法:将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。数位叠加可以有移位叠加和间界叠加两种方法。移位叠加是将分割后的每一部分的最低位对齐,然后相加;间界叠加是从一端向另一端沿分割界来回折叠,然后对齐相加。(5) 随机数法:选择一随机函数,取关键字的随机值作为散列地址,即 H(key)=random(key)其中 random 为随机函数,通常用于关键字长度不等的场合。(6) 除留余数法:取关键字被某个不大于散列表表长 m 的数 p 除后所得的余数为散列地址。即 H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对 p 的选择很重要,一般取素数或 m,若 p 选的不好,容易产生同义词。2.jdk1.8的哈希冲突解决方案 默认使用单向链表将元素串起来 在添加元素时,可能会由单向链表转为红黑树来存储元素 比如当哈希表容量>=64且单向链表的节点数量大于8时 当红黑树节点数量少到一定程度时,又会转为单向链表 JDK1.8中的哈希表是使用链表+红黑树解决哈希冲突 编辑为什么使用单链表?(1) 当通过哈希函数计算key对应的索引后,根据索引遍历所有key如果key是相同的则会覆盖key对应的value值,所以每次都要添加新元素都要从头遍历一遍链表并把新元素插入链表尾部,使用单向链表即可解决(2) 单向链表比双向链表少一个指针,可以节省内存空间二、哈希函数1.哈希表中哈希函数的实现步骤:(1)先生成key的哈希值(必须是整数)(2)再让key的哈希值跟数组的大小进行相关运算,生成一个索引值public int hash(Object key){
return hash_code(key) % table.length;
}为了提高效率,可以使用&位运算取代%运算【将数组的长度设计为2的幂 2^n】public int hash(Object key){
return hash_code(key) & (table.length - 1);
}进行&运算可以使得key的哈希值一定小于 table.length-1也就是数组下标长度,不会造成下标越界良好的哈希函数让哈希值更加均匀分布->减少哈希冲突的次数->提升哈希表的性能-2.如何生成key的哈希值?key的常见种类可能有:整数、浮点数、字符串、自定义对象不同种类的key,哈希值的生成方式不一样,但是目的相同 尽量让每个key的哈希值是唯一的 尽量让key的所有信息参与运算(可以使得key的哈希值更大概率不相同) Java中哈希值必须是int类型(1)整数 整数本身作为哈希值(2)浮点数将存储的二进制格式转为整数值public static int hashCode(float value){
return floatToIntBits(value);
}(3)Long类型public static int hashCode(long value){
return (int) (value ^ (value >>> 32));
}(4)Double类型public static int hashCode(double value){
long bits = doubleToLongBits(value);
return (int) (bits ^ (bit >>> 32));
} >>>和 ^ 的作用高32位和低32位混合计算出32位的哈希值充分利用所有信息计算出哈希值(5)字符串的哈希值字符串由若干个字符组成比如字符串hash,由h、a、s、h四个字符组成(字符串的本质就是一个整数)因此hash的哈希值可以表示为h* n ^ 3 + a * n ^ 2 + s * n + h ,(会有重复计算 比如 n*n 计算后在计算n*n*n时又进行计算了) 等价于 ([h * n + a ] * a + s ) * n +h在JDK中乘数n为3131是一个奇素数,JAM会将31 * i 优化成(i << 5) - i(6)自定义对象新建一个Person类class Person{
//姓名
private String name;
//身高
private float height;
//年龄
private int age;
public Person() {
}
public Person(String name, float height, int age) {
this.name = name;
this.height = height;
this.age = age;
}
}
public class Demo01 {
public static void main(String[] args) {
Person p1 = new Person("张三",1.7f,20);
Person p2 = new Person("张三",1.7f,20);
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
Map<Object,Object> map = new HashMap<>();
map.put(p1,1);
map.put(p2,2);
System.out.println(map.size());
}
}
/**
*运行结果: 2129789493
* 668386784
* 2
*/我们p1和p2对象的属性值完全相同,这个时候我们如果规定属性值相同就是同一个key,但是我们发现直接调用hashCode()方法,输出的结果是不同的,map中有两个键值对这该如何解决?一般我们会在类中重写hashCode()方法@Override
public int hashCode() {
int hashCode = Integer.hashCode(age);
hashCode = hashCode * 31 + Float.hashCode(height);
hashCode = hashCode * 31 + (name != null ? name.hashCode(): 0);
return hashCode;
} 这样p1和p2对象哈希值就相同了,实际上我们在重写hashCode()方法时,jdk会自动帮我们重写@Override
public int hashCode() {
return Objects.hash(name, height, age);
}点进hash()方法->hashCode()方法我们发现 jdk源码也是这样处理的//将传入的值都放在object类型的数组a中
public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
//循环遍历数组元素,计算每个元素的hashCode值 再计算整个数组a的哈希值
for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode());
return result;
}在Java中,HashMap的key必须实现hashCode、equals方法,也允许key为null为什么需要实现equals方法?我们之前通过重写hashCode()方法使得自定义的Person对象再属性完全相同时,其哈希值是相同的,但是这个时候map集合添加p1和p2,能否实现p2覆盖p1也就是所谓的去重呢?System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
Map<Object,Object> map = new HashMap<>();
map.put(p1,1);
map.put(p2,2);
System.out.println(map.size());
//运行结果:-407057726
// -407057726
// 2运行结果发现map集合的大小为2,表明没有去重p1和p2都加入了这是为什么呢?实际上许多人刚学哈希表时都有一个误区,那就是哈希值相同就代表是相同的元素,这是不对的,因为我们前文刚说了哈希冲突,在key不同的情况下通过hash方法计算的哈希值可能相同,那么相同的key哈希值必定相同了,也就是说我们重写hashCode()方法只能计算key的哈希值并保证相同的key哈希值是相同的,其所对应的数组索引也必定相同。那么发生哈希冲突,使用单链表解决时,我们时从头到尾进行比较来判断key是否相同。简单来说通过比较哈希值来判断是否是相同的key,这是不靠谱的。如何进行key的比较呢?很容易想到 == 或 equals如果是==则是比较内存地址,在比较对象时我们肯定不会选择==进行比较,因为两个新new的对象地址不相同,但是属性完全相同,因此我们选用equals方法进行比较//在Person类中重写equals方法
@Override
public boolean equals(Object obj) {
//如果内存地址相等则两个元素相等就是自己本身
if (this == obj) return true;
//如果obj为空 或者obj与本类Person不是同一个类,那么也必定不同
if (obj == null || getClass() != obj.getClass()) return false;
//传来的obj对象是Person类的实例
Person person = (Person) obj;
//比较height
if (Float.compare(person.height, height) != 0) return false;
//比较年龄
if (age != person.age) return false;
// 比较name
return name != null ? name.equals(person.name) : person.name == null;
}此时我们再进行map集合添加p1和p2,就能够实现去重辣!!!三、总结:hashCode()方法是计算哈希值,保证相同元素的哈希值相同然后找数组索引equals()方法是当发生哈希冲突时,判断两个key是否相等注意点:计算哈希值时为了找数组索引,哈希值相同索引必相同,哈希值不同索引也可能相同,(因为我们计算出哈希值后还需要与数组大小进行 & 运算)图解重写hashCode与equals方法后map添加p1、一个与p1有相同哈希值的key1、p2 三对键值对的过程(1)map集合添加键值对(p1,123), 哈希函数计算出p1的哈希值再通过与数组长度进行&运算,假设求出索引为1,并发现此索引数据为空,然后添加数据编辑(2)map集合继续添加键值对("key1",456),哈希函数计算哈希值并进行&运算发现"key1"对应的数组索引也是1,然后通过索引知道此时该索引存在数据,从头到尾进行遍历并比较,发现"key1"与p1不相同,添加键值对("key1",456) 编辑(3)map集合继续添加键值对(p2,789),哈希函数计算哈希值并进行&运算发现p2对应的数组索引是1,然后通过索引知道此时该索引存在数据,从头到尾进行遍历并比较,发p2与p1相同,进行覆盖编辑 以上就是重写hashCode和equals方法后哈希表解决哈希冲突及相同key的过程
【力扣每日一题】——N皇后
一、题目描述原题链接设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。注意:本题相对原题做了扩展示例:输入:4 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]] 解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q.."]]二、题目描述经典回溯问题,整体使用回溯框架。剪枝的思路:判断row行col列 是否能放皇后每行只能放一个皇后,因此从第一行开始一行一行进行尝试每列只能放一个皇后,使用ans[i]表示 第i行 的皇后放在 第ans[i] 列,只需要判断row行之前的所有行ans[i]的值是否与col列相等如果相等,说明本列之前有皇后判断对角线上是否有皇后,根据数学直线斜率等于±1,遍历row之前每行 如果 (i,ans[i]) (row,col) 符合 row - i == |col - ans[i]| 说明对角线上存在皇后三、代码实现class Solution {
//ans[i]表示第i行的皇后在 第ans[i]列
int[] ans;
int len = 0 ;
List<List<String>> res = new ArrayList<>();
List<String> list = new ArrayList<>();
List<List<String>> solveNQueens(int n) {
len = n;
ans = new int[n];
backTracking(0);
return res;
}
void backTracking(int row) {
if(row == len){
for(int i = 0;i < len;i++){
char[] chars = new char[len];
Arrays.fill(chars,'.');
chars[ans[i]] = 'Q';
list.add(new String(chars));
}
res.add(new ArrayList<>(list));
list = new ArrayList();
return;
}
for(int i = 0;i < len;i++){
//剪枝 判断row行 i列是否可以放皇后
if(isValid(row,i)){
//可以放皇后
ans[row] = i;
//进行下一行
backTracking(row + 1);
}
//不能放就继续循环下一列直至本行全部不能放 回溯
}
}
boolean isValid(int row, int col) {
for(int i = 0;i < row; i++){
//如果 第i行 ans[i]列有皇后 即 ans[i] == col 那么col这一列不能再放皇后了
if(ans[i] == col) return false;
// 通过斜率比较斜线上是否有皇后 (i,ans[i]) (row,col)
if ( row - i == Math.abs( col- ans[i]) ) return false;
}
return true;
}
}
最完整的Explain总结,妈妈再也不担心我的SQL优化了
在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)CREATETABLE`film`(`id`int(11
)NOTNULLAUTO_INCREMENT,`name`varchar(10)DEFAULTNULL,
PRIMARYKEY(`id`),KEY`idx_name`(`name`))ENGINE=InnoDBDEFAULTCHARSET=utf8;CREATETABLE`actor`(`id`int(11)NOTNULL,`name`varchar(45)DEFAULTNULL,`update_time`datetimeDEFAULTNULL,
PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;CREATETABLE`film_actor`(`id`int(11)NOTNULL,
`film_id`int(11)NOTNULL,`actor_id`int(11)NOTNULL,
`remark`varchar(255)DEFAULTNULL,
PRIMARYKEY(`id`),KEY`idx_film_actor_id`(`film_id`,`actor_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8两个变种explain extended会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通过 show warnings 命令可以 得到优化后的查询语句,从而看出优化器优化了什么。额外还有 filtered 列,是一个半分比的值,rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 explain 中的id值比当前表id值小的表)mysql> explain extendedselect*fromfilmwhereid =mysql> show warnings;explain partitions相比 explain 多了个 partitions 字段,如果查询是基于分区表的话,会显示查询将访问的分区。id列id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。 MySQL将 select 查询分为简单查询(SIMPLE)和复杂查询(PRIMARY)。 复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询。 id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行**select_type列select_type 表示对应行是简单还是复杂的查询,如果是复杂的查询,又是上述三种复杂查询中的哪一种。 1.simple简单查询。查询不包含子查询和unionmysql> explainselect*fromfilmwhereid =2;2)primary:复杂查询中最外层的 select3)subquery:包含在 select 中的子查询(不在 from 子句中)4)derived:包含在 from 子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) 用这个例子来了解 primary、subquery 和 derived 类型mysql>explainselect(select1fromactorwhereid =1)from(select*fromfilmwhereid =1) der;5)union:在 union 中的第二个和随后的 select6)union result:从 union 临时表检索结果的 select 用这个例子来了解 union 和 union result 类型:mysql> explainselect1union allselect1;table列这一列表示 explain 的一行正在访问哪个表。 当 from 子句中有子查询时,table列是 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查询。 当有 union 时,UNION RESULT 的 table 列的值为<union1,2>,1和2表示参与 union 的 select 行id。type列这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行,查找数据行记录的大概范围。 依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL 一般来说,得保证查询达到range级别,最好达到refNULLmysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如:在索引列中选取最小值,可以单独查找索引来完成,不需要在执行时访问表mysql>explainselectmin(id)fromfilm;const, systemmysql能对查询的某部分进行优化并将其转化成一个常量(可以看show warnings 的结果)。用于 primary key 或 unique key 的所有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。system是const的特例,表里只有一条元组匹配时为systemmysql> explain extendedselect*from(select*fromfilmwhereid =1) tmp;eq_refprimary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。这可能是在 const 之外最好的联接类型了,简单的 select 查询不会出现这种 type。mysql> explainselect*fromfilm_actor leftjoinfilmonfilm_actor.film_id = film.id;ref相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。简单 select 查询,name是普通索引(非唯一索引)mysql> explainselect*fromfilmwherename ="film1";2.关联表查询,idx_film_actor_id是film_id和actor_id的联合索引,这里使用到了film_actor的左边前缀film_id部分。mysql> explainselectfilm_idfromfilm leftjoinfilm_actoronfilm.id = film_actor.film_id;range范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行。mysql> explainselect*fromactorwhereid >1;index扫描全表索引,这通常比ALL快一些。(index是从索引中读取的,而all是从硬盘中读取)mysql> explainselect*fromfilm;ALL即全表扫描,意味着mysql需要从头到尾去查找所需要的行。通常情况下这需要增加索引来进行优化了mysql> explainselect*fromactor;possible_keys列这一列显示查询可能使用哪些索引来查找。 explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,这种情况是因为表中数据不多,mysql认为索引对此查询帮助不大,选择了全表查询。 如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查 where 子句看是否可以创造一个适当的索引来提高查询性能,然后用 explain 查看效果。key列这一列显示mysql实际采用哪个索引来优化对该表的访问。 如果没有使用索引,则该列是 NULL。如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index。key_len列这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。 举例来说,film_actor的联合索引 idx_film_actor_id 由 film_id 和 actor_id 两个int列组成,并且每个int是4字节。通过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。mysql> explainselect*fromfilm_actorwherefilm_id =2;“key_len计算规则如下: 字符串 char(n):n字节长度 varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3n + 2 数值类型 tinyint:1字节 smallint:2字节 int:4字节 bigint:8字节 时间类型 date:3字节 timestamp:4字节 datetime:8字节”如果字段允许为 NULL,需要1字节记录是否为 NULL 索引最大长度是768字节,当字符串过长时,mysql会做一个类似左前缀索引的处理,将前半部分的字符提取出来做索引。ref列这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)rows列这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。Extra列这一列展示的是额外信息。常见的重要值如下:Using index查询的列被索引覆盖,并且where筛选条件是索引的前导列,是性能高的表现。一般是使用了覆盖索引(索引包含了所有查询的字段)。对于innodb来说,如果是辅助索引性能会有不少提高mysql> explainselectfilm_idfromfilm_actorwherefilm_id =1;Using where查询的列未被索引覆盖,where筛选条件非索引的前导列mysql> explainselect*fromactorwherename ='a';Using where Using index查询的列被索引覆盖,并且where筛选条件是索引列之一但是不是索引的前导列,意味着无法直接通过索引查找来查询到符合条件的数据mysql> explainselectfilm_idfromfilm_actorwhereactor_id =1;NULL查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地用到了索引,也不是完全没用到索引mysql>explainselect*fromfilm_actorwherefilm_id =1;Using index condition与Using where类似,查询的列不完全被索引覆盖,where条件中是一个前导列的范围;mysql> explainselect*fromfilm_actorwherefilm_id >1;Using temporarymysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索引来优化。actor.name没有索引,此时创建了张临时表来distinctmysql> explainselectdistinct namefromactor;film.name建立了idx_name索引,此时查询时extra是using index,没有用临时表mysql> explainselectdistinct namefromfilm;Using filesortmysql 会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的。actor.name未创建索引,会浏览actor整个表,保存排序关键字name和对应的id,然后排序name并检索行记录mysql> explainselect*fromactor orderbyname;film.name建立了idx_name索引,此时查询时extra是using indexmysql> explainselect*fromfilm orderbyname;
斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/250声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。引言授课计划Reflections on word representations / 词向量知识回顾Pre-ELMo and ELMO / ELMo模型ULMfit and onward / ULMfit模型Transformer architectures / Transformer结构BERT / BERT1.词向量知识回顾1.1 词向量表征现在我们可以获得一个单词的表示我们开始时学过的单词向量Word2vec,GloVe,fastText1.2 预训练的词向量POS和NER两种表征体系11个词窗,100个隐层神经元,在12w词上训练7周我们可以随机初始化词向量,并根据我们自己的下游任务训练它们但在绝大多数情况下,使用预训练词向量是有帮助的,因为它们本身是自带信息的 (我们可以在更大体量的预训练语料上训练得到它们)1.3 未知词的词向量应用建议简单且常见的解决方案:训练时:词汇表 将所有罕见的词 (数据集中出现次数小于 5) 都映射为 ,为其训练一个词向量运行时:使用 代替词汇表之外的词 OOV问题:没有办法区分不同 UNK words,无论是身份还是意义解决方案使用字符级模型学习词向量特别是在 QA 中,match on word identity 是很重要的,即使词向量词汇表以外的单词尝试这些建议 (from Dhingra, Liu, Salakhutdinov, Cohen 2017)如果测试时的 单词不在你的词汇表中,但是出现在你使用的无监督词嵌入中,测试时直接使用这个向量此外,你可以将其视为新的单词,并为其分配一个随机向量,将它们添加到你的词汇表帮助很大或者也许能帮点忙你可以试试另一件事将它们分解为词类 (如未知号码,大写等等),每种都对应一个 1.4 单词的表示存在两个大问题对于一个 word type 总是是用相同的表示,不考虑这个 word token 出现的上下文我们可以进行非常细粒度的词义消歧我们对一个词只有一种表示,但是单词有不同的方面,包括语义,句法行为,以及表达 / 含义1.5 我们一直都有解决这个问题的办法吗?在NLM中,我们直接将单词向量 (可能只在语料库上训练) 插入LSTM层那些LSTM层被训练来预测下一个单词但这些语言模型在每一个位置生成特定于上下文的词表示1.6 #论文解读Semi-supervised sequence tagging with bidirectional language models想法:想要获得单词在上下文的意思,但标准的 RNN 学习任务只在 task-labeled 的小数据上 (如 NER )为什么不通过半监督学习的方式在大型无标签数据集上训练 NLM,而不只是词向量1.7 标签语言模型 (Tag LM )步骤3:在序列标记模型中同时使用单词嵌入和 LM 嵌入步骤2:为输入序列中的每个标记准备单词嵌入和 LM 嵌入步骤1:预训练词嵌入和语言模型与上文无关的单词嵌入 + RNN model 得到的 hidden states 作为特征输入Char CNN / RNN + Token Embedding 作为 bi-LSTM 的输入得到的 hidden states 与 Pre-trained bi-LM (冻结的) 的 hidden states 连接起来输入到第二层的 bi-LSTM 中1.8 命名实体识别 (NER)一个非常重要的NLP子任务:查找和分类文本中的实体1.9 CoNLL 2003命名实体识别 (en news testb)1.10 #论文解读语言模型在 Billion word benchmark 的8亿个训练单词上训练语言模型观察结果在监督数据集上训练的语言模型并不会受益双向语言模型仅有助于 forward 过程,提升约 0.2具有巨大的语言模型设计 (困惑度 30) 比较小的模型 (困惑度 48) 提升约 0.3任务特定的BiLSTM观察结果仅使用LM嵌入来预测并不是很好:88.17 F1远低于仅在标记数据上使用 BiLSTM 标记器1.11 #论文解读https://arxiv.org/pdf/1708.00107.pdf也有一种思路:使用训练好的序列模型,为其他NLP模型提供上下文思路:机器翻译是为了保存意思,所以这也许是个好目标?使用 seq2seq + attention NMT system 中的 Encoder,即 2 层 bi-LSTM,作为上下文提供者所得到的 CoVe 向量在各种任务上都优于 GloVe 向量但是,结果并不像其他幻灯片中描述的更简单的 NLM 训练那么好,所以似乎被放弃了也许NMT只是比语言建模更难?或许有一天这个想法会回来?2.ELMo模型2.1 #论文解读#ELMoDeep contextualized word representations. NAACL 2018.word token vectors or contextual word vectors 的爆发版本使用长上下文而不是上下文窗口学习 word token 向量 (这里,整个句子可能更长)学习深度 Bi-NLM,并在预测中使用它的所有层训练一个双向语言模型 (LM)目标是效果 OK 但不要太大的语言模型 (LM)使用 2 个 biLSTM 层(仅) 使用字符CNN构建初始单词表示2048 个 char n-gram filters 和 2 个 highway layers,512 维的 projection4096 dim hidden/cell LSTM状态,使用 512 dim 的对下一个输入的投影使用残差连接绑定 token 的输入和输出的参数 (softmax),并将这些参数绑定到正向和反向语言模型 (LM) 之间ELMo 学习 biLM 表示的特定任务组合这是一个创新,TagLM 中仅仅使用堆叠 LSTM 的顶层,ELMo 认为 BiLSTM 所有层都是有用的 衡量 ELMo 对任务的总体有用性,是为特定任务学习的全局比例因子 是 softmax 归一化的混合模型权重,是 BiLSTM 的加权平均值的权重,对不同的任务是不同的,因为不同的任务对不同层的 BiLSTM 的首先运行 biLM 获取每个单词的表示然后,让 (无论什么) 最终任务模型使用它们冻结 ELMo 的权重,用于监督模型将 ELMo 权重连接到特定于任务的模型中细节取决于任务像 TagLM 一样连接到中间层是典型的可以在生产输出时提供更多的表示,例如在问答系统中2.2 ELMo在序列标记器中的使用2.3 CoNLL 2003命名实体识别 (en news testb)2.4 ELMo结果:适用于所有任务2.5 ELMo :层权重这两个 biLSTM NLM 层有不同的用途 / 含义低层更适合低级语法,例如词性标注(part-of-speech tagging)、句法依赖(syntactic dependency)、NER高层更适合更高级别的语义情绪、语义角色标记、问答系统、SNLI这似乎很有趣,但它是如何通过两层以上的网络来实现的看起来更有趣3.ULMfit模型3.1 ULMfitHoward and Ruder (2018) Universal Language Model Fine-tuning for Text Classification.转移 NLM 知识的一般思路是一样的这里应用于文本分类在大型通用领域的无监督语料库上使用 biLM 训练在目标任务数据上调整 LM对特定任务将分类器进行微调使用合理大小的 1 GPU 语言模型,并不是真的很大在LM调优中要注意很多 不同的每层学习速度倾斜三角形学习率 (STLR) 计划学习分类器时逐步分层解冻和STLR使用 进行分类使用大型的预训练语言模型,是一种提高性能的非常有效的方法3.2 ULMfit性能文本分类器错误率3.3 ULMfit迁移学习迁移学习3.4 让我们扩大规模补充说明如果使用监督数据进行训练文本分类器,需要大量的数据才能学习好3.5 GPT-2语言模型(cherry-picked)输出补充说明文本生成的样例3.6 GPT-2语言模型(cherry-picked)输出4.Transformer结构4.1 Transformer介绍所有这些模型都是以Transformer为主结构的,我们应该学习一下Transformer吧补充说明Transformer 不仅很强大,而且允许扩展到更大的尺寸4.2 Transformers 动机我们想要并行化,但是RNNs本质上是顺序的尽管有 GRUs 和 LSTMs,RNNs 仍然需要注意机制来处理长期依赖关系——否则状态之间的 path length 路径长度 会随着序列增长但如果注意力让我们进入任何一个状态……也许我们可以只用注意力而不需要RNN?4.3 Transformer 概览Attention is all you need. 2017. Aswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin序列到序列编码解码模型,但它是非循环非串行结构任务:平行语料库的机器翻译预测每个翻译单词最终成本/误差函数是 softmax 分类器基础上的标准交叉熵误差4.4 Transformer 基础自学 transformer主要推荐资源http://nlp.seas.harvard.edu/2018/04/03/attention.htmlThe Annotated Transformer by Sasha Rush一个使用PyTorch的Jupyter笔记本,解释了一切!现在:我们定义 Transformer 网络的基本构建块:第一,新的注意力层4.5 点乘注意力 Dot-Product Attention输入:对于一个输出而言的查询 和一组键-值对 ()Query,keys,values,and output 都是向量输出值的加权和权重的每个值是由查询和相关键的内积计算结果Query 和 keys 有相同维数 ,value 的维数为 4.6 点乘注意力矩阵表示法当我们有多个查询 时,我们将它们叠加在一个矩阵 中4.7 缩放点乘注意力问题: 变大时, 的方差增大 → 一些 softmax 中的值的方差将会变大 → softmax 得到的是峰值 → 因此梯度变小了解决方案:通过 query / key 向量的长度进行缩放4.8 编码器中的自注意力输入单词向量是 queries,keys and values换句话说:这个词向量自己选择彼此词向量堆栈= Q = K = V我们会通过解码器明白为什么我们在定义中将他们分开4.9 多头注意力简单 self-attention 的问题单词只有一种相互交互的方式解决方案:多头注意力首先,通过矩阵 将 ,, 映射到 的许多低维空间然后,应用注意力,然后连接输出,通过线性层4.10 完整的transformer模块每个 Block 都有两个 子层多头 attention两层的前馈神经网络,使用 ReLU这两个子层都残差连接以及层归一化LayerNorm(x+Sublayer(x))层归一化将输入转化为均值是 ,方差是 ,每一层和每一个训练点 (并且添加了两个参数)Layer Normalization by Ba, Kiros and Hinton,https://arxiv.org/pdf/1607.06450.pdf4.11 编码器输入实际的词表示是 byte-pair 编码还添加了一个 positional encoding 位置编码,相同的词语在不同的位置有不同的整体表征4.12 完整编码器Encoderencoder 中,每个 Block 都是来自前一层的 ,,Blocks 被重复 6 次 (垂直方向)在每个阶段,你可以通过多头注意力看到句子中的各个地方,累积信息并将其推送到下一层。在任一方向上的序列逐步推送信息来计算感兴趣的值非常善于学习语言结构4.13 第5层的注意力可视化词语开始以合理的方式关注其他词语不同的颜色对应不同的注意力头4.14 注意力可视化Implicit anaphora resolution对于代词,注意力头学会了如何找到其指代物在第五层中,从 head 5 和 6 的单词 its 中分离出来的注意力。请注意,这个词的注意力是非常鲜明的。4.15 Transformer解码器decoder 中有两个稍加改变的子层对之前生成的输出进行 Masked decoder self-attentionEncoder-Decoder Attention,queries 来自于前一个 decoder 层,keys 和 values 来自于 encoder 的输出Blocks 同样重复 6 次4.16 Transformer的技巧与建议细节(论文/之后的讲座)Byte-pair encodingsCheckpoint averagingAdam 优化器控制学习速率变化训练时,在每一层添加残差之前进行 Dropout标签平滑带有束搜索和长度惩罚的自回归解码因为 transformer 正在蔓延,但他们很难优化并且不像LSTMs那样开箱即用,他们还不能很好与其他任务的构件共同工作4.17 Transformer机器翻译实验结果4.18 Transformer解析任务实验结果5.BERT模型5.1 #论文解读# BERTBERT (Bidirectional Encoder Representations from Transformers): Pre-training of Deep Bidirectional Transformers for Language UnderstandingBERT:用于语言理解的预训练深度双向 transformers问题:语言模型只使用左上下文或右上下文,但语言理解是双向的为什么LMs是单向的?原因1:方向性对于生成格式良好的概率分布是有必要的 [我们不在乎这个]原因2:双向编码器中单词可以 看到自己单向 与 双向 上下文对比解决方案:掩盖 的输入单词,然后预测 masked words不再是传统的计算生成句子的概率的语言模型,目标是填空总是使用 Masking 太少:训练太昂贵Masking 太多:没有足够的上下文GPT 是经典的单项的语言模型ELMo 是双向的,但是两个模型是完全独立训练的,只是将输出连接在一起,并没有使用双向的 contextBERT 使用 mask 的方式进行整个上下文的预测,使用了双向的上下文信息5.2 BERT 训练任务:预测下一句学习句子之间的关系,判断句子 B 是句子 A 的后一个句子还是一个随机的句子。5.3 BERT 句对编码token embeddings 是 word pieces (paly, ##ingpaly, ##ing)使用学习好的分段嵌入表示每个句子位置嵌入与其他 Transformer 体系结构类似将以上三种 embedding 相加,作为最终输入的表示5.4 BERT 模型结构与训练Transformer encoder (和之前的一样)自注意力 ⇒ 没有位置偏差长距离上下文 机会均等每层乘法 ⇒ GPU / TPU上高效在 Wikipedia + BookCorpus 上训练训练两种模型尺寸BERT-Base: 12-layer, 768-hidden, 12-headBERT-Large: 24-layer, 1024-hidden, 16-headTrained on 4x4 or 8x8 TPU slice for 4 days5.5 BERT 模型微调只学习一个建立在顶层的分类器,微调的每个任务5.6 BERT GLUE多任务结果GLUE benchmark 是由自然语言推理任务,还有句子相似度和情感MultiNLIPremise: Hills and mountains are especially sanctified in Jainism.Hypothesis: Jainism hates nature.Label: ContradictionCoLaSentence: The wagon rumbled down the road. Label: AcceptableSentence: The car honked down the road. Label: Unacceptable5.7 CoNLL 2003命名实体识别 (en news testb)5.8 BERT在SQuAD问答上的表现5.9 BERT预训练任务效果5.10 BERT参数量级对效果影响从 119M 到 340M 的参数量改善了很多随参数量提升还在提高5.11 推荐阅读The Annotated Transformer 代码解析https://github.com/rsennrich/subword-nmthttps://github.com/opennmt/opennmt-pyjalammar 的一系列可视化简单教程Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)The Illustrated Transformer6.视频教程可以点击 B站 查看视频的【双语字幕】版本7.参考资料本讲带学的在线阅翻页本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)Stanford官网 | CS224n: Natural Language Processing with Deep LearningShowMeAI 系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
斯坦福NLP课程 | 第12讲 - NLP子词模型
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/249声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。引言授课计划A tiny bit of linguistics / 语法学基础知识Purely character-level models / 基于字符粒度的模型Subword-models: Byte Pair Encoding and friends / 子词模型Hybrid character and word level models / 混合字符与词粒度的模型fastText / fastText模型1.语法学基础知识1.1 人类语言的声音:语音学和语音体系语音学 (honetics) 是音流无争议的 物理学语音体系 (Phonology) 假定了一组或多组独特的、分类的单元:音素 (phoneme) 或者是独特的特征这也许是一种普遍的类型学,但却是一种特殊的语言实现分类感知的最佳例子就是语音体系音位差异缩小音素之间的放大1.2 词法:词类传统上,词素 (morphemes) 是最小的语义单位深度学习:形态学研究较少;递归神经网络的一种尝试是 (Luong, Socher, & Manning 2013)处理更大词汇量的一种可能方法:大多数看不见的单词是新的形态(或数字)声音本身在语言中没有意义parts of words 是音素的下一级的形态学,是具有意义的最低级别一个简单的替代方法是使用字符 n-gramsWickelphones (Rumelhart & McClelland 1986)Microsoft’s DSSM (Huang, He, Gao, Deng, Acero, & Hect2013)使用卷积层的相关想法能更容易地发挥词素的许多优点吗?1.3 书写系统中的单词书写系统在表达单词的方式上差异有大有小没有分词 (没有在单词间放置空格)例如中文大部分的单词都是分开的:由单词组成了句子附着词分开的连续的复合名词分开的连续的1.4 比单词粒度更细的模型需要处理数量很大的开放词汇:巨大的、无限的单词空间丰富的形态音译 (特别是名字,在翻译中基本上是音译)非正式的拼写1.5 字符级模型① 词嵌入可以由字符嵌入组成为未知单词生成嵌入相似的拼写共享相似的嵌入解决OOV问题② 连续语言可以作为字符处理:即所有的语言处理均建立在字符序列上,不考虑 word-level这两种方法都被证明是非常成功的!有点令人惊讶的是:一般意义上,音素/字母不是一个语义单元:但深度学习模型构成了group深度学习模型可以存储和构建来自多个字母组的含义表示,以模拟语素和更大单位的意义,汇总形成语义1.6 单词之下:书写系统大多数深度学习NLP的工作,都是从语言的书面形式开始的:这是一种容易处理的、现成的数据但是人类语言书写系统不是一回事!各种语言的字符是不同的!2.基于字符粒度的模型2.1 纯字符级模型上节课,我们看到了一个很好的用于句子分类的纯字符级模型的例子非常深的卷积网络用于文本分类Conneau, Schwenk, Lecun, Barrault.EACL 2017强大的结果通过深度卷积堆叠2.2 字符级别输入输出的机器翻译系统最初,效果令人不满意(Vilaret al., 2007; Neubiget al., 2013)只有decoder (初步成功)(JunyoungChung, KyunghyunCho, YoshuaBengio. arXiv 2016).然后,出现了还不错的结果(Wang Ling, Isabel Trancoso, Chris Dyer, Alan Black, arXiv 2015)(Thang Luong, Christopher Manning, ACL 2016)(Marta R. Costa-Jussà, José A. R. Fonollosa, ACL 2016)2.3 English-Czech WMT 2015 ResultsLuong 和 Manning 测试了一个纯字符级 seq2seq (LSTM) NMT 系统作为基线它在单词级基线上运行得很好对于 UNK,是用 single word translation 或者 copy stuff from the source字符级的 model 效果更好了,但是太慢了但是运行需要3周的时间来训练,运行时没那么快如果放进了 LSTM 中,序列长度变为以前的数倍 (大约七倍)2.4 无显式分割的完全字符级神经机器翻译Jason Lee, KyunghyunCho, Thomas Hoffmann. 2017.编码器如下解码器是一个字符级的 GRU2.5 #论文解读# Stronger character results with depth in LSTM seq2seq modelRevisiting Character-Based Neural Machine Translation with Capacity and Compression. 2018. Cherry, Foster, Bapna, Firat, Macherey, Google AI在 LSTM-seq2seq 模型中,随着深度的增加,特征越强在捷克语这样的复杂语言中,字符级模型的效果提升较为明显,但是在英语和法语等语言中则收效甚微。模型较小时,word-level 更佳模型较大时,character-level 更佳3.子词模型3.1 子词模式:两种趋势与 word 级模型相同的架构但是使用更小的单元: word pieces[Sennrich, Haddow, Birch, ACL’16a], [Chung, Cho, Bengio, ACL’16].混合架构主模型使用单词,其他使用字符级[Costa-Jussà& Fonollosa, ACL’16], [Luong & Manning, ACL’16].3.2 字节对编码/BPE最初的压缩算法最频繁的字节 → 一个新的字节。用字符 ngram 替换字节(实际上,有些人已经用字节做了一些有趣的事情)Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural Machine Translation of Rare Words with SubwordUnits. ACL 2016.https://arxiv.org/abs/1508.07909https://github.com/rsennrich/subword-nmthttps://github.com/EdinburghNLP/nematus分词 (word segmentation) 算法虽然做得很简单,有点像是自下而上的短序列聚类将数据中的所有的 Unicode 字符组成一个 unigram 的词典最常见的 ngram pairs 视为 一个新的 ngramBPE 并未深度学习的有关算法,但已成为标准且成功表示 pieces of words 的方法,可以获得一个有限的词典与无限且有效的词汇表。有一个目标词汇量,当你达到它的时候就停止做确定性的最长分词分割分割只在某些先前标记器 (通常MT使用的 Moses tokenizer) 标识的单词中进行自动为系统添加词汇不再是基于传统方式的 strongly word2016年WMT排名第一!仍然广泛应用于2018年WMThttps://github.com/rsennrich/nematus3.3 Wordpiece / Sentencepiece模型谷歌 NMT (GNMT) 使用了它的一个变体V1: wordpiece modelV2: sentencepiece model不使用字符的 n-gram count,而是使用贪心近似来最大化语言模型的对数似然函数值,选择对应的 pieces添加最大限度地减少困惑的 n-gramWordpiece模型标记内部单词Sentencepiece模型使用原始文本空格被保留为特殊标记(_),并正常分组可以通过将片段连接起来并将它们重新编码到空格中,从而在末尾将内容反转https://github.com/google/sentencepiecehttps://arxiv.org/pdf/1804.10959.pdfBERT 使用了 wordpiece 模型的一个变体(相对) 在词汇表中的常用词at, fairfax, 1910s其他单词由wordpieces组成hypatia = h ##yp ##ati ##a如果你在一个基于单词的模型中使用 BERT,你必须处理这个3.4 字符级构建单词级Learning Character-level Representations for Part-ofSpeech Tagging (Dos Santos and Zadrozny 2014)对字符进行卷积以生成单词嵌入为 PoS 标签使用固定窗口的词嵌入3.5 基于字符的LSTM构建单词表示Bi-LSTM构建单词表示3.6 #论文解读# Character-Aware Neural Language Models一个更复杂/精密的方法动机派生一个强大的、健壮的语言模型,该模型在多种语言中都有效编码子单词关联性:eventful, eventfully, uneventful…解决现有模型的罕见字问题用更少的参数获得可比较的表达性字符级别嵌入输入CNN+高速网络+LSTM字符级别输入 + 卷积处理Max-over-time池化N-gram 语法交互模型在传递原始信息的同时应用转换功能类似于 LSTM 内存单元使用层次化 Softmax 处理大的输出词汇表使用 truncated backprop through time 进行训练本文对使用词嵌入作为神经语言建模输入的必要性提出了质疑字符级的 CNNs + Highway Network 可以提取丰富的语义和结构信息关键思想:您可以构建 building blocks 来获得细致入微且功能强大的模型!4.混合字符与词粒度的模型4.1 混合NMT混合高效结构翻译大部分是单词级别的只在需要的时候进入字符级别使用一个复制机制,试图填充罕见的单词,产生了超过 2个点的 BLEU 的改进单词级别 (4层)End-to-end training 8-stacking LSTM layers:端到端训练 8 层 LSTM4.2 二级解码单词级别的集束搜索字符级别的集束搜索 (遇到 ) 时补充讲解混合模型与字符级模型相比纯粹的字符级模型能够非常有效地使用字符序列作为条件上下文混合模型虽然提供了字符级的隐层表示,但并没有获得比单词级别更低的表示4.3 English - Czech Results使用WMT’15数据进行训练 (12M句子对)新闻测试201530倍数据3个系统大型词汇+复制机制达到先进的效果!4.4 Sample English-czech translations翻译效果很好!基于字符:错误的名称翻译基于单词:对齐不正确基于字符的混合:diagnóze的正确翻译基于单词:特征复制失败混合:正确,11-year-old-jedenactileta错误:Shani Bartova4.5 单词嵌入中的字符应用一种用于单词嵌入和单词形态学的联合模型(Cao and Rei 2016)与 w2v 目标相同,但使用字符双向 LSTM 计算单词表示模型试图捕获形态学模型可以推断单词的词根5.fastText模型用子单词信息丰富单词向量Bojanowski, Grave, Joulinand Mikolov. FAIR. 2016.https://arxiv.org/pdf/1607.04606.pdfhttps://fasttext.cc目标:下一代高效的类似于 word2vecd 的单词表示库,但更适合于具有大量形态学的罕见单词和语言带有字符 n-grams 的 w2v 的 skip-gram 模型的扩展将单词表示为用边界符号和整词扩充的字符 n-grams注意 、是不同于 的前缀、后缀和整个单词都是特殊的将 word 表示为这些表示的和。上下文单词得分为细节:与其共享所有 n-grams 的表示,不如使用 hashing trick 来拥有固定数量的向量低频罕见单词的差异收益Suggested ReadingsCharacter Level NMTByte Pair EncodingMinh-Thang Luong and Christopher ManningFastText 论文6.视频教程可以点击 B站 查看视频的【双语字幕】版本7.参考资料本讲带学的在线阅翻页本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)Stanford官网 | CS224n: Natural Language Processing with Deep LearningShowMeAI 系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
斯坦福NLP课程 | 第10讲 - NLP中的问答系统
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/246声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。引言授课计划Final final project notes, etc. / 最终大项目要点Motivation/History / 问答系统动机与历史The SQuADdataset / SQuAD问答数据集The Stanford Attentive Reader model / 斯坦福注意力阅读模型BiDAF / BiDAF模型Recent, more advanced architectures / 近期前沿模型ELMo and BERT preview / ELMo与BERT预习与简单介绍1.最终大项目要点1.1 自定义Final Project1.2 默认Final Project1.3 Project 提交1.4 项目顺利1.5 谁是澳大利亚第三任总理在谷歌中检索谁是澳大利亚第三任总理,可以获得答案。技术说明:这是从web页面中提取的 特性片段 回答,而不是使用 (结构化的) 谷歌知识图 (以前称为Freebase) 回答的问题。我们今天要谈论的就是这样的问题,而不是基于结构化数据存储的问答。2.问答系统动机与历史2.1 动机:问答拥有大量的全文文档集合,例如网络,简单地返回相关文档的作用是有限的相反,我们经常想要得到问题的答案尤其是在移动设备上或使用像Alexa、Google assistant这样的数字助理设备我们可以把它分解成两部分:1.查找 (可能) 包含答案的文档可以通过传统的信息检索/web搜索处理(下个季度我将讲授cs276,它将处理这个问题)2.在一段或一份文件中找到答案这个问题通常被称为阅读理解这就是我们今天要关注的2.2 阅读理解简史许多早期的NLP工作尝试阅读理解Schank, Abelson, Lehnert et al. c. 1977 – Yale A.I. Project由Lynette Hirschman在1999年重提NLP系统能回答三至六年级学生的人类阅读理解问题吗?简单的方法尝试Chris Burges于2013年通过 MCTest 又重新复活 RC再次通过简单的故事文本回答问题2015/16年,随着大型数据集的产生,闸门开启,可以建立监督神经系统Hermann et al. (NIPS 2015) DeepMind CNN/DM datasetRajpurkaret al. (EMNLP 2016) SQuADMS MARCO, TriviaQA, RACE, NewsQA, NarrativeQA, …2.3 机器理解(Burges 2013)一台机器能够理解文本的段落,对于大多数母语使用者能够正确回答的关于文本的任何问题,该机器都能提供一个字符串,这些说话者既能回答该问题,又不会包含与该问题无关的信息。2.4 MCTest 阅读理解P:Passage,文章Q:Question,问题A:Answer,答案2.5 开放领域问答的简史Simmons et al. (1964) 首先探索了如何基于匹配问题和答案的依赖关系解析,从说明性文本中回答问题Murax (Kupiec1993) 旨在使用IR和浅层语言处理在在线百科全书上回答问题NIST TREC QA track 始于 1999 年,首次严格调查了对大量文档的事实问题的回答IBM的冒险!System (DeepQA, 2011)提出了一个版本的问题;它使用了许多方法的集合DrQA (Chen et al. 2016) 采用 IR 结合神经阅读理解,将深度学习引入开放领域的 QA2.6 千年之交的完整 NLP 问答复杂的系统,但他们在 事实 问题上做得相当好补充讲解非常复杂的多模块多组件的系统首先对问题进行解析,使用手写的语义规范化规则,将其转化为更好的语义形式在通过问题类型分类器,找出问题在寻找的语义类型信息检索系统找到可能包含答案的段落,排序后进行选择NER识别候选实体再进行判断这样的QA系统在特定领域很有效:Factoid Question Answering 针对实体的问答3.SQuAD问答数据集3.1 斯坦福问答数据集 (SQuAD)Passage 是来自维基百科的一段文本,系统需要回答问题,在文章中找出答案 个样本答案必须是文章中的一系列单词序列也就是提取式问答3.2 SQuAD 评估,v1.1作者收集了3个参考答案系统在两个指标上计算得分精确匹配:1/0的准确度,你是否匹配三个答案中的一个F1:将系统和每个答案都视为词袋,并评估Precision 和 Recall 的调和平均值分数是 (宏观) 平均每题 F1分数F1测量被视为更可靠的指标,作为主要指标使用它不是基于选择是否和人类选择的跨度完全相同,人类选择的跨度容易受到各种影响,包括换行在单次级别匹配不同的答案这两个指标忽视标点符号和冠词 (a, an, the only)3.3 SQuAD 2.0SQuAD1.0 的一个缺陷是,段落中所有问题都有答案系统 (隐式地) 排名候选答案并选择最好的一个,这就变成了一种排名任务你不必判断一个段落区间是否回答了这个问题SQuAD2.0 中 的训练问题没有回答,大约 的开发/测试问题没有回答对于No Answer examples,no answer 获得的得分为 ,对于精确匹配和 F1,任何其他响应的得分都为 SQuAD2.0 最简单的系统方法对于一个 span 是否回答了一个问题有一个阈值评分或者你可以有第二个确认回答的组件类似 自然语言推理 或者 答案验证3.4 得分高的系统并不能真正理解人类语言系统没有真正了解一切,仍然在做一种匹配问题3.5 SQuAD 局限SQuAD 也有其他一些关键限制只有 span-based 答案 (没有 yes / no,计数,隐式的为什么)问题是看着段落构造的通常不是真正的信息需求一般来说,问题和答案之间的词汇和句法匹配比IRL更大问题与文章高度重叠,无论是单词还是句法结构除了共同参照,几乎没有任何多事实/句子推理不过这是一个目标明确,结构良好的干净的数据集它一直是 QA dataset 上最常用和最具竞争力的数据集它也是构建行业系统的一个有用的起点 (尽管域内数据总是很有帮助!)并且我们正在使用它3.6 Stanford Attentive Reader展示了一个最小的,非常成功的阅读理解和问题回答架构后来被称为 the Stanford Attentive Reader首先将问题用向量表示对问题中的每个单词,查找其词嵌入输入到双向 LSTM 中并将最终的 hidden state 拼接再处理文章查找每个单词的词嵌入并输入到双向 LSTM 中使用双线性注意力,将每个LSTM的表示 (LSTM的两个隐藏状态的连接) 与问题表示做运算,获得了不同位置的注意力,从而获得答案的开始位置,再以同样方式获得答案的结束位置为了在文章中找到答案,使用问题的向量表示,来解决答案在什么位置使用注意力3.7 SQuAD v1.1 结果4.斯坦福注意力阅读模型4.1 Stanford Attentive Reader++整个模型的所有参数都是端到端训练的,训练的目标是开始位置与结束为止的准确度,优化有两种方式问题部分不止是利用最终的隐藏层状态,而是使用所有隐层状态的加权和使用一个可学习的向量 与每个时间步的隐层状态相乘深层 LSTM文章中每个token的向量表示 由一下部分连接而成词嵌入 (GloVe 300 维)词的语言特点:POS &NER 标签,one-hot 向量词频率 (unigram 概率)精确匹配:这个词是否出现在问题三个二进制的特征: exact, uncased, lemma对齐问题嵌入 ( 车 与 汽车 )4.2 神经模型的突出效果4.3 这些神经模型做什么?5.BiDAF模型5.1 #论文解读# BiDAF5.2 BiDAF多年来,BiDAF architecture有许多变体和改进,但其核心思想是 the Attention Flow layer思路:attention 应该双向流动——从上下文到问题,从问题到上下文令相似矩阵 ( 的维数为 ) Context-to-Question (C2Q) 注意力 (哪些查询词与每个上下文词最相关)Question-to-Context (Q2C) 注意力 (上下文中最重要的单词相对于查询的加权和——通过 max 略有不对称)通过 max 取得上下文中的每个单词对于问题的相关度对于文章中的每个位置,BiDAF layer 的输出为然后有 modelling 层文章通过另一个深 (双层) BiLSTM然后回答跨度选择更为复杂Start:通过 BiDAF 和 modelling 的输出层连接到一个密集的全连接层然后 softmaxEnd:把 modelling 的输出 通过另一个BiLSTM得到 ,然后再与 BiDAF layer 连接,并通过密集的全连接层和 softmax6.近期前沿模型6.1 最新的、更高级的体系结构2016年、2017年和2018年的大部分工作都采用了越来越复杂的架构,其中包含了多种注意力变体——通常可以获得很好的任务收益人们一直在尝试不同的 Attention6.2 #论文解读# Dynamic CoattentionNetworks for Question Answering(本网络频繁使用到LSTM/GRU结构,具体的RNN细节讲解可以查看ShowMeAI的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与RNN网络,也可以查看本系列的前序文章NLP教程(5) - 语言模型、RNN、GRU与LSTM)缺陷:问题具有独立于输入的表示形式一个全面的QA模型需要相互依赖6.3 Coattention Encoder6.4 Coattention layerCoattention layer 再次提供了一个上下文之间的双向关注问题然而,coattention 包括两级注意力计算:关注那些本身就是注意力输出的表象我们使用C2Q注意力分布 ,求得Q2C注意力输出 的加权和。这给了我们第二级注意力输出 6.5 Co-attention : SQUAD 比赛结果https://rajpurkar.github.io/SQuAD-explorer/6.6 #论文解读# FusionNet注意力机制MLP (Additive) 形式空间复杂度:, W is kxd - Bilinear (Product) form 空间复杂度:更小的空间消耗非线性表达能力6.7 FusionNet试图将多种形式的注意力结合起来6.8 多层次的inter-attention经过多层次的 inter-attention,使用 RNN、self-attention 和另一个 RNN 得到上下文的最终表示 6.9 最近、更先进的结构2016年、2017年和2018年的大部分工作都采用了越来越复杂的体系结构,这些体系结构具有多种不同的关注方式,通常可以获得很好的任务收益7.ELMo与BERT预习与简单介绍7.1 ELMO and BERT 预习7.2 SQUAD 2.0 排行榜,2019-02-077.3 #论文解读7.4 #论文解读# Documen Retriever7.5 #论文解读# DrQA Demo7.6 #论文解读# 一般性问题8.视频教程可以点击 B站 查看视频的【双语字幕】版本9.参考资料本讲带学的在线阅翻页本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)Stanford官网 | CS224n: Natural Language Processing with Deep LearningShowMeAI 系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/251声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。引言学习变长数据的表示学习变长数据的表示,这是序列学习的基本组件序列学习包括 NMT,text summarization,QA,···1.循环神经网络(RNN)通常使用 RNN 学习变长的表示RNN 本身适合句子和像素序列LSTMs, GRUs 和其变体在循环模型中占主导地位但是序列计算抑制了并行化没有对长期和短期依赖关系进行显式建模我们想要对层次结构建模RNNs(顺序对齐的状态)看起来很浪费!2.卷积神经网络(CNN)并行化(每层)很简单利用局部依赖不同位置的交互距离是线性或是对数的远程依赖需要多层3.Attention 注意力NMT 中,编码器和解码器之间的 Attention 是至关重要的为什么不把注意力用于表示呢?3.1 自注意力自注意力机制4.文本生成4.1 自注意力任何两个位置之间的路径长度都是常数级别的门控 / 乘法 的交互可以并行化(每层)可以完全替代序列计算吗?4.2 既有成果Classification & regression with self-attention:Parikh et al.(2016), Lin et al. (2016)Self-attention with RNNs:Long et al.(2016), Shao, Gows et al.(2017)Recurrent attention:Sukhbaatar et al.(2015)4.3 TransformerTransformer结构4.4 编码器与解码器的自注意力编码器的自注意力解码器的自注意力4.5 Attention is Cheap!由于计算只涉及到两个矩阵乘法,所以是序列长度的平方当维度比长度大得多的时候,非常有效4.6 注意力:加权平均4.7 自注意力上例中,我们想要知道谁对谁做了什么,通过卷积中的多个卷积核的不同的线性操作,我们可以分别获取到 who, did what, to whom 的信息。但是对于 Attention 而言,如果只有一个Attention layer,那么对于一句话里的每个词都是同样的线性变换,不能够做到在不同的位置提取不同的信息{>>这就是多头注意力的来源,灵感来源于 CNN 中的多个卷积核的设计<<}Who,Did What,To Whom,分别拥有注意力头将注意力层视为特征探测器可以并行完成为了效率,减少注意力头的维度,并行操作这些注意力层,弥补了计算差距4.8 卷积和多头注意力Different linear transformations by relative position.Parallel attention layers with different linear transformations on input and output.5.Results5.1 机器翻译: WMT-2014 BLEU但我们并不一定比 LSTM 取得了更好的表示,只是我们更适合 SGD,可以更好的训练我们可以对任意两个词之间构建连接6.框架6.1 残差连接的必要性残差连接结构位置信息最初添加在了模型的输入处,通过残差连接将位置信息传递到每一层,可以不需要再每一层都添加位置信息6.2 训练细节ADAM 优化器,同时使用了学习率预热 (warmup + exponential decay)每一层在添加残差之前都会使用dropoutLayer-norm/层归一化有些实验中使用了Attention dropoutCheckpoint-averaging 检查点平均处理Label smoothing 标签平滑Auto-regressive decoding with beam search and length biasing 使用集束搜索和length biasing的自回归解码……6.3 What Matters?6.4 Generating Wikipedia by Summarizing Long Sequences7.自相似度,图片与音乐生成7.1 自相似度,图片与音乐生成7.2 基于概率分布的图像生成模拟像素的联合分布把它变成一个序列建模问题分配概率允许度量泛化RNNs和CNNs是最先进的(PixelRNN, PixelCNN)incorporating gating CNNs 现在在效果上与 RNNs 相近由于并行化,CNN 要快得多图像的长期依赖关系很重要(例如对称性)可能随着图像大小的增加而变得越来越重要使用CNNs建模长期依赖关系需要两者之一多层可能使训练更加困难大卷积核参数/计算成本相应变大7.3 自相似性的研究自相似性的研究案例7.4 非局部均值A Non-local Algorithm for Image Denoising (Buades, Coll, and Morel. CVPR 2005)Non-local Neural Networks (Wang et al., 2018)7.5 既有工作Self-attention:Parikh et al. (2016), Lin et al. (2016), Vaswani et al. (2017)Autoregressive Image Generation:A Oord et al. (2016), Salimans et al. (2017)7.6 自注意力7.7 图像 Transformer7.8 Attention is Cheap if length<<dim!7.9 Combining Locality with Self-Attention将注意力窗口限制为局部范围由于空间局部性,这在图像中是很好的假设7.10 局部1维和2维注意力7.11 图像Transformer层7.12 Task7.13 Resultslmage TransformerParmar , Vaswani,Uszkoreit, Kaiser, Shazeer,Ku, and Tran.ICML 20187.14 无约束图像生成7.15 Cifar10样本7.16 CelebA超分辨率重建7.17 条件图片生成8.相对自注意力音乐生成8.1 音乐和语言的原始表征8.2 音乐语言模型传统的 RNN 模型需要将长序列嵌入到固定长度的向量中8.3 Continuations to given initial motif8.4 音乐自相似度给定一段音乐并生成后续音乐不能直接去重复过去的片段难以处理长距离8.5 注意力:加权平均移动的固定过滤器捕获相对距离Music Transformer 使用平移不变性来携带超过其训练长度的关系信息,进行传递Different linear transformations by relative position.8.6 近观相对注意力相对注意力位置之间的相关性但是音乐中的序列长度通常非常长8.7 机器翻译8.8 既有成果8.9 Our formulation将相对距离转化为绝对距离8.10 Goal of skewing procedure8.11 Skewing to reduce relative memoryfrom O(L2D) to O(LD)8.12 AJazz sample from Music Transformer8.13 Convolutions and Translational Equivariance8.14 Relative Attention And Graphs8.15 Message Passing Neural Networks8.16 多塔结构8.17 图工具库8.18 自注意力任意两个位置之间的路径长度是常数级的没有边界的内存易于并行化对自相似性进行建模相对注意力提供了表达时间、equivariance,可以自然延伸至图表8.19 热门研究领域Non autoregressive transformer (Gu and Bradbury et al., 2018)Deterministic Non-Autoregressive Neural Sequence Modeling by lterative Refinement(Lee,Manismov, and Cho,2018)Fast Decoding in Sequence Models Using Discrete Latent Variables (ICML 2018)Kaiser, Roy, Vaswani, Pamar, Bengio, Uszkoreit, ShazeerTowards a Better Understanding of Vector Quantized AutoencodersRoy,Vaswani, Parmar,Neelakantan, 2018Blockwise Parallel Decoding For Deep Autogressive Models (NeurlPS 2019)Stern, Shazeer,Uszkoreit,9.迁移学习10.优化&大模型Adafactor: Adaptive Learning Rates with Sublinear Memory Cost(ICML 2018).Shazeer,Stern.Memory-Efficient Adaptive Optimization for Large-Scale Learning (2019).Anil,Gupta, Koren, Singer.Mesh-TensorFlow: Deep Learning for Supercomputers (NeurlPS 2019).Shazeer, Cheng,Parmar,Tran, Vaswani, Koanantakool,Hawkins,Lee,Hong,Young, Sepassi, Hechtman) Code (5 billion parameters)11.自注意力其他研究与应用Generating Wikipedia by Summarizing Long sequences.(ICLR 2018). Liu,Saleh,Pot, Goodrich, Sepassi, Shazeer, Kaiser.Universal Transformers (ICLR 2019). Deghiani, Gouws,Vinyals, Uszkoreit,Kaiser.Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context(2019). Dai, Yang,Yang,Carbonell,Le, Salakhutdinov.A Time-Restricted Self-Attention Layer for ASR (ICASSP 2018).Povey,Hadian,Gharemani,Li, Khudanpur.Character-Level Language Modeling with Deeper Self-Attention (2018).Roufou, Choe, Guo, Constant , Jones*12.未来的工作研究方向Self-supervision and classification for images and videoUnderstanding Transfer13.视频教程可以点击 B站 查看视频的【双语字幕】版本14.参考资料本讲带学的在线阅翻页本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)Stanford官网 | CS224n: Natural Language Processing with Deep LearningShowMeAI系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/248声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!本讲内容的深度总结教程可以在这里 查看。视频和课件等资料的获取方式见文末。引言授课计划AnnouncementsIntro to CNNs / 卷积神经网络介绍Simple CNN for Sentence Classification: Yoon (2014) / 应用CNN做文本分类CNN potpourri / CNN 细节Deep CNN for Sentence Classification: Conneauet al. (2017) / 深度CNN用于文本分类Quasi-recurrent Neural Networks / Q-RNN模型欢迎来到课程的下半部分!现在,我们正在为你准备成为 DL+NLP 研究人员/实践者课程不会总是有所有的细节这取决于你在网上搜索/阅读来了解更多这是一个活跃的研究领域,有时候没有明确的答案Staff 很乐意与你讨论,但你需要自己思考作业的设计是为了应付项目的真正困难每个任务都故意比上一个任务有更少的帮助材料在项目中,没有提供 autograder 或合理性检查DL 调试很困难,但是你需要学习如何进行调试!书籍推荐《Natural Language Processing with PyTorch: Build Intelligent Language Applications Using Deep Learning》Delip Rao & Goku Mohandas1.卷积神经网络介绍(卷积神经网络相关内容也可以参考ShowMeAI的对吴恩达老师课程的总结文章 深度学习教程 | 卷积神经网络解读1.1 从RNN到CNN循环神经网络不能捕获没有前缀上下文的短语经常在最终向量中捕获的信息太多来自于最后的一些词汇内容例如:softmax通常只在最后一步计算CNN / Convnet 的主要思路:如果我们为每一个特定长度的词子序列计算向量呢?例如:tentative deal reached to keep government open计算的向量为tentative deal reached, deal reached to, reached to keep, to keep government, keep government open不管短语是否合乎语法在语言学上或认知上不太可信然后将它们分组 (很快)1.2 CNN 卷积神经网络1.3 什么是卷积一维离散卷积一般为:卷积通常地用于从图像中提取特征模型位置不变的识别可以参考斯坦福深度学习与计算机视觉课程cs231n (也可以在ShowMeAI查阅 cs231n 系列笔记学习)二维示例:黄色和红色数字显示过滤器 (=内核) 权重绿色显示输入粉色显示输出1.4 文本的一维卷积用于文本应用的 1 维卷积1.5 带填充的文本的一维卷积输入长度为 的词序列假设单词维度为 4,即有 4 channels卷积后将会得到 1 channel多个channel,则最终得到多个 channel 的输出,关注的文本潜在特征也不同1.6 conv1d,随时间推移填充最大池化平均池化对 feature map 求平均1.7 PyTorch实现Pytorch中的实现:参数很好地对应前面讲到的细节batch_size= 16
word_embed_size= 4
seq_len= 7
input = torch.randn(batch_size, word_embed_size, seq_len)
conv1 = Conv1d(in_channels=word_embed_size, out_channels=3, kernel_size=3) # can add: padding=1
hidden1 = conv1(input)
hidden2 = torch.max(hidden1, dim=2) # max pool1.8 步长 (这里为2)stride 步长,减少计算量1.9 局部最大池化每两行做 max pooling,被称为步长为 2 的局部最大池化1.10 1维卷积的k-max pooling记录每一个 channel 的所有时间的 top k 的激活值,并且按原有顺序保留(上例中的-0.2 0.3)1.11 空洞卷积:dilation为2扩张卷积 / 空洞卷积上例中,对1 3 5行进行卷积,通过两个 filter 得到两个 channel 的激活值可以在第一步的卷积中将卷积核从 3 改为 5,即可实现这样的效果,既保证了矩阵很小,又保证了一次卷积中看到更大范围的句子补充讲解 / SummaryCNN中,一次能看一个句子的多少内容是很重要的概念可以使用更大的 filter、扩张卷积或者增大卷积深度 (层数)2.应用CNN做文本分类2.1 用于句子分类的单层CNN目标:句子分类主要是识别判断句子的积极或消极情绪其他任务判断句子主观或客观问题分类:问题是关于什么实体的?关于人、地点、数字、……一个卷积层和池化层的简单使用词向量:句子: (向量连接)连接 范围内的句子 (对称更常见)卷积核 (作用范围为 个单词的窗口)注意,filter是向量,size 可以是2、3或42.2 单层CNN过滤器 应用于所有可能的窗口(连接向量)为CNN层计算特征(一个通道)句子 所有可能的长度为 的窗口 结果是一个 feature map 2.3 池化与通道数池化:max-over-time pooling layer想法:捕获最重要的激活(maximum over time)从feature map中 池化得到单个数字 使用多个过滤器权重 不同窗口大小 是有用的由于最大池化 ,和 的长度无关所以我们可以有一些 filters 来观察 unigrams、bigrams、tri-grams、4-grams等等2.4 多通道输入数据使用预先训练的单词向量初始化 (word2vec 或 Glove)从两个副本开始只对1个副本进行了反向传播,其他保持静态两个通道集都在最大池化前添加到 2.5 Classification after one CNN layer首先是一个卷积,然后是一个最大池化为了获得最终的特征向量 假设我们有 个卷积核 (滤波器filter) 使用100个大小分别为3、4、5的特征图最终是简单的 softmax layer 补充讲解https://arxiv.org/pdf/1510.03820.pdf输入长度为 7 的一句话,每个词的维度是 5 ,即输入矩阵是 使用不同的 filter_size : (2,3,4),并且每个 size 都是用两个 filter,获得两个 channel 的 feature,即共计 6 个 filter对每个 filter 的 feature 进行 1-max pooling 后,拼接得到 6 维的向量,并使用 softmax 后再获得二分类结果2.6 Regularization 正则化使用 Dropout:使用概率 (超参数) 的伯努利随机变量(只有0 1并且 是为 的概率)创建 mask 向量 训练过程中删除特征解释:防止互相适应(对特定特征的过度拟合)在测试时不适用 Dropout,使用概率 缩放最终向量此外:限制每个类的权重向量的 L2 Norm (softmax 权重 的每一行) 不超过固定数 (也是超参数)如果 ,则重新缩放为 不是很常见3.CNN细节3.1 CNN参数讨论基于验证集 (dev) 调整超参数激活函数:Relu窗口过滤器尺寸每个过滤器大小有 100 个特征映射DropoutKim(2014年) 报告称,从 Dropout 来看,准确率提高了 softmax行的 L2 约束,SGD训练的最小批量:词向量:用 word2vec 预训练,训练过程中,不断检查验证集的性能,并选择最高精度的权重进行最终评估3.2 实验结果不同的参数设置下的实验结果3.3 对比CNN与RNNDropout 提供了 的精度改进但几个比较系统没有使用 Dropout,并可能从它获得相同的收益仍然被视为一个简单架构的显著结果与我们在前几节课中描述的窗口和 RNN 架构的不同之处:池化、许多过滤器和 Dropout这些想法中有的可以被用在 RNNs 中3.4 模型对比词袋模型 / Bag of Vectors:对于简单的分类问题,这是一个非常好的基线。特别是如果后面有几个 ReLU 层 (See paper: Deep Averaging Networks)词窗分类 / Window Model:对于不需要广泛上下文的问题 (即适用于 local 问题),适合单字分类。例如 POS、NER卷积神经网络 / CNN:适合分类,较短的短语需要零填充,难以解释,易于在 gpu 上并行化循环神经网络 / RNN:从左到右的认知更加具有可信度,不适合分类 (如果只使用最后一种状态),比 CNNs 慢得多,适合序列标记和分类以及语言模型,结合注意力机制时非常棒补充讲解RNN对序列标记和分类之类的事情有很好的效果,以及语言模型预测下一个单词,并且结合注意力机制会取得很好的效果,但是对于某个句子的整体解释,CNN做的是更好的3.5 跳接结构应用我们在 LSTMs 和 GRUs 中看到的 门/跳接 是一个普遍的概念,现在在很多地方都使用这个概念你还可以使用 **纵向** 的门实际上,关键的概念——用快捷连接对候选更新求和——是非常深的网络工作所需要的Note:添加它们时,请将 填充成conv一样的维度,再求和3.6 批归一化BatchNorm常用于 CNNs通过将激活量缩放为零均值和单位方差,对一个 mini-batch 的卷积输出进行变换这是统计学中熟悉的 Z-transform但在每组 mini-batch 都会更新,所以波动的影响不大使用 BatchNorm 使模型对参数初始化的敏感程度下降,因为输出是自动重新标度的也会让学习率的调优更简单,模型的训练会更加稳定PyTorch:nn.BatchNorm1d3.7 1x1卷积1x1的卷积有作用吗?是的。1x1 卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为1的卷积内核1x1 卷积提供了一个跨通道的全连接的线性层它可以用于从多个通道映射到更少的通道1x1 卷积添加了额外的神经网络层,附加的参数很少与全连接 (FC) 层不同——全连接(FC)层添加了大量的参数3.8 CNN 应用:机器翻译最早成功的神经机器翻译之一使用CNN进行编码,使用RNN进行解码Kalchbrennerand Blunsom(2013) Recurrent Continuous Translation Models3.9 #论文解读# Learning Character-level Representations for Part-of-Speech Tagging对字符进行卷积以生成单词嵌入固定窗口的词嵌入被用于 POS 标签3.10 #论文解读# Character-Aware Neural Language Models基于字符的单词嵌入利用卷积、highway network 和 LSTM4.深度CNN用于文本分类4.1 深度卷积网络用于文本分类起始点:序列模型 (LSTMs) 在 NLP 中占主导地位;还有CNNs、注意力等等,但是所有的模型基本上都不是很深入——不像计算机视觉中的深度模型当我们为 NLP 构建一个类似视觉的系统时会发生什么从字符级开始工作4.2 VD-CNN 结构整个系统和视觉神经网络模型中的 VGG 和 ResNet 结构有点像不太像一个典型的深度学习 NLP 系统结果是固定大小,因为文本被截断或者填充成统一长度了每个阶段都有局部池化操作,特征数量 double4.3 VD-CNN的卷积模块每个卷积块是两个卷积层,每个卷积层后面是 BatchNorm 和一个 ReLU卷积大小为 3pad 以保持 (或在局部池化时减半) 维数4.4 实验结果使用大文本分类数据集比 NLP 中经常使用的小数据集大得多,如Yoon Kim(2014) 的论文补充讲解以上数据均为错误率,所以越低越好深度网络会取得更好的结果,残差层取得很好的结果,但是深度再深时并未取得效果提升实验表明使用 MaxPooling 比 KMaxPooling 和 使用 stride 的卷积 的两种其他池化方法要更好ConvNets 可以帮助我们建立很好的文本分类系统4.5 RNNs比较慢RNNs 是深度 NLP 的一个非常标准的构建块但它们的并行性很差,因此速度很慢想法:取 RNNs 和 CNNs 中最好且可并行的部分5.Q-RNN模型5.1 Quasi-Recurrent Neural Network努力把两个模型家族的优点结合起来时间上并行的卷积,卷积计算候选,遗忘门和输出门跨通道并行性的逐元素的门控伪递归是在池化层中完成的5.2 Q-RNN 实验:语言模型5.3 Q-RNNs:情感分析通常比 LSTMs 更好更快可解释更好5.4 QRNN 的限制对于字符级的 LMs 并不像 LSTMs 那样有效建模时遇到的更长的依赖关系问题通常需要更深入的网络来获得与 LSTM 一样好的性能当它们更深入时,速度仍然更快有效地使用深度作为真正递归的替代5.5 RNN的缺点&Transformer提出的动机我们希望能够并行加速,但 RNN 是串行的尽管 GRUs 和 LSTMs,RNNs 通过注意力机制可以捕捉到长时依赖,但随着序列增长,需要计算的路径也在增长如果注意力机制本身可以让我们关注任何位置的信息,可能我们不需要 RNN?6.视频教程可以点击 B站 查看视频的【双语字幕】版本7.参考资料本讲带学的在线阅翻页本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)Stanford官网 | CS224n: Natural Language Processing with Deep LearningShowMeAI 系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来
NLP教程(8) - NLP中的卷积神经网络
作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/article-detail/247声明:版权所有,转载请联系平台与作者并注明出处收藏ShowMeAI查看更多精彩内容本系列为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》的全套学习笔记,对应的课程视频可以在 这里 查看。ShowMeAI为CS224n课程的全部课件,做了中文翻译和注释,并制作成了 GIF动图!点击 第11讲-NLP中的卷积神经网络 查看的课件注释与带学解读。更多资料获取方式见文末。引言CS224n是顶级院校斯坦福出品的深度学习与自然语言处理方向专业课程,核心内容覆盖RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。本篇笔记对应斯坦福CS224n自然语言处理专项课程的知识板块:NLP中的卷积神经网络。主要讲解卷积神经网络的结构,及其在NLP场景下的使用方式,一些模块和可调结构。笔记核心词卷积神经网络 / CNN卷积层池化层多卷积核多通道 / Multiple-Channels卷积核N-gramfilterk-max pooling文本分类1.NLP中的卷积神经网络1.1 为什么使用CNN卷积神经网络是一种特殊结构的神经网络,最早被广泛应用于计算机视觉领域,但在NLP领域同样有着显著的应用效果。它相对于传统神经网络,引入了局部感受野和多滤波器概念,能在控制参数量的情况下,对输入数据进行高效地处理。具体到NLP中,它接收词向量的序列,并首先为所有子短语创建短语向量(embedding),然后CNNs 基于卷积核并行完成数据处理计算。(关于CNN的细节也可以参考ShowMeAI的对吴恩达老师课程的总结文章 深度学习教程 | 卷积神经网络解读,内含动图讲解)1.2 什么是卷积我们从一维的情况开始。考虑两个一维向量 和 ,其中 是主向量, 是 filter。 和 之间的卷积,第 项处的值表示为 ,它等于 。对于二维卷积而言,计算如下所示, 的绿色矩阵表示关注的主矩阵 (在实际应用中就是输入数据矩阵)。 的红色矩阵表示 filter ,当前正在计算的卷积位于起始位置,计算方式为 filter 和 input 区域的逐元素乘法再求和,计算结果为4。这里使用 ShowMeAI 深度学习教程 | 卷积神经网络解读 文章中的一个动态计算过程:1.3 卷积层讲解考虑单词向量 和一个 个单词的句子的单词向量串联, 。最后,考虑卷积滤波器 ,即作用于 个单词。对于 ,上图为NLP的单层卷积层。在 the country of my birth 这个句子中,连续三个单词的每一个可能组合都将得到一个值。注意,滤波器 本身是一个向量,我们将有 来给出 。最后两个时间步,即从 my 或 birth 开始,我们没有足够的字向量来与滤波器相乘(因为 )。如果我们需要与后两个词向量相关的卷积,一个常见的技巧是用个零向量填充句子的右边,如上图所示。1.4 池化层讲解假设我们不使用补零,我们将得到最终的卷积输出, 有 个数。通常,我们希望接收CNN的输出,并将其作为输入,输入到更深层,如前馈神经网络或RNN。但是,所有这些都需要一个固定长度的输入,而CNN输出的长度依赖于句子的长度 。解决这个问题的一个聪明的方法是使用max-pooling。CNN的输出 是 max-pooling 层的输入。max-pooling 的输出层 ,因此 。我们也可以使用最小池化,因为通常我们使用 ReLU 作为非线性激活函数而ReLU的下界是 。因此,一个最小池化可能会被 ReLU 覆盖,所以我们几乎总是使用最大池化而不是最小池化。1.5 多卷积核在上面与图2相关的例子中,我们有 ,这意味着我们只使用一个特定的组合方法,即使用过滤器来查看 bi-grams。我们可以使用多个 bi-grams 过滤器,因为每个过滤器将学习识别不同类型的 bi-grams。更一般地说,我们并不仅限于使用 bi-grams ,还可以使用 tri-grams、 quad-grams 甚至更长的过滤器。每个过滤器都有一个关联的最大池化层。因此,CNN 层的最终输出将是一个长度等于过滤器数量的向量。1.6 多通道如果我们允许梯度流入这里使用的单词向量,那么单词向量可能会随着训练而发生显著变化。这是需要的,因为它将单词向量专门用于当前特定任务(远离 GloVe 初始化)。但是,如果单词只出现在测试集中而没有出现在训练集上呢?虽然出现在训练集中的其他语义相关的单词向量将从它们的起始点显著移动,但是这些单词仍将处于它们的初始点。神经网络将专门用于已更新的输入。因此,我们在使用这些单词的句子中会表现得很差。一种方法是维护两组单词向量,一组“静态”(没有梯度流)和一组“动态”(通过 SGD 更新)。它们最初是一样的(GloVe 或者其他初始化)。这两个集合同时作为神经网络的输入。因此,初始化的词向量在神经网络的训练中始终起着重要的作用。在测试中给出看不见的单词可以提高正确理解的几率。有几种处理这两个 channel 的方法,最常见的是在 CNN 中使用之前对它们进行平均。另一种方法是将 CNN 过滤器的长度加倍。也可以在经过卷积层之后得到feature maps再进行合并(比如下图一样做pooling操作合并)1.7 CNN结构选择1) 宽卷积还是窄卷积参见上图。另一种问这个问题的方法是我们应该缩小还是扩大?即我们是否使用 zero-pad?如果我们使用窄卷积,我们只在一个滤波器的所有分量都有一个匹配输入分量的位置计算卷积。在输入的开始和结束边界处显然不是这样,如图4中的左侧网络所示。如果我们使用宽卷积,我们有一个输出分量对应于卷积滤波器的每个对齐。为此,我们必须在输入的开始和结束处填充 个零。在窄卷积情况下,输出长度为 ,而在宽卷积情况下,输出长度为 。2) k-max池化这是对最大池化层的概括。k-max 池化层不是只从它的输入中选择最大的值,而是选择 个最大的值(并且保持原有的顺序)。设置 则是我们前面看到的最大池化层。2.参考资料本教程的在线阅读版本《斯坦福CS224n深度学习与自然语言处理》课程学习指南《斯坦福CS224n深度学习与自然语言处理》课程大作业解析【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)ShowMeAI 系列教程推荐大厂技术实现 | 推荐与广告计算解决方案大厂技术实现 | 计算机视觉解决方案大厂技术实现 | 自然语言处理行业解决方案图解Python编程:从入门到精通系列教程图解数据分析:从入门到精通系列教程图解AI数学基础:从入门到精通系列教程图解大数据技术:从入门到精通系列教程图解机器学习算法:从入门到精通系列教程机器学习实战:手把手教你玩转机器学习系列深度学习教程 | 吴恩达专项课程 · 全套笔记解读自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读NLP系列教程文章NLP教程(1)- 词向量、SVD分解与Word2vecNLP教程(2)- GloVe及词向量的训练与评估NLP教程(3)- 神经网络与反向传播NLP教程(4)- 句法分析与依存解析NLP教程(5)- 语言模型、RNN、GRU与LSTMNLP教程(6)- 神经机器翻译、seq2seq与注意力机制NLP教程(7)- 问答系统NLP教程(8)- NLP中的卷积神经网络NLP教程(9)- 句法分析与树形递归神经网络斯坦福 CS224n 课程带学详解斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步斯坦福NLP课程 | 第2讲 - 词向量进阶斯坦福NLP课程 | 第3讲 - 神经网络知识回顾斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图斯坦福NLP课程 | 第5讲 - 句法分析与依存解析斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验斯坦福NLP课程 | 第10讲 - NLP中的问答系统斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络斯坦福NLP课程 | 第12讲 - 子词模型斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型斯坦福NLP课程 | 第15讲 - NLP文本生成任务斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络斯坦福NLP课程 | 第19讲 - AI安全偏见与公平斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来