【NLP】文本特征处理:n-gram特征和文本长度规范
文章目录
- 1、本章目标
- 2、n-gram特征
- 2.1、概念
- 2.2、举个例子
- 2.3、代码
- 3、文本长度规范及其作用
- 4、小结
🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹
1、本章目标
- 了解文本特征处理的作用.
- 掌握实现常见的文本特征处理的具体方法.
- 文本特征处理的作用:
- 文本特征处理包括为语料添加具有普适性的文本特征,如n-gram特征;
- 以及对加入特征之后的文本语料进行必要的处理,如长度规范;
- 这些特征处理工作能够有效的将重要的文本特征加入模型训练中,增强模型评估指标
- 常见的文本特征处理方法:
- 添加n-gram特征
- 文本长度规范
2、n-gram特征
2.1、概念
给定一段文本序列,其中n个词或字的相邻共现特征即n-gram特征,常用的n-gram特征是bi-gram和tri-gram特征,分别对应n为2和3。

2.2、举个例子
这个示例讲解了如何从词汇列表生成数值特征并扩展到 N-gram 特征
首先,理解 N-gram 特征的一些基本概念:
- 词汇列表:是一个包含文本中所有词的列表。例如,给定一个句子 “是谁 鼓动 我心”,其词汇列表为
["是谁", "鼓动", "我心"]。 - 数值映射列表:通常用于将每个词映射到一个唯一的数字(索引)。例如,可以将
["是谁", "鼓动", "我心"]映射为[1, 34, 21]。
N-gram 特征的意思是将文本中的相邻词对作为特征。例如,Bigram(2-gram)就是由两个相邻的词组成的特征。
假设有一个词汇列表 ["是谁", "鼓动", "我心"],对应的数值映射列表为 [1, 34, 21]。
这些数值可以被视为单个词汇的特征(Unigram),即每个词在序列中的独立存在。
现在,假设你要考虑 Bigram 特征(2-gram),即两个相邻词的组合。
步骤:
- 识别相邻的词对:在列表中,“是谁” 和 “鼓动” 是相邻的,“鼓动” 和 “我心” 也是相邻的。
- 为每个相邻词对生成新的特征值:
- 假设数字
1000代表 “是谁” 和 “鼓动” 的相邻关系。 - 假设数字
1001代表 “鼓动” 和 “我心” 的相邻关系。
- 假设数字
结果:
- 原始的数值映射列表
[1, 34, 21]现在扩展为包含 Bigram 特征的[1, 34, 21, 1000, 1001]。
在这个例子中,N-gram 特征的引入使得特征表示不仅仅是词汇本身,还包括词汇之间的相邻关系(如 “是谁” 和 “鼓动” 的相邻)。通过引入这些特征,模型可以更好地捕捉词汇之间的上下文关系。
具体来说:
- 原来的
[1, 34, 21]仅表示单个词汇。 - 添加了 Bigram 特征后,特征列表变为
[1, 34, 21, 1000, 1001],表示不仅有单个词汇的信息,还有相邻词对的信息。
2.3、代码
提取n-gram特征:
# -*- coding: utf-8 -*-
# @Author: CSDN@逐梦苍穹
# @Time: 2024/8/12 21:51
# TODO 一般n-gram中的n取2或者3, 这里取2为例
def create_ngram_set(input_list):# 使用 zip 和列表推导式生成 n-gram 特征ngram_set = set(zip(*[input_list[i:] for i in range(ngram_range)]))return ngram_setif __name__ == '__main__':ngram_range = 2example_input = [1, 4, 9, 4, 1, 4]print(create_ngram_set(example_input))# Output: {(4, 9), (4, 1), (1, 4), (9, 4)}
输出效果:
# 该输入列表的所有bi-gram特征
{(3, 2), (1, 3), (2, 1), (1, 5), (5, 3)}
3、文本长度规范及其作用
一般模型的输入需要等尺寸大小的矩阵,因此在进入模型前需要对每条文本数值映射后的长度进行规范,
此时将根据句子长度分布分析出覆盖绝大多数文本的合理长度,
对超长文本进行截断,对不足文本进行补齐(一般使用数字0),这个过程就是文本长度规范
文本长度规范的实现:
# -*- coding: utf-8 -*-
# @Author: CSDN@逐梦苍穹
# @Time: 2024/8/12 22:39
# 从 Keras 的 preprocessing 模块中导入 sequence,用于序列处理
from keras.preprocessing import sequence
# 根据数据分析中句子长度的分布,确定覆盖 90% 左右语料的最短长度
# 这里假定 cutlen 为 10,意味着我们将所有的句子统一处理为长度为 10 的序列
cutlen = 10
def padding(x_train):"""description: 对输入文本张量进行长度规范,确保所有文本的长度一致:param x_train: 文本的张量表示, 形如: [[1, 32, 32, 61], [2, 54, 21, 7, 19]]这是一个二维列表,其中每个子列表表示一条文本的词汇索引序列:return: 进行截断补齐后的文本张量表示,输出的形状为 (len(x_train), cutlen)如果文本长度小于 cutlen,则补齐至 cutlen;如果文本长度大于 cutlen,则截断至 cutlen"""# 使用 sequence.pad_sequences 函数对序列进行补齐(或截断)# pad_sequences 会将每个序列截断或补齐到相同的长度 cutlen# 默认情况下,较短的序列会在前面补 0(默认补在序列的左侧),# 较长的序列会从前面截断(即保留序列的最后 cutlen 个元素)return sequence.pad_sequences(x_train, cutlen)if __name__ == '__main__':# 假定 x_train 里面有两条文本,一条长度大于 10,一条长度小于 10x_train = [[1, 23, 5, 32, 55, 63, 2, 21, 78, 32, 23, 1], # 长度为 12,超过了 cutlen[2, 32, 1, 23, 1] # 长度为 5,少于 cutlen]# 调用 padding 函数,对 x_train 中的序列进行补齐(或截断)res = padding(x_train)# 输出处理后的结果# 预期输出:# array([[ 5, 32, 55, 63, 2, 21, 78, 32, 23, 1], # 第1条序列被截断至长度10# [ 0, 0, 0, 0, 0, 2, 32, 1, 23, 1]]) # 第2条序列前面补5个0至长度10print(res)
输出:
E:\anaconda3\python.exe D:\Python\AI\自然语言处理\7-文本长度规范.py
2024-08-12 22:44:53.195415: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-08-12 22:44:54.269741: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
[[ 5 32 55 63 2 21 78 32 23 1][ 0 0 0 0 0 2 32 1 23 1]]Process finished with exit code 0
4、小结
- 学习了文本特征处理的作用:
- 文本特征处理包括为语料添加具有普适性的文本特征,如:n-gram特征,以及对加入特征之后的文本语料进行必要的处理,如:长度规范. 这些特征处理工作能够有效的将重要的文本特征加入模型训练中,增强模型评估指标
- 学习了常见的文本特征处理方法:
- 添加n-gram特征
- 文本长度规范
- 学习了什么是n-gram特征:
- 给定一段文本序列,其中n个词或字的相邻共现特征即n-gram特征,常用的n-gram特征是bi-gram和tri-gram特征,分别对应n为2和3
- 学习了提取n-gram特征的函数:create_ngram_set
- 学习了文本长度规范及其作用:
- 一般模型的输入需要等尺寸大小的矩阵,因此在进入模型前需要对每条文本数值映射后的长度进行规范,此时将根据句子长度分布分析出覆盖绝大多数文本的合理长度,对超长文本进行截断,对不足文本进行补齐(一般使用数字0),这个过程就是文本长度规范.
- 学习了文本长度规范的实现函数:padding
相关文章:
【NLP】文本特征处理:n-gram特征和文本长度规范
文章目录 1、本章目标2、n-gram特征2.1、概念2.2、举个例子2.3、代码 3、文本长度规范及其作用4、小结 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法…...
ESP32人脸识别开发 ---partitions.csv配置的一些说明(五)
配置的文件在这个位置 esp-who/examples/esp32-s3-eye/partitions.csv factory, app, factory, 0x010000, 4000K, model, data, spiffs, , 3900K, (这个是语音相关的) nvs, data, nvs, , 16K, fr, data, ,…...
【学习笔记】Matlab和python双语言的学习(图论最短路径)
文章目录 前言一、图论基本概念示例 二、代码实现----Matlab三、代码实现----python总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK41187QF?p36&vd_source67471d3a1b4f517b7a7964093e6…...
vue.config.js 配置 devserve 配置
在 Vue CLI 项目中,devServer 配置用于设置开发服务器的行为。这包括了开发服务器的端口、主机名、是否开启 HTTPS、自动打开浏览器等设置,以及配置代理规则来解决跨域问题。 devServer 配置详解(version > 4.0.0) host: 设置开发服务器的主机地址&a…...
不入耳耳机什么牌子性价比高?五大年度必选款揭秘
和传统的入耳式耳机相比,开放式耳机采用的是不深入耳道的设计,佩戴舒适度更高,卫生健康,安全性也更高。同时音质表现也更加有空间感。想要体验开放式耳机带来的便利,就需要做好选购攻略,不入耳耳机什么牌子…...
SQL Zoo 6.The JOIN operation
以下数据均来自SQL Zoo 1.Modify it to show the matchid and player name for all goals scored by Germany. To identify German players, check for: teamid GER.(它以显示德国所有进球的比赛和球员名字,识别德国球员) SELECT matchid,player FROM goal where teamid GE…...
视频教程:Vue3移动端抽屉弹层组件实战
本教程演示了vue3的composition api实现的移动端h5抽屉弹层组件,录屏讲解包含了功能演示和具体的源码实现。 笔者相关教程: 使用tailwindcss轻松实现移动端rem适配Vue3.4双向绑定新特性:defineModel好用爱用 学习要点: 自定义…...
CSS 的 BFC(块级格式化上下文)
BFC是Block Formatting Context(块级格式化上下文)的缩写,是CSS中一个概念,用于描述页面上如何对元素进行布局。 BFC是一个独立的容器,它内部的元素不会受到外部容器的影响,同时它也会影响其内部元素的表现…...
【2023年】云计算金砖牛刀小试2
A场次题目:Openstack 平台部署与运维 control172.17.31.10compute172.17.31.20 compute任务1 私有云平台环境初始化 1.初始化操作系统 使用提供的用户名密码,登录竞赛云平台。根据表 1 中的 IP 地址规划,设置各服务器节点的 IP 地址,确保网络正常通信,设置控制节点主机名…...
python--将mysql建表语句转换成hive建表语句
1.代码 import json import sys import pymysqldef queryDataBase(tablename):# 连接数据库并查询列信息conn pymysql.connect(userroot, password123456, hosthadoop11)cursor conn.cursor()cursor.execute("SELECT column_name, data_type FROM information_schema.C…...
异步调用实践:Async,Future, TaskExecutor、EventListener
1. 异步调用概述 异步调用允许一个方法调用在不被当前线程阻塞的情况下继续执行,而调用者可以继续执行其他任务,直到异步操作完成。 在Spring Boot中,异步调用常用于提高应用的响应性和吞吐量,尤其是在处理长时间运行的任务时&a…...
Flask 异常处理
Flask 异常处理 使用 app.errorhandler 装饰器使用 app.handle_exception 装饰器使用 register_error_handler调试模式总结 在 Flask 应用中,异常处理是一个非常重要的部分,它可以帮助你管理运行时错误,提供友好的错误页面,以及记…...
【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
linux crontab没有按照规则执行排查
配置了cron规则,但是一段时间后任务没有按预期执行,记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种:journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...
Cloudflare的D1使用技巧
总文档:https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大: To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...
解决端口号被占用问题
第一种: 最简单有效的方法,重启一下电脑,占用此端口的程序就会释放端口。 第二种: 使用命令找到占用端口的程序,把它关闭。 1、打开运行窗口输入:CMD ,进入命令窗口。 2、输入:n…...
如何在linux上部署zabbix监控工具
<1>搭建服务机 1)首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2)我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…...
vulnhub系列:sp eric
vulnhub系列:sp eric 靶机下载 一、信息收集 nmap扫描存活,根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口,开放端口:22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录,.git 源码,admin…...
JVM二:JVM类加载机制
目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中…...
对于springboot无法连接redis解决方案
对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis(如果是部署在linux上的话)1. 开启telnet功能2. 开始测试端口是否能访问到(适用于所有,包括MQ)3. 开放6379端口4. 看spring的配置文件…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
