开源的学习资源:《NLP 新手入门指南》,项目作者为北京大学 TANGENT 实验室成员。 该指南主要提供了 NLP 学习入门引导、常见任务的开发实现、各大技术教程与文献的相关推荐等内容,是一份非常全的适合新手小白初学入门的权威指南。 值得mark!
以下正文:
本教程供新加入 TANGENT 实验室的同学入门 NLP 使用
PKU-TANGENT nlp-tutorial
相信大家经过几年的学习,已经拥有了以下的技能:
我们默认大家已经完成了计算机专业本科一年级和二年级的相关课程,拥有一定的数学和编程基础
虽然目前是深度学习的时代,我们也很少使用传统机器学习的算法来解决问题,但是一方面一些基础概念仍然是相通的,另一方面经典机器学习算法的思想,如 EM、LDA 等,在深度学习时代往往能够历久弥新,以另一种方式焕发出新的光彩。 对于想要快速入门的初学者来说,建议先熟悉机器学习基础概念(什么是机器学习,机器学习用来干什么,什么是数据集,如何对机器学习算法进行评测等),了解几种具体的经典机器学习算法。
对于初学者可以学习:
如果想更深地了解:
深度学习的发展为我们的世界带来了巨大的改变,2018的图灵奖也颁给了对深度学习有卓越贡献的 Yoshua Bengio、Yann LeCun、Geoffrey Hinton。
书:Deep Learning(GoodFellow, Bengio, Courville),神经网络与深度学习(邱锡鹏)
对于初学者来说,仅仅了解深度学习的基本概念、基本算法是不够的,更应当到代码当中去获得更为直观和深入的认识。大家可能也听说过 TensorFlow、PyTorch 这样的深度学习框架,目前学术界通常使用 PyTorch。
PyTorch 对初学者也提供了快速入门指南和 tutorial,对于 tutorial,建议从简单的图像分类算法学起,然后再进一步学习简单的文本分类、简单的文本生成等自然语言处理相关教程。
PyTorch 提供了非常详细的文档,遇到不明白的函数、概念都可以在文档中进行查询和学习
我们实验室的名称为计算语言学研究所,通常意义上计算语言学(Computational Linguistics,CL)属于语言学的一个分支,而自然语言处理(Natural Language Processing,NLP),在现代意义上两者往往会混为一谈。
什么是自然语言处理或者计算语言学?这里摘抄一段 The Association for Computational Linguistics (ACL) 的介绍: "Computational linguistics is the scientific study of language from a computational perspective. Computational linguists are interested in providing computational models of various kinds of linguistic phenomena. These models may be "knowledge-based" ("hand-crafted") or "data-driven" ("statistical" or "empirical"). Work in computational linguistics is in some cases motivated from a scientific perspective in that one is trying to provide a computational explanation for a particular linguistic or psycholinguistic phenomenon; and in other cases the motivation may be more purely technological in that one wants to provide a working component of a speech or natural language system. Indeed, the work of computational linguists is incorporated into many working systems today, including speech recognition systems, text-to-speech synthesizers, automated voice response systems, web search engines, text editors, language instruction materials, to name just a few."
NLP 包含哪些 topic 呢?同样是摘抄自 60th Annual Meeting of the Association for Computational Linguistics 的 Submissions Topics:
可以看到 NLP 这个语言学和计算机科学的交叉学科实在是包含了太多的研究方向,而其中除了机器翻译(MT)、摘要、QA 这些大家早有耳闻的应用,剩下的相信初学者大多从未听说过,即使是一位 NLP 研究者或从业人员也只能对这个列表中的某一个或几个方面有深入的研究。
想要对 NLP 是研究什么的有个大致的了解,首先我们可以快速了解深度学习时代 NLP 发展历史:A Review of the Neural History of Natural Language Processing,然后我们可以通过课程或书籍进行系统的学习:
网课:
书:
Google Scholar 可以理解为学术界的 Google
我们主要阅读国际会议论文,相关的会议有:
其中,ACL 系会议提供 anthology (https://aclweb.org/anthology/)
如果想了解某一个领域的前沿进展,通常会关注 arXiv(预印本),部分作者会选择在发表前将论文上传至 arXiv。arXiv 在工作日每日更新,便于及时追踪前沿动态
经典论文往往在 CSDN、知乎等平台有中文读后感,可以辅助阅读
文献分类整理是一个好习惯,建议根据个人喜好选择诸如 Zotero(界面简洁、跨平台、免费、扩展丰富), Endnote, Mendeley, Papers 等文献管理软件
初学时做好论文笔记,可以使用 Markdown,也可以使用 Notion、Obsidian、OneNote 等笔记软件
作为计算机科学的一个分支,NLP 同样离不开代码,请有志加入 TANGENT 的同学完成以下练习任务。
在完成这些任务之前,还是需要一些说明。
一个深度学习项目的流程通常是这样的:
通常我们也会按照上述流程和流程中出现的各个模块组织项目文件,一个项目往往会包含这些文件:主函数(入口,负责以上流程的控制),数据读取和预处理,模型,Metric。
我们针对任务二,给出了一个 ChineseNER 完整项目的源代码。需注意,下面部分任务参考代码是以 Notebook 的形式组织的,在完成任务时,请参考 ChineseNER 重新组织代码。
文本分类是入门 NLP 的一个好的开始,同时 NLU(自然语言理解)任务本质上来说都可以归类为文本分类。请使用 CNN 或 RNN(LSTM) 完成 Kaggle 上一个简单的文本分类任务。
任务描述 & 数据集:https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews/
参考文献: Convolutional Neural Networks for Sentence Classification (https://aclanthology.org/D14-1181/) Recurrent Convolutional Neural Networks for Text Classification (https://www.deeplearningitalia.com/wp-content/uploads/2018/03/Recurrent-Convolutional-Neural-Networks-for-Text-Classification.pdf)
在 NLP 中,结构预测(Structured Prediction)是指输出空间为结构化对象的一类任务,包括命名实体识别、关系抽取、共指消解等子任务,命名实体识别又属于序列标注问题。请实现简单的基于 LSTM-CRF 的命名实体识别
任务描述:https://www.clips.uantwerpen.be/conll2003/ner/
数据集:本仓库 CoNLL03 文件夹下
参考文献: Neural Architectures for Named Entity Recognition (https://arxiv.org/pdf/1603.01360.pdf)
为了简化任务难度,我们给出了基于 LSTM 的中文命名实体识别的代码,可参考该代码将其迁移至 CoNLL03 英文数据集上,进行实验观察初步结果,后续再增加 CRF 层。
摘要和翻译是文本生成中比较主流的两大任务,在这里我们选取 PyTorch tutorial 中的文本翻译作为入门项目。
请按照 PyTorch 文本翻译教程,一步步实现一个简单的文本翻译模型,注意请参考 ChineseNER 的组织方式重构代码。
生成任务涉及到的细节较多,如 encoder-decoder,teacher forcing,beam search 等,tutorial 中给出了深入浅出的介绍,请仔细阅读并理解。
以 BERT、GPT 为代表的预训练语言模型(Pretrain Language Model,PLM)的出现使 NLP 翻开了新的一页,目前的预训练语言模型大多基于 Transformer,因此想要追踪前沿 NLP 技术,我们不得不对 Transformer 有深入的理解。
请结合 Attention Is All You Need 原论文,读懂 The Annotated Transformer
建议继续阅读: encoder-decoder 结构 可视化 Transformer 关于 decode
关于预训练语言模型,请阅读 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 并做阅读笔记,重点关注 BERT 是如何训练出来的,以及如何将 BERT 应用于下游任务。
我们在实践中通常会使用 HuggingFace 的 Transformers 库,该库提供了包括 BERT 和 GPT 在内的常见预训练语言模型,代码风格较好,文档详细。我们可以通过 Transformers 教程进行学习。
完成本小节任务后,如果学有余力,可尝试基于 Transformers 库,实现基于 BERT 的文本分类和 NER。
Pull requests
来实现,必须选择至少一个reviewer,推荐选择大师兄Yifan-Song793
来review;首次转载:孤飞-博客园
手机扫一扫
移动阅读更方便
你可能感兴趣的文章