NLP笔记 - Getting Started

背景:

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:相关信息不一定是正确答案,可用深度学习进行语义匹配,找出最匹配的答案。

优秀的公开课

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 - 适用于中文的分词工具

优秀的博客和资源

优秀的书籍

个人比较偏向于先看课件,有细节问题再回到书里去找答案。

开源的数据集

深度学习相关模型

语义匹配的神经网络模型集合

语义匹配的神经网络相关模型:

  • DSSM
  • Siamese Network
  • RNN
  • RNN变种:LSTM、Match-LSTM、Seq-to-Seq、Attention机制

GitHub

练手项目

写在最后

NLP技术的应用范围很广泛,可以抓住其中一个点来深入。根据跑上面几个例子,观察训练数据来对这个处理过程有个大概的理解。由于接触智能问答项目的缘故,接下来的笔记方向也是跟智能问答强相关。

would you buy me a coffee☕~
0%