概述
理解和使用自然语言处理之终极指南(Python编码)(经典收藏版12k字,附数据简化筹员2月17日Fri新闻)
秦陇纪10译编
12k字:理解和使用自然语言处理之终极指南(Python编码)7k字;附数据简化DataSimp筹收技术简历414字、2月17日Fri新闻四则4k字。欢迎加入共建“数据简化DataSimp”学会及社区,关注、收藏、转发新媒体“数据简化DataSimp、科学Sciences”微信号、头条号,转载请写出处:秦陇纪10“数据简化DataSimp/科学Sciences”公众号、头条号译编,投稿QinDragon2010@qq.com。
目录
理解和使用自然语言处理之终极指南(Python编码)(7.4k字)
附A. 数据简化DataSimp筹备收简历(414字)
附B. 2017年2月17日周五(农历丁酉鸡年正月廿一)新闻四则汇编(4.8k字)
理解和使用自然语言处理之终极指南(Python编码)
秦陇纪10译编;来源:仕瓦姆·邦萨尔(Shivam Bansal),2017年1月12日,威提亚分析学
目录表Table of Contents
1.
2.
o
o
§
§
o
3.
o
§
§
o
§
§
§
§
o
§
§
§
o
4.
o
o
§
§
§
o
o
5.
据业内人士估计,只有21%可用数据以结构化形式存在。数据产生,正如我们所说的,来自于我们的推特、WhatsApp和其他各种交流活动中发送的信息。大多数这些数据存在于文本的形式,是高度非结构化的性质。一些臭名昭著的例子包括——在社交媒体上的推特/帖子、用户到用户的聊天对话、新闻、博客和文章、产品或服务审查和医疗部门里的病人记录。最近的一些例子包括聊天机器人和其他声音驱动的机器人程序。
尽管具有高维数据,但其呈现的信息是不可以直接访问的,除非它被手动处理(读取和理解)或由自动化系统分析。为了从文本数据中产生明显的和可操作的洞察/见解,熟悉自然语言处理(NLP)的技术和原则显得非常重要。那么,如果你打算今年创建聊天机器人,或者你想使用非结构化文本的力量,本指南是正确的起点。本指南挖掘自然语言处理的概念、技术与实现。文章的目的是教会自然语言处理的概念,并将其应用于实际数据集。
1. Introduction to Natural Language Processing 自然语言处理介绍
NLP是数据科学的一个分支,包括智能和高效地从文本数据中分析、理解和导出信息的系统流程。通过NLP及其组成部分,企业可以组织海量文本数据块、执行许多自动化任务、并解决广泛问题,如自动摘要、机器翻译、命名实体识别、关系抽取、情感分析、语音识别、主题分割等。
在进一步研究之前,我想解释一下文章中使用的一些术语:
·
·
·
安装NLTK及其数据的步骤(使用Python语言及环境):
安装Pip:在终端中运行:
安装NLTK:在终端中运行:
下载NLTK数据:运行Python shell(在终端)和写下面的代码:
``` import nltk nltk.download()```
按照屏幕上的指令下载所需的包或集合。其他库可以直接使用Pip安装。
2. Text Preprocessing文本预处理
因此,文本是所有可用数据的最具非结构化的形式,存在于其中的各种类型的噪声,并且没有预处理的数据是不容易分析的。文本清理和标准化的全过程,是一个去除其噪声和称为文本预处理的分析准备工作。
它主要由三个步骤组成:
·
·
·
下图显示了文本预处理(清洁)流水线的体系结构。
2.1 Noise Removal 噪声去除
任何与数据上下文和最终输出无关的文本片段,都可以指定为噪声。例如——语言停用词(语言常用词is/am/the/of/in等),URL或链接,社会媒体实体(提示、哈希标签),标点符号和特定行业用词。此步骤处理移除文本中存在的所有类型噪声实体。
去除噪声的一般方法是准备一个噪声实体字典,并通过标记符号(或文字)来迭代文本对象,消除这些噪声字典呈现出的标记符号。
以下是实现相同目的Python代码。
```
# Sample code to remove noisy words from a text
noise_list = ["is", "a", "this", "..."]
def _remove_noise(input_text):
words = input_text.split()
noise_free_words = [word for word in words if word not in noise_list]
noise_free_text = " ".join(noise_free_words)
return noise_free_text
_remove_noise("this is a sample text")
>>> "sample text"
```
另一种方法是在处理特殊噪声模式时使用正则表达式。之前的一篇文章中,我们详细解释了正则表达式。以下的Python代码从输入文本中移除了一个正则表达式模式:
```
# Sample code to remove a regex pattern
import re
def _remove_regex(input_text, regex_pattern):
urls = re.finditer(regex_pattern, input_text)
for i in urls:
input_text = re.sub(i.group().strip(), '', input_text)
return input_text
regex_pattern = "#[A-Za-z0-9w]*"
_remove_regex("remove this #hashtag from analytics vidhya", regex_pattern)
>>> "remove this
```
2.2 Lexicon Normalization 词汇规范化
另一种文本式噪声是关于单个词所表现的多重表征。
例如:“玩”、“玩家”,“玩过”,第三人称的“玩”和“正在玩”(play, player, played, plays and playing)这些词是单词“玩”的不同变化,尽管他们的意思是不同的,但内容都是相似的。这个步骤是把一个词的所有差异转换成它们的标准化形式(也称为lemma引理)。规范化是文本特征工程的关键步骤,因为它转换的高维特征(N维度不同特征)到低维空间(1个特征),是任何ML模型的一种理想解。
最常见的词汇规范化做法是:
·
·
下面的示例代码是用Python主流库NLTK执行的词变体归类(Lemmatization)和词干提取(Stemming)。
```
from nltk.stem.wordnet import WordNetLemmatizer
lem = WordNetLemmatizer()
from nltk.stem.porter import PorterStemmer
stem = PorterStemmer()
word = "multiplying"
lem.lemmatize(word, "v")
>> "multiply"
stem.stem(word)
>> "multipli"
```
2.3 Object Standardization 对象标准化
文本数据通常包含一些任何标准语义字典中不存在的单词或短语。这些碎片是搜索引擎和模型不能识别的。
这方面的一些例子是——首字母缩略词语、单词附属哈希标签和口语俚语。借助正则表达式和手工编写的数据字典,可以找到这种类型的噪声,下面的代码使用一个字典查找法从文本中代替社交媒体的俚语。
```
lookup_dict = {'rt':'Retweet', 'dm':'direct message', "awsm" : "awesome", "luv" :"love", "..."}
def _lookup_words(input_text):
words = input_text.split()
new_words = []
for word in words:
if word.lower() in lookup_dict:
word = lookup_dict[word.lower()]
new_words.append(word) new_text = " ".join(new_words)
return new_text
_lookup_words("RT this is a retweeted tweet by Shivam Bansal")
>> "Retweet this is a retweeted tweet by Shivam Bansal"
```
除了讨论到目前为止的三个步骤,其他类型的文本预处理包括编码解码噪声、语法检查器、拼写校正等。详细的文本预处理及其方法在秦陇纪专著文章有。
3.Text to Features (Feature Engineering on text data) 文本到特征(文本数据之特征工程)
对预处理数据做分析,需要将其转换成特征。根据使用情况,文本特征可用配套技术来构建——语义分析、实体/克/基于词的特征、统计特征、字的嵌入。实体/N元连续模型/基于词的特征、统计特征,和单词嵌入。下面来继续阅读,以详细了解这些技术。
3.1 Syntactic Parsing 句法解析
句法解析涉及句中单词的语法和显示这些单词间关系的排列方式的分析。依存语法和部分语音标签是文本句法的重要属性。
依存树–句子是由一些单词缝和在一起组成的。句子中词语间的关系由基本依存语法决定。依存语法是处理两个语义项之间的(标记的)非对称二元关系(单词)的一类语义文本分析法。每一种关系都可以用三元组(关系、监督、依存)来表示。例如:考虑句子“Bills on ports and immigration were submitted by Senator Brownback, Republican of Kansas.”这些单词间的关系,可以用下图所示的树形表示形式观察到:
这个树显示“submitted”是这个句子的根词,是由两个子树(主体与客体的子树)相连。每个子树本身一个诸如(“Bills” <-> “ports” “proposition” relation)、(“ports” <-> “immigration” “conjugation” relation)关系的依存关系树。
这种类型的树,采用自上而下的方法递归解析时,给出了的语法关系三元组作为输出——可用于许多NLP问题的特征,像实体情感分析、演员和实体识别和文本分类。Python包组斯坦福CoreNLP(来自Stanford NLP项目组,只有商业许可证版)和NLTK依存语法可以用来产生依存关系树.
词性标注(Part of Speech tagging)–除了语法关系,在一个句子里每个词也和词性标签(POS)(名词、动词、形容词、副词等)相关联。POS标签定义一个词在句子中的用法和功能。这是宾夕法尼亚大学定义的一个所有可能POS标签列表。下面的代码使用NLTK对输入文本进行词性标注注释。(它提供了多种实现方案,默认是感知标记器)
```
from nltk import word_tokenize, pos_tag
text = "I am learning Natural Language Processing on Analytics Vidhya"
tokens = word_tokenize(text)
print pos_tag(tokens)
>>> [('I', 'PRP'), ('am', 'VBP'), ('learning', 'VBG'), ('Natural', 'NNP'),('Language', 'NNP'),
('Processing', 'NNP'), ('on', 'IN'), ('Analytics', 'NNP'),('Vidhya', 'NNP')]
```
词性标注用于NLP自然语言处理中的许多重要用途:
A.词义消歧:一些语言词汇根据其用法有多种含义。例如,在以下两个句子中:
I. “Please book my flight for Delhi”
II. “I am going to read this book in the flight”
“Book”在不同语境使用,这两种情况下的词性标注词不同。句I中,“Book”作为动词,而II句中它被用作名词。(Lesk算法也用于类似目的)
B.提高基于词的特征值:学习模型在以一个词为特征时,学习词的不同情境,如果词性标注词与他们有联系,则上下文被保存,从而做出强壮的特征值。例如:
句子Sentence
标记词Tokens
词性标注标记词Tokens with POS – (“book_VB”, 1), (“my_PRP$”, 1), (“flight_NN”, 1), (“I_PRP”, 1), (“will_MD”, 1), (“read_VB”, 1), (“this_DT”, 1), (“book_NN”, 1)
C.标准化和词变体归类:POS标签是词变体归类过程的基础,用于将一个词转换成它的基形式(lemma引理)。
D.有效的停用词去除:POS标签在高效去除停用词也有用。
例如,有一些标签总是定义一个语言的低频/不重要的单词。例如: (IN
3.2 Entity Extraction (Entities as features) 实体提取(实体为特征值)
实体被定义为句子中最重要的句块--名词短语、动词短语或两者。实体检测算法通常是基于规则解析、字典查找、POS标签、依存句法分析的集成模型。实体检测的适用性可以在自动聊天机器人、内容分析器和消费者洞察中看见。
主题模型和命名实体识别是NLP自然语言处理里两个主要的实体检测方法。
A. Named Entity Recognition 命名实体识别(NER)
检测如人名、地名、公司名等命名实体的过程称为NER。例如:
句子Sentence
命名实体Named Entities
一个典型NER模型由三块组成:
名词短语识别:这一步涉及使用依存解析和词性标注从文本中提取所有名词短语。
短语分类:这是将所有被提取名词短语划分为所属相应类别(位置、名称等)的分类步骤。谷歌地图API提供了消除歧义位置的一个好路径,然后,从DBpedia, wikipedia开放数据库可以用来识别个人姓名或公司名称。除此之外,结合来自不同信息源的查找表和词典可以精确查找。
实体消歧:有时这是可能的,实体的误判分类的,因此随之创建分类结果之上的验证层是有用的。出于此目的可以运用知识图。流行的知识图有–谷歌知识图,IBM沃森和维基百科。
B. Topic Modeling 主题模型
主题建模是一个存在于文本语料库中主题的自动识别过程,它以无监督方式推导出语料库中的隐含模式。主题被定义为“a repeating pattern of co-occurring terms in a corpus”。医疗保健为主题的一个好的主题模型结果有–“health”, “doctor”, “patient”, “hospital”(“健康”、“医生”、“病人”、“医院”),农事为主体则有–“farm”, “crops”, “wheat”(“农场”、“庄稼”、“小麦”为话题“农业”)。
隐含狄利克雷分配(LDA)是最受欢迎的主题建模技术,以下是使用LDA实现主题建模的Python代码。有关其工作和执行的详细说明,请检查这里的完整文章。
```
doc1 = "Sugar is bad to consume. My sister likes to have sugar, but not my father."
doc2 = "My father spends a lot of time driving my sister around to dance practice."
doc3 = "Doctors suggest that driving may cause increased stress and blood pressure."
doc_complete = [doc1, doc2, doc3]
doc_clean = [doc.split() for doc in doc_complete]
import gensim from gensim
import corpora
# Creating the term dictionary of our corpus, where every unique term is assigned an index.
dictionary = corpora.Dictionary(doc_clean)
# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
# Creating the object for LDA model using gensim library
Lda = gensim.models.ldamodel.LdaModel
# Running and Training LDA model on the document term matrix
ldamodel = Lda(doc_term_matrix, num_topics=3, id2word = dictionary, passes=50)
# Results
print(ldamodel.print_topics())
```
C. N-Grams as Features N元连续模型N grams作为特征值
N个单词在一起的组合被称为N元连续模型(N grams)。作为特征值,相比单词(一元1gram),N元连续模型(n>1)通常包含更多信息。另外,双单词元组(n=2)被认为是所有其他元模型更重要的特征。下面的代码生成一个文本二元模型实例。
```
def generate_ngrams(text, n):
words = text.split()
output = []
for i in range(len(words)-n+1):
output.append(words[i:i+n])
return output
>>> generate_ngrams('this is a sample text', 2)
# [['this', 'is'], ['is', 'a'], ['a', 'sample'], , ['sample', 'text']]
```
3.3 Statistical Features 统计特征
文本数据也可以使用本节中描述的几种技术直接量化成数字:
附数据简化DataSimp筹备收简历(414字)
北京数据简化有限责任公司(筹)愿景:①行业大数据采集处理分析管理系统,②企事业单位行政人事财物联网智能OA系统,③数据简化DataSimp学术组及开源社区(中英双语),④物联网大数据底层操作系统(整合Linux开源软件和通信模块)。
现重点收集数据分析程序算法模型研发简历,成立前/每季度实习生在中关村集中面试。有意实习半年、工作一年以上的开发人员,请注明学历和工作简历、职务和职业规划、吃住薪酬预期、个人爱好等事项,投递邮箱QinDragon2010@qq.com主题注明:应聘数据简化DataSimp合伙人或XX岗位(研发岗参考本蚊及文本分析一文的二级标题)。
1)技术研发部(重点收简历):核心的数据分析DA、NLP、DL编程技能,Windows/Linux/Android/iOS平台、OA、App软件开发基础;
2)市场客服部(研发部兼职):搜集客户资料、面见客户、形成客户需求分析文档,跟踪反馈,面谈、电邮、电话、邮寄沟通服务;
3)行政后勤部(合伙人兼职):高级的全系列文档搜集编辑整理技能,OA软件界面和操作体验实验,公司法律财会物业文书基础。
详情落地前发文宣传。
(西安秦陇纪10数据简化DataSimp综合汇编,欢迎有志于数据简化之传媒、技术的实力伙伴加入全球“数据简化DataSimp”团队!)
最后
以上就是平常小猫咪为你收集整理的自然语言处理NLP之终极指南(Pytho…的全部内容,希望文章能够帮你解决自然语言处理NLP之终极指南(Pytho…所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复