一文读懂:如何零基础自学NLP!系列1

大家好, 我是Lucy@FinTech社区。

今天和大家分享的是如何零基础自学NLP(系列1)!面向读者:机器学习选手/NLP零基础,希望快速入门/对NLP感兴趣,以做项目为导向的学习者

FinTech社区也有机器学习群,欢迎添加微信:fintech12, 加入机器学习群交流学习! 


 

具体内容 (系列1):

  • 文本处理的常见操作
  • AWESOME NLP
  • 优秀的公开课/博客/书籍

具体内容 (系列2):

  • 文本相似度计算/词云图教程
  • 你该知道哪些算法(传统/深度学习)
  • 如何搭建一个智能问答框架
  • 按照什么顺序学习
     

一、文本处理的常见操作

回顾一下人类是如何理解一段文字的。中英文的处理方式不同,以英文为例,一段话会被拆成一个个句子,一个句子又会被拆成一个个单词。根据单词在句子中的不同位置、单词的单复数、单词的时态等来理解。所以对文字进行分析的操作就很简单明了了。

sentence segmentation (断句)

一般根据标点符号可进行断句操作。以下面的文本为例,可以分成四个句子。

London is the capital and most populous city of England and the United Kingdom. Standing on the river Thames in the south east of the island of the Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium. London's ancient core, the City of London, largerly retains its 1.12-square-mile (2.9 km2) medieval boundaries.

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 tagging (词性标注)

词性标注是用来区分一个单词是动词/名词/形容词/副词等(一度想起曾经被语法支配的恐惧...)。这个词性标注的工作可以根据一个词性分类模型得出。

得出这句话中有名词、动词、限定词、连词、副词、形容词等。

lemmatization(词形还原)

虽说英语是最简单的语义,但是不同词性的单词的变形还是很多的,比如单复数、be动词变形、动词是现在进行时还是过去时等,都还原成最初的样子。

identifying stop-words (识别停用词)

像”and“,“the”,“a”,“of”,“for”这种哪里都高频出现会造成统计噪音的词,被称为stop words。下面灰色的“the”,“and”,“most”均为停用词,一般会被直接过滤掉。正如wiki里说明的,现在虽然停用词列表很多,但一定要根据实际情况进行配置。比如英语的the,通常情况是停用词,但很多乐队名字里有the这个词,The Doors, The Who,甚至有个乐队直接就叫The The!这个时候就不能看做是停用词了。

dependency parsing (解析依赖关系)

解析句子中每个词之间的依赖关系,最终建立起一个关系依赖树。这个树的root是关键动词,从这个关键动词开始,把整个句子中的词都联系起来。

从这个关系树看来,主语是London,它和capital被be联系起来。然后计算机就知道,London is a capital。如此类推,计算机就被训练得掌握越来越多的信息。

name entity recognition (命名实体识别)

来给名词打标签。比如我们可以把第一句话当中的地理名称识别出来。

conference resolution (共指消解)

指代词,比如他/她/它/这个/那个/前者/后者等。再比如缩写简称,北京大学通常称为北大,中华人民共和国通常就叫中国。这种现象,被称为共指现象。

注:部分笔记参考Adam Geitgey在Medium的文章Natural Language Processing is Fun!

感兴趣的同学可以在:

https://explosion.ai/demos/ 里的第一个demo输入自己的文字进行尝试 :

 

二、文本匹配时的常见流程

上面介绍了对文本做处理的常见操作,接下来介绍在做文本匹配模型时的常见流程。

Model:

  • Embedding
  • Retrieval
  • Matching
  • Ranking
     

文本匹配是智能回答常用的一个功能。智能的应用就是语义匹配,即根据意思来匹配,看两句话(或者多句话)说的是不是一个意思。

比如“我想入门NLP。” 和 “如何学NLP技术?” 可以认为是同一个意思,那么这两句话就匹配成功。传统的方法知识字字匹配(term matching),不会将“入门”和“学习”这两个匹配起来。再加一句“NLP的深度模型有哪些?”,明显和前两句不是一个意思,那么就匹配失败。

语义匹配经常用在搜索引擎或像知乎问答上,你提问“如何学NLP技术”,而“我想入门NLP。”这个已经有人回答过了,存在知识库里,机器需要做的就是把你的问题和已有答案的问题匹配起来,把对应的答案传送给你。


 

Dictionary (字典)

像新华字典一样的存在,机器也需要有一个字典来理解文字。一个单词对应一个索引,这个索引在index往往是一个序列ID一个整数。

Corpora (语料库)

字典是如何来的,自然是因为有很多很多的文字材料。语料可以是所有莎士比亚写的文章,或者所有维基百科的文章,或者一个特定的人发的推文。

Embedding (词/句/文本 嵌入)

通常是深度学习第一步,将文本转换成数字形式,这样才能丢进去训练。最常见的是word embedding 词嵌入,将一个单词对应于一个ID,就像每个人都有一个身份证号码一样。

不要被中文的“嵌入”意思带骗。embedding是一个数学术语,代表的是一个映射关系。比如汉英字典里的中文“钞票”映射到英文就是单词“money”。这项技术把词汇表中的单词或短语映射成由实数构成的向量。在计算机中,一个单词映射到的往往就是它的索引数字。毕竟目前计算机也只能理解数字。

目前最popular的embedding操作如下:

  • word2vec
  • GloVe
  • fastText

Retrieval (召回)

把意思相同的信息从语料库/知识库中统统找出来。找出来的方式分为语义召回词项召回

比如我想在知乎上问“如何自学NLP?”,然后知乎在它的知识库里找到类似问题“零基础自学NLP”,“如何入门NLP”,“自学NLP难不难”,“自然语言处理怎么入门?”这四个问题。最后一个问题应该是语义召回出来的,因为基本没一个字跟原问题一样,却是与原问题相似的意思。

Matching (匹配)

判断两句话说的是不是一个意思。比如在知乎提问后,系统需要搜索出相关问题。但是召回出来相关问题可能有很多个,这就需要对每个问题的相似度进行打分了。比如“如何自学NLP?”召回出的四个问题的相似度分别是:

  • “零基础自学NLP”:0.88
  • “如何入门NLP”:0.91
  • “自学NLP难不难”:0.11
  • “自然语言处理怎么入门?0.92
  • 相似度匹配也分为语义匹配和词项匹配。

Ranking (排序)

根据匹配相似度的分数进行相似问题的排序。排序结果如下:

  • “自然语言处理怎么入门?0.92
  • “如何入门NLP”:0.91
  • “零基础自学NLP”:0.88
  • “自学NLP难不难”:0.11

那么就把第一个问题的答案输出。也就回答了“如何自学NLP?”这个问题。

 

三、Awesome NLP

Awesome系列

这是一个你第一次打开会忍不住感叹出“Awwwwesome~!”的神器 (请复制粘贴链接至浏览器进行查看)!

http://github.com/sindresorhus

 

Awesome NLP

awesome-nlp只是awesome的一个子子...子集 (请复制粘贴链接至浏览器进行查看)。

https://github.com/keon/awesome-nlp

 

虽说是个子集,但awesome-nlp包含优秀的nlp教程/库/技术/开源数据/模型等,必看!

NLP要用到Python哪些包

  • spaCy (https://explosion.ai/blog/)
    Python; emerging open-source library with fatasitic usgae examples, API ducumentation, and demo applications
    这个库的链接博客值得看看,可以在上面的demo application上写下自己的句子感受下语言是如何处理的,也可以尝试其他的demo和example,网站是做得很用心的。
     
  • gensim (http://radimrehurek.com/genism/)
    Python library to conduct unsupervised semantic modelling from plain text
    这个库可用来制作字典,做词嵌入word embedding练习,将文字转换为数字,生成向量。
     
  • jieba (https://github.com/fxsjy/jieba)
    适用于中文的分词工具。支持繁体分词。支持自定义词典。支持三种分词模式:
  • Natural Language Toolkit (nltk)
    Python; practical intro to programming for NLP, mainly used for teaching


 

三、公开课/博客/书籍

优秀的公开课

Stanford CS224n

Stanford CS224n:

Natural Language Processing with Deep Learning

Stanford CS224d:

Deep learning for Natural Language Processing

视频都可以在油管YouTube上搜到。

这门课在2016年之前叫做CS224d: Deeping Learning for Natural Language Processing, 之后改名为CS224n: Natural Language Processing with Deep Learning。

 

如果是翻墙有困难的同学,也可以在B站搜索“CS224n”或“CS224d”,也有对应的课堂视频。尽量早点看,不要马住不看!

 

Dan Juraksky & Chris Manning

Natural Language Processing [入门视频系列]


 

Coursera

Introduction to Natural Language Processing [University of Michigan]


 

优秀的博客

优秀的书籍

  • Speech and Language Processing
    Daniel Jurafsky and James H. Martin - classic NLP textbook that covers all the basics
    https://web.stanford.edu/~jurafksy/slp3/
     
  • Foundations of Statistical Natural Language Processing
    Chris Manning and Hinrich Schütze - more advanced, statistical NLP methods
    https://nlp.stanford.edu/fsnlp/
     
  • Introduction to Information Retrieval
    Chris Manning, Prabhakar Raghavan and Hinrich Schütze - excellent reference on ranking/search
    https://nlp.stanford.edu/IR-book/
     
  • Neural Network Methonds in Natural Language Processing
    Yoav Goldberg - deep intro to NN approaches to NLP, primer here


 

今天的干货你都记下了吗?还有更多知识等着你!敬请关注本文的下篇,收获更多精彩!

如何零基础自学NLP - 系列2

内容预告:

  • 文本相似度计算/词云图教程
  • 你该知道哪些算法(传统/深度学习)
  • 如何搭建一个智能问答框架
  • 按照什么顺序学习