自然语言处理基础详解入门

1、自然语言的概念

自然语言是指人类社会约定俗成的,并且区别于人工语言(如计算机程序)的语言,,是自然而然的随着人类社会发展演变而来的语言,它是人类学习生活的重要工具。

2、自然语言处理概述

自然语言处理(Natural Language Processing, NLP)是一门以计算机为工具,对书面或口头形式的语言 进行各种处理和加工的技术,同时也是研究人与人交际中以及人与计算机交际中语言问题的一门科学。

NLP是计算机科学领域以及人工智能领域的一个重要的研究方向,是一门融语言学、计算机科学、数学、 统计学于一体的科学。

3、NLP的发展历程

NLP的发展大致经历了3个阶段。

• 1956年以前的萌芽期

• 1980年~1999年的快速发展期

• 21世纪的突飞猛进

4、NLP研究内容

NLP研究内容包括很多的分支领域,如:

     文本分类、信息抽取、信息检索、信息过滤、自动文摘、智能问答、话题推荐、机器翻译、主题词识别、 知识库构建、深度文本表示、命名实体识别、文本生成、文本分析(词法、句法和语法)、舆情分析、自 动校对、语音识别与合成等。

5、NLP基本流程

NLP 可以使用传统的机器学习方法来处理,也可以使用深度学习的方法来处理,过程类似。

方式 1:传统机器学习的 NLP 流程

 方式 2:深度学习的 NLP 流程

 

两种方式的过程区别不大,均需要先取得语料后对其进行预处理、分词、获取特征向量、建立模型。

1、语料获取

在NLP之前,需要得到文本语料。文本语料的获取一般有下面几种方法:

• 利用已经建好的数据集,或第三方语料库,这样可以省去很多处理成本。

• 获取网上数据。很多时候所要解决的是某种特定领域的应用,仅靠开放语料库经常无法满足需求,这 就需要用爬虫技术去获取需要的信息。

• 制定数据搜集策略来搜集数据。可以通过制定数据搜集策略,从业务的角度来搜集所需要的数据。

• 与第三方的合作获取数据。通过购买的方式满足部分需求文本数据

2、语料预处理

对于语料来说,英文和中文的表达有所区别。

 英文语料的处理过程:

• 分词

• 词干提取

• 词性标注等


中文语料预处理:

• 语料字符处理:

大多数情况下,获取的文本数据存在很多无用的部分,如爬取来的一些html代码、css标 签和不需要用的标点符号等,这些都需要分步骤去除。

 • 中文分词:

中文文本一般需要用分词算法完成分词。常用的中文分词工具有很多,如jieba、NLTK、HanLP 、THULAC、NLPIR、LTP等。

• 词性标注:

给词语标上词类标签,比如名词、动词、形容词等,常用的词性标注方法有基于规则的、基于 统计的算法等。

 • 去停用词:

停用词就是句子中没必要的单词,去掉停用词对理解整个句子的语义没有影响。中文文本中存 在大量的虚词、代词或者没有特定含义的动词、名词,在文本分析的时候需要去掉。

语料字符处理

在进行分词、特征工程等任务前,必要的步骤是对语料文本进行字符的处理,去除一些无用的字符可以减 少噪声、提升分词的准确性等。

 这里以中文的语料作为主要对象,实现字符处理经常使用的技术是字符串函数和正则表达式。

字符串是Python中最常用的数据类型,可以使用引号('或")来创建字符串。

 常见的字符串处理函数如下(chars表示字符串):

• len( chars ):计算字符串的长度

• str[start : end : step] :字符串截取

• str.split(sep, maxsplit) :字符串分割

• str.find( chars ) :查找字符串位置

• str.count( chars ) :字符串数量位置

• str.strip( chars ) :删除字符串前后的特殊字符或空格

• str.replace( chars1|chars2|..., rep ) :把字符串chars1|chars2|...替换成rep

正则表达式函数

正则表达式是一种可以用于模式匹配和替换的工具,能方便的检查一个字符串是否与某种模式匹配。

通过正则表达式可以对指定的文本实现匹配测试、内容查找、内容替换、字符串分割等功能。

 re模块支持正则表达式,正则表达式常用函数如下。

• re.match(pattern, string):检测字符串开头位置是否匹配模式pattern。

• re.search(pattern, string):在整个字符串内查找并返回第一个成功的匹配模式pattern。

• re.findall(pattern, string):返回字符串中所有匹配模式pattern的结果列表。

• re.sub(pattern, repl, string):把所有匹配模式pattern的字符串用指定的字符串repl替换。

• re.split(pattern, string): 根据正则表达式分割字符串,将分割后的所有子字符串放在一个表中 返回

正则表达式的元字符

详细讲解请看我前面的文章 Python正则表达式之学习正则表达式三步曲

中文分词

简介

汉语自然语言处理第一项核心技术-分词

在英文中,单词之间以空格为自然分隔符,分词自然地以空格为单位切分,而中文分词则需要依靠一定技术和方法寻找类似英文中空格作用的分隔符。简单来说,中文分词是指将汉字序列按照一定规范、逐个切分为词序列的过程。

两种分词标准

粗粒度切分主要应用于自然语言处理的各种应用,如文本分类、聚类。

 细粒度切分最常应用的领域是搜索引擎。

eg:

[浙江大学坐落在西湖旁边]

• 粗粒度:浙江大学/坐落/在/西湖/旁边。

• 细粒度:浙江/大学/坐落/在/西湖/旁边。

分词中的两大难题

•切分歧义

•新词识别

切分歧义:

 AB和BC都是词典中的词

交集型歧义    :         

eg: [网球场]:网球/场, 网/球场

组合型歧义

[他从马上下来]: 他/从/马/上/下来 ,他/从/马上/下来

混合型歧义

这样的人才能经受住考

分词方法

基于规则或词典的分词方法

是一种较为机械的分词方法,其基本思想:

• 将待分词语句中的字符串和词典逐个匹配。

• 找到匹配的字符串则切分,不匹配则减去边缘的某些字符。

• 从头再次匹配,直至匹配完毕或者没有找到词典的字符串而结束。

 基于规则分词主要方法如下:

• 正向最大匹配法(Maximum Match Method,MM法)。

• 逆向最大匹配法(Reverse Maximum Match Method,RMM法)。

• 双向最大匹配法(Bi-direction Matching

正向最大匹配法基本思想如下:

 •假设有一个待分词中文文本和一个分词词典,词典中最长的字符串长度为K。

•从左至右切分待分词文本的前K个字符,然后查找是否有和词典一致的字符串。

•若匹配失败,则删去该字符串的最后一个字符,仅留下前 K-1个字符,继续匹配这个字符串,以此类推。

• 如果匹配成功,那么被切分下来的第二个文本成为新的待分词文本,重复以上操作直至匹配完毕。如果一 个字符串全部匹配失败,那么逐次删去最后一个字符,重复上述操作

 代码实现:

#

逆向最大匹配法基本思想如下:

• RMM与MM法原理相反,从右至左匹配待分词文本的后K个字符串,查找是否有和词典一致的字符串。

 • 若匹配失败,仅留下待分词文本的后K-1个词,继续匹配这个字符串,以此类推。

• 如果匹配成功,则被切分下来的第一个文本序列成为新的待分词文本,重复以上操作直至匹配完毕。

•  如果一个词序列全部匹配失败,则逐次删去第一个字符,重复上述操作

 

 代码实现:

#

双向最大匹配法基本思想如下。

双向最大匹配法基本思想是将MM法和RMM法的结果进行对比,选取两种方法中切分次数较少的作为切 分结果。

• 用正向最大匹配法和逆向最大匹配法对“北京市民办高中”进行分词,结果分别为“北京市民”、“ 办”、“高中”和“北京市”、“民办高中”。

• 选取切分次数最少的结果为“北京市”、“民办高中”。

研究表明,利用正向最大匹配法和逆向最大匹配法匹配,中文分词大约90%的词句完全重合且正确,有9% 左右的句子得到的结果不一样,但其中有一个是正确的。

剩下不到1%的句子使用两种方法进行切分都是错 误的。

 因而,双向最大匹配法在中文分词领域中得以广泛运

基于规则的中文分词常常会遇到歧义问题和未登录词问题

 未登录词也称为生词,即词典中没有出现的词,未登录词可以分为四大类。

• 第一类是日常生活出现的普通新词汇,尤其是网络热门词语,这类词语更新换代快,且不一定符合现 代汉语的语法规定;

• 第二类是专有名词,主要指人名、地名和组织机构名,它还包括时间和数字表达等;

• 第三类是研究领域的专业名词,如化学试剂的名称等;

• 第四类是其他专用名词,如近期新上映的电影、新出版的文学作品等。遇到未登录词时,分词技术往 往束手无策。

以上问题均可以通过更新词典解决,但维护成本高,实时性要求高。

基于统计的分词方法:

有效解决了中文分词遇到歧义问题和未登录词问题。

基本思想:中文语句中相连的字出现的次数越多,作为词单独使用的次数也越多,语句拆分的可靠性越高 ,分词的准确率越高。

 基本原理:统计词出现的次数,次数足够高的词作为单独的词语被保留。

 优势:能够较好地处理未登录词和歧义词,不需要人为的搭建和维护词典。

 缺点:需要依靠语料库进行分词,语料库的准确度不一定高,计算量较大,分词速度一般。

 两个步骤:建立统计语言模型;运用模型划分语句,计算被划分语句的概率,选取最大概率的划分方式进 行分词。

常见的基于统计的分词方法有:

n元语法模型

隐马尔可夫模型

jieba 分词

jieba库——“结巴”中文分词:做最好的 Python 中文分词组件

最常用的是以基于词典的分词方法为主,以统计分词方法为辅进行中文分词,这种方法既能较好地处理未 登录词和歧义词,又能避免词典准确率带来的问题。

中文分词工具jieba库就采用了这种方法进行中文分词

jieba 分词的基本步骤

jieba分词结合了基于规则和基于统计的分词方法,分词过程包含3个步骤:

•基于前缀词典快速扫描词图,搭建可能的分词结果的有向无环图,构成多条分词路径。

 •采用动态规划的方法寻找最大概率路径,从右往左反向计算最大概率,依此类推,得到概率最大的分词路 径,作为最终的分词结果。
 •采用HMM模型处理未登录词,借助模型中语句构成的4个状态B、M、E、S推导,最后利用维特比算法求解最 优分词路径。

分词模式

jieba分词支持精确模式、全模式和搜索引三种模式

• 精确模式采用最精确的方式将语句切开,适用于文本分析。

• 全模式可以快速地扫描语句中所有可以成词的部分,但无法解决歧义问题。

• 搜索引模式在精确模式的基础上再切分长词,适用于搜索引擎的分词。

 通过对 “中文分词是自然语言处理的一部分”采用三种模型进行分词,介绍jieba的分词模式。

3中分词模式的结果如下

• 全模式: 中文/ 分词/ 是/ 自然/ 自然语言/ 语言/ 处理/ 的/ 一部/ 一部分/ 部分/

• 精确模式: 中文/ 分词/ 是/ 自然语言/ 处理/ 的/ 一部分/

• 搜索引擎模式: 中文/ 分词/ 是/ 自然/ 语言/ 自然语言/ 处理/ 的/ 一部/ 部分/

全模式和搜索引擎模式会打印所有可能的分词结果,精确模式仅输出一种分词,除了一些适合全模式和搜 索引擎模式的场合,一般情况下会较多地使用精确模式。

这3种模式的分词主要用jieba.cut()函数和jieba.cut_for_search()函数。

• jieba.cut()函数可输入3个参数,待分词字符串、cut_all参数选择是否采用全模式(默认精确模式 )、HMM参数控制是否使用HMM模型。

• jieba.cut_for_search函数可输入两个参数。待分词字符串、是否使用HMM模型

Jieba库常用功能

Jieba库的安装和使用都比较简单,通过pip install jieba即可安装。

• 分词 :cut_words = jieba.cut(word) • 添加自定义字典:jieba.load_userdict(path) 或者 jieba.add_word()

• 关键词提取:jieba.analyse.extract_tags(word, topK=3)

文本预处理技术:停用词

停用词(Stop Words) ,词典译为“电脑检索中的虚字、非检索用字”。 

停用词一定程度上相当于过滤词(Filter Words),不过过滤词的范围更大一些,包含黄色、政治等敏感信 息的关键词都会被视做过滤词加以处理,停用词本身则没有这个限制。

常见的停用词有两种:

1、人类预言中包含的功能词、语气助词、副词、介词、连接词等

2、常见的符号,比如逗号、句号、问号、●、★等。

去除停用词的一般方法是:从分词后的结果中删除掉认为是停用词的词,参考停用词表。

几种常见的停用词表:

• 中文停用词表 https://github.com/Pirate-Xing/stopwords/blob/master/中文停用词表.txt


• 哈工大停用词表.https://github.com/Pirate-Xing/stopwords/blob/master/哈工大停用词表.txt

• 四川大学机器智能实验室停用词库https://github.com/Pirate-Xing/stopwords/blob/master/四川大学机器智能实验室停用词库.txt

• 百度停用词表 https://github.com/Pirate-Xing/stopwords/blob/master/百度停用词表.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis【实践篇】之RedisTemplate基本操作

Redis 从入门到精通【应用篇】之RedisTemplate详解 文章目录 Redis 从入门到精通【应用篇】之RedisTemplate详解0. 前言1. RedisTemplate 方法1. 设置RedisTemplate的序列化方式2. RedisTemplate的基本操作 2. 源码浅析2.1. 构造方法2.2. 序列化方式2.3. RedisTemplate的操作方…

【数据可视化】基于Python和Echarts的中国经济发展与人口变化可视化大屏

1.题目要求 本次课程设计要求使用Python和ECharts实现数据可视化大屏。要求每个人的数据集不同,用ECharts制作Dashboard(总共至少4图),要求输入查询项(地点和时间)可查询数据,查询的数据的地理…

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录 Stable Diffusion使用尝试下效果prompt的编写技巧prompt 和 negative promptPrompt格式Prompt规则细节优化Guidance Scale 总结 Stable Diffusion Stable Diffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于 Transformer模型架构,可以通过文字描述生成…

Asp.net Core配置CORS 跨域无效(记录一下)

问题 学习老杨的英语网站项目,运行项目时,发现出现了跨域的问题。 然后自己建一项目,进行配置,测试,发现配置CORS 跨域时,发现跨域的配置无效,依旧报错。 解决 网上找了一天,然后…

USG6000v防火墙的基本使用:制定安全策略让不同安全区域的设备进行访问

目录 一、首先配置环境: 二、实验拓扑及说明 拓扑: PC1和PC2配置ip地址:​编辑​编辑 r4路由器配置ip: 进行防火墙的设置: 1、创建trust1区域和untrust1区域 2、制定防火墙的策略: 3、为防火墙增加可以…

hive常用函数

行列转换 create table tmp_summer1(id string,name string brith string);insert into tmp_summer1 values(001,A,20211202); insert into tmp_summer1 values(001,B,20211202); insert into tmp_summer1 values(002,A,20211202); insert into tmp_summer1 values(001,B,20211…

unity进阶--json的使用学习笔记

文章目录 unity自带的json使用方法第三方--LitJson的使用第一种使用方式第二种--使用jsonData unity自带的json使用方法 创建数据类 转化成json 解析json 第三方–LitJson的使用 第一种使用方式 数据类 创建和解析 第二种–使用jsonData 创建 解析

R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术应用

回归分析是科学研究中十分重要的数据分析工具。随着现代统计技术发展,回归分析方法得到了极大改进。混合效应模型(Mixed effect model),即多水平模型(Multilevel model)/分层模型(Hierarchical Model)/嵌套…

CentOS7系统MBR、GRUB2、内核启动流程报错问题

目录 🥩Linux启动流程 🥩MBR修复 🍭1、模拟损坏 🍭2、重启测试 🍭3、修复MBR 🍭4、测试系统 🥩GRUB2修复 🍭1、模拟损坏 🍭2、修复GRUB2 🍭3、测试系统 &…

vue中export和export default的使用

<script> export default {name: HelloWorld } $(function () {alert(引入成功) }) </script> 1、export的使用 比喻index.js要使用test.js中的数据&#xff0c;首先在test.js文件中进行导出操作 代码如下&#xff1a; export function list() {alert("list…

Rust vs Go:常用语法对比(四)

题图来自 Go vs. Rust performance comparison: The basics 61. Get current date 获取当前时间 package mainimport ( "fmt" "time")func main() { d : time.Now() fmt.Println("Now is", d) // The Playground has a special sandbox, so you …

多目标灰狼算法(MOGWO)的Matlab代码详细注释及难点解释

目录 一、外部种群Archive机制 二、领导者选择机制 三、多目标灰狼算法运行步骤 四、MOGWO的Matlab部分代码详细注释 五、MOGWO算法难点解释 5.1 网格与膨胀因子 5.2 轮盘赌方法选择每个超立方体概率 为了将灰狼算法应用于多目标优化问题,在灰狼算法中引入外部种群Archi…

Vue第六篇:电商网站图片放大镜功能

本文参考&#xff1a;https://blog.csdn.net/liushi21/article/details/127497487 效果如下&#xff1a; 功能实现分解如下&#xff1a; &#xff08;1&#xff09;商品图区域&#xff1a;主要是浏览图片&#xff0c;根据图片的url显示图片。当鼠标离开此区域时"放大镜区…

ES6解构对象、数组、函数传参

目录 1.对象解构 2.对象解构的细节处理 2.1.解构的值对象中不存在时 2.2.给予解构值默认参数 2.3.非同名属性解构 3.数组解构 3.1基础解构语法 3.2数组嵌套解构 4.函数解构传参 5.解构小练习 在ES6的新语法中新增了解构的方法&#xff0c;它可以让我们很方便的从数组或…

每天五分钟机器学习:多项式非线性回归模型

本文重点 在前面的课程中,我们学习了线性回归模型和非线性回归模型的区别和联系。多项式非线性回归模型是一种用于拟合非线性数据的回归模型。与线性回归模型不同,多项式非线性回归模型可以通过增加多项式的次数来适应更复杂的数据模式。在本文中,我们将介绍多项式非线性回…

关于Arduino IDE库文件存放路径问题总结(双版本)

在开发过程中,如果不注意,库文件存放路径很乱,如果在转移系统环境时,容易忘记备份。编译过程中出现多个可用引用包的位置,为了解决这些问题,要明白各文件夹的默认路径在哪,区别在哪,如有了解不对的地方请指正。 IDE安装目录(默认C盘,自定义可以其他盘符下)IDE升级可…

IDEA如何打包springboot成jar包,并运行、停止、重启,本地依赖不能打包怎么办

1、将springboot项目打包成jar 第一步 这里要注意依赖的包的导入&#xff0c;有pom.xml中网络依赖导入&#xff0c;有的包是本地依赖导入&#xff0c;本地依赖的包只需在pom.xml加入一下代码即可&#xff01; <dependency><groupId>jacob</groupId>//名称…

eclipse中经常遇到的maven相关的问题

maven工程依赖的jar包无法部署到tomcat中 右键maven工程&#xff0c;选择“属性” 将工程在tomcat重新发布即可。 2、Update Project or use Quick Fix maven工程总是提示更新&#xff0c;一更新java版本又回到1.5 在pom.xml添加如下&#xff1a; <build><finalN…

rabbitmq是什么?rabbitmq安装、原理、部署

rabbitmq是什么&#xff1f; MQ的全称是Messagee Queue&#xff0c;因为消息的队列是队列&#xff0c;所以遵循FIFO 先进先出的原则是上下游传递信息的跨过程通信机制。 RabbitMQ是一套开源&#xff08;MPL&#xff09;新闻队列服务软件由 LShift 提供的一个 Advanced Messag…

量子计算机操作系统介绍

下载&#xff1a;https://m.originqc.com.cn/zh 为量子计算编程而生的一站式学习与开发平台&#xff0c;提供量子编程开发环境&#xff0c;支持量子计算资源随时调用&#xff0c;支持量子应用打开即用。 产品特点 无需安装配置 PilotOS客户端集成量子编程开发环境所需的Pyt…