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

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/5c242aa592a6

d4f0e9a0b2e1afdca4fd757b8e8a/stemming/porter2.py?at=d

efault&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-fo

r-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-ta

sks/)

相关工具:这是个基于浏览器的词向量可视化工具。

(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,workers=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

相关主题