开源的学习资源:《NLP 新手入门指南》,项目作者为北京大学 TANGENT 实验室成员。 该指南主要提供了 NLP 学习入门引导、常见任务的开发实现、各大技术教程与文献的相关推荐等内容,是一份非常全的适合新手小白初学入门的权威指南。 值得mark!

以下正文:

本教程供新加入 TANGENT 实验室的同学入门 NLP 使用

写在前面

相信大家经过几年的学习,已经拥有了以下的技能:

  1. 优秀的信息检索能力,无论是在论文阅读、写代码、使用服务器、写论文等过程中都有可能遇到各种各样的问题,在询问他人之前,请善用搜索
  2. 优秀的英文阅读能力和基本的英语写作能力
  3. 良好的编程能力,在 NLP 相关研究中,我们通常会使用 Python,如果你之前只学过 C 或者 C++,那么入门 Python 对于你来说将不是一件难事。 我们一般使用 Anaconda(Miniconda)来管理个人电脑乃至 Linux 服务器上的 Python 环境,请提前安装并学习 conda 的使用。 此外在科研中我们经常会与他人合作,因此请保持良好的代码习惯,如果你不了解代码规范,请参考 Google 的 Python 代码规范
  4. 数学基础,作为一名理工科的学生,你应该已经学过高等数学(数学分析)、线性代数(高等代数)、概率论与统计等基础数学课程,在入门阶段我们涉及到的数学知识较为简单,但是扎实的数理基础会支撑你走得更深更远。
  5. 最好拥有 Linux 系统使用经验,目前是深度学习的时代,对于自然语言处理领域,又是大规模预训练语言模型的时代,个人电脑无法支撑大模型的训练,我们将使用 Linux 服务器进行 Coding 和实验,提前了解工作流程会大大提高效率。 本教程动手实践部分基于 CNN 和 RNN(LSTM)的模型理论上可以在个人电脑上运行,如需 GPU 资源,请联系实验室服务器管理员。

基础知识

我们默认大家已经完成了计算机专业本科一年级和二年级的相关课程,拥有一定的数学和编程基础

机器学习

虽然目前是深度学习的时代,我们也很少使用传统机器学习的算法来解决问题,但是一方面一些基础概念仍然是相通的,另一方面经典机器学习算法的思想,如 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:

  • Computational Social Science and Cultural Analytics
  • Dialogue and Interactive Systems
  • Discourse and Pragmatics
  • Ethics and NLP
  • Generation
  • Information Extraction
  • Information Retrieval and Text Mining
  • Interpretability and Analysis of Models for NLP
  • Language Grounding to Vision, Robotics and Beyond
  • Linguistic Theories, Cognitive Modeling, and Psycholinguistics
  • Machine Learning for NLP
  • Machine Translation and Multilinguality
  • NLP Applications
  • Phonology, Morphology, and Word Segmentation
  • Question Answering
  • Resources and Evaluation
  • Semantics: Lexical
  • Semantics: Sentence-level Semantics, Textual Inference, and Other Areas
  • Sentiment Analysis, Stylistic Analysis, and Argument Mining
  • Speech and Multimodality
  • Summarization
  • Syntax: Tagging, Chunking and Parsing

可以看到 NLP 这个语言学和计算机科学的交叉学科实在是包含了太多的研究方向,而其中除了机器翻译(MT)、摘要、QA 这些大家早有耳闻的应用,剩下的相信初学者大多从未听说过,即使是一位 NLP 研究者或从业人员也只能对这个列表中的某一个或几个方面有深入的研究。

想要对 NLP 是研究什么的有个大致的了解,首先我们可以快速了解深度学习时代 NLP 发展历史:A Review of the Neural History of Natural Language Processing,然后我们可以通过课程或书籍进行系统的学习:

  • 网课:

    • Stanford cs224n(强烈推荐,主讲人是绝对的大牛 Christopher Manning,此课程从深度学习的角度出发对 NLP 进行全面的介绍,而其中的 talk 又涉及学术最前沿的进展,可谓广度与深度俱全)
    • CMU CS 11-747
  • 书:
    • 统计自然语言处理(宗成庆)成书年代较早,具体方法与当下有较大距离,可了解 NLP 基本问题
    • 现代自然语言生成(黄民烈),关注自然语言生成(Natural Language Generation,NLG)
    • 自然语言处理:基于预训练模型的方法(车万翔),当今预训练语言模型(Pretrained Language Model,PLM)俨然成为了 NLP 中的“基础设施”(Foundation Model),“预训练-微调”(Pretrain & Fine-tune)也成为了应用中的基本范式,因此我们同样需要了解基于预训练模型的方法

文献阅读

Google Scholar

Google Scholar 可以理解为学术界的 Google

会议论文

我们主要阅读国际会议论文,相关的会议有:

  • 自然语言处理相关会议:ACL, EMNLP, NAACL, COLING(按影响力排序)
  • ML 理论:ICML, NeurIPS, ICLR
  • AI 应用:AAAI, IJCAI(这两个会议近年来影响力下降)

其中,ACL 系会议提供 anthology (https://aclweb.org/anthology/)

前沿进展

如果想了解某一个领域的前沿进展,通常会关注 arXiv(预印本),部分作者会选择在发表前将论文上传至 arXiv。arXiv 在工作日每日更新,便于及时追踪前沿动态

工具

经典论文往往在 CSDN、知乎等平台有中文读后感,可以辅助阅读

文献分类整理是一个好习惯,建议根据个人喜好选择诸如 Zotero(界面简洁、跨平台、免费、扩展丰富), Endnote, Mendeley, Papers 等文献管理软件

初学时做好论文笔记,可以使用 Markdown,也可以使用 Notion、Obsidian、OneNote 等笔记软件

动手实践

作为计算机科学的一个分支,NLP 同样离不开代码,请有志加入 TANGENT 的同学完成以下练习任务。

写在前面

在完成这些任务之前,还是需要一些说明。

一个深度学习项目的流程通常是这样的:

  1. 数据读取和预处理,得到 Dataset 和 DataLoader
  2. 构建 Model、Optimizer
  3. 使用随机梯度下降迭代优化模型参数
  4. 设置 Metric,对模型进行评测

通常我们也会按照上述流程和流程中出现的各个模块组织项目文件,一个项目往往会包含这些文件:主函数(入口,负责以上流程的控制),数据读取和预处理,模型,Metric。

我们针对任务二,给出了一个 ChineseNER 完整项目的源代码。需注意,下面部分任务参考代码是以 Notebook 的形式组织的,在完成任务时,请参考 ChineseNER 重新组织代码。

任务一:基于深度学习的文本分类

文本分类是入门 NLP 的一个好的开始,同时 NLU(自然语言理解)任务本质上来说都可以归类为文本分类。请使用 CNN 或 RNN(LSTM) 完成 Kaggle 上一个简单的文本分类任务。

任务描述 & 数据集:https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews/

Kaggle 里也有一些代码可以参考,如:LSTM 实现

参考文献: 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)

任务二:基于 LSTM-CRF 的命名实体识别

在 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 层。

任务三:Neural Machine Translation (NMT)

摘要和翻译是文本生成中比较主流的两大任务,在这里我们选取 PyTorch tutorial 中的文本翻译作为入门项目。

请按照 PyTorch 文本翻译教程,一步步实现一个简单的文本翻译模型,注意请参考 ChineseNER 的组织方式重构代码。

生成任务涉及到的细节较多,如 encoder-decoder,teacher forcing,beam search 等,tutorial 中给出了深入浅出的介绍,请仔细阅读并理解。

任务四:Transformer & PLM

以 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。

本仓库的使用说明

  1. 有问题就提在issues里面,同理你也可以在issues里面检索是否已经有你遇到的问题;
  2. main分支无法直接修改,所有修改均需要通过提交Pull requests来实现,必须选择至少一个reviewer,推荐选择大师兄Yifan-Song793来review;
  3. git commit的规范看这里,禁止使用意义不明的test、add等语句。

首次转载:孤飞-博客园

个人博客:https://blog.onefly.top

仓库地址:PKU-TANGENT/nlp-tutorial: NLP新手入门教程 (github.com)

NLP新手入门指南|北大-TANGENT的更多相关文章

  1. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  2. OKR新手入门指南 (第一部分)

    什么是OKR? OKR(目标和关键结果)是Google和其他公司使用的目标系统.这是一个简单的工具,围绕可衡量的目标进行调整和互动. OKR:Google的目标设定方法 与传统的规划方法有何不同? O ...

  3. yii2实战教程之新手入门指南-简单博客管理系统

    作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...

  4. Vue的理解:Vue.js新手入门指南----转

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  5. Vue.js新手入门指南

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  6. Wintel物联网平台-Windows IoT新手入门指南

    1. 引言 近期,微软跟进物联网的速度也在不断加速,除了微软手环,.NET MicroFramework,还有一个叫做Windows IoT的项目.该项目早在今年4月份的Build大会上就提出来了,7 ...

  7. PHP 之 Composer 新手入门指南

    自2012年3月1日发布以来,Composer因提供了PHP迫切需要的东西:依赖项管理而广受欢迎.实际上,Composer是将所有第三方软件(例如CSS框架,jQuery插件等)引入你的项目的一种方法 ...

  8. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  9. 【翻译】Fluent NHibernate介绍和入门指南

    英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...

随机推荐

  1. 详细图解 Netty Reactor 启动全流程 | 万字长文 | 多图预警

    本系列Netty源码解析文章基于 4.1.56.Final版本 大家第一眼看到这幅流程图,是不是脑瓜子嗡嗡的呢? 大家先不要惊慌,问题不大,本文笔者的目的就是要让大家清晰的理解这幅流程图,从而深刻的理 ...

  2. Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制

    本节翻译自:https://blog.paperspace.com/how-to-implement-a-yolo-v3-object-detector-from-scratch-in-pytorch ...

  3. 聊一聊 C# 后台GC 到底是怎么回事?

    一:背景 写这一篇的目的主要是因为.NET领域内几本关于阐述GC方面的书,都是纯理论,所以懂得人自然懂,不懂得人也没法亲自验证,这一篇我就用 windbg + 源码 让大家眼见为实. 二:为什么要引入 ...

  4. NOI / 1.2编程基础之变量定义、赋值及转换全题详解(5063字)

    目录 01:整型数据类型存储空间大小 02:浮点型数据类型存储空间大小

  5. Python下载网易云收藏

    提前声明 仅作为个人学习使用,任何版权问题作者概不负责 本文的语言不会且不可能很严谨 博客园的编辑器有点BUG把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...

  6. 常用的函数式接口_Consumer接口和常用的函数式接口_Consumer接口的默认方法andThen

    Consumer接口 java,util.function.Consumer接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定 抽象方法:accept C ...

  7. CMake库搜索函数居然不搜索LD_LIBRARY_PATH

    摘要: 本文通过编译后运行找不到库文件的问题引入,首先分析了find_package(JNI)的工作流程,而后针对cmake不搜索LD_LIBRARY_PATH的问题,提出了一种通用的解决办法. 本文 ...

  8. 开源一个自动整理B站UWP客户端软件进行批量下载的视频文件的小工具BiliVideosReoganizeHelper​

    ​ 大家都知道B站是一个很受欢迎的视频学习网站,上面有很多无私的up主上传了大量优秀的教学视频,在此向B站致敬,向广大UP主致敬. 有时,我们需要下载收藏一些视频,以防止以后找不到了.那么我们可以用B ...

  9. 万字长文:从计算机本源深入探寻volatile和Java内存模型

    万字长文:从计算机本源深入探寻volatile和Java内存模型 前言 在本篇文章当中,主要给大家深入介绍Volatile关键字和Java内存模型.在文章当中首先先介绍volatile的作用和Java ...

  10. 技术分享 | 浅谈mysql语法解析调试方法

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文向您介绍一种利用mysql解析器和bison的调试选项进行sql语法解析跟踪 ...