NLP
个人的NLP实践demo。部分来源于其他开源项目。欢迎Star Fork。
主要内容
- 文本分类
- 摘要生成
- 对话翻译
- GNN实现使用
- Mask Language Model预训练
- 其他的NLP炼丹技巧实践
其他参考实践
- bert关系抽取:Ricardokevins/Bert-In-Relation-Extraction: 使用Bert完成实体之间关系抽取 (github.com)
- 文本语意匹配:Ricardokevins/Text_Matching: NLP2020中兴捧月句子相似度匹配 (github.com)
- Transfomer实现和其他部件:Ricardokevins/EasyTransformer: Quick start with strong baseline of Bert and Transformer without pretrain (github.com)
TextClassification
文本分类demo,还同时作为baseline对比,加上了很多NLP trick实践
模型
- bert-base-chinese
- Base RNN
- Base RNN + Attention
- Base transformer
- CHI + TFIDF + LR/MLP/SVM (相对传统的统计学习方法)
技术
- 对抗训练
- 模型蒸馏
- 预训练
GNN
使用torch_geometric作为图神经网络的工具
自己实现了读取构造图数据,以及图模型的代码
代码可运行,但是效果不好(正在排查原因中)
Pretrain
说明
使用上面句子分类中的语料做Mask Language Model的预训练,采用和BERT一样的预训练策略,对我的Transformer进行预训练
测试
- 在句子分类任务中,加载预训练后的Transformer
- 用预训练做Fill Blank任务,见test.py
结果
在训练集1000条里构造100000条训练
测试集300条里构造10000条测试
测试集上正确率37%左右
句子分类
Model | Acc |
---|---|
Base | 81.60% |
Pretrained | 82.99% |
填空
i will never visit this restaurant again.
i will [MASK] visit this restaurant [MASK]
[MASK] Blank Answer: never
[MASK] Blank Answer: again
ChatBotEnglish
英文对话机器人
模型
- GRU encoder-decoder
PGNSum
使用PointerGenerator的摘要生成
模型
- LSTM
- Pointer Generator
Seq2Seq
重构了机器人对话系统,使用了BeamSearch和GreedySearch两种解码方式
使用GRU作为Seq2Seq+Attn的基本结构
更新记录
2021.1.23
- 初次commit 添加句子分类模块,包含Transformer和BiLSTM以及BiLSTM+Attn模型
- 上传基本数据集,句子二分类作为Demo例子
- 加上和使用对抗学习思路
2021.5.1
- 重新整理和更新了很多东西.... 略
2021.6.22
- 修复了Text Classification的一些整理问题
- 增加了Text Classification对应的使用说明
2021.7.2
- 增加了MLM预训练技术实践
- 修复了句子分类模型里,过分大且不必要的Word Embed(因为太懒,所以只修改了Transformer的)
- 在句子分类里增加了加载预训练的可选项
- 修复了一些BUG
2021.7.11
- 增加了GNN在NLP中的应用
- 实现了GNN在文本分类上的使用
- 效果不好,暂时怀疑是数据处理的问题
2021.7.29
- 增加了CHI+TFIDF传统机器学习算法在文本分类上的应用
- 实现和测试了算法性能
- 更新了README
2021.8.2
- 重构了对话机器人模型于Seq2Seq文件夹
- 实现了BeamSearch解码方式
- 修复了PGN里的BeamSearch Bug