背景:
Getting started,入门指南。
NLP,natural language processing,无非是对文本数据做处理,可应用于智能对话(聊天机器人,例如 Siri/小冰),智能问答(智能客服),机器翻译,搜索引擎(google),等等。本篇主要介绍入门资料去哪里找,以及学习内容的优先级排序。
面向读者:
- 对nlp方向感兴趣,以做项目为导向的学习者
- nlp零基础,希望快速入门
- python选手
概念解释
回顾一下人类是如何理解一段文字的,中英文的处理方式不同,以英文为例。一段话会被拆成一个个句子,一个句子又会被拆成一个个单词,根据单词在句子中的不同位置、单词的单复数、单词的时态等来理解。所以对文字进行分析的操作就很简单明了了。(参考链接)
sentence segmentation(断句)
一般根据标点符号即可进行断句操作。以上面的动图为例,可以分成四个句子。
word tokenization(分词)
你可以很快知道“我爱钞票。”里“我”是一个词,“爱”是另外一个,“钞票”是另外另外一个词。但是机器不知道,所以要做分词。相较于中文,英文比较容易辨识词的属性。英文的句子由一个个单词组成,单词之间以空格隔开,因此空格之间就是一个单词。
“London is the capital and most populous city of England and the United Kingdom.”
上面这句话的分词结果如下,包含标点符号:
“London”, “is”, “ the”, “capital”, “and”, “most”, “populous”, “city”, “of”, “England”, “and”, “the”, “United”, “Kingdom”, “.”
parts-of-speech(词性标注)
区分一个单词是动词/名词/形容词/副词等。(想起曾经被语法支配的恐惧😭)这个词性标注的工作可以根据一个词性分类模型得出。
得出这句话中有名词、动词、限定词、连词、副词、形容词等。
text lemmatization(文本词性还原)
虽说英语是最简单的语义,但是不同词性的单词的变行还是很多的,比如单复数、be动词变形、动词是现在进行时还是过去时等,都还原成最初的样子。
identifying stop-words(识别停用词):
像 “and”, “the”, “a”, “of”, “for” 这种哪里都高频出现会造成统计噪音的词,被称为stop words。下面灰色的“the”, “and”, “most”均为停用词,一般会被直接过滤掉。正如维基所说,现在虽然停用词列表很多,但一定要根据实际情况进行配置。比如英语的the,通常情况是停用词,但很多乐队名字里有the这个词,The Doors, The Who,甚至有个乐队直接就叫The The!这个时候就不能看做是停用词了。
dependency-parsing(解析依赖关系)
解析句子中每个词之间的依赖关系,最终建立起一个关系依赖树。这个数的root是关键动词,从这个关键动词开始,把整个句子中的词都联系起来。
从这个关系树来看,主语是London,它和capital被be联系起来。然后计算机就知道,London is a capital。如此类推,我们的计算机就被训练的掌握越来越多的信息。
named entity recognition(命名实体识别)
来给名词打标签。比如我们可以把第一句话当中的地理名称识别出来。
可以通过这个的链接,在线体验一下。随便复制粘贴一段英文,他会自动识别出里面包含哪些类别的名词。
conference resolution(共指消解)
指代词,比如他,它,这个,那个,前者,后者等。再比如缩写简称,北京大学通常称为北大,中华人民共和国通常就叫中国。这种现象,被称为共指现象。
word embedding(词嵌入):通常是深度学习第一步,将文本转换成数字形式,这样才能丢进去训练。将一句话变成一个向量,每个单词与数字一一对应。
- word2vec
- GloVe
sentiment analysis(情感分析):判断一段文字的情绪。比如淘宝评价文字是喜欢还是不喜欢这个商品,影评文字是看好还是不看好这个电影。
semantic retrieval(语义召回):把意思相同的信息从语料库/知识库中统统找出来。
matching(匹配)
- semantic matching(语义匹配):判断两句话说的是不是一个意思。比如在知乎提问后,系统需要搜索出相关问题的答案来显示。
- term matching:所谓的 Ctrl+F,只匹配是否有这个词。比如搜索词是taxi,那么就算有‘的士’的信息也搜不出来。
智能问答框架一览
以百度的开源AnyQ为例,这是一个问答系统框架:
- Question Analysis:来了一个问题先进行文字预处理,纠正错别字/命名实体识别/词性标注/词嵌入等。
- Retrieval:可用深度学习神经网络进行语义召回,把相关的信息都找出来。
- Matching:相关信息不一定是正确答案,可用深度学习进行语义匹配,找出最匹配的答案。
优秀的公开课
- Dan Jurafsky & Chris Manning: Natural Language Processing [入门视频系列]
- Stanford CS224d: Deep Learning for Natural Language Processing [斯坦福系列,必看]
- Stanford CS224n: Natural Language Processing with Deep Learning
- Stanford CS224n 在b站上的视频
- Stanford CS224d 在b站上的视频
- Coursera: Introduction to Natural Language Processing [出自 University of Michigan]
Awesome 系列
awesome-nlp(website)[包含优秀的nlp教程/库/技术/开源数据/模型等,必看!]
里面的每一个链接都值得好好翻看翻看。重点介绍下面的几个python库:
spaCy (website, blog) [Python; emerging open-source library with fantastic usage examples, API documentation, and demo applications]
这个库的链接博客值得看看,可以在上面的demo application上写自己的句子感受下语言是如何处理的,也可以尝试其他的demo和example,网站还是做的很用心的。
Natural Language Toolkit (nltk) (website, book) [Python; practical intro to programming for NLP, mainly used for teaching]
gensim - Python library to conduct unsupervised semantic modelling from plain text 👍
这个库用来做词嵌入word embedding,将文字转换为数字,生成字典。
jieba - 适用于中文的分词工具
优秀的博客和资源
Twitter: #nlproc, list of NLPers (by Jason Baldrige)
twitter也是机器学习/深度学习的友好天地,很多post配图配文都很有意思,尤其是吐槽文😜
Reddit: /r/LanguageTechnology
Medium: Nlp
优秀的书籍
个人比较偏向于先看课件,有细节问题再回到书里去找答案。
- Speech and Language Processing (Daniel Jurafsky and James H. Martin) [classic NLP textbook that covers all the basics, 3rd edition coming soon]
- Foundations of Statistical Natural Language Processing (Chris Manning and Hinrich Schütze) [more advanced, statistical NLP methods]
- Introduction to Information Retrieval (Chris Manning, Prabhakar Raghavan and Hinrich Schütze) [excellent reference on ranking/search]
- Neural Network Methods in Natural Language Processing (Yoav Goldberg) [deep intro to NN approaches to NLP, primer here]
开源的数据集
- A thorough list of publicly available NLP data sets[开源数据大全,做项目不用愁数据了~]
- Quora问题匹配数据集下载链接
深度学习相关模型
语义匹配的神经网络相关模型:
- DSSM
- Siamese Network
- RNN
- RNN变种:LSTM、Match-LSTM、Seq-to-Seq、Attention机制
GitHub
练手项目
写在最后
NLP技术的应用范围很广泛,可以抓住其中一个点来深入。根据跑上面几个例子,观察训练数据来对这个处理过程有个大概的理解。由于接触智能问答项目的缘故,接下来的笔记方向也是跟智能问答强相关。