NLP_[2]_文本预处理-文本数据分析
文章目录
- 4 文本数据分析
- 1 文件数据分析介绍
- 2 数据集说明
- 3 获取标签数量分布
- 4 获取句子长度分布
- 5 获取正负样本长度散点分布
- 6 获取不同词汇总数统计
- 7 获取训练集高频形容词词云
- 8 小结¶
4 文本数据分析
学习目标
- 了解文本数据分析的作用.
- 掌握常用的几种文本数据分析方法.
1 文件数据分析介绍
文本数据分析的作用:
- 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
常用的几种文本数据分析方法:
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
2 数据集说明
-
XNLI(Cross-lingual NLI - Natural Language Inference)数据集是一个用于评估自然语言推理(NLI)模型跨语言能力的基准。它基于Multi-NLI数据集,但扩展到了包括15种不同语言的文本,旨在测试和促进跨语言理解的研究。XNLI数据集中的任务是判断一对句子(前提和假设)之间的逻辑关系,标签分类共有三种可能的关系:
-
蕴含(Entailment):如果根据前提句子的内容,可以推断出假设句子为真,则两者之间的关系为“蕴含”。例如,前提句:“一只猫坐在窗台上。” 假设句:“有一只动物在窗户旁边。” 这里,前提的信息足以支持假设句,因此这对句子的关系就是蕴含。
-
中性(Neutral):当中前提句子既不提供足够的信息来证明假设句子为真,也不足以反驳它时,两者之间的关系被视为“中性”。例如,前提句:“一只猫坐在窗台上。” 假设句:“这只猫喜欢晒太阳。” 在这种情况下,前提并没有给出足够的信息来确定假设的真实性,所以它们的关系是中性的。
-
矛盾(Contradiction):如果前提句子的内容与假设句子直接冲突或相互矛盾,则两者之间的关系为“矛盾”。例如,前提句:“一只猫坐在窗台上。” 假设句:“没有动物在窗台附近。” 这里,前提句明确指出有一个动物(即猫)在窗台上,这与假设句所述内容相矛盾。
通过这些分类,XNLI数据集能够有效地评估和比较不同语言处理系统在理解和推理自然语言方面的性能,尤其是在跨语言环境下。这对于推动机器翻译、多语言文本分析和其他跨语言应用的发展非常重要。

3 获取标签数量分布
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import jieba
from itertools import chain
import jieba.posseg as pseg # 词性标注
from wordcloud import WordCloud# 1 获取数据集的标签数量分布
def label_countplot():# 01 设置显示风格plt.style.use('fivethirtyeight')# 02 读取数据# 读取训练集数据train_data = pd.read_csv('./hdata/xnli_zh/train.csv')print(train_data.head())test_data = pd.read_csv('./hdata/xnli_zh/test.csv')print(test_data.head())# 03 绘制条形图 训练集 测试集sns.countplot(x='label', data=train_data)plt.title('train_data')plt.show()sns.countplot(x='label', data=test_data)plt.title('test_data')plt.show()
运行结果
- 训练集样本标签数量分布

- 测试集样本标签数量分布

- 分析:
- 在深度学习模型评估中, 我们一般使用ACC作为评估指标, 若想将ACC的基线定义在50%左右, 则需要我们的正负样本比例维持在1:1左右, 否则就要进行必要的数据增强或数据删减. 上图中训练和验证集正负样本都稍有不均衡, 可以进行一些数据增强.
4 获取句子长度分布
# 2 获取句子长度分布
def len_countplot_displot():# 01 设置显示风格plt.style.use('ggplot')# 02 读取数据train_data = pd.read_csv('./hdata/xnli_zh/train.csv')test_data = pd.read_csv('./hdata/xnli_zh/test.csv')# 03 添加句子长度train_data['sentence_p_length'] = list(map(lambda x: len(x), train_data['premise']))train_data['sentence_h_length'] = list(map(lambda x: len(x), train_data['hypothesis']))test_data['sentence_p_length'] = list(map(lambda x: len(x), test_data['premise']))test_data['sentence_h_length'] = list(map(lambda x: len(x), test_data['hypothesis']))print(train_data.head())print(train_data['sentence_p_length'].max())print(train_data['sentence_h_length'].max())print(test_data['sentence_p_length'].max())print(test_data['sentence_h_length'].max())# 绘制柱状图 曲线图 for 训练集 测试集sns.countplot(x='sentence_p_length', data=train_data)plt.xticks([])plt.show()sns.displot(x='sentence_p_length', data=train_data, kde=True)plt.show()sns.countplot(x='sentence_h_length', data=train_data)plt.xticks([])plt.show()sns.displot(x='sentence_h_length', data=train_data, kde=True)plt.show()sns.countplot(x='sentence_p_length', data=test_data)plt.xticks([])plt.show()sns.displot(x='sentence_p_length', data=test_data, kde=True)plt.show()sns.countplot(x='sentence_h_length', data=test_data)plt.xticks([])plt.show()sns.displot(x='sentence_h_length', data=test_data, kde=True)plt.show()
运行结果

- 分析:
- 通过绘制句子长度分布图, 可以得知我们的语料中大部分句子长度的分布范围, 因为模型的输入要求为固定尺寸的张量,合理的长度范围对之后进行句子截断补齐(规范长度)起到关键的指导作用.
5 获取正负样本长度散点分布
# 3 获取正负样本的长度散点图def len_strip_plot():# 设置风格plt.style.use('Solarize_Light2')# 加载数据train_data = pd.read_csv('./hdata/xnli_zh/train.csv')test_data = pd.read_csv('./hdata/xnli_zh/test.csv')# 添加长度列train_data['sentence_p_length'] = list(map(lambda x: len(x), train_data['premise']))train_data['sentence_h_length'] = list(map(lambda x: len(x), train_data['hypothesis']))test_data['sentence_p_length'] = list(map(lambda x: len(x), test_data['premise']))test_data['sentence_h_length'] = list(map(lambda x: len(x), test_data['hypothesis']))# 绘制图像sns.stripplot(y='sentence_p_length', x='label', data=train_data, hue='label')plt.show()sns.stripplot(y='sentence_p_length', x='label', data=test_data, hue='label')plt.show()
运行结果


- 分析:
- 通过查看正负样本长度散点图, 可以有效定位异常点的出现位置, 帮助我们更准确进行人工语料审查. 上图中在训练集正样本中出现了异常点, 它的句子长度近250左右, 需要我们人工审查.
6 获取不同词汇总数统计
# 4 统计不同词汇的总数(词表大小)
def word_counts():# 01 读取数据train_data = pd.read_csv('./hdata/xnli_zh/train.csv')test_data = pd.read_csv('./hdata/xnli_zh/test.csv')# 02 获取训练集的词表大小# chain(*map()) 解析:# map返回一个迭代器对象 在这里是分析后的列表# * 解包 把迭代器中的每个元素作为一个独立的参数 传给chain# chain 把多个可迭代对象 合并成一个可迭代对象 可以用set list 直接返回所有元素 也可以循环遍历train_vocab = set(chain(*map(lambda x: jieba.lcut(x), train_data['premise'])))print(len(train_vocab))test_vocab = set(chain(*map(lambda x: jieba.lcut(x), test_data['premise'])))print(len(test_vocab))
运行结果
训练集词表大小 75660 测试集词表大小 7262
7 获取训练集高频形容词词云
# 5 绘制词云
# 5.1 绘制每个句子的形容词词云
def get_a_list(text):res = []for g in pseg.lcut(text):if g.flag == 'a':res.append(g.word)return res# 5.2 根据关键词列表生成词云
def get_word_cloud(keywords_list):# 实例化词云对象my_wordcloud = WordCloud(font_path='./cn_data/SimHei.ttf', max_words=200, background_color='white')# 准备数据a_str = ' '.join(keywords_list)# 生成词云my_wordcloud.generate(a_str)# 绘图展示plt.figure()plt.imshow(my_wordcloud, interpolation="bilinear")plt.axis('off')plt.show()def word_cloud():# 获取数据train_data = pd.read_csv('./hdata/xnli_zh/train.csv')# 获取正样本p_train_data = train_data[train_data['label'] == 0]['premise']# 获取形容词列表p_a_words = list(chain(*map(lambda x: get_a_list(x), p_train_data)))# 绘制词云get_word_cloud(p_a_words)# 绘制负样本的词云n_train_data = train_data[train_data['label'] ==2]['premise']n_a_words = list(chain(*map(lambda x: get_a_list(x), n_train_data)))get_word_cloud(n_a_words)
运行结果


- 分析:
- 根据高频形容词词云显示, 我们可以对当前语料质量进行简单评估, 同时对违反语料标签含义的词汇进行人工审查和修正, 来保证绝大多数语料符合训练标准. 上图中的正样本大多数是褒义词, 而负样本大多数是贬义词, 基本符合要求, 但是负样本词云中也存在"好"这样的褒义词, 因此可以人工进行审查
8 小结¶
-
文本数据分析的作用:
- 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
-
常用的几种文本数据分析方法:
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
-
基于XNLI中文语料进行几种文本数据分析方法.
- 获得训练集和验证集的标签数量分布
- 获取训练集和验证集的句子长度分布
- 获取训练集和验证集的正负样本长度散点分布
- 获得训练集与验证集不同词汇总数统计
- 获得训练集上正负的样本的高频形容词词云
相关文章:
NLP_[2]_文本预处理-文本数据分析
文章目录 4 文本数据分析1 文件数据分析介绍2 数据集说明3 获取标签数量分布4 获取句子长度分布5 获取正负样本长度散点分布6 获取不同词汇总数统计7 获取训练集高频形容词词云8 小结 4 文本数据分析 学习目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文…...
【工具篇】深度揭秘 Midjourney:开启 AI 图像创作新时代
家人们,今天咱必须好好唠唠 Midjourney 这个在 AI 图像生成领域超火的工具!现在 AI 技术发展得那叫一个快,各种工具层出不穷,Midjourney 绝对是其中的明星产品。不管你是专业的设计师、插画师,还是像咱这种对艺术创作有点小兴趣的小白,Midjourney 都能给你带来超多惊喜,…...
从O(k*n)到O(1):如何用哈希表终结多层if判断的性能困局
【前言】 本文将以哈希表重构实战为核心,完整展示如何将传统条件匹配逻辑(上千层if-else判断)转化为O(1)的哈希表高效实现。通过指纹验证场景的代码级解剖,您将深入理解: 1.哈希函数设计如何规避冲突陷阱 2.链式寻址法的工程实现…...
视频采集卡接口
采集卡的正面有MIC IN、LINE IN以及AUDIO OUT三个接口, MIC IN为麦克风输入,我们如果要给采集到的视频实时配音或者是在直播的时候进行讲解,就可以在这里插入一个麦克风, LINE IN为音频线路输入,可以外接播放背景音乐…...
蓝桥杯真题 - 像素放置 - 题解
题目链接:https://www.lanqiao.cn/problems/3508/learning/ 个人评价:难度 3 星(满星:5) 前置知识:深度优先搜索 整体思路 深搜,在搜索过程中进行剪枝,剪枝有以下限制条件…...
vue基础(三)
常用指令 1. v-bind 固定绑定与动态绑定: 语法: 标准语法:v-bind:属性"动态数据" 简写语法::属性"动态数拓" <!DOCTYPE html> <html lang"en"><head><me…...
使用Python开发PPTX压缩工具
引言 在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储。为了应对这一问题,我们可以使用Python的wxPython图形界面库结合python-pptx和Pillow,开发一个简单的PPTX压缩工具。本文将详细介绍如何实现这一…...
ubuntu24.04安装布置ros
最近换电脑布置机器人环境,下了24.04,但是网上的都不太合适,于是自己试着布置好了,留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...
SQL 秒变 ER 图 sql转er图
🚀SQL 秒变 ER 图,校园小助手神了! 学数据库的宝子们集合🙋♀️ 是不是每次碰到 SQL 转 ER 图就头皮发麻?看着密密麻麻的代码,脑子直接死机,好不容易理清一点头绪,又被复杂的表关…...
【AI知识点】如何判断数据集是否噪声过大?
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 判断数据集是否 噪声过大 是数据分析和机器学习建模过程中至关重要的一步。噪声数据会导致模型难以学习数据的真实模式,从而影响预测效果。以下是一些常见的方法来判断数据…...
网络安全治理架构图 网络安全管理架构
网站安全攻防战 XSS攻击 防御手段: - 消毒。 因为恶意脚本中有一些特殊字符,可以通过转义的方式来进行防范 - HttpOnly 对cookie添加httpOnly属性则脚本不能修改cookie。就能防止恶意脚本篡改cookie 注入攻击 SQL注入攻击需要攻击者对数据库结构有所…...
如何写出优秀的单元测试?
写出优秀的单元测试需要考虑以下几个方面: 1. 测试用例设计 测试用例应该覆盖被测试代码的不同场景和边界情况,以尽可能发现潜在的问题。在设计测试用例时需要关注以下几点: 输入输出数据:要测试的函数或方法可能有多个输入参数…...
数据留痕的方法
在项目中,数据变更时,经常需要记录上次的数据,以便查看对比,专业术语叫做数据留痕。数据变更留痕(即记录数据的变更历史)是一个常见的需求,例如在审计、追踪数据变化或满足合规性要求的场景中。…...
机器学习数学基础:19.线性相关与线性无关
一、线性相关与线性无关的定义 (一)线性相关 想象我们有一组向量,就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1,α 2…...
ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成
摘要 ArgoCD 是一种 GitOps 持续交付工具,专为 Kubernetes 设计。它能够自动同步 Git 仓库中的声明性配置,并将其应用到 Kubernetes 集群中。本文将介绍 ArgoCD 的架构、安装步骤,以及如何结合 Helm 和 Kustomize 进行 Kubernetes 自动化部署。 引言 为什么选择 ArgoCD?…...
JVM虚拟机以及跨平台原理
相信大家已经了解到Java具有跨平台的特性,即“一次编译,到处运行”,例如在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C很难做到的。 那么,跨平台是怎样实现的呢?这就要谈及…...
【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统
上篇因为是VIP,这篇来一个免费的 提示词在最下方,喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天,如何让AI系统能够传递传统易经文化的智慧,同时保持易经本身的神秘感和权威性,是一个极具挑战性的课题。本文将…...
电路笔记 : opa 运放失调电压失调电流输入偏置电流 + 反向放大器的平衡电阻 R3 = R1 // R2 以减小输出直流噪声
目录 定义影响和解决失调电压输入偏置电流平衡电阻R3推导公式: 失调电流 实际的运算放大器(Op-Amp)存在一些非理想特性,如失调电压(VIO)、失调电流(IIO)和输入偏置电流(I…...
ScrapeGraphAI颠覆传统网络爬虫技术
ScrapeGraphAI颠覆传统网络爬虫技术! 引言 在互联网时代,数据如同油田,丰富而深邃。但如何有效地提取这些数据,仍然是许多开发者面临的艰巨任务。你有没有想过,传统的网络爬虫技术是否已经过时?如今&…...
通过多层混合MTL结构提升股票市场预测的准确性,R²最高为0.98
“Boosting the Accuracy of Stock Market Prediction via Multi-Layer Hybrid MTL Structure” 论文地址:https://arxiv.org/pdf/2501.09760 摘要 本研究引入了一种创新的多层次混合多任务学习架构,致力于提升股市预测的效能。此架构融…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
