【NLP自然语言处理】文本的数据分析------迅速掌握常用的文本数据分析方法~

news2024/12/24 2:21:20

目录

🍔 文件数据分析介绍

🍔 数据集说明

🍔 获取标签数量分布

🍔 获取句子长度分布

🍔 获取正负样本长度散点分布

🍔 获取不同词汇总数统计

🍔 获取训练集高频形容词词云

🍔 获取验证集形容词词云

🍔 小结


 

学习目标

🍀 了解文本数据分析的作用

🍀 掌握常用的几种文本数据分析方法

🍔 文件数据分析介绍

  • 文本数据分析的作用:

    • 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
  • 常用的几种文本数据分析方法:

    • 标签数量分布
    • 句子长度分布
    • 词频统计与关键词词云

🍔 数据集说明

  • 我们将基于真实的中文酒店评论语料来讲解常用的几种文本数据分析方法.

  • 中文酒店评论语料:

    • 属于二分类的中文情感分析语料, 该语料存放在"./cn_data"目录下.
    • 其中train.tsv代表训练集, dev.tsv代表验证集, 二者数据样式相同.
  • train.tsv数据样式:

sentence    label
早餐不好,服务不到位,晚餐无西餐,早餐晚餐相同,房间条件不好,餐厅不分吸烟区.房间不分有无烟房.    0
去的时候 ,酒店大厅和餐厅在装修,感觉大厅有点挤.由于餐厅装修本来该享受的早饭,也没有享受(他们是8点开始每个房间送,但是我时间来不及了)不过前台服务员态度好!    1
有很长时间没有在西藏大厦住了,以前去北京在这里住的较多。这次住进来发现换了液晶电视,但网络不是很好,他们自己说是收费的原因造成的。其它还好。  1
非常好的地理位置,住的是豪华海景房,打开窗户就可以看见栈桥和海景。记得很早以前也住过,现在重新装修了。总的来说比较满意,以后还会住   1
交通很方便,房间小了一点,但是干净整洁,很有香港的特色,性价比较高,推荐一下哦 1
酒店的装修比较陈旧,房间的隔音,主要是卫生间的隔音非常差,只能算是一般的    0
酒店有点旧,房间比较小,但酒店的位子不错,就在海边,可以直接去游泳。8楼的海景打开窗户就是海。如果想住在热闹的地带,这里不是一个很好的选择,不过威海城市真的比较小,打车还是相当便宜的。晚上酒店门口出租车比较少。   1
位置很好,走路到文庙、清凉寺5分钟都用不了,周边公交车很多很方便,就是出租车不太爱去(老城区路窄爱堵车),因为是老宾馆所以设施要陈旧些,    1
酒店设备一般,套房里卧室的不能上网,要到客厅去。    0

  • train.tsv数据样式说明:
    • train.tsv中的数据内容共分为2列, 第一列数据代表具有感情色彩的评论文本; 第二列数据, 0或1, 代表每条文本数据是积极或者消极的评论, 0代表消极, 1代表积极.

🍔 获取标签数量分布

# 导入必备工具包
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 设置显示风格
plt.style.use('fivethirtyeight') 

# 分别读取训练tsv和验证tsv
train_data = pd.read_csv("data/cn_data/train.tsv", sep="\t")
valid_data = pd.read_csv("data/cn_data/dev.tsv", sep="\t")


# 获得训练数据标签数量分布
sns.countplot("label", data=train_data)
plt.title("train_data")
plt.show()


# 获取验证数据标签数量分布
sns.countplot("label", data=valid_data)
plt.title("valid_data")
plt.show()
  • 训练集标签数量分布:

  • 验证集标签数量分布:

  • 分析:
    • 在深度学习模型评估中, 我们一般使用ACC作为评估指标, 若想将ACC的基线定义在50%左右, 则需要我们的正负样本比例维持在1:1左右, 否则就要进行必要的数据增强或数据删减. 上图中训练和验证集正负样本都稍有不均衡, 可以进行一些数据增强.

🍔 获取句子长度分布

# 在训练数据中添加新的句子长度列, 每个元素的值都是对应的句子列的长度
train_data["sentence_length"] = list(map(lambda x: len(x), train_data["sentence"]))

# 绘制句子长度列的数量分布图
sns.countplot("sentence_length", data=train_data)
# 主要关注count长度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进行查看
plt.xticks([])
plt.show()

# 绘制dist长度分布图
sns.distplot(train_data["sentence_length"])

# 主要关注dist长度分布横坐标, 不需要绘制纵坐标
plt.yticks([])
plt.show()


# 在验证数据中添加新的句子长度列, 每个元素的值都是对应的句子列的长度
valid_data["sentence_length"] = list(map(lambda x: len(x), valid_data["sentence"]))

# 绘制句子长度列的数量分布图
sns.countplot("sentence_length", data=valid_data)

# 主要关注count长度分布的纵坐标, 不需要绘制横坐标, 横坐标范围通过dist图进行查看
plt.xticks([])
plt.show()

# 绘制dist长度分布图
sns.distplot(valid_data["sentence_length"])

# 主要关注dist长度分布横坐标, 不需要绘制纵坐标
plt.yticks([])
plt.show()
  • 训练集句子长度分布:

  • 验证集句子长度分布:

  • 分析:
    • 通过绘制句子长度分布图, 可以得知我们的语料中大部分句子长度的分布范围, 因为模型的输入要求为固定尺寸的张量,合理的长度范围对之后进行句子截断补齐(规范长度)起到关键的指导作用. 上图中大部分句子长度的范围大致为20-250之间.

🍔 获取正负样本长度散点分布

# 绘制训练集长度分布的散点图
sns.stripplot(y='sentence_length',x='label',data=train_data)
plt.show()

# 绘制验证集长度分布的散点图
sns.stripplot(y='sentence_length',x='label',data=valid_data)
plt.show()
  • 训练集上正负样本的长度散点分布:

  • 验证集上正负样本的长度散点分布:

  • 分析:
    • 通过查看正负样本长度散点图, 可以有效定位异常点的出现位置, 帮助我们更准确进行人工语料审查. 上图中在训练集正样本中出现了异常点, 它的句子长度近3500左右, 需要我们人工审查.

🍔 获取不同词汇总数统计

# 导入jieba用于分词
# 导入chain方法用于扁平化列表
import jieba
from itertools import chain

# 进行训练集的句子进行分词, 并统计出不同词汇的总数
train_vocab = set(chain(*map(lambda x: jieba.lcut(x), train_data["sentence"])))
print("训练集共包含不同词汇总数为:", len(train_vocab))

# 进行验证集的句子进行分词, 并统计出不同词汇的总数
valid_vocab = set(chain(*map(lambda x: jieba.lcut(x), valid_data["sentence"])))
print("训练集共包含不同词汇总数为:", len(valid_vocab))
  • 输出效果:
训练集共包含不同词汇总数为: 12147
训练集共包含不同词汇总数为: 6857

🍔 获取训练集高频形容词词云

# 使用jieba中的词性标注功能
import jieba.posseg as pseg

def get_a_list(text):
    """用于获取形容词列表"""
    # 使用jieba的词性标注方法切分文本,获得具有词性属性flag和词汇属性word的对象, 
    # 从而判断flag是否为形容词,来返回对应的词汇
    r = []
    for g in pseg.lcut(text):
        if g.flag == "a":
            r.append(g.word)
    return r

# 导入绘制词云的工具包
from wordcloud import WordCloud

def get_word_cloud(keywords_list):
    # 实例化绘制词云的类, 其中参数font_path是字体路径, 为了能够显示中文, 
    # max_words指词云图像最多显示多少个词, background_color为背景颜色 
    wordcloud = WordCloud(font_path="./SimHei.ttf", max_words=100, background_color="white")
    # 将传入的列表转化成词云生成器需要的字符串形式
    keywords_string = " ".join(keywords_list)
    # 生成词云
    wordcloud.generate(keywords_string)

    # 绘制图像并显示
    plt.figure()
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.show()

# 获得训练集上正样本
p_train_data = train_data[train_data["label"]==1]["sentence"]

# 对正样本的每个句子的形容词
train_p_a_vocab = chain(*map(lambda x: get_a_list(x), p_train_data))
#print(train_p_n_vocab)

# 获得训练集上负样本
n_train_data = train_data[train_data["label"]==0]["sentence"]

# 获取负样本的每个句子的形容词
train_n_a_vocab = chain(*map(lambda x: get_a_list(x), n_train_data))

# 调用绘制词云函数
get_word_cloud(train_p_a_vocab)
get_word_cloud(train_n_a_vocab)
  • 训练集正样本形容词词云:

  • 训练集负样本形容词词云:

🍔 获取验证集形容词词云

# 获得验证集上正样本
p_valid_data = valid_data[valid_data["label"]==1]["sentence"]

# 对正样本的每个句子的形容词
valid_p_a_vocab = chain(*map(lambda x: get_a_list(x), p_valid_data))
#print(train_p_n_vocab)

# 获得验证集上负样本
n_valid_data = valid_data[valid_data["label"]==0]["sentence"]

# 获取负样本的每个句子的形容词
valid_n_a_vocab = chain(*map(lambda x: get_a_list(x), n_valid_data))

# 调用绘制词云函数
get_word_cloud(valid_p_a_vocab)
get_word_cloud(valid_n_a_vocab)
  • 验证集正样本形容词词云:

  • 验证集负样本形容词词云:

  • 分析:
    • 根据高频形容词词云显示, 我们可以对当前语料质量进行简单评估, 同时对违反语料标签含义的词汇进行人工审查和修正, 来保证绝大多数语料符合训练标准. 上图中的正样本大多数是褒义词, 而负样本大多数是贬义词, 基本符合要求, 但是负样本词云中也存在"便利"这样的褒义词, 因此可以人工进行审查.

🍔 小结

  • 学习了文本数据分析的作用:

    • 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择.
  • 学习了常用的几种文本数据分析方法:

    • 标签数量分布
    • 句子长度分布
    • 词频统计与关键词词云
  • 学习了基于真实的中文酒店评论语料进行几种文本数据分析方法.

    • 获得训练集和验证集的标签数量分布
    • 获取训练集和验证集的句子长度分布
    • 获取训练集和验证集的正负样本长度散点分布
    • 获得训练集与验证集不同词汇总数统计
    • 获得训练集上正负的样本的高频形容词词云

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

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

相关文章

【docker】通过云服务器安转Docker

一、前言 这里关于Docker的安转,大家可以采用本地使用虚拟机来运行和安转Docker,我这里呢就采用云服务器来安装Docker,之所以用云服务器安转docker是因为比较简单,只是需要花一点money,而且自己没有用过云服务器所以这里就用这种方式来安转Docker了&…

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器…

【Canvas与钟表】“社会主义核心价值观“表盘

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>387.干支表盘</title><style type"text/css">…

最大时间

题目描述 给定一个数组&#xff0c;里面有6个整数&#xff0c;求这个数组能够表示的最大 24 进制的时间是多少&#xff0c;输出这个时间&#xff0c;无法表示输出 invalid. 输入描述 输入为一个整数数组&#xff0c;数组内有六个整数。 输入整数数组长度为6&#xff0c;不需…

火语言RPA流程组件介绍--浏览网页

&#x1f6a9;【组件功能】&#xff1a;浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgen…

微积分-积分应用5.4(功)

术语“功”在日常语言中用来表示完成一项任务所需的总努力量。在物理学中&#xff0c;它有一个依赖于“力”概念的技术含义。直观上&#xff0c;你可以将力理解为对物体的推或拉——例如&#xff0c;一个书本在桌面上的水平推动&#xff0c;或者地球对球的向下拉力。一般来说&a…

【iOS】——渲染原理与离屏渲染

图像渲染流水线&#xff08;图像渲染流程&#xff09; 图像渲染流程大致分为四个部分&#xff1a; Application 应用处理阶段&#xff1a;得到图元Geometry 几何处理阶段&#xff1a;处理图元Rasterization 光栅化阶段&#xff1a;图元转换为像素Pixel 像素处理阶段&#xff1…

图像去噪算法性能比较与分析

在数字图像处理领域&#xff0c;去噪是一个重要且常见的任务。本文将介绍一种实验&#xff0c;通过MATLAB实现多种去噪算法&#xff0c;并比较它们的性能。实验中使用了包括中值滤波&#xff08;MF&#xff09;、自适应加权中值滤波&#xff08;ACWMF&#xff09;、差分同态算法…

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示&#xff1a; 此时只需要右击项目&#xff0c;或者你的源代码目录&#xff0c;将这个项目或者源码目录标记为项目源和头文件即可。 英文如下&#xff1a;

什么是数字化人才?数字化人才画像是怎么样的?(附数字化知识能力框架体系)

什么是数字化人才&#xff1f; 数字化人才是指具备较高信息素养&#xff0c;有效掌握数字化相关能力&#xff0c;并将这种能力不可或缺地应用于工作场景的相关人才。随着数字技术的快速发展和应用&#xff0c;数字化人才的需求日益增加&#xff0c;他们在大数据、“互联网”、…

编程效率飙升的秘密武器:Cursor编辑器的AI革命

有没有想过,写代码这件事其实可以更加轻松、高效?尤其是对于那些需要频繁修正、调试和优化的开发者们,Cursor编辑器带来的AI赋能,简直让人眼前一亮。相信很多人一提到AI,第一反应就是:“这真的靠谱吗?”今天,我就带你来揭开Cursor这款AI编辑器的神秘面纱,看看它是如何…

借助ChatGPT高效撰写优质论文的7大要素

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。 撰写一篇优秀的学术论文不仅需要深入…

onnxruntime——CUDA Execution Provider学习记录

ONNX Runtime&#xff08;简称 ORT&#xff09;是一个高性能的推理引擎&#xff0c;支持多种硬件加速器。CUDA Execution Provider 是 ONNX Runtime 提供的一个执行提供者&#xff08;Execution Provider&#xff09;&#xff0c;专门用于在 NVIDIA GPU 上加速推理。以下是详细…

ComfyUI 基础教程—— 应用 Controlnet 精准控制图像生成

一、前言 你是否有见过下面类似这样的图片&#xff1a; 看起来平平无奇&#xff0c;当你站远点看&#xff0c;或者把眼睛眯成一条缝了看&#xff0c;你会发现&#xff0c;这个图中藏有一些特别的元素。这就是利用了 Ai 绘画中的 ControlNet&#xff0c;实现对图片的相对更精…

实施经济实惠的DFIR 网络防御解决方案

数字取证 事件响应&#xff08;DFIR&#xff09;是防御的重要组成部分&#xff0c;它包括发现网络危险&#xff0c;调查它们&#xff0c;并采取措施阻止它们。这对于保护私有数据安全和确保IT系统正常工作非常重要。由于资金和资源有限&#xff0c;小公司往往难以建立有效的DFI…

数据库安全漏洞的克星:SqlMap

SqlMap&#xff1a;一键自动化&#xff0c;精准识别SQL注入漏洞。 - 精选真开源&#xff0c;释放新价值。 概览 sqlmap是一个广受认可的开源工具&#xff0c;专注于自动化SQL注入漏洞的检测和利用。它能够与多种数据库系统交互&#xff0c;包括但不限于MySQL、Oracle、Postgre…

Android源码修改 默认导航方式

1、静态修改 代码路径&#xff1a;frameworks/base/core/res/res/values/config.xml&#xff0c;由于我是用hbuilder打开 我们可以看到代码注释 <!-- Controls the navigation bar interaction mode: 0: 3 button mode (back, home, overview buttons) 1…

Excel和Word日常使用记录:

Excel使用总结 表格颜色填充&#xff1a; 合并单元格&#xff1a; 选中你要合并的单元格区域。 按下快捷键 Alt H&#xff0c;然后松开这些键。 再按下 M&#xff0c;接着按 C。 这个组合键执行的操作是&#xff1a;Alt H&#xff1a;打开“主页”选项卡。 M&#xff1a;选…

【Vue】状态管理模式Vuex

数据共享 流程搭建变更状态辅助函数分割模块 流程 Vuex是一个Vue的状态管理工具&#xff0c;状态就是数据&#xff08;某个状态在很多个组件来使用 &#xff0c;多个组件共同维护一份数据&#xff09; 搭建 1&#xff09;Vuex我们在脚手架搭建项目的时候直接搭建好了&#xff0…

面壁带来了小钢炮,MiniCPM3-4B

MiniCPM3-4B 是 MiniCPM 系列的第三代产品。 相比 MiniCPM1.0/MiniCPM2.0&#xff0c;MiniCPM3-4B 拥有更强大、更多用途的技能集&#xff0c;可以实现更广泛的应用。 MiniCPM3-4B 支持函数调用和代码解释器。 有关使用指南&#xff0c;请参阅高级功能。 MiniCPM3-4B 具有 32k …