大数据文摘作品
编译:糖竹子、吴双、钱天培
自然语言处理(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