热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python自然语言处理入门新手上路新手上路摘要自然语言处理(NaturalLanguageProcessing,NLP)...

新手上路博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!目录1. 自然语言与编程语言2. 自然语言处理的层次2.2


新手上路


博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!



目录


1. 自然语言与编程语言


2. 自然语言处理的层次


2.2 中文分词、词性标注和命名实体识别


2.4 文本分类和文本聚类


2.6 语义分析和篇章分析


摘要


自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学、人工智能以及语言学的交叉学科。它们的关系如图 1-1 所示。这门学科研究的是如何通过机器学习等技术,让计算机学会处理人类语言,乃至实现终极目标——理解人类语言或人工智能。





图 1-1    自然语言处理与计算机科学、人工智能以及语言学的关系


1. 自然语言与编程语言
























































自然语言 自然语言示例 编程语言 编程语言示例
词汇量 词汇丰富,无穷无尽,几乎没有意义完全相同的词语。

《现代汉语常用词表(草案)》一共收录了 56008 个词条。

除此之外,我们还可以随时创造各种类型的新词,而不仅限于名词。

关键词数量是有限且确定的。

C 语言一共有 32 个关键字;

Java 语言一共有 50 个关键字。

结构化 非结构化

给定一句话 “苹果的创始人是乔布斯,它的 logo 是苹果”,计算机需要分析出如下结论:



  • 这句汉语转换为单词序列后,应该是 “苹果 的 创始人 是 乔布斯,它 的 logo 是 苹果”;     # 中文分词

  • 第一个 “苹果” 指的是苹果公司,而第二个 “苹果” 指的是带缺口的苹果 logo;     # 命名实体识别

  • “乔布斯” 是一个人名;     # 命名实体识别

  • “它” 指代的是苹果公司;     # 指代消解

  • 苹果公司与乔布斯之间的关系是 “的创始人是”,与带缺口的苹果 logo 之间的关系为 “的 logo 是”。     # 关系抽取

结构化 编程语言中的类与成员、数据库中的表与字段,都可以通过明确的机制来读写。
歧义性 含有大量歧义 汉语中的多义词,只有在特定的上下文中才能确定其含义。 不存在歧义性 如果程序员无意中写了有歧义的代码,比如两个函数的签名一样,则会触发编译错误。
容错性 容错性强 一句话中错别字、病句、不规范的标点符号等错误的存在,人们还是可以猜出它想表达的意思。 容错性弱 必须保证拼写绝对正确、语法绝对规范,否则要么出现编译器的错误警告,要么造成潜在的 bug。
易变性 不断变化发展的,变化相对迅速嘈杂

自然语言不是由某个个人或组织发明或指定标准的。

我们每个人都可以自由创造和传播新词汇和新用法,也在不停地赋予旧词汇以新含义,导致古代汉语和现在汉语相差巨大。

汉语不断吸收英语和日语等外语中的词汇,并且也在输出 niubility 等中式英语。

变化缓慢温和 编程语言由某个个人或组织发明并且负责维护。语言标准的变化通常以年或季度为单位的迁越过程,且新版本大致做到了对旧版的兼容,只有少数废弃掉的特性。
简略性 简洁、干练

“老地方见”,不必指出 “老地方” 在哪里。

使用 “工行”、“地税局” 等简称。

如果上文提出一个对象作为话题,则下文经常使用代词。

复杂、冗余 需要写很多很复杂的代码,才能完成一个功能项。

2. 自然语言处理的层次





图 1-2    自然语言处理的层次


2.1 语音、图像和文本


自然语言处理系统的输入源一共有 3 个,即语音、图像与文本。将语音和图像经过识别后转化为文本,就可以进行后续的 NLP 任务。


语音识别(Speech Recognition):将语音经过识别处理后转化为文本,再进行接下来的处理的过程,称为 语音识别 (Speech Recognition)。


图像识别(Optical Character Recognition):将图像经过识别处理后转化为文本,再进行接下来的处理的过程,称为 图像识别 (Optical Character Recognition)。


2.2 中文分词、词性标注和命名实体识别


中文分词:将文本分割为有意义的词语。


词性标注:确定每个词语的类别和浅层的歧义消除。


命名实体识别:识别出一些较长的专有名词。


词法分析:中文分词、词性标注、命名实体识别 3 个任务都是围绕词语进行的,统称为 词法分析 。词法分析的主要任务是将文本分割为有意义的词语( 中文分词 ),确定每个词语的类别和浅层的歧义消除( 词性标注 ),并且识别出一些较长的专有名词( 命名实体识别 )。


2.3 信息抽取


词法分析之后,文本已经呈现出部分结构化的趋势,根据分析出来的单词列表和附有自己词性及其他标签的单词,抽取出一部分有用的信息(高频词、关键词、公司名词、专业术语等),也可以根据词语之间的统计学信息抽取出更大颗粒度的文本(关键短语、句子)。


2.4 文本分类和文本聚类


文本分类:把许多文档分门别类地整理出来(知道一段话是褒义还是贬义的;判断一封邮件是否是垃圾邮件),此时的 NLP 任务称为 文本分类


文本聚类:把相似的文本归档到一起,或者排除重复的文档,而不关心具体类别,此时的 NLP 任务称作 文本聚类


2.5 句法分析


以 “查询刘医生主治的内科病人” 这句话为例,句法分析结果如图 1-3 所示。


n:名词;nr:人名;v:动词;vn:;


句法分析应用场景:问答系统、搜索引擎、基于短语的机器翻译,给译文的词语重新排序(中文 “我吃苹果” 翻译为日文则是 “私は(我)りんごを(苹果)食べる(吃)”)。





图 1-3    句法分析结果


2.6 语义分析和篇章分析


词义消歧:确定一个词在语境中的含义,而不是简单的词性。


语义角色标注:标注句子中的谓语与其他成分的关系。


语义依存分析:分析句子中词语之间的语义关系。


相较于句法分析,语义分析侧重语义而非语法。它包含 词义消歧 (确定一个词在语境中的含义,而不是简单的词性)、 语义角色标注 (标注句子中的谓语与其他成分的关系)、 语义依存分析 (分析句子中词语之间的语义关系)。


2.7 其他高级任务



  • 自动问答,根据知识库或文本中的信息直接回答一个问题,比如微软的 Cortana 和苹果的 Siri。

  • 自动摘要,为一篇长文档生成简短的摘要。

  • 机器翻译,将一句话从一种语言翻译到另一种语言。




推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
手机用户2702932807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有