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

news2024/11/27 17:57:55

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.coloradmin.cn/o/780143.html

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

相关文章

Kubernetes对象深入学习之四:对象属性编码实战

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习》系列的第四篇,前面咱们读源码和文档,从理论上学习了kubernetes的对象相关的知识&#xff…

【算法基础:搜索与图论】3.6 二分图(染色法判定二分图匈牙利算法)

文章目录 二分图介绍染色法判定二分图例题:860. 染色法判定二分图 匈牙利匹配二分图最大匹配匈牙利匹配算法思想例题:861. 二分图的最大匹配 二分图介绍 https://oi-wiki.org/graph/bi-graph/ 二分图是图论中的一个概念,它的所有节点可以被…

群组变量选择、组惩罚group lasso套索模型预测新生儿出生体重风险因素数据和交叉验证、可视化...

原文链接:http://tecdat.cn/?p25158 本文介绍具有分组惩罚的线性回归、GLM和Cox回归模型的正则化路径。这包括组选择方法,如组lasso套索、组MCP和组SCAD,以及双级选择方法,如组指数lasso、组MCP(点击文末“阅读原文”…

htmlCSS-----背景样式

目录 前言: 背景样式 1.背景颜色 background-color 2.背景图片 background-image 背景的权重比较 代码示例: 前言: 很久没写文章了,会不会想我呢!今天我们开始学习html和CSS的背景样式以及文字样式&#xff…

井川里予是谁呢?是中国人,还是日本人?

井川里予是抖音上的一个网红,名字叫庞欣然。 井川里予不是日本人,她是地地道道的中国人。 井川里予2001年6月出生于浙江省杭州市,现在在广东湛江发展。她毕业于浙江经济职业技术学院,抖音女网红,粉丝高达一千多万&…

Day 64:集成学习之 AdaBoosting (2. 树桩分类器)

做了一个超类, 用于支持不同的基础分类器. 这里为了减少代码量, 只实现了树桩分类器.树桩分类器每次只将数据分成两堆, 与决策树相比, 简单至极. 当然, 这里处理的是实型数据, 而 ID3 处理的是符号型数据. 抽象分类器代码: package dl;import java.util.Random;im…

图像处理之LoG算子(高斯拉普拉斯)

LoG算子(高斯拉普拉斯算子) LoG算子是由拉普拉斯算子改进而来。拉普拉斯算子是二阶导数算子,是一个标量,具有线性、位移不变性,其传函在频域空间的原点为0。所有经过拉普拉斯算子滤波的图像具有零平均灰度。但是该算子…

栈OJ(C++)

文章目录 1.最小栈2.栈的压入、弹出序列3.逆波兰表达式(后缀表达式)求值3.1后缀表达式求值3.2中缀表达式转后缀表达式3.3带有括号的中缀表达式转后缀表达式 1.最小栈 class MinStack { public:MinStack(){}void push(int val){_st.push(val);//empty放在…

MQTT网关 5G物联网网关 PLC控制工业网关

MQTT网关,两个以上的节点之间通信的新型网关,网络节点之间通过互连来实现双向通信。支持PLC协议转MQTT,实现plc数据采集上云,物联网云平台对接,广泛应用于工业自动化plc远程监测控制。 计讯物联5G MQTT物联网网关TG463…

设计模式-单例模式进阶

在前面的文章(设计模式-单例模式)中,我们分别介绍了四种单例设计模式,包括普通恶汉式单例、双重检查锁单例(DCL)、静态内部类单例以及枚举单例。但是,这四种模式还有一些问题我们没有仔细分析,以至于我们无法深入分析他们的优点以…

【面试题】万字总结MYSQL面试题

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 1、三大范式 2、DML 语句和 DDL 语句区别 3、主键和外键的区别 4、drop、delete、truncate 区别 5、基础架构 6、MyISAM 和 InnoDB 有什么区别? 7、推荐自增id作为…

【mac系统】mac系统调整妙控鼠标速度

当下环境: mac系统版本,其他系统应该也可以,大家可以自行试下: 鼠标 mac妙控鼠标,型号A1657 问题描述: 通过mac系统自带的鼠标速度调节按钮,调到最大后还是感觉移动速度哦过慢 问题解决&…

若依微服务整合activiti7.1.0.M6

若依微服务3.6.3版本整合activiti7(7.1.0.M6) 目前有两种办法集成activiti7 放弃activiti7新版本封装的API,使用老版本的API,这种方式只需要直接集成即可,在7.1.0.M6版本中甚至不需要去除security的依赖。不多介绍&a…

日常问题记录-Android-Bug-OOM

大家好哇,我是梦辛工作室的灵,最近的项目中,我又遇到了一个bug,就是我写了一个类 将app会用到的Bitmap缓存起来进行管理,防止OOM嘛,不过莫名奇妙的事情还是发生了,内存依旧上涨,且没…

数据结构day7(2023.7.23)

一、Xmind整理: 二、课上练习: 练习1:结点之间的关系 练习2:二叉树的特殊形态 练习3:满二叉树的形态 练习4:完全二叉树的形态 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树 练习5&am…

Windows系统自检中断导致存储文件系统损坏的服务器数据恢复案例

服务器数据恢复环境: 一台挂载在Windows server操作系统服务器上的v7000存储,划分了一个分区,格式化为NTFS文件系统,该分区存放oracle数据库。 服务器故障: 服务器在工作过程中由于未知原因宕机,工作人员重…

机器学习深度学习——线性回归

之前已经介绍过线性回归的基本元素和随机梯度下降法及优化,现在把线性回归讲解完: 线性回归 矢量化加速正态分布与平方损失从线性回归到深度网络神经网络图生物学 矢量化加速 在训练模型时,我们常希望能够同时处理小批量样本,所以…

涵子来信——自己的电脑——谈谈想法

大家好: 上一次谈论了苹果的那些事,今天我们来聊聊电脑。 我的第一台电脑现在成了这样子: 很多人以为是我自己拆了电脑做研究,其实是我的第一台电脑,真的坏了。 2021年,我有了属于我自己的第一台电脑&am…

STM32 HAL库串口重映射printf

添加代码 #include "stdio.h" int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);return ch; }keil设置 实现效果: 打印变量 printf("Hello, I am %s\r\n", "iii"); // printf输出字符…

Kubernetes pv-pvc-nfs-service综合实验

目录 实验:pv-pvc-nfs-service综合实验 实验环境 实验描述 实验拓扑图: 实验步骤: 1、修改nfs服务器的主机名: 2、搭建nfs服务器:(131条消息) 搭建NFS服务器_搭建nfs存储_Claylpf的博客-CSDN博客 3、测试k8s上…