一文概览NLP算法(Python)(上)

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: NLP,自然语言处理就是用计算机来分析和生成自然语言(文本、语音),目的是让人类可以用自然语言形式跟计算机系统进行人机交互,从而更便捷、有效地进行信息管理。

一、自然语言处理(NLP)简介


NLP,自然语言处理就是用计算机来分析和生成自然语言(文本、语音),目的是让人类可以用自然语言形式跟计算机系统进行人机交互,从而更便捷、有效地进行信息管理。


NLP是人工智能领域历史较为悠久的领域,但由于语言的复杂性(语言表达多样性/歧义/模糊等等),如今的发展及收效相对缓慢。比尔·盖茨曾说过,"NLP是 AI 皇冠上的明珠。" 在光鲜绚丽的同时,却可望而不可及(...)。



为了揭开NLP的神秘面纱,本文接下来会梳理下NLP流程、主要任务及算法,并最终落到实际NLP项目(经典的文本分类任务的实战)。顺便说一句,个人水平有限,不足之处还请留言指出~~


二、NLP主要任务及技术


NLP任务可以大致分为词法分析、句法分析、语义分析三个层面。具体的,本文按照单词-》句子-》文本做顺序展开,并介绍各个层面的任务及对应技术。本节上半部分的分词、命名实体识别、词向量等等可以视为NLP基础的任务。下半部分的句子关系、文本生成及分类任务可以看做NLP主要的应用任务。



这里,贴一张自然语言处理的技术路线图,介绍了NLP任务及主流模型的分支:



高清图可如下路径下载(原作者graykode):https://github.com/aialgorithm/AiPy/tree/master/Ai%E7%9F%A5%E8%AF%86%E5%9B%BE%E5%86%8C/Ai_Roadmap

2.1 数据清洗 + 分词(系列标注任务)


  • 数据语料清洗。我们拿到文本的数据语料(Corpus)后,通常首先要做的是,分析并清洗下文本,主要用正则匹配删除掉数字及标点符号(一般这些都是噪音,对于实际任务没有帮助),做下分词后,删掉一些无关的词(停用词),对于英文还需要统一下复数、语态、时态等不同形态的单词形式,也就是词干/词形还原。


  • 分词。即划分为词单元(token),是一个常见的序列标注任务。对于英文等拉丁语系的语句分词,天然可以通过空格做分词,



对于中文语句,由于中文词语是连续的,可以用结巴分词(基于trie tree+维特比等算法实现最大概率的词语切分)等工具实现。


importjieba jieba.lcut("我的地址是上海市松江区中山街道华光药房") >>>['我','的','地址','是','上海市','松江区','中山','街道','华光','药房']


  • 英文分词后的词干/词形等还原(去除时态 语态及复数等信息,统一为一个“单词”形态)。这并不是必须的,还是根据实际任务是否需要保留时态、语态等信息,有WordNetLemmatizer、 SnowballStemmer等方法。


  • 分词及清洗文本后,还需要对照前后的效果差异,在做些微调。这里可以统计下个单词的频率、句长等指标,还可以通过像词云等工具做下可视化~


fromwordcloudimportWordCloud ham_msg_cloud=WordCloud(width=520,height=260,max_font_size=50,background_color="black",colormap='Blues').generate(原文本语料) plt.figure(figsize=(16,10)) plt.imshow(ham_msg_cloud,interpolation='bilinear') plt.axis('off')#turnoffaxis plt.show()


2.2 词性标注(系列标注任务)


词性标注是对句子中的成分做简单分析,区分出分名词、动词、形容词之类。对于句法分析、信息抽取的任务,经过词性标注后的文本会带来很大的便利性(其他方面的应用好像比较少)。


常用的词性标注有基于规则、统计以及深度学习的方法,像HanLP、结巴分词等工具都有这个功能。



2.3 命名实体识别(系列标注任务)


命名实体识别(Named Entity Recognition,简称NER)是一个有监督的系列标注任务,又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、时间、专有名词等关键信息。



通过NER识别出一些关键的人名、地名就可以很方便地提取出“某人去哪里,做什么事的信息”,很方便信息提取、问答系统等任务。NER主流的模型实现有BiLSTM-CRF、Bert-CRF,如下一个简单的中文ner项目:https://github.com/Determined22/zh-NER-TF

2.4 词向量(表示学习)


对于自然语言文本,计算机无法理解词后面的含义。输入模型前,首先要做的就是词的数值化表示,常用的转化方式有2种:One-hot编码、词嵌入分布式方法。


  • One-hot编码:最简单的表示方法某过于onehot表示,每个单词是否出现就用一位数单独展示。进一步,句子的表示也就是累加每个单词的onehot,也就是常说的句子的词袋模型(bow)表示。


##词袋表示 fromsklearn.feature_extraction.textimportCountVectorizer bow=CountVectorizer( analyzer='word', strip_accents='ascii', tokenizer=[], lowercase=True, max_features=100, )



  • 词嵌入分布式表示:自然语言的单词数是成千上万的,One-hot编码会有高维、词语间无联系的缺陷。这时有一种更有效的方法就是——词嵌入分布式表示,通过神经网络学习构造一个低维、稠密,隐含词语间关系的向量表示。常见有Word2Vec、Fasttext、Bert等模型学习每个单词的向量表示,在表示学习后相似的词汇在向量空间中是比较接近的。



#Fasttextembed模型 fromgensim.modelsimportFastText,word2vec model=FastText(text,size=100,sg=1,window=3,min_count=1,iter=10,min_n=3,max_n=6,word_ngrams=1,workers=12) print(model.wv['hello'])#词向量 model.save('./data/fasttext100dim')


特别地,正因为Bert等大规模自监督预训练方法,又为NLP带来了春天~



  • 对于学习后的词表示向量,还可以通过重要程度进行特征加权,合适的加权方法对于任务可以有不错的提升效果。常用的有卡方chi2、TF-IDF等加权方法。TF-IDF是一种基于统计的方法,其核心思想是假设字词的重要性与其在某篇文章中出现的比例成正比,与其在其他文章中出现的比例成反比。



#TF-IDF可以直接调用sklearn fromsklearn.feature_extraction.textimportTfidfTransformer


2.5 句法、语义依存分析


句法、语义依存分析是传统自然语言的基础句子级的任务,语义依存分析是指在句子结构中分析实词和实词之间的语义关系,这种关系是一种事实上或逻辑上的关系,且只有当词语进入到句子时才会存在。语义依存分析的目的即回答句子的”Who did what to whom when and where”的问题。例如句子“张三昨天告诉李四一个秘密”,语义依存分析可以回答四个问题,即谁告诉了李四一个秘密,张三告诉谁一个秘密,张三什么时候告诉李四一个秘密,张三告诉李四什么。


传统的自然语言处理多是参照了语言学家对于自然语言的归纳总结,通过句法、语义分析可以挖掘出词语间的联系(主谓宾、施事受事等关系),用于制定文本规则、信息抽取(如正则匹配叠加语义规则应用于知识抽取或者构造特征)。可以参考spacy库、哈工大NLP的示例:http://ltp.ai/demo.html


随着深度学习技术RNN/LSTM等强大的时序模型(sequential modeling)和词嵌入方法的普及,能够在一定程度上刻画句子的隐含语法结构,学习到上下文信息,已经逐渐取代了词法、句法等传统自然语言处理流程。

相关文章
|
18天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
80 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
299 55
|
28天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
123 66
|
2天前
|
监控 算法 安全
深度洞察内网监控电脑:基于Python的流量分析算法
在当今数字化环境中,内网监控电脑作为“守城卫士”,通过流量分析算法确保内网安全、稳定运行。基于Python的流量分析算法,利用`scapy`等工具捕获和解析数据包,提取关键信息,区分正常与异常流量。结合机器学习和可视化技术,进一步提升内网监控的精准性和效率,助力企业防范潜在威胁,保障业务顺畅。本文深入探讨了Python在内网监控中的应用,展示了其实战代码及未来发展方向。
|
9天前
|
存储 监控 算法
员工电脑监控屏幕场景下 Python 哈希表算法的探索
在数字化办公时代,员工电脑监控屏幕是保障信息安全和提升效率的重要手段。本文探讨哈希表算法在该场景中的应用,通过Python代码例程展示如何使用哈希表存储和查询员工操作记录,并结合数据库实现数据持久化,助力企业打造高效、安全的办公环境。哈希表在快速检索员工信息、优化系统性能方面发挥关键作用,为企业管理提供有力支持。
37 20
|
4天前
|
存储 人工智能 算法
深度解密:员工飞单需要什么证据之Python算法洞察
员工飞单是企业运营中的隐性风险,严重侵蚀公司利润。为应对这一问题,精准搜集证据至关重要。本文探讨如何利用Python编程语言及其数据结构和算法,高效取证。通过创建Transaction类存储交易数据,使用列表管理订单信息,结合排序算法和正则表达式分析交易时间和聊天记录,帮助企业识别潜在的飞单行为。Python的强大功能使得从交易流水和沟通记录中提取关键证据变得更加系统化和高效,为企业维权提供有力支持。
|
3天前
|
存储 算法 安全
U 盘管控情境下 Python 二叉搜索树算法的深度剖析与探究
在信息技术高度发达的今天,数据安全至关重要。U盘作为常用的数据存储与传输工具,其管控尤为关键。本文探讨Python中的二叉搜索树算法在U盘管控中的应用,通过高效管理授权U盘信息,防止数据泄露,保障信息安全。二叉搜索树具有快速插入和查找的优势,适用于大量授权U盘的管理。尽管存在一些局限性,如树结构退化问题,但通过优化和改进,如采用自平衡树,可以有效提升U盘管控系统的性能和安全性。
15 3
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
199 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
18天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
1月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
57 20