NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术(附代码)

自然语言处理(NLP)是一种艺术与科学的结合,旨在从文本数据中提取信息。在它的帮助下,我们从文本中提炼出适用于计算机算法的信息。从自动翻译、文本分类到情绪分析,自然语言处理成为所有数据科学家的必备技能之一。

在这篇文章中,你将学习到最常见的10个NLP任务,以及相关资源和代码。

为什么要写这篇文章?

对于处理NLP问题,我也研究了一段时日。这期间我需要翻阅大量资料,通过研究报告,博客和同类NLP问题的赛事内容学习该领域的最新发展成果,并应对NLP处理时遇到的各类状况。

因此,我决定将这些资源集中起来,打造一个对NLP常见任务提供最新相关资源的一站式解决方案。下方是文章中提到的任务列表及相关资源。那就一起开始吧。

目录:

  1. 词干提取
  2. 词形还原
  3. 词向量化
  4. 词性标注
  5. 命名实体消岐
  6. 命名实体识别
  7. 情感分析
  8. 文本语义相似分析
  9. 语种辨识
  10. 文本总结

1. 词干提取

什么是词干提取?词干提取是将词语去除变化或衍生形式,转换为词干或原型形式的过程。词干提取的目标是将相关词语还原为同样的词干,哪怕词干并非词典的词目。例如,英文中:

1.beautiful和beautifully的词干同为beauti
2.Good,better和best 的词干分别为good,better和best。

相关论文:Martin Porter的波特词干算法原文

相关算法:在Python上可以使用Porter2词干算法(https://tartarus.org/martin/PorterStemmer/def.txt)

程序实现:这里给出了在python的stemming库中使用(https://bitbucket.org/mchaput/stemming/src/5c242aa592a6d4f0e9a0b2e1afdca4fd757b8e8a/stemming/porter2.py?at=default&fileviewer=file-view-default)

Porter2算法做词干提取的代码:

#!pip install stemmingfrom stemming.porter2 import stemstem("casually")

2. 词形还原

什么是词形还原? 词形还原是将一组词语还原为词源或词典的词目形式的过程。还原过程考虑到了POS问题,即词语在句中的语义,词语对相邻语句的语义等。例如,英语中:

1.beautiful和beautifully被分别还原为beautiful和beautifully。
2.good, better和best被分别还原为good, good和good

相关论文1: 这篇文章详细讨论了词形还原的不同方法。想要了解传统词形还原的工作原理必读。(http://www.ijrat.org/downloads/icatest2015/ICATEST-2015127.pdf)

相关论文2: 这篇论文非常出色,讨论了运用深度学习对变化丰富的语种做词形还原时会遇到的问题。(https://academic.oup.com/dsh/article-abstract/doi/10.1093/llc/fqw034/2669790/Lemmatization-for-variation-rich-languages-using)

数据集: 这里是Treebank-3数据集的链接,你可以使用它创建一个自己的词形还原工具。(https://catalog.ldc.upenn.edu/ldc99t42)

程序实现:下面给出了在spacy上的英语词形还原代码

#!pip install spacy
#python -m spacy download en
import spacy
nlp=spacy.load("en")
doc="good better best"
for token in nlp(doc):
    print(token,token.lemma_)

3. 词向量化

什么是词向量化?词向量化是用一组实数构成的向量代表自然语言的叫法。这种技术非常实用,因为电脑无法处理自然语言。词向量化可以捕捉到自然语言和实数间的本质关系。通过词向量化,一个词语或者一段短语可以用一个定维的向量表示,例如向量的长度可以为100。

例如:“Man”这个词语可以用一个五维向量表示。

这里的每个数字代表了词语在某个特定方向上的量级。

相关博文:这篇文章详细解释了词向量化。
(https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/)

相关论文:这篇论文解释了词向量化的细节。深入理解词向量化必读。
(https://www.analyticsvidhya.com/blog/2017/10/essential-nlp-guide-data-scientists-top-10-nlp-tasks/)

相关工具:这是个基于浏览器的词向量可视化工具。
(https://ronxin.github.io/wevi/)

预训练词向量:这里有一份facebook的预训练词向量列表,包含294种语言。
(https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md)

这里可以下载google news的预训练词向量。
(https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit)

#!pip install gensim
fromgensim.models.keyedvectors import KeyedVectors
word_vectors=KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin',binary=True)
word_vectors['human']

程序实现:这段代码可以用gensim训练你自己的词向量

sentence=[['first','sentence'],['second','sentence']]
model = gensim.models.Word2Vec(sentence, min_count=1,size=300,worke- rs=4)

4. 词性标注

什么事词性标注?简单来说,词性标注是对句子中的词语标注为名字、动词、形容词、副词等的过程。例如,对句子“Ashok killed the snake with a stick”,词性标注会识别:

  • Ashok 代词
  • killed 动词
  • the 限定词
  • snake 名词
  • with 连词
  • a 限定词
  • stick 名词
  • . 标点
论文1:
choi aptly的这篇《The Last Gist to theState-of-the-Art 》介绍了一种叫动态特征归纳的新方法。这是目前词性标注最先进的方法。(https://aclweb.org/anthology/N16-1031.pdf)

论文2:这篇文章介绍了通过隐马尔科夫模型做无监督词性标注学习的方法。(https://transacl.org/ojs/index.php/tacl/article/viewFile/837/192)

程序实现:这段代码可以在spacy上做词性标注

#!pip install spacy
#!python -m spacy download en
nlp=spacy.load('en')
sentence="Ashok killed the snake with a stick"
for token in nlp(sentence):
   print(token,token.pos_)

5. 命名实体消歧

什么是命名实体消岐?命名实体消岐是对句子中的提到的实体识别的过程。例如,对句子“Apple earned a revenue of 200 Billion USD in 2016”,命名实体消岐会推断出句子中的Apple是苹果公司而不是指一种水果。一般来说,命名实体要求有一个实体知识库,能够将句子中提到的实体和知识库联系起来。

论文1:Huang的这篇论文运用了基于深度神经网络和知识库的深层语义关联模型,在命名实体消岐上达到了领先水平。
(https://arxiv.org/pdf/1504.07678.pdf)

论文2:Ganea and Hofmann的这篇文章运用了局部神经关注模型和词向量化,没有人为设置特征。(https://arxiv.org/pdf/1704.04920.pdf)

6. 命名实体识别
体识别是识别一个句子中有特定意义的实体并将其区分为人名,机构名,日期,地名,时间等类别的任务。例如,一个NER会将一个这样的句子:

“Ram of Apple Inc. travelled to Sydney on 5th October 2017”

返回如下的结果:

Ram
of
Apple ORG
Inc. ORG
travelled
to
Sydney GPE
on
5th DATE
October DATE
2017 DATE
这里,ORG代表机构组织名,GPE代表地名。

然而,当NER被用在不同于该NER被训练的数据领域时,即使是最先进的NER也往往表现不佳。

论文:这篇优秀的论文使用双向LSTM(长短期记忆网络)神经网络结合监督学习和非监督学习方法,在4种语言领域实现了命名实体识别的最新成果。(https://arxiv.org/pdf/1603.01360.pdf)

程序实现:以下是如何使用spacy执行命名实体识别。

import spacy
nlp=spacy.load('en')sentence="Ram of Apple Inc. travelled to Sydney on 5th October 2017"
for token in nlp(sentence):
   print(token, token.ent_type_)

7. 情感分析
什么是情感分析?情感分析是一种广泛的主观分析,它使用自然语言处理技术来识别客户评论的语义情感,语句表达的情绪正负面以及通过语音分析或书面文字判断其表达的情感等等。例如:

“我不喜欢巧克力冰淇淋”—是对该冰淇淋的负面评价。

“我并不讨厌巧克力冰激凌”—可以被认为是一种中性的评价。

从使用LSTMs和Word嵌入来计算一个句子中的正负词数开始,有很多方法都可以用来进行情感分析。

博文1:本文重点对电影推文进行情感分析(https://www.analyticsvidhya.com/blog/2016/02/step-step-guide-building-sentiment-analysis-model-graphlab/)

博文2:本文重点对印度金奈洪水期间的推文进行情感分析。(https://www.analyticsvidhya.com/blog/2017/01/sentiment-analysis-of-twitter-posts-on-chennai-floods-using-python/)

论文1:本文采用朴素贝叶斯的监督学习方法对IMDB评论进行分类。(https://arxiv.org/pdf/1305.6143.pdf)

论文2:本文利用LDA的无监督学习方法来识别用户生成评论的观点和情感。本文在解决注释评论短缺的问题上表现突出。(http://www.cs.cmu.edu/~yohanj/research/papers/WSDM11.pdf)

资料库:这是一个很好的包含相关研究论文和各种语言情感分析程序实现的资料库。(https://github.com/xiamx/awesome-sentiment-analysis)

数据集1:多域情感数据集版本2.0(http://www.cs.jhu.edu/~mdredze/datasets/sentiment/)

数据集2:Twitter情感分析数据集(http://www.sananalytics.com/lab/twitter-sentiment/)

竞赛:一个非常好的比赛,你可以检查你的模型在烂番茄电影评论的情感分析任务中的表现。(https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews)

8. 语义文本相似度
什么是语义文本相似度分析?语义文本相似度分析是对两段文本的意义和本质之间的相似度进行分析的过程。注意,相似性与相关性是不同的。

例如:

汽车和公共汽车是相似的,但是汽车和燃料是相关的。

论文1:本文详细介绍了文本相似度测量的不同方法。是一篇可以一站式了解目前所有方法的必读文章。(https://pdfs.semanticscholar.org/5b5c/a878c534aee3882a038ef9e82f46e102131b.pdf)

论文2:本文介绍了用CNN神经网络去比对两个短文本。(http://casa.disi.unitn.it/~moschitt/since2013/2015_SIGIR_Severyn_LearningRankShort.pdf)

论文3:本文利用Tree-LSTMs方法得到了文本的语义相关和语义分类的最新成果。(https://nlp.stanford.edu/pubs/tai-socher-manning-acl2015.pdf)

语言识别
什么是语言识别?语言识别指的是将不同语言的文本区分出来。其利用语言的统计和语法属性来执行此任务。语言识别也可以被认为是文本分类的特殊情况。

博文:在这篇由fastText撰写的博文中介绍了一种新的工具,其可以在1MB的内存使用情况下识别170种语言。(https://fasttext.cc/blog/2017/10/02/blog-post.html)

论文1:本文讨论了285种语言的7种语言识别方法。(http://www.ep.liu.se/ecp/131/021/ecp17131021.pdf)

论文2:本文描述了如何使用深度神经网络来实现自动语言识别的最新成果。(https://repositorio.uam.es/bitstream/handle/10486/666848/automatic_lopez-moreno_ICASSP_2014_ps.pdf?sequence=1)

10. 文本摘要
什么是文本摘要?文本摘要是通过识别文本的重点并使用这些要点创建摘要来缩短文本的过程。文本摘要的目的是在不改变文本含义的前提下最大限度地缩短文本。

论文1:本文描述了基于神经注意模型的抽象语句梗概方法。(https://arxiv.org/pdf/1509.00685.pdf)

论文2:本文描述了使用序列到序列的RNN在文本摘要中达到的最新结果。(https://arxiv.org/pdf/1602.06023.pdf)

资料库:Google Brain团队的这个资料库拥有使用为文本摘要定制的序列到序列模型的代码。该模型在Gigaword数据集上进行训练。(https://github.com/tensorflow/models/tree/master/research/textsum)

应用程序:Reddit的autotldr机器人使用文本摘要来梗概从文章到帖子的各种评论。这个功能在Reddit用户中非常有名。(https://www.reddit.com/r/autotldr/comments/31b9fm/faq_autotldr_bot/)

程序实现:以下是如何用gensim包快速实现文本摘要。

fromgensim.summarization import summarize
sentence="Automatic summarization is the process of shortening a text document with software, in order to create a summary with the major points of the original document. Technologies that can make a coherent summary take into account variables such as length, writing style and syntax.Automatic data summarization is part of machine learning and data mining. The main idea of summarization is to find a subset of data which contains the information of the entire set. Such techniques are widely used in industry today. Search engines are an example; others include summarization of documents, image collections and videos. Document summarization tries to create a representative summary or abstract of the entire document, by finding the most informative sentences, while in image summarization the system finds the most representative and important (i.e. salient) images. For surveillance videos, one might want to extract the important events from the uneventful context.There are two general approaches to automatic summarization: extraction and abstraction. Extractive methods work by selecting a subset of existing words, phrases, or sentences in the original text to form the summary. In contrast, abstractive methods build an internal semantic representation and then use natural language generation techniques to create a summary that is closer to what a human might express. Such a summary might include verbal innovations. Research to date has focused primarily on extractive methods, which are appropriate for image collection summarization and video summarization."
summarize(sentence)

结束语

以上就是最常见的NLP任务的入门介绍和资料汇总了,如果你有更多优质的资源,也欢迎在评论区分享哦!

原文发布时间为:2017-11-9
本文作者:文摘菌
本文来自合作伙伴“大数据文摘”,了解相关信息可以关注“大数据文摘”微信公众号

时间: 2024-10-11 23:24:53

NLP入门+实战必读:一文教会你最常见的10种自然语言处理技术(附代码)的相关文章

一文学会最常见的10种NLP处理技术(附资源&代码)

自然语言处理(NLP)是一种艺术与科学的结合,旨在从文本数据中提取信息.在它的帮助下,我们从文本中提炼出适用于计算机算法的信息.从自动翻译.文本分类到情绪分析,自然语言处理成为所有数据科学家的必备技能之一. 在这篇文章中,你将学习到最常见的10个NLP任务,以及相关资源和代码. 为什么要写这篇文章? 对于处理NLP问题,我也研究了一段时日.这期间我翻阅了大量资料,通过研究报告,博客和同类NLP问题的赛事内容学习该领域的最新发展成果,并应对NLP处理时遇到的各类状况. 因此,我决定将这些资源集中起

Docker、Mesos和Marathon剖析以及入门实战

本文讲的是Docker.Mesos和Marathon剖析以及入门实战,[编者的话]国外广为流传的一个比喻是:在传统服务模式下,可以想象服务器就是IT的宠物(Pets),给它们取名字,并精心抚养长大,当它们生病了,你得为他它们治病.而在新形态的应用服务模型中,虚拟机被看做是农场中的公牛,名字通常都是编号,当他们生病了,你就杀掉他,用一头新牛代替. 未来的应用架构应该像对待农场中的公牛一样:对基础架构的"保养".保护基础架构的各种功能,比起云计算型应用模式可能会逐渐变得越来越不那么重要.最

NLP入门之语音模型原理

  这一篇文章其实是参考了很多篇文章之后写出的一篇对于语言模型的一篇科普文,目的是希望大家可以对于语言模型有着更好地理解,从而在接下来的NLP学习中可以更顺利的学习. 1:传统的语音识别方法: 这里我们讲解一下是如何将声音变成文字,如果有兴趣的同学,我们可以深入的研究. 首先我们知道声音其实是一种波,常见的MP3等都是压缩的格式,必须要转化成非压缩的纯波形的文件来处理,下面以WAV的波形文件来示例: 在进行语音识别之前,有的需要把首尾段的静音进行切除,进行强制对齐,以此来降低对于后续步骤的干扰,

基于.NET平台的分层架构实战(九)—数据访问层的第三种实现:基于NBear框架

基于.NET平台的分层架构实战(九)-数据访问层的第三种实现:基于NBear框架的ORM实现 前面的文章讨论了使用SQL语句和存储过程两种数据访问层的实现方式,这一篇里,将讨论使用ORM方式实现数据访问层的方法. 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务实体的两种表现形式,业务实

Shopify的Docker实战经验(二)如何用容器支持10万的在线商店

本文讲的是Shopify的Docker实战经验(二)如何用容器支持10万的在线商店,[编者的话]Shopify是一个电子商务平台,提供专业的网上店面.目前的客户超过12万,包括GE.特斯拉汽车.GitHub等.作为首家市值超过10亿美元的加拿大网络公司,Shopify在欧美市场的影响力也与日俱增.Shopify是一个大型的Ruby on Rails应用,其产品服务器能通过给1700个处理核心和6TB RAM分配任务来完成每秒处理8000多个请求.Shopify在其博客上分享了系列内容来介绍他们的

基于.NET平台网络编程入门实战系列 一 序

大学期间,我们学院开了一门叫做C语言的课程,当时的计算机环境的windowXP,外网不让上,只能上校园网,硬盘三无状态,无电影,无音乐,无游戏 ----除了扫雷.正所谓实势造英雄,当时的C语言课造就了一大批扫雷高手,APM (每分钟操作的次数,打过war3的都知道)惊人.牛人多了,自然要争个高下,所以扫雷PK的也是时有发生,但是PK规则都是牛人轮流扫,看谁用的时间少.当时就琢磨着为那批牛人打造一个网络版扫雷,一争高下,哎····大学生就是喜欢想,不愿意做!现在一步一步重构一个基于Socket的网

Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo演示   你可以把webapi理解为面向资源编程(就是通过http请求来直接操作,比如get post put delete等等)  工具:PostMan 先不讲技术,先引入,让大家看看这个是什么? 这个是webapi里面的某个控制器,里面定义了很多方法,和http请求有一一对应的嫌疑 api控制器

基于.NET平台网络编程入门实战系列 三

服务器是干啥子用滴?监听客户端,响应客户端用滴! 虽然是世界上最简陋的服务器,但是也有几个注意点: 1.因为要一个死循环监听客户端响应,也就是说无法和用户进行交互了,所以防止前台假死就要为监听新起一个线程: 2.要把新起的线程td.IsBackground = true;设置为后台线程,这样的话线程才会随着应用程序的关闭而关闭,不然的话关了窗体,它还在运行: 3.跨线程问题,在新的线程里改变UI会报跨线程改变UI的错误,所以要用Invoke; 4.在监听的死循环中加入 Thread.Sleep(

基于.NET平台网络编程入门实战系列 二

今天的主要任务就是把单击版的搞定,这是过渡到网络版的必备过程. 如果没有玩过扫雷的,建议先去体验一下:体验完后,自己尝试写出扫雷的算法:经过思考揣摩推敲才能有收获.不建议一上来就下载源码剖析,跟踪代码! 现在我来说下我的思路,如果有更优雅的算法,欢迎大家分享------竞争引发技术进步,分享推动技术进步! [一]单机版扫雷划为两层 第一层为Button,Button盖在Lable上,Lable被隐藏在Button下面: 第二层为Lable, Lable上的背景图片改成地雷图案表示有雷. 雷区的大