【AI】NLP
不定期更新,建议关注收藏点赞。
目录
- transformer
- 大语言模型
- Google Gemma
- 疫情网民情绪识别
- 整体框架
baseline构建
模型调参、模型优化、其他模型
数据trick、指标优化、magic feature
数据增强、伪标签、迁移学习
模型融合 - sklearn中TFIDF参数详解

频率阈值可以去掉高于max和低于min的特征
l2正则化 - 如何fine-tune微调BERT用于文本分类
有一片论文可以找一下 how to fine-tune BERT for text classification?以下只是几个点,详见paper

fine-tuning strategies
further pre-training 要求机器好、用时长
multi-task fine-tuning
长文本阶段处理(长文本截断对BERT不友好)
不同层的特质 不同层表征意义不一样 哪一层是效果最好的
学习率(小的学习率)
transformer
几乎所有NLP都是基于这个基础上。
BERT
大语言模型
Google Gemma
30:00
疫情网民情绪识别
- 思路分析
linux系统需要把数据转换成utf-8读取
- 多模态情感分析->转化成 文本情感分析->文本分类
机器学习方法:词袋模型TFIDF(baseline,基于字还是词)Ngram范围、分类模型LR、SVM、XGBoost、等
深度学习方法:CNN,RNN,Transformer,早停、学习率衰减、Embedding向量dropout,双层双向RNN即Bi-LSTM Bi-GRU,Text CNN、Text RNN、Text Capsule等
迁移学习方法:BERT、XLNET、ALBERT等
预训练模型 bert albert xlnet robert,BERT-WWM
不同层级相加、平均、concat
batch,epoch
对抗训练 环境包的版本要注意
BERT+Word2Vec/Glove
- 标签分布不平衡,1和-1占比较小
- 发布时间关于样本数量和样本标签的分布、正文长度分布
文本长度也要注意设置多少能覆盖90%的文本、北大开源分词包pkuseg
- 数据集中有图片和视频信息的分布,图片张数的分布、视频分布及语义信息
- 代码
把训练集和测试集的文本编码成bert的三条序列,填充成固定的文本长度,并保存起来,标签类型编码改成0-2,利用transformer包构建bert模型导入,五折交叉验证训练模型,有两种结果,一种是概率相加取平均,另一种是每一折结果取出来做投票
batch_size=32还是64要与显卡的内存32g 还是64g对应上
改进思路:模型优化、修改损失函数、对抗训练
- 数据增强
-
- 为什么要进行文本增强?常见的场景是少样本、分类任务中样本分布不均衡、半监督训练场景、提高模型鲁棒性。
解决方法:半监督学习算法UDA用在无标签样本上、回译back translation、随机词替换、非核心词替换、基于上下文信息的文本增强
方法的原理:1)保持语义不变,变换文本表达。2)按照某种策略对原文局部调整EDA easy data augmentation,如同义词替换SR 、随机删除RD、随机插入RI、随机交换RS、非核心词替换
- 为什么要进行文本增强?常见的场景是少样本、分类任务中样本分布不均衡、半监督训练场景、提高模型鲁棒性。
URA原理
不足之处:只进行了词替换,没提到删除、交换等。
基于上下文信息的文本增强,首先需要一个训练好的语言模型LM,对于需要增强的原始文本,随机去掉文中的一个词或字,取决于语言模型支持字还是词(取决于语言模型支持字还是词),将文本剩余部分输入语言模型,选择语言模型所预测的top k个词去替换掉原文对应的词,以形成新的k条文本。
利用语言生成模型进行文本生成 如GPT
工业界或比赛界用得最多的方式:回译,测试时也可以增强,对一条测试样本可以进行构造多条增强样本,得到预测结果,和原来的结果进行加权融合 TTA、embedding技术,FastText+Glove pre-trained、伪标签(将测试集得到的结果和训练集合到一起再喂进去)、
-
- 回译:利用翻译模型不停翻译成其他语种最后再翻译回来
-
迁移学习
通过减少源域到目标域的分布差异进行知识迁移,从而实现数据标注工作。
传统机器学习和深度学习,训练集和测试集同分布。
迁移学习中的“域”:某个时刻某个特定的领域,比如书本评论和电视剧评论,本身分为source domain & target domain,并不要求二者数据分布一致。
迁移学习中的“任务”:比如情感分析和实体识别就是两个不同的任务,source domain & target domain任务也不一定一致。
分为几种,归纳式迁移学习inductive transfer learning(目标任务不同但相关,无论源域和目标域的数据域是否相同)、直推式迁移学习transductive(目标任务相同,但目标数据域中没有或少量可获得带标记的数据,然而在源数据域中有许多可获得带标记的数据) 、无监督迁移学习(源域目标域都没有带标签的数据,关注与目标任务上的聚类、降维和密度估计)。

单步迁移学习和多步迁移学习。比如源域图片、目标域文字,需要做多步迁移,找一个中间域,划分为单步迁移。单步又分为同构DA、异构DA,它们区别在于数据空间是否一致。
domain adaptation,其中feature adaptation很重要:源域和目标域共享同样的特征,提取到共同空间。 -
特征工程


-
模型调参
参数初始化很重要,很多时候是这里的问题。
Glorot条件:优秀的初始化应该使各层激活值和状态梯度的方差在传播过程中的方差保持一致。
初始化方法下面推荐3种。
- Xavier
- He
- normal
根据3σ原则,概率得到几乎只会出现在(μ-3σ,μ+3σ)之间

技巧:
shuffle,
batch normalization BN用于图像处理, layer normalization LN用于文本处理 ,
梯度裁剪:限制最大梯度,对超过阈值的梯度进行规约,使优化算法更加稳定,
dropout 防止过拟合 一般设置为0.5,adam优化器:小数据集尝试sgd(慢但是效果好),大数据集先用adam,快收敛的时候换sgd,
学习率用sgd的化考虑从1或0.1开始
激活函数 tanh或relu比sigmoid更优
sigmoid在-4到4的区间才会有较大的梯度,之外梯度接近0,很容易造成梯度消失问题,输入0均值,sigmoid输出后非0均值
其他超参数 如focal loss参数,这个不是在所有场景下都有效
全连接层,如果输入和输出大小一致,建议用highway network替换
highway network
- 模型融合
哪些模型可以拿来融合?同样参数但模型训练的不同阶段即不同迭代次数的模型、同样参数不同的初始化方式、半监督加入的数据量、不同的模型(如bert系列 bert albert xlnet bert-wwm roberta 都是基于transformer结构的预训练语言模型 统称为bert家族)、融合特征工程
文本输入的截断方式:三种,pre-truncate,post-truncate,middle-truncate(head+tail)
bert 是一种基于transformer encoder构建的预训练语言模型,通过masked language model MLM +Next sentence prediction NSP两个任务在大规模语料上训练得到的;开源的bert分为base 和large,模型大小不同。
bert-wwm 模型结构和bert完全一样,只是在MLM训练任务上做了小的改进,bert在做MLM采用的是token级别的mask,而bert-wwm采用词级别的mask。
roberta是bert优化版,只是在数据量和训练方式上做改进,更大的数据量更好的训练方式训练的更久,去除了NSP任务有损模型性能,MLM换成dynamic masking LM, 更大的batchsize及其他超参数的调优。
XLNet对bert做了较大的改动,二者在模型结构和训练方式上都有不小的差异。
Bert的MLM在预训练时有mask标签,但使用时没有,导致训练和使用出现不一致;MLM不属于autoregressive LM不能做生成类任务,XLNet采用PML permutation language model避免mask标签的使用,且可以做生成任务。Bert使用的transformer结构对文本长度有限制,XLNet使用升级版的transformer-XL
Albert是bert的瘦身版本,更简单的模型,更少的数据,得到更好的结果。通过两个方面减少模型参数量,对vocabulary embedding进行矩阵分解,将原来的矩阵VxE分解成两个矩阵VxH和HxE(H<<E),跨层参数共享可以避免参数量随网络深度增加而增加。
这些模型在不同数据集上有差异,需要试一下才知道哪个好。总体而言,XLNet,roberta,Bert-wwm会比bert效果略好,large比base好,albert也有多个版本,tiny版本好很多。更多情况下会被一起使用,最后做ensemble.
NLP:BERT, TextRNN, TextCapsule
分类问题采用投票方法,回归问题采用平均、加权平均,权值按模型效果进行排名。交叉验证也是一个方式,把每一折数据固定下来,看效果,也是按加权平均。
stacking的方式

- 面试题
这个项目有什么难点?针对这个怎么优化的
预训练模型BERT和word2vex+textRNN based encoder哪个效果好
BERT在per train 时候和word2vec有什么异同点
bert的token怎么分词的
bert如何获得词意和句意
为什么bert有3个嵌入层,它们如何实现的
bert在Per train阶段的损失函数
为什么fine-tune有效?学习到针对特定任务的特征,学到了深层次的语义信息。
1.word2vec与Elmo模型在语义学习上差异是什么?
2.Batch Normalization与Layer Normalization区别?bert中为什么用后者?
3.熟悉GELU激活函数,与RELU差异。
4.实际操作,Semi-Supervised DA方法;
5.对比实施模型融合的相关方法。
1.有哪些文本增强方法?你用过哪些文本增强方法
2.BERT有哪些调参方法?你是如何调参的?Transformer的原理?
3. 尝试模型调参(比如BERT和word2vec构建词向量)
4. 了解一种文本增强方法
5. 代码实现文本增强(比如回译技术)
涉及论文:
Understanding the diffificulty of training deep feedforward neural networks
Delving Deep into Rectififiers:
Surpassing Human-Level Performance on ImageNet Classifification
Highway Networks
论文下载地址:
https://arxiv.org/abs/1502.01852
http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
https://arxiv.org/abs/1505.00387
作业名称(详解):面试问题及比赛实战。
1.跑通其它的预训练模型
2.尝试多模型的融合,实现stacking方式
3.尝试加入特征进行模型学习
4.熟悉几种常用的参数初始化方法及其原理(看paper)
5.熟悉adam原理(看paper)
- Bert
有两个预训练任务,MLM masked language model(在每一轮迭代中随机选择15%的词隐藏,目标是通过它们的上下文来预测这个单词,操作是取这些词对应的最后一个隐单元向量后接一个softmax来预测这个词,80%采用masked,10%随机选择其他词填充,10%使用原词,这个平衡了masked和fine-tune)、Next Sentence Prediction(预测第二个句子是否可以自然的接在第一个句子后面,是一个二分类问题,用于理解句子间的关系)

是一个12层的网络,学到位置信息,多头attention公式见上图右边,I是原始输入,输出key,value,query。
相关文章:
【AI】NLP
不定期更新,建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…...
Go 代理爬虫
现在注册,还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器,通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支: basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…...
【NLP 43、大模型技术发展】
目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...
在普通用户下修改root用户密码
1 从普通用户切换到root用户 sudo -s 再输入密码。 2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码。 3 切换到root用户,使用修改过的密码登陆。 4 成功进入root用户。...
【每日算法】Day 6-1:哈希表从入门到实战——高频算法题(C++实现)
摘要 :掌握高频数据结构!今日深入解析哈希表的核心原理与设计实现,结合冲突解决策略与大厂高频真题,彻底掌握O(1)时间复杂度的数据访问技术。 一、哈希表核心思想 哈希表(Hash Table) 是一种基于键值对的…...
go命令使用
查看配置信息 go env配置go国内源 export GO111MODULEon export GOPROXYhttps://goproxy.cn测试 go install github.com/jesseduffield/lazydockerlatesthttps://github.com/jesseduffield/lazydocker...
深入 SVG:矢量图形、滤镜与动态交互开发指南
1.SVG 详细介绍 SVG(Scalable Vector Graphics) 是一种基于 XML 的矢量图形格式,用于描述二维图形。 1. 命名空间 (Namespace) 命名空间 URI:http://www.w3.org/2000/svg 用途:在 XML 或 XHTML 中区分不同标记语言的…...
SPPAS安装及问题汇总
SPPAS下载地址 文件找不到,可能是MAC的自动化操作问题,解决方案有二: 方案一: 直接查看SPPAS中的readme,运行sppas.command 方案二: 在自动化脚本中添加 export PATH/usr/local/bin:$PATH...
LINUX基础 [三] - 进程创建
目录 前言 进程创建的初次了解(创建进程的原理) 什么是fork函数? 初识fork函数 写时拷贝 fork函数存在的意义 fork调用失败的原因 进程终止 运行完毕结果不正确 main函数返回 库函数函数exit 系统调用接口_exit 进程异常终止 进…...
【day1】数据结构刷题 链表
一 反转链表 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]…...
鼠标在客户区内按下左键和双击右键
书籍:《Visual C 2017从入门到精通》的2.6鼠标 环境:visual studio 2022 内容:【例2.44】鼠标在客户区内按下左键和双击右键 1.创建一个单文档程序 一个简单的单文档程序-CSDN博客https://blog.csdn.net/qq_20725221/article/details/1463…...
c++ map和vector模板类
在这一章中C语法之模板函数和模板类-CSDN博客 我们学习了怎样写模板函数和模板类,接下来我们来学习系统给我们写好的两个模板类:map和vector。 我相信有了上文的基础,能帮助我们更好的理解这些模板类。 map和vector 是C STL(标准模板库) 中的一部分&a…...
hn航空app hnairSign unidbg 整合Springboot
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 学习unidbg补环境。先弄一个…...
Arm Linux ceres库编译
由于工作需要,需在国产化系统上编译ceres库,手上有一块树莓派,就在树莓派上面进行测试编译ceres库,总体来说比较顺利。只出现了一点小问题 参考链接: Ceres中文教程-安装 Ceres官方网站(英文) …...
c++中的四种cast转换
文章目录 前言一、dynamic_cast二、static_cast三、const_cast四、reinterpret_cast总结 前言 C继承并扩展C语言的传统类型转换方式,提供了功能更加强大的转型机制(检查与风险) 转换类型典型用途安全性static_cast相关类型转换(…...
矩阵补充,最近邻查找
矩阵补充,最近邻查找 矩阵补充是向量召回最简单的一种方法,现在不常用,学习矩阵补充是为了更好的理解后面学到的双塔模型 下图,输入用户ID和物品ID后从Eebedding层拿到对应的向量做内积,内积的结果就是矩阵补充 模型…...
gradio调用多个CSS的HTML页
很多博客介绍的gradio读取html和css比较简单,如果要做很细致的前端页面优化,比如丰富的响应式的cssjs,至少要有html多个css,是暂不能实现的。bootstrap、font-awesome、jquery等 方案一当然是直接更换htmlcss为主的部署方式&#…...
NVIDIA NeMo 全面教程:从入门到精通
NVIDIA NeMo 全面教程:从入门到精通 文章目录 NVIDIA NeMo 全面教程:从入门到精通目录框架介绍NeMo的核心特点NeMo的架构NeMo与其他框架的比较NeMo的模型集合NeMo的工作流程NeMo 2.0的新特性 安装指南系统要求使用Docker容器安装步骤1:安装Do…...
Go 语言封装邮件发送功能
Go 语言封装邮件发送功能 🏆 目标📦 依赖包🌟 项目结构🚀 代码实现🛠️ 主要方法说明🧪 单元测试🌈 使用示例🏆 代码亮点🌟 改进方向🚀 总结 在现代 Web 开发…...
加新题了,MySQL 8.0 OCP 认证考试 题库更新
MySQL 8.0 OCP 认证考试 题库更新 MySQL 8.0 Database Administrator 考试科目:1Z0-908 近期发现,MySQL OCP认证考试题库发生变化,出现了很多新题,对此,CUUG专门收集整理了最新版本的MySQL考试原题,并会给…...
Thales靶机攻略
1.下载导入VBox,并启动靶机 靶机地址:https://download.vulnhub.com/thales/Thales.zip 解压后,在VBox中导入虚拟电脑。包含所有网卡的MAC地址。 导入完成,设置网卡模式为仅主机网络。开启靶机。 kali网卡更改为桥接模式。点击工…...
尝试使用Tauri2+Django+React项目(2)
前言 尝试使用tauri2DjangoReact的项目-CSDN博客https://blog.csdn.net/qq_63401240/article/details/146403103在前面笔者不知道怎么做,搞了半天 笔者看到官网,原来可以使用二进制文件,好好好 嵌入外部二进制文件 | Taurihttps://v2.taur…...
6.1 模拟专题:LeetCode 1576. 替换所有的问号
1. 题目链接 LeetCode 1576. 替换所有的问号 2. 题目描述 给定一个仅包含小写字母和问号 ? 的字符串 s,要求将所有 ? 替换为任意小写字母,使得替换后的字符串中 没有相邻的两个字符相同。 示例: 输入:s "?zs" →…...
Linux安装go环境
安装一个lazydocker,根据文档需要先安装go环境 https://github.com/jesseduffield/lazydocker 官方文档解析 https://go.dev/doc/install 文档内容如下,一共三步 1.删除先前安装的go,解压下载的go压缩包到/usr/local目录 2.添加环境变量&…...
卡特兰数在数据结构上面的运用
原理 Catalan数是一个数列,其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为:  其中,是组合数,表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…...
Unity知识点快速回顾系列
Unity知识点快速回顾系列导航 主要想用于快速回顾unity相关知识点,基本只讲解知识点,只有简单的示例,目前还在整理中。 一、C#知识点入门、基础、核心、进阶 二、Unity 知识点入门、基础、核心、进阶 三、Unity 数据持久化 四、Unity 知识点快…...
悟空crm v12安装好后出现 网络错误问题(已解决)
请求网址: http://wwww.aaaa.com/gateway/adminUser/queryUserNumInfo 请求方法: POST 状态代码: 502 Bad Gateway 远程地址: 101.37.79.226:9807 引荐来源网址政策: strict-origin-when-cross-origin...
便携版:随时随地,高效处理 PDF 文件
PDF-XChange Editor Plus 便携版是一款功能强大且极其实用的 PDF 阅读与编辑工具。它不仅支持快速浏览 PDF 文件,还提供了丰富的编辑功能,让用户可以轻松处理 PDF 文档。经过大神优化处理,这款软件已经变得十分轻便,非常适合需要随…...
【Golang】补充:占位符、转义字符、错误处理
🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 1、占位符 1.1通用占位符 %v :默认格式的值。适…...
文件上传绕过的小点总结(4)
9.末尾点删除处理缺陷 给出源码: $file_name trim($_FILES[upload_file][name]); $file_name deldot($file_name);//删除文件名末尾的点 $file_ext strrchr($file_name, .); $file_ext strtolower($file_ext); //转换为小写 $file_ext str_ireplace(::$DATA,…...



