热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NLP——文本处理(达观杯)

竞赛信息竞赛是2018年于DataCastle举办的“达观杯”文本智能处理挑战赛竞赛地址:https:challenge.datacastle.cnv3cmptDetail.htm

竞赛信息

竞赛是2018年于DataCastle举办的“达观杯”文本智能处理挑战赛

竞赛地址:https://challenge.datacastle.cn/v3/cmptDetail.html?id=229

数据已经无法在官网上下载了,但是在kaggle上还有数据集,地址为:、

https://www.kaggle.com/datasets/mldatabase/datagrand-text-processing-challenge


本次竞赛的讲解为深度之眼公开课:https://www.bilibili.com/video/BV1fV411y76E/?spm_id_from=333.337.search-card.all.click&vd_source=ec0dfe3d40081b44c0160eacc0f39d0f



NLP文本分类的思路


数据预处理


1、中文分词工具




2、引入停用词:是否需要去掉停用词需要根据模型进行考虑


数据分析



  • 文本长度

  • 字词频率

  • 标签分布


1、文本长度统计


2、词频统计

有很多仅出现一次


3、标签情况

标签分布不均匀


实践开始——传统机器学习


1、导入数据

装载到谷歌云盘(使用colab)


2、文本预处理


2.1 语料清洗

使用正则表达式去除空格和符号


2.2 分词:使用jieba



如果分词错误,我们可以选择自己调整词典


2.3 分词:使用pkuseg


2.4 去停用词

下载

加载

使用停用词


3、数据分析


3.1 读取数据


3.2 字和词的区别


3.3 训练集文本长度

(1)词粒度

进行可视化的代码

基本信息分析

(2)字粒度




3.4 统计训练集中词的数量并进行可视化






3.5 统计训练集中字的数量并进行可视化




3.6 标签分布并可视化




4、阶段总结、

该问题是:



  • 长文本问题

  • 不平衡问题

  • 词非常多


5、Baseline构建的基础知识


5.1 TFIDF




5.2 Ngram


5.3 Sklearn中的TFIDF


5.4 逻辑回归


6、实际构建Baseline


6.1 读取数据集


6.2 TFIDF构建文本特征


6.3 逻辑回归构建模型

针对标签进行转换,这里是从1-19➡0-18。其实如果是字母也可以转化

同样的我们也可以针对分类转化为标签



测试一下转化的是否正确

逻辑回归转化





最终得到一个矩阵,shape=(102277,19)


6.4 结果保存


7、如何提升成绩



  • TFIDF只使用了词的特征,没有使用字的

  • 逻辑回归 LightGBM Xgboost SVM


8、构建验证集


8.1 实操


8.2 用于训练


8.3 验证结果

使用f1作为预测结果的效果


8.4 结果保存并提交

效果很稳定,但是准确率依然不足


9、交叉验证


9.1 K折交叉验证


9.2 接口


9.3 使用逻辑回归应用K折交叉验证


实践开始——深度学习


1、词向量

想让计算机理解一个词的意思和词之间的相似性,必须使用词向量


1.1 one-hot词向量



语义的鸿沟,这种表示方法男人和女人与小狗之间没有任何的相似性


1.2 SVD词向量

为了解决这种矛盾,我们可以采取降维的方式、



但是SVD方法仍然存在缺陷:


1.3 Word2vec词向量

两个算法


CBOW和skip-gram仍然需要后续的学习理解


两种训练方法



总结:


1.4 word2vec参数详解


2、gensim实操


2.1 安装


2.2 gensim操作示例:100维的向量并表示词的含义




3、对达观杯数据进行词向量表示


3.1 导入包并读取数据集

将测试集和数据集的数据合并到一起:word2vec的效果会更好




3.2 训练word2vec



  • 先将句子进行转换



  • 进行训练



  • 保存word2vec



  • 下次直接加载已经训练好的word2vec



  • 查看一个词向量及其相似关系





  • 查看词表




3.3 迭代模型


4、数据处理部分


4.1 从文本到序列


4.2 文本的截断和补全:

不同的文本长度不同,我们要进行均一化


对于全部的文本进行统计,看看多长的文本可以覆盖到全部文本的80%、90%



4.3 Label处理


4.4 Dataset数据读取


5、数据处理实操


5.1 导入包


5.2 读取数据集


5.3 数据准备



  • 序列转化为数字,tensorflow会自动帮我们构造词典



  • 数据统计




查看了一下95%的样本可以使用1822进行表示




  • 数据截断与补全



  • 词表



  • Label处理



  • Dataset数据读取




6、Word Embedding构建


6.1 构建流程

将词向量映射成Word Embedding,可以节约大量的内存


6.2 构建

首先获取word2vec模型

word embedding构建


7、深度学习baseline


7.1 模型构建






7.2 模型一览




7.3 模型的训练与预测




7.4 加载模型


7.5 模型的验证


7.6 结果提交



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
author-avatar
mobiledu2502883463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有