[编程开发] nlp有哪些值得完整实现一遍的算法?

[复制链接]
钻石王老五 发表于 2024-1-5 21:45:32|来自:中国 | 显示全部楼层 |阅读模式
如题
全部回复5 显示全部楼层
gvell 发表于 2024-1-5 21:46:32|来自:中国 | 显示全部楼层
首推文本分类
nlp领域有很多有趣的任务,包括分词、文本分类、文本匹配、主题建模、序列标注、依存句法分析、文本生成、机器翻译、阅读理解以及对话系统等等。在这些任务之中,文本分类是我觉得最值得去动手实现一遍的任务。原因主要有两个:

  • 相对于分词、对话系统、阅读理解以及文本生成这些任务,文本分类任务要更简单,其接受一段文本作为输入,然后输出该文本对应的标签。事实上,掌握了文本分类之后,你也可以直接把其他任务的问题转换为文本分类问题,如完形填空类的阅读理解其实就是一个多分类的问题
  • 文本分类作为nlp领域最常见和最实用的任务之一,无论是规则法、机器学习方法,还是深度学习方法,都可以在文本分类这一任务上一展身手
针对文本分类这个任务,我觉得在实现过程中有以下一些问题是必须要思考的:
预处理

文本分类任务存在着各种不同的场景和领域,按语言分可以分中文文本、英文文本以及其他语言的文本,按文本规模可分为长文本和短文本,按目标也分为主题分类、情感分类等等。针对不同的场景和领域,需要进行不同的预处理。在这个过程中,你必须考虑到:

  • 是否需要进行停用词处理,如何针对当前任务去构建一个停用词表
  • 是否进行同义词替换,要怎么去替换
  • 中文和英文的处理有什么不同
  • 长文本和短文本有什么不同
  • 对于在情感分析等场景中经常出现的样本不平衡问题要怎么去处理
  • 对于数据不足的情况,有什么方法可以进行数据增强
规则法

对于无标签数据,规则法是常用的方法,他在某些简单的场景和领域上有着比较好的效果,能够减少标注成本。在使用规则法的时候,有这些细节你需要考虑:

  • 是设置优先级规则还是关键词加权
  • 是模糊匹配还是精确匹配
传统机器学习

在深度学习发展起来之前,传统机器学习在有标注数据的监督文本分类中有着不错的表现,一个简单的传统机器学习分类方法可以分为特征提取层和分类层,在这两层的实践中,有这些方法可以考虑:

  • 特征提取:one-hot,词袋,n-grams,tf-idf,这些特征之间有什么区别,在具体使用中需要注意什么?如one-hot会面临什么问题,低频词要怎么处理,n-gram的窗口要设置多大
  • 分类:KNN、SVM、LR、朴素贝叶斯、集成方法等等都是比较经典的模型,这些模型的优缺点是什么?理论依据是什么?需要注重哪些参数的优化
深度学习

如今的监督文本分类方法基于都是基于深度学习的,而深度学习也确实在这一任务上取得了优秀的表现。在实现文本分类这个任务中,有一些常用的模型和技巧是绝对不能错过的:

  • 输入层,用自己训练的词向量,预训练的词向量还是Bert等LM模型?词表需要多大,需不需要进行词频过滤?如果是词向量,fine-tune还是不fine-tune好?char-level还是word-level好,LSTM还是CNN好
  • encoding层,TextCNN、RCNN、fastText、HAN、Attention、Transformer等几个经典的模型都有必要实现一下
模型分析


  • 如何做可视化分析
  • precision、recall、marco-F1、micro-F1、ROC曲线等指标的意义是什么?如何实现?在样本不平衡的数据中应该看重哪个指标
  • 如何设置阈值
  • 如何将模型部署成一个服务,保证服务能够承受一定的访问压力,并有较快的响应速度
此上便是我对文本分类这个问题的理解和分析,欢迎评论区纠正和补充!
除了文本分类这个任务,我另外推荐的是QA任务。如果有兴趣的话,也可以尝试Text Matching、Seq2Seq这些有趣的任务。
1qsf 发表于 2024-1-5 21:47:28|来自:中国 | 显示全部楼层
我个人感觉是char-rnn,可以打下很多基础,包括文本预处理、lstm、attentoin、loss、predict、beam search等等,关键是挺好玩的,比如像karpathy装个莎士比亚啥的:


推荐个blog:
The Unreasonable Effectiveness of Recurrent Neural Networks
johnwar 发表于 2024-1-5 21:47:39|来自:中国 | 显示全部楼层
可能是word2vec吧。这是我见过的第一个self supervised learning感觉的算法。不需要额外的标注。

同时训练的时候也有一些细节,比如处理the等高频词,比如如何做预测(选5个词做分类)
以及可以引申出hierarchical softmax loss等等算法。(这种ijcai的reviewer觉得不存在的东西)
推荐阅读:

  • Word2Vec教程 - Skip-Gram模型
https://blog.csdn.net/Layumi1993/article/details/72866235

  • Word2Vec教程(2)- Negative Sampling
https://blog.csdn.net/Layumi1993/article/details/72868399

  • 图文互搜 - 这方面的文章很多,以做MSCOCO和Flickr30k为主。
比较早开坑的是feifei li组,有代表性的是 Andrej Karpathy早期工作。这边放一个 @郑哲东 学长的Dual-Path Convolutional Image-Text Embedding with Instance Loss 里的图,这篇也是用到了word2vec来初始化网络。


推荐视频:

  • 自然语言处理 - hierarchical softmax
https://www.bilibili.com/video/av6475775
ilylyh1314 发表于 2024-1-5 21:47:47|来自:中国 | 显示全部楼层
谢邀!
NLP四大任务类型:分类、序列标注、文本匹配、文本生成,都需要完整实现一遍。
对于实验室新生,我一般让他们实现五个练习来上手NLP。可以参考:
https://github.com/FudanNLP/nlp-beginner
lyon 发表于 2024-1-5 21:48:33|来自:中国 | 显示全部楼层
如果是刚刚开始学习复现一些算法,当然从基础的方向和算法开始吧,因为这些算法都是实现更复杂网络的“砖”,这些“砖”包括CNN,Word Embeeding、LSTM、Seq2Seq+Attention、Language Model。从去年开始大火的Transformer、BERT中我们又看到了self-Attention,ResNet,Position enocding等更多细微的组件。所以建议从最简单的深度学习任务一步一步来。

  • 此项目复现了斯坦福cs224n中经典算法应用框架Pytorch:

DSKSD/DeepNLP-models-Pytorch


2.NLP_tutorial应用框架pytorch和tensorflow:
https://github.com/graykode/nlp-tutorial

PS:最近一直反思自己以前的学习方法,得出的结论是:书上、论文上看到的算法都不叫做学到,用代码实现了的才叫你真正的学会了。加油!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则