【深度学习&NLP】数据预处理的详细说明(含数据清洗、分词、过滤停用词、实体识别、词性标注、向量化、划分数据集等详细的处理步骤以及一些常用的方法)

2023-05-16

目录

一、数据预处理简介

二、进行数据预处理的原因

1、文本中含有不必要的信息和噪声

2、数据可能不一致或者不太规范

3、文本需要标记和分词

4、可能需要词形还原和词干提取 ( 词性标注 )

5、需要将文本向量化处理

三、数据预处理方法介绍及使用样例

1、数据清洗

2、分词

3、停用词过滤

4、词性标注

5、实体识别

6、词向量化


一、数据预处理简介

        在深度学习中,数据预处理是一个重要的步骤。原始训练数据中,由于每一维特征的来源以及度量单位不同,会造成特征值的分布范围差异很大。当计算不同样本之间的欧氏距离时,取值范围大的特征会起到主导作用。因此,对于基于相似度比较的机器学习方法,必须先对样本进行预处理,将各维度特征归一化到同一取值区间,并且消除不同特征之间的相关性,才能获得理想的结果。

        数据预处理还可以通过数据增强来增加训练样本的多样性,提高模型鲁棒性,避免过拟合,例如, 翻转、旋转、平移、缩放、随机裁剪或补零,色彩抖动等 ( 这些都是在CV当中的一些情况 );在NLP的任务中,数据预处理又可以通过以下方式来有效地增加训练数据的多样性,避免模型对训练数据的过拟合,提高模型的泛化能力和鲁棒性,例如,同义词替换、随即插入、随即删除、随即交换、随机扰动等,这些方法还可以缓解NLP中数据量不足的问题,提高模型的性能。

二、进行数据预处理的原因

1、文本中含有不必要的信息和噪声

        文本数据通常包含大量的无关信息和噪声,如标点符号、HTML标记、停用词、缩写、拼写错误、语法错误等。这些信息和噪声会干扰模型的学习和性能,导致模型预测不准确或低效。通过数据预处理,可以去除这些不必要的信息和噪声,使文本数据更加干净和有用。

2、数据可能不一致或者不太规范

        文本数据通常具有多种表现形式和写作风格,如大小写、缩写、单复数、变体词等,在中文中可能存在语义分割的问题,有些词与词之间的界限不清晰、有些词语的多义性和歧义性、还有语法和语义的变化、简体字和繁体字、以及不同民族的文字,所以中文的数据在处理起来可能更加的困难、需要我们更加的小心和细心。这些差异会导致数据不一致和不规范,从而使模型学习变得更加困难。通过数据预处理,可以将文本数据转换为一致和规范的形式,使模型更容易学习和理解。

3、文本需要标记和分词

        在NLP中,将文本数据划分为单个标记或单词是很重要的。这可以帮助我们理解文本的含义和结构,以及构建词汇表和语料库。标记化和分词可以将文本数据转换为可操作的形式,从而为模型学习提供基础。这一步中,对中文的处理也比英文要困难,英文的词都是用空格隔开的,而中文的一句话很多时候都是连起来的,所以在分词、词性标注的时候就更加的不容易,不过现在也有像 jieba 这样的比较优秀的中文分词的工具。

4、可能需要词形还原和词干提取 ( 词性标注 )

        在NLP中,有时候我们需要将单词转换为它们的基本形式,这被称为词形还原和词干提取,在中文的NLP中其实词形还原和词干提取用的比较少 ( 在机器翻译和信息检索需要形态学分析的时候可能会用到 ),一般来说中文更多的是使用分词技术和词性标注技术来处理。这可以帮助我们理解单词的含义和关系,以及减少词汇量。通过数据预处理,可以将文本数据中的单词转换为它们的基本形式,从而提高模型的性能和效果。

5、需要将文本向量化处理

        NLP中的大多数模型需要将文本数据转换为数字特征向量,这可以使它们与其他机器学习算法兼容。向量化可以帮助我们表示文本数据,并为模型学习提供基础。通过数据预处理,可以将文本数据转换为数字特征向量,使其更加适合于机器学习算法。

        NLP中的数据预处理是一个非常重要的步骤,可以帮助我们减少噪声和错误,提高数据的一致性和规范性,转换文本数据为可操作的形式,以及提高模型性能。

三、数据预处理方法介绍及使用样例

        这里我们主要介绍在中文的NLP任务中数据预处理每一步所使用的一些方法。

1、数据清洗

        数据清洗是指去除数据中不需要的内容,例如HTML标签、数字、特殊符号等。这可以通过正则表达式、字符串匹配和过滤等技术实现。

例:

import re

def clean_text(sentence):
    # 过滤HTML标签
    sentence = re.sub(r'<.*?>', '', sentence)

    # 过滤数字
    sentence = re.sub(r'\d+', '', sentence)

    # 过滤特殊符号
    sentence = re.sub(r'[^\w\s]', '', sentence)

    # 过滤空格
    sentence = sentence.replace(' ', '')

    return sentence

text = "<p>这是一个包含HTML标签、数字12 3和特 殊符  号以及空格!@#的文本。</p>"
clean_text = clean_text(text)
print(clean_text)

        结果如下所示:

这是一个包含HTML标签数字和特殊符号以及空格的文本

2、分词

        中文文本需要先进行分词,将句子分割成单独的词语。中文的分词算法有很多,例如基于规则的算法、基于统计的算法和基于深度学习的算法。其中,基于深度学习的算法如BERT、LSTM等,能够更好地处理语义信息。可能在你做的很多实际的项目中,你经常会直接使用现有的分词工具,在这里我们就介绍一下分词工具的使用,至于完整实现一个分词的算法可能在后续的文章中会单独出一篇,内容应该比较多和细,所以在这里就不展开说了,下面我们给出一些现在用的比较多的分词工具的使用 ( 这里作者主要介绍一下中文的分词工具,英文的用的比较多的应该是NLTK )。

例:

text = "自然语言处理是人工智能领域的一个重要方向。"

# 使用jieba分词
import jieba
seg_list = jieba.cut(text)
print("jieba分词结果:", " ".join(seg_list))

# 使用THULAC分词
import thulac
thu = thulac.thulac()
seg_list = thu.cut(text)
print("THULAC分词结果:", " ".join([item[0] for item in seg_list]))

# 使用HanLP分词
from pyhanlp import HanLP
seg_list = HanLP.segment(text)
print("HanLP分词结果:", " ".join([term.word for term in seg_list]))

# 使用LTP分词
from ltp import LTP
ltp = LTP()
seg, _ = ltp.seg([text])
print("LTP分词结果:", " ".join(seg[0]))

        结果如下所示:

jieba分词结果: 自然语言 处理 是 人工智能 领域 的 一个 重要 方向 。
THULAC分词结果: 自然语言 处理 是 人工智能 领域 的 一 个 重要 方向 。
HanLP分词结果: 自然语言 处理 是 人工智能 领域 的 一个 重要 方向 。
LTP分词结果: 自然语言 处理 是 人工智能 领域 的 一个 重要 方向 .

3、停用词过滤

        停用词是指在文本中频繁出现但对文本意义贡献较小的词语,例如“的”、“了”、“是”等。通常需要将这些词语从文本中去除,以减少处理时间和存储空间,并提高文本处理效率。常用的中文的停用词表又哈工大(HIT)停用词表、百度(baidu)停用词表、川大机器智能实验室停用词表(SCU)以及中文停用词表(CN)等。下面就是这几个常用的中文停用词表的下载仓库地址:

GitHub - goto456/stopwords: 中文常用停用词表(哈工大停用词表、百度停用词表等)

        下面我给出一个使用哈工大停用词表去停用词的示例:

例:

import jieba

# 加载停用词表
with open('hit_stopwords.txt', 'r', encoding='utf-8') as f:
    stopwords = [line.strip() for line in f.readlines()]

# 定义去停用词函数
def remove_stopwords(text):
    seg_list = jieba.cut(text)
    filtered_list = [word for word in seg_list if word not in stopwords]
    return ' '.join(filtered_list)

text = "我与杀戮之中盛放,亦如黎明中的花朵。"
filtered_text = remove_stopwords(text)
print(filtered_text)

结果如下:

杀戮 之中 盛放 亦 黎明 中 花朵

4、词性标注

        词性标注是指对分词后的词语进行词性标记,例如名词、动词、形容词等。词性标注能够帮助模型更好地理解文本,同时也有助于其他任务,例如命名实体识别和依存句法分析等。词性标注算法包括基于规则的算法、基于统计的算法和基于深度学习的算法。词性标注可以用隐马尔可夫模型中经典的维特比算法来做,也可以用现在用的比较多的神经网络来做,不过说起来都比较冗长,后面有机会可以出一篇专门实现的文章,在这里我们直接展示一下使用 jieba 分词工具来进行词性标注:

例:

import jieba.posseg as pseg

text = "云日明松雪,溪山进晚风。"
result = pseg.cut(text)

for word, tag in result:
    print(word, tag)

结果如下:

云日明 nr
松雪 nr
, x
溪山 ns
进 v
晚风 n
。 x

        读者可自行搜索这些词性所代表的含义。

5、实体识别

        实体识别是指在文本中自动识别和提取出人名、地名、机构名等具有特定意义的实体。实体识别通常采用基于规则的方法或基于机器学习的方法,例如条件随机场(CRF)和循环神经网络(RNN)等。本文章只展示使用现有的工具进行命名实体识别的方法,有很多工具可以用来进行命名实体识别。一些较为成熟的中文命名实体识别(NER)工具包括 LTP(语言技术平台),PyHanlp,Lac 等。底层的实现,有时间再单独做。

例:

from LAC import LAC

lac = LAC(mode='lac')
text = "杨超越在1998年7月31日出生于江苏省盐城市大丰区。"
result = lac.run(text)
print(result)

结果如下:

[['杨超越', '在', '1998年', '7月31日出生于', '江苏省', '盐城市', '大丰区', '。'], ['PER', 'p', 'TIME', 'v', 'LOC', 'LOC', 'LOC', 'w']]

6、词向量化

        将文本转换为向量表示是深度学习中的一个重要步骤,词向量化是将分词后的词语转换为向量表示的过程。常见的词向量化算法有词袋模型(Bag-of-words, BoW)、word2vec、GloVe、TDF-IDF等。

        TF-IDF(词频-逆文档频率)是一种常用的文本特征提取方法,它用于衡量单词在文档集合中的重要性。TF-IDF 是由两部分组成的:词频(TF)和逆文档频率(IDF)。词频(TF)表示单词在文档中出现的频率。它通常通过将单词在文档中出现的次数除以文档的总单词数来计算。词频越高,说明单词在文档中越重要。逆文档频率(IDF)表示单词在文档集合中的普遍重要性。它通常通过将文档集合的总文档数除以包含该单词的文档数,然后取对数来计算。逆文档频率越高,说明单词在文档集合中越重要。TF-IDF 值是通过将词频和逆文档频率相乘来计算的。TF-IDF 值越高,说明单词在文档中越重要。下面是直接使用sklearn来进行TDF-IDF向量化的例子:

例:

from sklearn.feature_extraction.text import TfidfVectorizer

# 准备数据
corpus = ['赵六 王五', '张三 李四']

# 创建 TfidfVectorizer 对象
vectorizer = TfidfVectorizer()

# 计算 TF-IDF 值
tfidf = vectorizer.fit_transform(corpus)

# 输出结果
print(tfidf.toarray())

结果如下:

[[0.         0.         0.70710678 0.70710678]
 [0.70710678 0.70710678 0.         0.        ]]

        

        中文NLP任务的数据预处理包括数据清洗、分词、停用词过滤、词性标注、实体识别和词向量化等多个步骤,每个步骤都有不同的数据预处理技术可以选择,以后的文章中我可能还会介绍一些不错的方法实现,本篇文章对数据预处理部分就暂时叙述到这里。

本篇文章到此结束,感谢各位读者的阅读!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习&NLP】数据预处理的详细说明(含数据清洗、分词、过滤停用词、实体识别、词性标注、向量化、划分数据集等详细的处理步骤以及一些常用的方法) 的相关文章

  • 直接插入排序(C语言)[测试数据随机生成+计算程序运行时间+算法效率分析]

    直接插入排序 xff0c 使用C语言实现 这里为了方便测试面对大量数据时直接插入排序算法的运行时间 xff0c 通过宏定义来设定生成随机数的数量 xff08 即参与排序的数据数量 xff09 xff0c 利用rand 函数生成随机数 xff
  • docker Kubernetes(k8s)部署

    文章目录 一 准备工作二 初始化集群然后在server2中然后在server1中再然后在server2中在server1中然后在server2中在server3和server4中 一 准备工作 把server2和server3 xff0c
  • LQR的理解与运用 第一期——理解篇

    目录标题 0 本系列目的理解六个问题 运用一阶倒立摆matlab 43 simscape multibody实现 简单的轮足模型 xff08 二阶倒立摆 xff09 1 理解LQR写在前面Q1 LQR控制的是什么Q2 LQR的适用场景与形式
  • LQR的理解与运用 第二期——一阶倒立摆在matlab上的LQR实现

    目录标题 0 本系列目的参考教程 1 理解2 运用在solidworks上创建一阶倒立摆模型并导出一阶倒立摆的模型及物理公式推导模型介绍模型推导模型推导方法化简方法结论 根据模型求LQR的K值matlab仿真的实现流程与步骤准备步骤正确导入
  • tensorflow张量和numpy数组相互转换

    知识补充 xff1a 官方文档 xff08 GItHub xff09 xff1a TensorFlow 2 0 Functions not Sessions tensorflow2 x的转换模块 64 tf function 关于图执行 x
  • 猿创征文|【电源专题】案例:怎么用万用表测试静态电流IQ

    目录 nbsp nbsp nbsp nbsp 静态电流在生活中的例子 nbsp nbsp nbsp nbsp 什么是静态电流IQ 关断电流 非开关静态电流 lt
  • IDEA找不到Maven插件原因及解决办法

    IDEA找不到Maven插件原因及解决办法 报错如下 xff0c 因为我自己的报错解决了 xff0c 所以借用了别人的图 xff0c 侵删 在idea中你会发现明明在pom xml中加入了插件但依然会报错 xff0c 并且不会下载 解决办法
  • linux系统用户自动登陆不需要输入密码设置

    使用于ubuntu linux unix 一 删除密码 root 64 ubuntu passwd d root 或者 passwd root d 二 修改sshd config文件 root 64 ubuntu cd etc ssh ro
  • 新建springboot项目报错

    未能配置数据源 xff1a url 属性未指定 xff0c 无法配置嵌入式数据源 原因 xff1a 无法确定合适的驱动程序类别 如果您想要一个嵌入式数据库 xff08 H2 HSQL或Derby xff09 xff0c 请将其放在类路径上
  • 伪分布搭建hadoop

    伪分布式搭建hadoop 伪分布模式准备工作以root权限修改ip xff0c 配置关网等修改完IP地址后 xff0c 需要重启网络服务查看ip和是否能ping通修改主机名修改域名映射文件关闭防火墙ssh免密登陆 安装JDK卸载之前的JDK
  • Java实现AI机器人聊天

    文章目录 前言一 账号注册申请密钥二 参数详情三 Java集成1 调用接口2 响应数据 四 效果总结 前言 OpenAI API 几乎可以应用于任何涉及理解或生成自然语言或实现代码等场景 提供一系列具有不同学习训练的模型 xff0c 适用于
  • 使用全局阈值进行灰度图像二值化

    1 原理 选取阈值的一种方法就是图像直方图的视觉检测 选择 T 的另一个方法是反复实验 xff0c 选取不同的阈值 xff0c 直到观测者觉得产生了较好的结果为止 xff0c 这在交互环境下特别有效 例如 xff0c 这种方法允许 使用者通
  • Linux动静态库

    文章目录 Linux动静态库认识动静态库动态库静态库 静态库的打包与使用静态库的打包静态库的使用 动态库的打包与使用动态库的打包动态库的使用 Linux动静态库 认识动静态库 我们先来看一段代码 xff1a span class token
  • GPS启动方式、定位速度、定位精度介绍

    前面文章介绍了GPS定位基础知识 GPS定位知识介绍 qq com 本文主要介绍GPS启动方式 定位过程中最重要的辅助信息是时间 星历 位置 根据辅助信息不同
  • window11上Linux环境搭建

    以下的大部分图片来自网上 xff0c 本人在操作过程中忘记截图记录了 xff0c 但是发出来的这些和我做的是一模一样的 xff01 xff01 一 点击下载centOS7镜像 centos 7 9 2009 isos x86 64安装包下载
  • SQLyog连接MySQL出现错误,提示Client does not support authentication protocol requested by server的解决方法

    问题 xff1a 自己电脑安装了MySQL8 0 26版本 xff0c 但从网上找到破解版的SQLyog软件 xff0c 在装好SQLyog后连接不上 xff0c 会弹出 Client does not support authentica
  • C++的基础知识学习笔记

    C 43 43 的基础知识学习 1 3变量 作用 xff1a 给一段指定的内存空间起名 xff0c 方便操作这段内存 语法 xff1a 数据类型 变量名 61 初始值 xff1b int a 61 1 xff1b 变量存在的意义 xff1a
  • zsh 配置指南

    zsh 配置指南 前言 在Linux系统中 xff0c 我们厂用终端输入命令与系统进行交互 xff0c 大多Linux系统使用的shell为bash 但bash中的功能和色调非常简单和单调 xff0c 往往想达到一个趁手的命令行工具 xff
  • linux/swupd基础命令讲解---基础篇

    一 原生linux ubuntu unix系统安装基础命令 root 64 ubuntu clrtrust generate root 64 ubuntu s wupd bundle add network basic root 64 ub
  • Ros_Canopen:ROS与底盘的can通讯使用

    ROS CANOPEN ROS与底盘的can通讯使用 这篇文章记录了ros canopen的安装和使用过程 xff0c 系统版本为ubuntu16 04 并且已经安装了ROS xff08 kienect 安装过程可能会出现错误 xff0c

随机推荐

  • casbin的详细理解过程(附图片理解)(rbac模型)

    一 casbin模型 casbin模型又叫PERM模型 xff1a subject sub 访问实体 xff0c object xff08 obj访问的资源 xff09 和action xff08 act访问方法 xff09 eft xff
  • EKF(拓展卡尔曼滤波)学习笔记:

    一些参考 xff1a xff08 三十九 xff09 通俗易懂理解 卡尔曼滤波与扩展卡尔曼滤波 知乎 zhihu com 50 封私信 42 条消息 如何通俗并尽可能详细地解释卡尔曼滤波 xff1f 知乎 zhihu com 视觉slam1
  • MSCKF学习笔记

    1 IMU简介 xff1a 测量物体三轴姿态角及加速度的装置 一般IMU包括三轴陀螺仪及三轴加速度计 IMU通常包含陀螺仪 Gyroscope 加速度计 Accelermeters 现代的陀螺仪 MEMS 输出的是旋转变化率 Rotatio
  • 树莓派串口编程c语言

    一 xff1a 初次使用树莓派串口编程 xff0c 需要配置 1 进入 cmdline txt 文档 指令 xff1a cd boot sudo vim cmdline txt 2 删除 之间的部分 dwc otg lpm enable s
  • 数据结构与算法

    为什么要学习数据结构与算法 1 数据结构 43 算法 61 程序 2 代码化繁为简 3 提高代码性能 4 提高面试通过率 栈 栈的概念 栈是一种遵从后进先出原则的有序集合添加新元素的一端称为栈顶 xff0c 另一端称为栈底操作栈的元素时 x
  • python爬虫的常用库

    1 requests 这个库是爬虫最常用的一个库 2 Selenium Selenium 这是一个自动化测试工具 xff0c 利用它我们可以驱动浏览器执行特定的动作 xff0c 如点击 下拉等操作 对于一些用JS做谊染的页面来说 xff0c
  • 【Mecanum wheel】初理解

    文章目录 Mecanum wheel1 定义2 受力分析3 轮子布局布局特点分析 4 底盘设计1 麦克纳姆轮尺寸2 电机连接参考 xff08 较通用 xff09 3 底盘设计参考 xff08 悬挂 避震器 xff09 5 缺点 Refere
  • STM32cubemx教程及STM32入门(一)

    STM32cubemx教程 xff08 一 xff09 2021 10 17 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具 xff0c 目的就是为了方便开发者 xff0c 允许用户使用图
  • 2020-11-05

    私有云的优缺点是什么 xff1f 与公有云的区别 毋庸置疑 xff0c 企业选择私有云的重要原因之一是数据安全性 与传统的 IT 架构相比 xff0c 云算力的高可用性 xff0c 让 IT 解决方案更经济高效地运行 优点 xff1a 可定
  • git 解决每次更新代码都要输入用户名密码的解决方案--1

    使用git pull或者git push每次都需要输入用户名和密码很繁琐 xff0c 耽误时间 xff0c 现在教大家一条命令实现保存用户名和密码不用再输入 git config global credential span class h
  • 浏览器相关知识总结~

    浏览器知识总结 前言一 浏览器的存储CookiesessionstorageindexedDB 二 浏览器的缓存浏览器缓存其它缓存 三 浏览器同源策略和跨域同源策略跨域 四 浏览器的渲染五 进程与线程1 进程与线程概念2 进程和线程之间的关
  • Samba服务

    目录 配置yum源安装samba服务配置samba服务Windows环境使用Samba服务Linux环境使用Samba服务 xff08 1 xff09 方法一使用smbclient命令 xff08 2 xff09 方法二使用挂载的方式 Sa
  • 基于STM32的二轮自平衡小车

    前言 近年来 xff0c 移动机器人是目前科学领域比较活跃的领域之一 xff0c 其应用范围越来越广泛 xff0c 面临的环境也越来越复杂 xff0c 这就要求机器人能够适应一些复杂的环境和任务 二轮自平衡机器人正是在这一背景下提出来的 x
  • 学习STM32单片机之结构体思想

    学习目标 xff1a 掌握 STM32 基础知识 学习STM32单片机之 结构体思想 学习内容 xff1a 1 我们在操作寄存器的时候 xff0c 操作的是寄存器的绝对地址 xff0c 如果每个寄存器都这样操作 xff0c 那将非常麻烦 2
  • Matlab中的mex文件

    文章目录 前言一 MEX的介绍二 MEX的编写总结 前言 MEX文件是一种可在matlab环境中调用的C语言 xff08 或fortran xff09 衍生程序 xff0c mex的编译结果实际上就是一个带输出函数mexFunction 的
  • 【转载】机器视觉-相机标定后,移动相机需要重新标定相机吗?

    毕业论文和机器视觉相关 xff0c 最近又在做标定的相关东西 xff0c 及在笔记本上太麻烦 xff0c 索兴就建个博客写点学习中遇到的问题 相机标定之后 xff0c 移动相机需要重新进行标定吗 xff1f xff08 我主要做的是单目视觉
  • 浅谈逻辑地址和物理地址

    在程序运行时由中央处理单元生成的内容的地址称为逻辑地址 该地址也称为虚拟地址 当我们谈论逻辑地址时 xff0c 我们指的是CPU分配给每个进程的地址 xff0c 一个进程在内存中所处的实际地址与进程认为它所处的地址是不一样的 每当 CPU
  • [CUDA] 快速入门CUDA(2) 以任务为导向的实践-解决最小二乘法问题

    快速入门CUDA 2 以任务为导向的实践 解决最小二乘法问题 文章目录 快速入门CUDA 2 以任务为导向的实践 解决最小二乘法问题1 问题介绍2 MATLAB解法实现3 CUDA解法实现3 1 总览3 2 第一步 xff0c 读取矩阵3
  • 常见的Linux版本

    常见的Linux版本 Linux 系统的吉祥物名为 Tux xff0c 是一只呆萌的小企鹅 相传 Linus Torvalds 在童年时期去澳大利亚的动物园游玩时 xff0c 不幸被一只企鹅咬伤 xff0c 所以为了 报复 就选择了这个物种
  • 【深度学习&NLP】数据预处理的详细说明(含数据清洗、分词、过滤停用词、实体识别、词性标注、向量化、划分数据集等详细的处理步骤以及一些常用的方法)

    目录 一 数据预处理简介 二 进行数据预处理的原因 1 文本中含有不必要的信息和噪声 2 数据可能不一致或者不太规范 3 文本需要标记和分词 4 可能需要词形还原和词干提取 词性标注 5 需要将文本向量化处理 三 数据预处理方法介绍及使用样