(十五)写在最后——课程总结和个人体会

2021SC@SDUSC

前言

经过本学期的软件工程创新实践这门课程,我对一次完整的科研活动有了初步的了解。在完成这项项目期间,学习了与自然语言处理相关的诸多知识,包括但不限于word2vec、马尔可夫过程、隐马尔可夫链、PageRank算法;同时对nlp领域的常见工具包有了初步的了解并学会了基本的使用方法,例如nltk、StandfordNLP、jieba分词;为了完成项目,还了解了多种实用工具,如docker(运行StandfordNLP)、Scrapy(爬取百度学术数据集)、neo4j(知识图谱制作)、redis(储存为爬虫构造的代理池)等。

本篇博客将对这门课程进行总结,同时记录自己的心得体会。

完成了什么

1.论文解读:PositionRank: An Unsupervised Approach to Keyphrase Extractionfrom Scholarly Documents
(二)PositionRank: An Unsupervised Approach to Keyphrase Extractionfrom Scholarly Documents解读一
(六)PositionRank: An Unsupervised Approach to Keyphrase Extractionfrom Scholarly Documents解读二

2.PositionRank代码分析
(三)Position Rank代码解读(一)
(七)PositionRank代码分析(二)
(八)PositionRank代码解读(三)
(十二)PositionRank代码解读(四)

3.PositionRank部署与调试
(四)在项目原数据集上运行Position Rank代码存在的问题

4.爬取数据集;修改PositionRank源码,引入StandfordNLP,使之支持中文处理。
(五)爬取项目数据集
(九)将PositionRank模型运行到给定数据集上(一)
(十)将PositionRank模型运行到给定数据集上(二)
(十一)将PositionRank模型运行到给定数据集上(三)
(十三)将PositionRank模型运行到给定数据集上(四)
(十四)在百度学术中文数据集上运行PositionRank获取最终实验结果

学到了什么

(这里只总结之前博客没有提到的部分知识)

1.word2vec

PositionRank没有word2vec的过程,但是作为自然语言处理的重要环节,文本向量化是每一位初学者都应该掌握的知识。

学习过程中读到的最深入浅出的文章是1411.2738.pdf (arxiv.org)

在刚开始接触word2vec时,我通过很多博客对该模型的架构、训练方法有了一定的了解,但不理解为什么该模型可以实现良好的文本向量化效果(即缩短编码长度、向量距离代表语义相似度),而这篇文章对于word2vec的精髓的讲解十分到位。

word2vec有两大模型:skip gram和CBOW,前者是通过(中心词,上下文)训练,后者通过(上下文,中心词)训练,上面提到的那篇文档对两种方式有很细致的说明。

接下来以skip-gram为例,介绍word2vec有效的原因(即为什么可以缩短编码长度、向量距离代表语义相似度)。

skip-gram基本模型如下

这是一个语言模型,输入中心词X预测中心词的可能上下文Y,通俗来讲就是X和Y在一起是人可以理解的内容。但我们训练这个模型的目的不是用来预测Y,而是通过该模型的参数矩阵(下面的W)实现文本向量化。

skip gram基于一个假设:相关的中心词会得到类似的上下文。例如:

软件园(X)是山东大学的一个校区(Y)。

兴隆山(Z)是山东大学的一个校区(Y)。

X和Z得到了相似的Y,因此我们认为X和Z具有相关性。

这一点是很容易理解的,但是word2vec是如何实现结果的相似性反映到输入的相关性的呢?

X:输入词的one-hot编码(1*V)

Y:预测结果的one-hot编码(1*V)
在这里插入图片描述

由于one-hot编码只有一个元素非零,因此和变化矩阵W相乘以后,相当于将W的某一行提取的出来。即每个one-hot编码和W中的某一行一一对应。W通常是一个50-300维的向量,因此存在两行相同的概率趋近于0,可以认为这是一个双射关系。

通过乘以W,实现了对于输入编码的降维,解决了缩短编码长度的问题。

随后将结果矩阵H(1*N)乘以矩阵W‘(N*V),得到结果Y(1*N)。

我们计算两个H向量之间的相似度(H和X一一对应,因此相当于两个X之间的相似度)
在这里插入图片描述

可以看到H之间的相似度等于Y之间的相似度乘以一个常数,因此对于相近的语义信息(Y之间的相似度高),其向量表示(H)的相似度也就越高。

从而解决了第二个问题:向量距离代表语义相似度。

2nlp的预处理

文档解析、词条化(Tokenlizer)、词项归一化、词干还原(Stem)、词形归并、去除停用词(stopwords)、词性标注(pos)。

在常见的nlp工具包中都有实现上述功能的相应方法,其中nltk和standfordNLP中很多方法的名字和参数完全相同。

3隐马尔可夫链

学习PageRank时有提到迭代过程其实是一个马尔可夫过程。而马尔可夫过程是一个可观测状态,如果该状态是由一个隐含状态通过一个发射概率计算得到,那么隐含状态构成一个隐马尔可夫链。简而言之,直观上感觉每个可观测状态之间是相互转换的,但其实可能是隐含状态相互转换,然后隐含状态通过概率反映到可观测状态上(即可观测状态之间没有直接联系)

(很常见的一个例子如下图)

img

img

img

可以参考这篇博客关于隐马尔可夫链定义和基本结构的讲解(92条消息) 隐马尔可夫模型(HMM)详解_Robin Hu的专栏-CSDN博客_隐马尔可夫模型

其中预测问题使用的viterbi算法可以参考(例子通俗易懂,但是概率的表示不严谨):(92条消息) 简单理解viterbi算法_zhangduan8785的博客-CSDN博客_viterbi算法

个人体会

1.刚拿到题目时十分惶恐,很大一部分原因是之前从来没有阅读过全英论文,更没有修改过论文提到的方法为自己所用。但经过论文分析-代码解读以后,我对论文中提到的方法以及其实现有了全面的认识,对代码的修改也就水到渠成。因此在遇到难题时我们可以将问题分解成一些子问题,逐个攻破,难题便迎刃而解。

2.在本学期之前,我常常遇到问题打退堂鼓,对于那些在网上找不到解决方法的问题,我也默认自己解决不了。现在想想其实自己从未有过尝试解决问题,我需要克服的不是问题本身,而是自己的懒惰与不自信。

3.我很享受这种发现问题-简化问题-解决问题的过程,尤其是意识到一个问题有很多解决方法以后去分析比较方法优劣,然后选择最优方法的思考过程。这门课给我带来的最大收获不是对PositionRank的论文、代码结构有多么全面的认识,而是收获了面对问题不退缩的勇气和解决问题的智慧,我相信收获的这些特质终会在未来的某一天发光发热。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值