GithubHelp home page GithubHelp logo

datawhalechina / learn-nlp-with-transformers Goto Github PK

View Code? Open in Web Editor NEW
1.7K 14.0 317.0 41.12 MB

we want to create a repo to illustrate usage of transformers in chinese

Home Page: https://datawhalechina.github.io/learn-nlp-with-transformers

Shell 100.00%
transformer nlp bert

learn-nlp-with-transformers's Introduction

基于transformers的自然语言处理(NLP)入门

Natural Language Processing with transformers. 本项目面向的对象是:

  • NLP初学者、transformer初学者
  • 有一定的python、pytorch编程基础
  • 对前沿的transformer模型感兴趣
  • 了解和知道简单的深度学习模型

本项目的愿景是:

希望结合形象生动的原理讲解和多个动手实践项目,帮助初学者快速入门深度学习时代的NLP。

本项目的主要参考资料是:

  • Huggingface/Transformers代码库
  • 多个优秀的Transformer讲解和分享

项目成员:

  • erenup(多多笔记),北京大学,负责人
  • 张帆,Datawhale,天津大学,篇章4
  • 张贤,哈尔滨工业大学,篇章2
  • 李泺秋,浙江大学,篇章3
  • 蔡杰,北京大学,篇章4
  • hlzhang,麦吉尔大学,篇章4
  • 台运鹏 篇章2
  • 张红旭 篇章2

本项目总结和学习了多篇优秀文档和分享,在各个章节均有标注来源,如有侵权,请及时联系项目成员,谢谢。去Github点完Star再学习事半功倍哦😄,谢谢。

项目内容

篇章1-前言

篇章2-Transformer相关原理

篇章3-编写一个Transformer模型:BERT

篇章4-使用Transformers解决NLP任务

learn-nlp-with-transformers's People

Contributors

caijie12138 avatar erenup avatar erenup-tt avatar luzixiao avatar zhangfantju avatar zhxnlp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learn-nlp-with-transformers's Issues

bugs about 3.1-如何实现一个BERT.md

首先,十分感谢您的整理,此教程受益匪浅。但有几处疑问希望您给予一些指导。

  1. BERT结构疑似有部分错误:

    • BertEmbeddings
    • BertEncoder
      • BertLayer
        • BertAttention
        • BertIntermediate
        • BertOutput
      • BertPooler #这部分应该是和BertEmbeddings平级,而不是和BertLayer平级`
  2. 原文:总计dense全连接层出现了(1+1+1)x12+1=37次,并不是每个dense都配了激活函数
    这个建议您校核一下,因为:self-attention就有3个FC生成QKV,1个输出;FFN有两个,所以每层至少6个FC。poor输出一个,,,所以理论上有6*12+1

============分割线,我这边给出一个自己的统计=======

  1. BERT Tokenization 分词模型(BertTokenizer)
  2. BERT Model 本体模型(BertModel)
    • BertEmbeddings(Embd*3,LN,DO)
    • BertEncoder(BertLayer*12)
      • BertLayer
        • BertAttention
          • BertSelfAttention(FC*3生成QKV,在QK之后加一个DO)
          • BertSelfOutput(FC,DO,ADD残差,LN)
        • BertIntermediate(FC,gelu)
        • BertOutput(FC,DO,ADD残差,LN)
    • BertPooler(FC,tanh)

bugs about 4.6-生成任务-机器翻译

首先,十分感谢您的整理,此教程受益匪浅。但有几处疑问希望您给予一些指导。
=======客套话结束======
1.目前发现4.6的环境可能稍有问题
! pip install datasets transformers sacrebleu sentencepiece
至少建议被更改为
! pip install datasets transformers "sacrebleu>=1.4.12,<2.0.0" sentencepiece
其中1.4.12是代码中表明的,2.0.0是本次发现的不兼容版本,1.5.1是兼容的
否则,这边环境(默认是安装sacrebleu2.0.0)的出错为:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-4d4d0ea64237> in <module>()
      2 
      3 #raw_datasets = load_dataset("wmt16", "ro-en")
----> 4 metric = load_metric("sacrebleu")

10 frames
/root/.cache/huggingface/modules/datasets_modules/metrics/sacrebleu/eae4b006c615cfaacce2df4eec95acba813e69f28db6fff9e0e1398c50a0ed47/sacrebleu.py in Sacrebleu()
    114         force=False,
    115         lowercase=False,
--> 116         tokenize=scb.DEFAULT_TOKENIZER,
    117         use_effective_order=False,
    118     ):

AttributeError: module 'sacrebleu' has no attribute 'DEFAULT_TOKENIZER

====我看了一下PyPI的信息====
在2021年8月10日,更新了此包到2.0.0,而这个更新和本教程可能不兼容,您可能需要在教程中注明

bugs about 3.2-如何应用一个BERT.md

首先,十分感谢您的整理,此教程受益匪浅。但有几处疑问希望您给予一些指导。

  1. 文章3.2的4.2.1部分:关于这么做的理由,我暂时没有找到合理的解答,但是找到了一些相关的讨论
    链接疑似打不开

Predict

想问下,就是训练好模型以后,怎么用它实现predict来搭起服务呢,有具体的参考code吗?谢谢~

请教2.1的一个问题

在最后一步介绍注意力模型的解码器 RNN时提到的两个输入 “一个word embedding 向量,和一个初始化好的解码器 hidden state,图中是$h_{init}$。”,这两个输入是来自哪里呢?word embedding 向量是通过哪个文本做的embedding

about (可能是我的版本问题) 4.5-生成任务-语言模型

这个里面有一段:

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=lm_datasets["train"][:1000],
    eval_dataset=lm_datasets["validation"][:100],
    data_collator=data_collator,
)

可能是我的版本问题,datasets切片之后类型是dict,好像不能直接赋值给dataset,这样会报错:

***** Running training *****
  Num examples = 3
  Num Epochs = 1
  Instantaneous batch size per device = 8
  Total train batch size (w. parallel, distributed & accumulation) = 8
  Gradient Accumulation steps = 1
  Total optimization steps = 1
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-113-3435b262f1ae> in <module>()
----> 1 trainer.train()

4 frames
/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py in <listcomp>(.0)
     42     def fetch(self, possibly_batched_index):
     43         if self.auto_collation:
---> 44             data = [self.dataset[idx] for idx in possibly_batched_index]
     45         else:
     46             data = self.dataset[possibly_batched_index]

KeyError: 2

因为切片之后,len就不是样本长度,而是dict的K的数量(3个)

原始数据:
Dataset({ features: ['attention_mask', 'input_ids', 'labels'], num_rows: 19240 })
切片之后dict:
Type: dict String form: {'attention_mask': [[1, 1,。。。。。。后面太长了
其实应该要的是
Dataset({ features: ['attention_mask', 'input_ids', 'labels'], num_rows:1000 })
==================这边的我的参考代码===========

from datasets import Dataset
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=Dataset.from_dict(lm_datasets["train"][:1000]),
    。。。。

=======因为可能是版本问题,我这边给出一些版本说明=====
datasets-1.11.0 fsspec-2021.7.0 huggingface-hub-0.0.12 pyyaml-5.4.1 sacremoses-0.0.45 tokenizers-0.10.3 transformers-4.9.2 xxhash-2.0.2
Pytorch版本:1.9.0+cu102

2.2节transformer

解码器部分最后key矩阵和value矩阵应该来自编码器最后的输出吧

2.1-图解attention.md 问题

原文:
动态图:如图所示,RNN在第2个时间步,采用第1个时间步得到hidden state#10(隐藏层状态)和第2个时间步的输入向量input#1,来得到新的输出hidden state#1。

采用第1个时间步得到hidden state#10(隐藏层状态)这里应该是hidden state#0 吧?

4.1文本分类

突然发现这个教程,看了一下,受益匪浅
======客套话结束,正式开始======
1.WNLI (Winograd Natural Language Inference) Determine if a sentence with an anonymous pronoun and a sentence with this pronoun replaced are entailed or not.在[[4.1-文本分类.ipynb]]和[[4.1-文本分类.md]]均未翻译,您可以翻译为:输入句子对,并判断前后句子中代词指代消解是否正确
2.在markdown中,您可以加一个链接,直接指向colab:https://colab.research.google.com/github/datawhalechina/learn-nlp-with-transformers/blob/main/docs/篇章4-使用Transformers解决NLP任务/4.1-文本分类.ipynb
======正式结束,客套话开始======
再次感谢这个教程

讲解视频

有讲解视频吗?有的话请发下连接

2.2.1 PositionalEncoding类

div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))
计算分母的时候为什么先对数运算后指数运算,这样不麻烦吗?完全可以直接:
div_term = 1 / 10000 ** (torch.arange(0, d_model, 2) / d_model)

建议增加实践案例

比如文本分类,建议不同模型,不同语种(中英文)都有例子,才比较好。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.