首页 > 其他分享 >李rumor 3个月学习NLP路线(补充)

李rumor 3个月学习NLP路线(补充)

时间:2024-04-20 20:22:34浏览次数:22  
标签:NLP 训练 模型 分类 路线 学习 文本 数据 rumor

原视频链接:bilibili 思维导图 

leerumor:nlp_tutorial github 

 

第一个月

1-基础知识

概率论与数理统计、线性代数

python编程、矩阵运算

材料:学习需要2周,建议初学者先看懂线性分类、svm模型、图模型。

教材:李航《统计学习方法》 微信读书 

视频:吴恩达的cS229公开课 bilibili 

林田轩的机器学习基石 bilibili 

shuhuai008的白板推导系列 bilibili 

 

2-经典模型

深度学习基础需要两周,先学会神经网络的前后向推导,再去看这些经典的编码器。先有大致的理解,知道都有什么方法,出于什么理论,解决了什么问题,后续的学习中在不断补足。

邱熙鹏《神经网络与深度学习》教材 github 

吴恩达的深度学习网课 bilibili 

李宏毅的深度学习网课 bilibili 

 

第二个月

3-任务范式与技巧

 

文本分类 SurveyTranslation 

文本分类是NLP应用最多且入门必备的任务,TextCNN堪称第一baseline,往后的发展就是加RNN、加Attention、用Transformer、用GNN了。第一轮不用看得太细,每类编码器都找个代码看一下即可,顺便也为其他任务打下基础。

但如果要做具体任务的话,建议倒序去看SOTA论文,了解各种技巧,同时善用知乎,可以查到不少提分方法。

图源:arxiv 

应用:情感分析(SA),话题标签(TL),新闻分类(NC),问题解答(QA),对话行为分类(DAC),自然语言推断(NLI),事件预测(EP)。

  • 情感分析:sentiment analysis ( SA)
  • 话题标记:topic labeling(TL)
  • 新闻分类:news classification (NC)
  • 问答系统:question answering(QA)
  • 对话行为分类:dialog act classification (DAC)
  • 自然语言推理:natural language inference (NLD)
  • 关系分类:relation classification (RC)
  • 事件预测:event prediction (EP)

浅层学习模型:预处理与数据统计,根据所选特征将表示的文本输入分类器。

  • BOW:用字典大小的向量表示每个文本。向量的单个值表示对应于其在文本中固有位置的词频。
  • N-gram:相邻单词的信息,并通过考虑相邻单词来构建字典。
  • TF-IDF(术语频率倒排文档频率)、BM25:使用单词频率并反转文档频率来对文本建模。
  • word2vec:使用本地上下文信息来获取单词向量。
  • GloVe:具有局部上下文和全局统计功能-训练单词-单词共现矩阵中的非零元素。

分类器:知乎

  • 概率图模型(PGM-based methods)表示图中特征之间的条件依赖关系,如:贝叶斯网络、隐马尔可夫网络。
  • K近邻算法(KNN-based Methods)对一个未标记的样本进行分类,在最近接K的标记样本上找到样本数量最多的类别。
  • 支持向量机算法(SVM-based Methods)在一维输入空间或者特征空间中构建最优超平面,是超平面与两类训练集之间的距离最大化,从而达到最佳的泛化能力。目标是使范畴边界沿垂直于超平面的方向的距离最大。
  • 决策树算法(DT-based Methods)是为了确定类与属性之间的相关性,进一步用于预测未知类型的记录类别。
  • 集成算法(Integration-based Methods)旨在聚合多种算法的结果,以获得更好的性能和解释。传统的集成算法是引导聚合,如 RF,增强如自适应提升 (AdaBoost) 和 XGBoost 和堆叠(stackin)。

 深度学习模型:ReNN、CNN、RNN、GNN、MLP、Attention、Transformer、BERT(RoBERTa等)

 

 

文本匹配

双塔模型:先看SiamCNN,了解完结构后,再深入优化编码器的各种方法;

基于匹配:句子表示间的交互,了解BERT那种TextA+TextB拼接的做法之后,可以再看看阿里的RE2这种轻量级模型

序列标注

序列标注主要是对Embedding、编码器、结果推理三个模块进行优化,

可以先读懂Bi-LSTM+CRF这种经典方案的源码,再去根据需要读论文改进。

 

文本生成

文本生成是最复杂的,具体的SOTA模型我还没梳理完。

可以先了解Seq2Seq的经典实现,比如基于LSTM的编码解码+Attention、纯Transformer、GPT2以及T5,

再根据兴趣学习VAE、GAN、RL等。

 

语言模型

了解BERT肯定是必须的,有时间的话再多看看后续改进,很经典的如XLNet、ALBERT、ELECTRA还是不容错过的。

除了上述常用模型之外,还有Capsule Network、TextGCN等红极一时的模型。

BERT分类的优化可以尝试:

  1. 多试试不同的预训练模型,比如RoBERT、WWM、ALBERT
  2. 除了 [CLS] 外还可以用 avg、max 池化做句表示,甚至可以把不同层组合起来
  3. 在领域数据上增量预训练
  4. 集成蒸馏,训多个大模型集成起来后蒸馏到一个上
  5. 先用多任务训,再迁移到自己的任务
   

技巧

文本分类是工业界最常用的任务,同时也是大多数NLPer入门做的第一个任务。快速选型的建议:

数据集构建

标签体系的构建:拿到任务时自己先试标一两百条,看有多少是难确定(思考1s以上)的,如果占比太多,那这个任务的定义就有问题。可能是标签体系不清晰或者是要分的类目太难了。

训练评估集的构建:可以构建两个评估集,一个是贴合真实数据分布的线上评估集,反映线上效果,另一个是用规则去重后均匀采样的随机评估集,反映模型的真实能力。

训练集则尽可能和评估集分布一致,有时候我们会去相近的领域拿现成的有标注训练数据,这时就要注意调整分布,比如句子长度、标点、干净程度等,例如做到分不出句子是否是本任务的。

数据清洗:

  1. 去掉文本强pattern:比如做新闻主题分类,一些爬下来的数据中带有的XX报道、XX编辑高频字段就没有用,可以对语料的片段或词进行统计,把很高频的无用元素去掉。还有一些会明显影响模型的判断,比如之前我在判断句子是否为无意义的闲聊时,发现加个句号就会让样本由正转负,因为训练预料中的闲聊很少带句号(跟大家的打字习惯有关),于是去掉这个pattern就好了不少
  2. 纠正标注错误:这个我真的屡试不爽,生生把自己从一个算法变成了标注人员。简单的说就是把训练集和评估集拼起来,用该数据集训练模型两三个epoch(防止过拟合),再去预测这个数据集,把模型判错的拿出来按 abs(label-prob) 排序,少的话就自己看,多的话就反馈给标注人员,把数据质量搞上去了提升好几个点都是可能的

长文本

任务简单的话(比如新闻分类),直接用fasttext就可以达到不错的效果。

想要用BERT的话,最简单的方法是粗暴截断,比如只取句首+句尾、句首+tfidf筛几个词出来;或者每句都预测,最后对结果综合。

另外还有一些魔改的模型可以尝试,比如XLNet、Reformer、Longformer。

如果是离线任务且来得及的话还是建议跑全部,让我们相信模型的编码能力。

少样本

自从用了BERT之后,很少受到数据不均衡或者过少的困扰,先无脑训一版。

如果样本在几百条,可以先把分类问题转化成匹配问题,或者用这种思想再去标一些高置信度的数据,或者用自监督、半监督的方法

鲁棒性

在实际的应用中,鲁棒性是个很重要的问题,否则在面对badcase时会很尴尬,怎么明明那样就分对了,加一个字就错了呢?

这里可以直接使用一些粗暴的数据增强,加停用词加标点、删词、同义词替换等,如果效果下降就把增强后的训练数据洗一下。

当然也可以用对抗学习对比学习这样的高阶技巧来提升,一般可以提1个点左右,但不一定能避免上面那种尴尬的情况。

总结

实际上,落地时主要还是和数据的博弈。数据决定模型的上限,大多数人工标注的准确率达到95%以上就很好了,而文本分类通常会对准确率的要求更高一些,与其苦苦调参想fancy的结构,不如好好看看badcase,做一些数据增强提升模型鲁棒性更实用。

 

标签:NLP,训练,模型,分类,路线,学习,文本,数据,rumor
From: https://www.cnblogs.com/yagami-light/p/18148054

相关文章

  • 云原生技术学习路线图 初阶+中阶+高阶
    一.运维技术栈1.1运维高薪的技术点后端开发涉及到的基础设施技术:docker,k8s,servicemesh,yaml式的声明APICI/CD:jenkins,argo,Tekton,gitlab自动化工具:ansible,shell,ELK微服务:服务网格高薪技术点,重点研究这4个。当然云原生的技术栈内容很多,不可能面面俱到,那就捡重点的进行......
  • 【云原生】Spring Cloud微服务学习路线汇总
    SpringCloud是什么?简单来说SpringCloud是一系列框架的组成集合。主要利用的我们现在主流应用的SpringBoot框架开发便利性、巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以利用SpringBoot的开发风格做到......
  • 基于RNN的NLP学习(附件一)
    附件:下面是一个基于RNN的非常简单的NLP实战案例,我们将使用PyTorch来实现一个情感分析模型。这个案例使用了IMDb电影评论数据集,该数据集包含正面和负面评论。#导入必要的库"""这些库是用于自然语言处理(NLP)任务,特别是在深度学习框架PyTorch中。下面是对这些库的简要说明:1.`tor......
  • 基于RNN的NLP学习(四)
    继续按照第一节的规划,这节我们来了解深度学习和神经网络基础:1.学习神经网络的基本概念,包括神经元、激活函数、损失函数、反向传播等。我搜索了一下相关资料,发现网上关于神经网络的基本概念大多都晦涩难懂,很难不使我们对神经网络的学习望而却步,相对于这些晦涩难懂的概念,我写了自......
  • 基于RNN的NLP学习(二)
    首先,根据上一节说的,我对学习基于RNN的NLP有了一个大致的规划,现在我将从第一节开始学习:1.复习Python基础:确保你对Python的基础语法、数据结构(如列表、字典、集合)、控制流(如循环、条件语句)、函数和类有扎实的理解。学习使用Python的标准库,特别是与数据处理相关的库,如re(正则表达......
  • 基于RNN的NLP学习(一)
    目前从事RPA自动化机器人这方面的工作,今天了解到可以通过AI+RPA实现RPA的进阶,能够使RPA工作流程更简单完善,所以从今天开始学习基于RNN的NLP。个人认为要学习基于RNN的NLP,需要以下几个流程:1.复习Python基础:确保你对Python的基础语法、数据结构(如列表、字典、集合)、控制流(如循环......
  • 04-路线规划
    1.Cypher入门1.1查询数据a.基本查询//查询所有的数据,数据量大是勿用MATCH(n)RETURNn//查询所有的网点(AGENCY)MATCH(n:AGENCY)RETURNn//查询所有与“北京市转运中心”有关系的节点MATCH(n:OLT{name:"北京市转运中心"})--(m)RETURNn,m//查询所有"北京......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • NLP自然语言处理—主题模型LDA回归可视化案例:挖掘智能门锁电商评价数据
    全文链接:http://tecdat.cn/?p=2175早在1995年比尔·盖茨就在《未来之路》里说过:未来没有配套智能家居的房子,就是毛坯房。现在人们生活越来越便捷,人们也更加倾向于智能化家居,当你还在纠结“人工智能”安利值不值得吃,最近不少朋友家里又出现智能门锁,相比传统门锁来说,究竟能有多智能......
  • 前端小白学习路线与方法推荐
    0.编辑器推荐1).WebStorm优点:本身功能丰富缺点:体积较大,需要破解,或者购买正版2)VsCode优点:轻量,开源免费缺点:需要插件扩展,才能达到Webstorm的很多功能推荐插件:书写标签,自动补全标签给代码添加颜色,使代码更加易于区分可以直接运行js代码,而不用通过html......