我的原文:2019-CS224n-Assignment3

上个礼拜做完了,今天做个总结,主要方法和2017年差不多。

机器学习和神经网络 (8分)

这一节没什么难度,认真看 a3.pdf 就行。

Adam的论文:ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

Dropout论文:Dropout: A Simple Way to Prevent Neural Networks from
Overfitting

基于神经Transition的依赖解析 (42分)

依赖解析,就是分析句子的句法结构,建立 head 词和修饰这些head的词之间的关系。这次构建的是 transition-based 解析器,它增量的,每一次只进行一步解析动作来生成依赖关系,每一步解析称为 partial parse,可表示为:

  • 一个 stack ,已被处理的词
  • 一个 buffer ,待处理的词
  • 一个 dependencies ,解析器生成的依赖

初始状态下,stack里有只 ROOT 一个词,在每一次解析中,运行 transition 操作,分为三个类型:

  • SHIFT:将buffer的左边(头部)第一个词取出,放到stack的右边(尾部)
  • LEFT-ARC:将stack的右第二个词作为依赖项,它依赖于右边第一个词,生成一个依赖关系,并删除右第二个词。
  • RIGHT-ARC:将stack的右第一个词作为依赖项,它依赖于右边第二个词,生成一个依赖关系,并删除右第一个词。

当buffer长度为0,stack长度为1(只有ROOT)时就算解析完毕了。

mark

上图是初始操作+三步解析动作的示意图。

若A依赖于B,则B为 head ,A为 dependent,记为 B→AB \rightarrow ABA

几个问题:

问题(b) 6分

长度为n的句子,经过多少步后可以被解析完(用n表示)?简要解析为什么

答:要使buffer长度为0,则需要n步,使stack长度为1,也需要n步,所以经过2n步后解析完毕。

问题© 6分

完成parser_trainsitions.py

init

初始化函数

self.stack = ['ROOT']
self.buffer = self.sentence.copy()
self.dependencies = []

parse_step

注意,stack的栈顶是list的右边,buffer队头是list的左边

if transition == 'S':self.stack.append(self.buffer[0])self.buffer = self.buffer[1:]
elif transition == 'LA':self.dependencies.append((self.stack[-1], self.stack[-2]))self.stack[-2:] = self.stack[-1:]
elif transition == 'RA':self.dependencies.append((self.stack[-2], self.stack[-1]))self.stack.pop()
else:raise Exception('Unknown transition %s' % transition)

minibatch_parse

sentences含多个句子,每个句子都有一个partial parse对象。所以每一次取出一个batch的parse来进行一次transition操作,同时要过滤掉已经完成的parse。

partial_parses = [PartialParse(s) for s in sentences]unfinished_parses = partial_parses.copy()
while len(unfinished_parses) > 0:batch_parses = unfinished_parses[:batch_size].copy()transition = model.predict(batch_parses)for i, parse in enumerate(batch_parses):parse.parse_step(transition[i])if len(parse.stack) == 1 and len(parse.buffer) == 0:unfinished_parses.remove(parse)dependencies = [parse.dependencies for parse in partial_parses]

问题(e) 10分

完成 parser_model.py

实质上就是搭建一个三层的前馈神经网络,用ReLU做激活函数,最后一层用softmax输出,交叉熵做损失函数,同时还加了embedding层

init

初始化三个层,n_features 表示每一个词用几个特征来表示,每一个特征都要embed,所以输入层的大小是 n_features * embed_size

# Input Layer
self.embed_to_hidden = nn.Linear(self.n_features*self.embed_size, self.hidden_size)
nn.init.xavier_uniform_(self.embed_to_hidden.weight, gain=1)# Dropout Layer
self.dropout = nn.Dropout(self.dropout_prob)# Output Layer
self.hidden_to_logits = nn.Linear(self.hidden_size, self.n_classes)
nn.init.xavier_uniform_(self.hidden_to_logits.weight, gain=1)

embedding_lookup

使用的是预训练的embedding(Collobert at. 2011)

x = self.pretrained_embeddings(t)
x = x.view(x.shape[0], x.shape[1]*x.shape[2])

forward

提取特征、输入网络拿到节点,这里没用加softmax层是因为 torch.nn.CrossEntropyLoss 会内部帮我们加

a = self.embedding_lookup(t)
h = self.embed_to_hidden(a)
h = F.relu(h)
h = self.dropout(h)
logits = self.hidden_to_logits(h)

接着完成run.py

train

optimizer = optim.Adam(parser.model.parameters(), lr=lr)
loss_func = nn.CrossEntropyLoss()

train_for_epoch

logits = parser.model(train_x)
loss = loss_func(logits, train_y)loss.backward()
optimizer.step()

参考资料

[1] CS224n: Natural Language Processing with Deep Learning, 2019-03-21.

[2] CS224n Assignment 2, 2019-03-21.

2019-CS224n-Assignment3相关推荐

  1. CS224N Assignment3 #3: Dependency Parsing(2022 winter)

    课程网站:https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1214/ 1. Machine Learning & Neural ...

  2. 2019 CS224N Assignment 1: Exploring Word Vectors

    文章目录 包的导入 Part 1: Count-Based Word Vectors Question 1.1: Implement distinct_words Question 1.2: Impl ...

  3. [转载From少数派] 码字必备:18 款优秀的 Markdown 写作工具 | 2015 年度盘点

    码字必备:18 款优秀的 Markdown 写作工具 | 2015 年度盘点 Codegass 2015年12月31日 47 69 现在是 2015 年底,自 2004 年 John Gruber1 ...

  4. cs224n上完后会会获得证书吗_斯坦福NLP组-CS224n: NLP与深度学习-2019春全套资料分享...

    斯坦福自然语言处理小组2019年的最新课程<CS224n: NLP与深度学习>春季课程已经全部结束了,课程内容囊括了深度学习在各项NLP任务中应用的最新技术,非常值得一看.本文整理本期课程 ...

  5. 【CS224n】(assignment3)Dependency Parsing

    学习总结 (1)关于5个assignment的难度,可以参考斯坦福大佬的CS224作业评论,大体是说今年的transformer成为课程重点,由总助教博三大佬John讲,他原本还想让同学们手写enco ...

  6. CS224n 2019 Winter 笔记(一):Word Embedding:Word2vec and Glove

    CS224n笔记:Word2Vec:CBOW and Skip-Gram 摘要 一.语言模型(Language Model) (一)一元模型(Unary Language Model) (二)二元模型 ...

  7. Task 4: Contextual Word Embeddings (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)

    Task 4: Contextual Word Embeddings 目录 Task 4: Contextual Word Embeddings 词向量的表示 一.Peters et al. (201 ...

  8. CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing)

    CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing) 一.概述 二.语言结构的两种Views (一)成分分析(constituent parsing) ...

  9. cs224n 2019 Lecture 9: Practical Tips for Final Projects

    主要内容: 项目的选择:可以选择默认的问答项目,也可以自定义项目 如何发现自定义项目 如何找到数据集 门神经网络序列模型的复习 关于机器翻译的一些话题 查看训练结果和进行评估 一.项目的选择 默认项目 ...

  10. Task 2: Word Vectors and Word Senses (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)

    Task 2: Word Vectors and Word Senses 目录 Task 2: Word Vectors and Word Senses 一.词向量计算方法 1 回顾word2vec的 ...

最新文章

  1. LeetCode 53. Maximum Subarray--动态规划--C++,Python解法
  2. 操作像素(一)--存取像素值
  3. mysq中文编码问题
  4. 第三阶段:2.产品运营:4.活动运营
  5. 将vim打造成IDE编程环境
  6. nginx优化之请求直接返回json数据
  7. EMR Spark Runtime Filter性能优化
  8. 贪心——你可以获得的最大硬币数目(Leetcode 1561)
  9. vue的$message(提示框换行)
  10. 金蝶移动bos开发教程_移动安全(四)|NDK开发教程_JavaToC
  11. BZOJ2151 种树
  12. ida 反编译 php,飘云阁安全论坛在IDA pro中的这样一段反编译代码能够改写成易语言吗 - Powered by Discuz!...
  13. Qt之QSS使用与基本语法
  14. 升级鸿蒙谷歌框架下载,网友Mate 40 Pro+升级鸿蒙2.0:谷歌服务不受影响
  15. WPS和Office 字体乱码问题
  16. chromecast 断电重启后时间错误
  17. 【20考研】考研数学 复习书籍推荐!
  18. 不知道如何压缩PDF?教你3个压缩PDF文件方法
  19. 一行Python代码去除照片背景
  20. 2021-07-04 【5】

热门文章

  1. excel函数公式大全
  2. android助手盒子版,小米盒子助手
  3. 百度换肤功能实现(vue)
  4. 企业全链路数字化营销一站式解决方案
  5. 软件开发模式有哪些?
  6. UDS/OBD DTC(诊断故障码)格式解析
  7. 4k视频分辨率的码流_4k分辨率普通码率和蓝光1080p高码率视频,到底哪个体验好?...
  8. 打开方式怎么用计算机程序,设置电脑默认软件打开方式的方法
  9. 游戏开发入门终极指南(技术资源大合集)
  10. 安卓手机通电自动开机,自动执行脚本,断电关机,连接电源手机自动开机,断电关机