【python、nlp】文本预处理

news/2024/2/25 19:31:06/文章来源:https://blog.csdn.net/David_Hzy/article/details/135530004

文本预处理及其作用:

文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求,如:将文本转化成模型需要的张量,规范张量的尺寸等,而且科学的文本预处理环节还将有效指导模型超参数的选择,提升模型的评估指标。

文本预处理中包含的主要环节:

 文本处理的基本方法

分词

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程。

中文(jieba)

精确模式
jieba.cut(content,cut_all=True)#返回对象
jieba.lcut(content,cut_all=True)#返回list
全模式分词
jieba.cut(content,cut_all=True)#返回对象
jieba.lcut(content,cut_all=True)#返回list
搜索引擎模式
jieba.cut_for_search(content)#返回对象
jieba.lcut_for_search(content)#返回list
 使用用户自定义词典:

添加自定义词典后,jieba能够准确识别词典中出现的词汇,提升整体的识别准确率。

词典格式:每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒.
词典样式如下,具体词性含义请参照附录:jieba词性对照表,将该词典存为userdict.txt,方便之后加载使用

云计算导论 5 n

导入设定的词典

jieba.load_userdict("userdict.txt")

英文或中文(hanlp)

#中文分词
content="文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求。"
tokenizer=hanlp.load('CTB6_CONVSEG')
tokenizer(content)#英文分词
tokenizer = hanlp.pipelines.tok_ctb6_convseg()
content = "The cat is on the mat."
tokenizer(content)

英文(nltk)

import nltknltk.download('punkt')  # 下载必要的数据content = "The cat is on the mat."
tokens = nltk.word_tokenize(content)
print(tokens)

文本张量表示方法

将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示。将文本表示成张量(矩阵)形式,能够使语言文本可以作为计算机处理程序的输入,接下来一系列的解析工作。

one-hot编码

又称独热编码,将每个词表示成具有n个元素的向量,这个词向量中只有一个元素是1,其他元素都是0,不同词汇元素为0的位置不同,其中n的大小是整个语料中不同词汇的总数。

制作映射器

import joblib
from keras.preprocessing.text import Tokenizervocab = ["云计算导论", "软件开发与重构", "企业应用开发", "人工智能导论", "用户体验设计"]# Instantiate the Tokenizer
tokenizer = Tokenizer(num_words=None, char_level=False)
tokenizer.fit_on_texts(vocab)for vocab_word in vocab:zero_list = [0] * len(vocab)token_index = tokenizer.texts_to_sequences([vocab_word])[0][0] - 1zero_list[token_index] = 1print(vocab_word, zero_list)

保存映射器 

tokenizer_path="./Tokenizer"
joblib.dump(tokenizer,tokenizer_path)

使用映射器

t=joblib.load('tokenizer.pkl')
token="xxx"
token_index=t.texts_to_sequences([token])[0][0]-1
zero_list=[0]*len(vocab)
zero_list[token_index]=1

Word2vec

一种流行的将词汇表示成向量的无监督训练方法,该过程将构建神经网络模型,将网络参数作为词汇的向量表示,它包含CBOW和skipgram两种训练模式.

CBOW(学习过程)

给定一段用于训练的文本语料,再选定某段长度(窗口)作为研究对象,使用上下文词汇预测目标词汇。

CBOW的详情和实现

skipgram(实现过程)

给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象,使用目标词汇预测上下文词汇。

skipgram的详情和实现

代码实现
import fasttext# 用无监督方法训练,参数来自'data/fil9'
model=fasttext.train_unsupervised('data/fil9')# 查看某个词的词向量
model.get_word_vector('computer')"""模型超参数设定
参数一:数据集。
参数二:训练模式(skpgram和cbow)。
参数三:dim默认为一百,随数据集增大而增大
参数四:epoch循环参数,默认为5。
参数五:lr学习率,【0.01,1】,默认0.05。
参数六:thread线程数,默认为12,一般和cpu核数相同。
"""
model=fasttext.train_unsupervised('data/fil9',"cbow",lr=0.1,epoch=25,dim=100,thread=48)# 检验评估
model.get_nearest_neighbors('computer')# 保存模型
model.save_model('data/fil9.bin')# 加载模型
model =fasttext.load_model('data/fil9.bin')

Word Embedding

狭义的word embedding是指在神经网络中加入的embedding层,对整个网络进行训练的同时产生的embedding矩阵(embedding层的参数),这个embedding矩阵就是训练过程中所有输入词汇的向量表示组成的矩阵。

import torch
import json
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()
embedded=torch.randn(100,50)
meta=list(map(lambda x:x.strip(),fileinput.Fileinput('./data/meta.txt')))
writer.add_embedding(embedded,metadata=meta)
writer.close()

文本语料的数据分析

标签数量分布

句子长度分布

词频统计与关键词词云

文本特征处理

添加n-gram特征

文本长度规范

数据增强方法

回译数据增强法

回译数据增强目前是文本数据增强方面效果较好的增强方法,一般基于google翻译接口,将文本数据翻译成另外一种语言(一般选择小语种),之后再翻译回原语言, 即可认为得到与与原语料同标签的新语料,新语料加入到原数据集中即可认为是对原数据集数据增强.

操作简便,获得新语料质量高。

回译数据增强存在的问题:

在短文本回译过程中,新语料与原语料可能存在很高的重复率,并不能有效增大样本的特征空间.

高重复率解决办法:

进行连续的多语言翻译,如:中文﹣>韩文﹣->日语﹣>英文﹣>中文,根据经验,最多只采用3次连续翻译,更多的翻译次数将产生效率低下,语义失真等问题。

代码实现(谷歌翻译)

from googletrans import Translatorp_sample1="酒店设施非常不错"
p_sample2="这家价格很便宜"
n_sample1="拖鞋都发霉了,太差了"
n_sample2="电视不好用,没有看到足球"translator=Translator()
translations=translator.translate([p_sample1,p_sample2,n_sample1,n_sample2],dest='ko')ko_res=list(map(lambda x:x.text,translations))
print(ko_res)translations=translator.translate([p_sample1,p_sample2,n_sample1,n_sample2],dest='zh-cn')
cn_res=list(map(lambda x:x.text,translations))
print(cn_res)

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

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

相关文章

关于并发十道常见面试题

面试题一:线程中的start和run方法有什么区别 Java中线程是通过Thread类来实现的,每个线程都是通过特定的Thread对象所对应的run方法来完成 start()方法来启动线程,真正的实现多线程,这时无需等待run&…

华为交换机配置NQA TCP检测IP网络响应时间

微思 | 华为HCIA试听课程:网络工程师的基本功:网络地址转换NAT 微思 | 华为HCIP试听课程:华为HCIP必考题:DHCP协议原理与配置 组网需求 如图1所示,总部和子公司之间需要跨越外部网络进行通信,DeviceA和De…

【学习iOS高质量开发】——熟悉Objective-C

文章目录 一、Objective-C的起源1.OC和其它面向对象语言2.OC和C语言3.要点 二、在类的头文件中尽量少引用其他头文件1.OC的文件2.向前声明的好处3.如何正确引入头文件4.要点 三、多用字面量语法,少用与之等价的方法1.何为字面量语法2.字面数值3.字面量数组4.字面量字…

Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!

概述 Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应…

浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

一.前言 在浏览器中实现播放RTSP实时视频流,⼤体上有如下⼏个⽅案: ⽅案一:浏览器插件⽅案 ActiveX、NPAPI、PPAPI ActiveX插件适用于IE浏览器,NPAPI与PPAPI插件适用于谷歌浏览器,不过这些插件都已经不被浏览器所支持…

HashData湖仓一体方案:方案概览与Hive数据同步

随着云计算、大数据、AI的发展和普及,各行各业的业务场景日益复杂,数据呈现出大规模、多样性的特点,企业对数据仓库的需求也进一步拓展至对多元化数据实时处理的场景。 数据湖是多元数据存储与使用的便捷选择,而云原生具有数据资…

GBASE南大通用提问:如果程序检索到 NULL 值,该怎么办?

可在数据库中存储 NULL 值,但编程语言支持的数据类型不识别 NULL 状态。程序必须 采用某种方式来识别 NULL 项,以免将它作为数据来处理。 在 SQL API 中,指示符变量满足此需要。指示符变量是与可能收到 NULL 项的主变量相 关联的一个附加的变…

PHP面试小结(20240108)

PHP 部分 1. php的包管理工具是如何实现自动加载的 换句话问:composer 实现原理是什么?spl_autoload_register() 首先,Composer 是 PHP 的一个包管理和包依赖管理的工具 , 打开安装之后生成的 "vendor" 文件, 里面有个…

opencv_角点检测

文章内容 一个opencv检测角点的程序 运行效果 #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace cv; using namespace std;void detectCorners(M…

uniapp中按钮点击跳转页面失效,纠正错误(亲测可用)

不知道伙伴你的错误和我是否一致&#xff1f; 我当时为了点击跳转按钮发现跳转不了&#xff0c;如下错误提示&#xff1a; worker.js?libNameWAAccelerateWorker.js:1 [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around July 2021. S…

Debian12 安装jenkins 公钥配置

jenkins公钥配置 参考&#xff1a;Debian Jenkins 软件包 这是 Jenkins 的 Debian 软件包存储库&#xff0c;用于自动安装和升级。 要使用此存储库&#xff0c;请先将密钥添加到您的系统&#xff08;对于每周发布行&#xff09;&#xff1a; sudo wget -O /usr/share/keyring…

36.有效的数独

36.有效的数独 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图…

企业微信开发:自建应用:access_token

access_token 过期后接口响应 access_token 已经过期&#xff08;2小时&#xff09;后&#xff0c;调用接口的响应&#xff1b;本文中以发送消息接口为例&#xff0c;说明接口响应的情况。 官方开发文档链接&#xff1a;获取access_token access_token 过期后调用接口 响应体 …

2024年腾讯云主机价格表,附报价明细

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

机器学习小记——KNN(K近邻)

为了让绝大多数人都可以看懂&#xff0c;所以我就用简单的话语来讲解机器学习每一个算法 第一次写ML的博文&#xff0c;所以可能会有些地方出错&#xff0c;欢迎各位大佬提出意见或错误 祝大家开心进步每一天&#xff5e; 博文代码全部为python 简单的说一下什么是机器学习…

adb wifi 远程调试 安卓手机 命令

使用adb wifi 模式调试需要满足以下前提条件&#xff1a; 手机 和 PC 需要在同一局域网下。手机需要开启开发者模式&#xff0c;然后打开 USB 调试模式。 具体操作步骤如下&#xff1a; 将安卓手机通过 USB 线连接到 PC。&#xff08;连接的时候&#xff0c;会弹出请求&#x…

Android 系统启动过程纪要(基于Android 10)

前言 看过源码的都知道&#xff0c;Launcher系统启动都会经过这三个进程 init ->zygote -> system_server。今天我们就来讲解一下这三个进程以及Launcher系统启动。 init进程 准备Android虚拟机环境&#xff1a;创建和挂载系统文件目录&#xff1b;初始化属性服务&…

AI大模型预先学习笔记二:prompt提问大模型、langchain使用大模型框架、fine tune微调大模型

文章目录 一、Prompt Engineering&#xff08;怎么去提问大模型&#xff09;1&#xff09;环境准备2&#xff09;交互代码的参数备注3&#xff09;交互代码 二、LangChain&#xff08;一个框架去使用大模型&#xff09;1&#xff09;LangChain核心介绍&#xff1a;I/O模块、数据…

Java NIO (二)NIO Buffer类的重要方法

1 allocate()方法 在使用Buffer实例前&#xff0c;我们需要先获取Buffer子类的实例对象&#xff0c;并且分配内存空间。需要获取一个Buffer实例对象时&#xff0c;并不是使用子类的构造器来创建&#xff0c;而是调用子类的allocate()方法。 public class AllocateTest {static…

四、Sharding-JDBC系列04:分库分表后,如何不停机迁移数据?

目录 停机迁移方案 双写迁移方案 一般会有两种方案&#xff1a; 停机迁移方案 这种方案最简单也是最low的。 数据迁移前&#xff0c;在网站或者app挂个公告&#xff0c;说0点到早上6点系统进行维护&#xff0c;无法访问。 接着到0点停机&#xff0c;系统停掉&#xff0c;…