【python、nlp】文本预处理

文本预处理及其作用:

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

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

 文本处理的基本方法

分词

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

中文(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.mzph.cn/news/623837.shtml

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

相关文章

富文本使用总结

多种富文本 一、Tinymce富文本 踩坑:disabled和readonly效果问题 解决方法: 【Tinymce富文本】如何实现disabled和readonly效果_tinymce disabled-CSDN博客 二、vue-quill-editor富文本 官方链接: vue-quill-editor Quill官方中文文档…

【Leetcode】232. 用栈实现队列

【Leetcode】232. 用栈实现队列 题目链接代码 题目链接 【Leetcode】232. 用栈实现队列 代码 type MyQueue struct {A []intB []int }func Constructor() MyQueue {return MyQueue{} }func (this *MyQueue) Push(x int) {this.A append(this.A, x) }func (this *MyQueue…

面向对象三大特征之三:多态--java学习笔记

什么是多态 多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态 对象多态:举个栗子,比如一个人,他可以是一个老师,也可以是一个歌手,也可以是一个丈夫...... 行为多态:举…

Chrome 插件匹配模式(Match patterns)规则

匹配模式&#xff08;Match patterns&#xff09; 一、匹配模式结构 匹配模式是采用以下结构的网址&#xff0c;用于指定一组网址&#xff1a; <scheme>://<host>/<path>1. scheme 必须是以下内容之一&#xff0c;并使用双斜线 (//) 与格式的其余部分分隔…

PHP反序列化总结4--原生类总结

原生类的简要介绍以及原生类和反序列化的关系 PHP 原生类指的是 PHP 内置的类&#xff0c;它们可以直接在 PHP 代码中使用且无需安装或导入任何库&#xff0c;相当于代码中的内置方法例如echo &#xff0c;print等等可以直接调用&#xff0c;但是原生类就是可以就直接php中直接…

git手册

问题场景​ 不同git remote之间代码同步 git checkout remote1 branch git checkout remote2 branch git merge remote1 branch git push 已经在git索引记录&#xff0c;现在不想要在git管理 提交git删除提交.gitignore修改本地新增该文件 本地仓库重置为与远程分支一致 …

jmeter分布式服务搭建

目录 一、环境准备 二、 安装包下载 三 、安装jdk 四 、控制机安装 4.1 解压压缩包 4.2 修改 bin/jmeter.properties 4.3 修改 bin/system.properties 五、执行机安装 5.1 解压安装包 5.2 修改 bin/jmeter.properties 5.3 修改 bin/system.properties 5.4 启动执行机 …

关于如何禁用、暂停或退出OneDrive等操作,看这篇文件就够了

​想知道如何禁用OneDrive?你可以暂停OneDrive的文件同步,退出应用程序,阻止它在启动时打开,或者永远从你的机器上删除该应用程序。我们将向你展示如何在Windows计算机上完成所有这些操作。 如何在Windows上关闭OneDrive 有多种方法可以防止OneDrive在你的电脑上妨碍你。…

堆排序——高效解决TOP-K问题

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言什么是堆&#xff1f;建堆堆排序&#xff1a;排序的最终结果 堆排序实现函数声明交换函数 Swap下沉调整 DnAdd堆排序函数 HeapSort主函数 文件中找…

SpringBoot+Vue实现对称加密和非对称加密

我们先来了解一下什么是对称加密和非对称加密&#xff0c;以及两者的优缺点 对称加密 使用同一个密钥对消息进行加密解密 优点&#xff1a;加密和解密的速度快&#xff0c;适合于数据量大的加解密 缺点&#xff1a;密钥在网络传输中可能被泄露&#xff0c;因此安全性相对较低…

C++核心编程三:函数提高(持续更新)

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f319;C核心编程&#x1f30f;1 函数提高&#x1f384;1.1 函数默认参数&#x1f384;1.2 函数占位参数&#x1f384;1.3 函数重载&#x1f349;1.3.1 函数重载概述&…

What is `@RequestBody ` does?

RequestBody 是SpringMVC框架中的注解&#xff0c;通常与POST、PUT等方法配合使用。当客户端发送包含JSON或XML格式数据的请求时&#xff0c;可以通过该注解将请求体内容绑定到Controller方法参数上 作用 自动反序列化&#xff1a; SpringMVC会根据RequestBody注解的参数类型&…

CentOS 安装python

为了调用OpenAI接口 租了个香草云服务器&#xff08;CentOS&#xff09; 现在需要用Python(最好3.7以上)来调用API接口 需要下载FinalShell.exe 或者其它工具 来执行以下命令 下载Python3.12.1 选好下载目录 wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tar.…

护眼灯有蓝光吗?防蓝光护眼台灯推荐

护眼台灯是家长为孩子购买的常见用品之一&#xff0c;但对于它的了解却不够深入&#xff0c;很多人购买之后反而容易出现眼睛疲劳、不适的情况&#xff01;据了解&#xff0c;主要的原因是因为在选择护眼台灯时&#xff0c;大多数人没有专业知识&#xff0c;没有买到合适的护眼…

Java中的性能优化:深入剖析常见优化技巧

引言 在现代软件开发中&#xff0c;性能优化是一个至关重要的话题。Java作为一门强大而广泛使用的编程语言&#xff0c;也需要开发者关注和优化性能&#xff0c;以确保应用程序能够在各种场景下高效运行。本文将深入剖析Java中的一些常见性能优化技巧&#xff0c;为开发者提供…

012集:三目运算符实例讲解(if else)及for、while循环—python基础入门实例

Python也有自己的三目运算符&#xff1a; 条件为真时的结果 if 判段的条件 else 条件为假时的结果 即&#xff1a;Python可以通过if语句来实现三目运算符的功能&#xff0c;因此可以把这种if语句当做三目运算符&#xff0c;具体语法格式如下&#xff1a; 返回True执行 if 表达…

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问

Github搭建图床 github搭建静态资源库 免费CDN加速 github搭建图床使用 jsdelivr CDN免费加速访问 前言1、创建仓库2、开启 gh-pages页面功能3、访问测试 前言 写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;使用小众第三方图床&#xff0c;怕不稳定和倒闭&…

.net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别

//全局过滤器 builder.Services.AddMvc(m > { m.Filters.Add<AllResultFilter>(); }); 1、实现过滤器 public class AllResultFilter : IResultFilter {/// <summary>/// 结果执行后方法/// 不可更改结果/// </summary>/// <param name"con…

独立按键控制直流电机调速

/*----------------------------------------------- 内容&#xff1a;对应的电机接口需用杜邦线连接到uln2003电机控制端 使用5V-12V 小功率电机皆可 2个按键分别加速和减速 ------------------------------------------------*/ #include<reg52.h> //包含头文…

C语言包中形参的隐含存储类别

存储方式 变量的作用域(空间)可分为全局变量和局部变量&#xff0c;变量的存储方式可分为动态存储方式和静态存储方式。 从变量值存在的时间(生存期)来观察&#xff0c;有的变量在程序运行的整个过程都是存在的&#xff0c;有的变量则是在调用其所在的函数时才临时分配存储单…