360SDN.COM

自然语言处理(NLP)快速入门指南

来源:机器学习算法与自然语言处理  2017-11-16 10:00:47    评论:0点击:

本文经公众号[机器人圈]授权转载(微信号:ROBO_AI)

 

自然语言处理(NLP)的一个最伟大的方面是跨越多个领域的计算研究,从人工智能到计算语言学的多个计算研究领域都在研究计算机与人类语言之间的相互作用。它主要关注计算机如何准确并快速地处理大量的自然语言语料库。什么是自然语言语料库?它是用现实世界语言表达的语言学习,是从文本和语言与另一种语言的关系中理解一组抽象规则的综合方法。

 

虽然NLP在现代计算机工业革命中变得更加现实,但实际上却是阿兰•图灵发现的,阿兰•图灵曾帮助破解德国Enigma密码,同时也撰写了一篇名为《计算机器与智能》(http://loebner.net/Prizef/TuringArticle.html)的文章,文章中提出了将人类语言与计算机相关联的第一次使用。随着我们日常生活中现有的技术不断发展,我们看到了NLP可以通过革命性的工具,如Google翻译、IBM的沃森机器人、语音识别和生成、情感分析,使我们的日常生活更有影响力。

 

然而,像所有的事情一样,NLP有一些问题和欠缺。让其它生成一种自然流露的语言是很费力的,这与一个人在阅读糟糕的电影剧本时相似,它听起来像一台电脑在说话。虽然有方法试图理解语调的变化,NLP仍然很难理解诸如讽刺和发现幽默之类的东西。不过,这是一个需要大量研究的领域,我期待着“讽刺突破”发生的那一天。如果没有别的什么的话,那么就需要更努力地理解来自朋友不经常的问候或即时消息。

 

目前可用的一些最有用的计算机/数据科学工具有:

 

CountVectorization、哈希向量化(Hashing Vectorization)、词频-逆文档频率(TF-IDF)、词形还原(lemmatization)、词干提取(stemming)、句法分析(Parsing)和情感分析(Sentiment Analysis)。

 

CountVectorization 

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

 

是一个SciKitLearn库工具,可以获取任何大量的文本,并作为词出现的次数特征返回每一个独特的词。虽然这可以产生很多特征,这些特征是一些非常有用的参数,有助于避免包含stop_words,n_grams和max_features。Stop words生成不作为特征的单词列表。这个主要用途是“英文”字典,它将摆脱像“is, the, a, it, as”这样的无关紧要的词,这可能会显得很频繁,但对我们的最终目标没有影响。Ngram_range选择如何将文字分组在一起,而不是使NLP单独返回每个单词。如果它等于2,你可以得到像“Hello again”一样的结果,如果它等于3,你将得到“See you later”的结果。Max_features是你选择创建的多少特征。如果你选择它等于零,它意味着你将得到每个和所有的词都作为特征,但是如果你把它设置为50,你只会得到50个最常用的词。

 

哈希向量(Hashing Vetorizer)

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.HashingVectorizer.html

 

使用“哈希技巧”将文本转换为事件矩阵每个单词都映射到一个特征,并使用哈希函数将其转换为哈希。如果在文本正文中再次出现该词,则转换为相同的特征,这样我们可以在相同的特征中对其进行计数,而不必保留字典。

 

词频—逆文档频率(TF-IDF)

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.HashingVectorizer.html

 

揭示了不同文本体之间最大区别的单词。如果你尝试查看一个文档中出现的单词之间的区别,但是在其他文档中不能显示你对该文档的特殊解释,那就特别有帮助了。它取决于词频、单词出现的频率以及文档的逆序变化,无论在所有文档中是唯一的还是常见的。

 

词形还原(Lemmatization)

http://scikit-learn.org/stable/modules/feature_extraction.html

 

是一种过程,通过这些过程将拐弯曲折的形式组合在一起,作为一个方面进行分析。这是一种使用一个词的意思来确定“引理(lemma)”的一种方法。它在很大程度上取决于正确地发现“话语意图的部分”以及句子、段落或更大文档中单词的真实含义。引用的例子是“run”是 “running” 或 “ran”一词的基本形式,或者“better” 和“good”这个词是相同的引理,所以它们被认为是一样的。

 

词干提取(Stemming)

(http://scikit-learn.org/stable/modules/feature_extraction.html

 

与词形还原(Lemmatization)非常相似,因为它将词组合在一起,但不同于词形还原,它需要一个词,并将其引用回其基础或根形式。事实上,就我所遇到的最好的例子来说,它涉及到将词干提取追溯回到其基本形式。 “Stems”, “Stemming”, “Stemmed”, 和“Stemtization”都是基于单词“stem”。

 

句法分析(Parsing)

https://en.wikipedia.org/wiki/Parsing#Computer_languages

 

一般用途是分析一串词以形成语法规则。对于NLP,是分析一串词,推出一个解析树(parse tree),揭示了可以包含语义的单词之间的句法关系。然而,解析的回溯是,何时以及何事被解析完全依赖于用户,因为任何段落都可以以任何方式选择从单个字符到整个句子中进行解析。

 

情绪分析(Sentiment Analysis)

http://www.nltk.org/howto/sentiment.html

 

其中最简单的定义是从文档或文档集中提取一个单词的解释或主观含义,以确定特定单词或一组单词的“态度”。其中最大的用途之一就是在Facebook、Twitter等社交媒体中,发现舆论的趋势,特定音调背景下出现的频率,以及理解词组的语气。

 

在做所有这些分析之前,我强烈建议你过滤并清洗你正在处理的文档。我遇到最好的函数之一是我的老师马克•穆默特(Mark Mummert)创建的。虽然它专注于通过Beautiful soup(一种爬虫)清理html文件,使用它可以很容易地适应其他NLP清理。

 

def review_to_words(raw_review):

      #Remove html

      review_text=BeautifulSoup(raw_review).get_text()

      #Remove non-letters - Utilized Regex Library

      letters_only = re.sub("[^a-zA-Z]", " ", review_text)

      #Conver to lowercase and split into individual words

      words = letters_only.lower().split()

      #Convert Stop-Words to a set and remove them

      stops = set(stopwords.words("english"))

      meaningful_words = [w for w in words if not w in    stops]

      #Join the Words back into one string seperated by a  space and return the result.

      return( " ".join( meaningful_words ))

  

NLP的世界是大而复杂的,并且它将仍然是一个很大的研究领域。在这个领域有许多有用的工具,这些工具在理解和利用语言方面都有极其有益的用途。

 

对于python用户来说,我相信最有用的NLP资源将是Sci-Kit Learn库(http://scikit-learn.org/stable/modules/feature_extraction.html)和NLTK库(http://www.nltk.org/)。

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权