HuggingFace/transformers系列文章

第一章 huggingface简介


文章目录

  • HuggingFace/transformers系列文章
  • 前言
  • 一、Bert简介
  • 二、HuggingFace/transformers
  • 三、安装使用
  • 1.安装库
  • 2.简单使用
  • 2.1 准备预训练模型
  • 2.2 embedding

  • 前言

    最近需要研究预训练模型,huggingface目前是最火热的自然语言处理框架,为此写此系列文章,边做个学习记录边做个分享


    先做个简介开个头吧,后续会边研究边实践边分享,从安装到主要应用实验,从源码解析到背景理论知识。水平有限,敬请谅解(文章主要使用pytorch,做中文任务,对tensorflow版不做详细介绍)

    一、Bert简介


    清华大学自然语言处理实验室对预训练语言模型架构的梳理;传送门:https://github.com/thunlp/PLMpapers

    BERT
    由Google AI在2018年底推出,刚出现就刷新了一大批榜单,甚至在一些任务上超过了人类的表现。
    核心贡献:
    1.BERT揭示了语言模型的深层双向学习能力在任务中的重要性
    2.BERT再次论证了fine-tuning的策略是可以有很强大的效果的,而且再也不需要为特定的任务进行繁重的结构设计。
    创新之处:
    在预训练的时候使用了两个非监督任务:
    1.MLM(掩盖语言模型)
    2.NSP(下一句预测)
    **有兴趣想具体可查询其他博客,这里不再介绍 **

    二、HuggingFace/transformers

    Huggingface总部位于纽约,是一家专注于自然语言处理、人工智能和分布式系统的创业公司。他们所提供的聊天机器人技术一直颇受欢迎,但更出名的是他们在NLP开源社区上的贡献。Huggingface一直致力于自然语言处理NLP技术的平民化(democratize),希望每个人都能用上最先进(SOTA, state-of-the-art)的NLP技术,而非困窘于训练资源的匮乏。同时Hugging Face专注于NLP技术,拥有大型的开源社区。尤其是在github上开源的自然语言处理,预训练模型库 Transformers,已被下载超过一百万次,github上超过24000个star。Transformers 提供了NLP领域大量state-of-art的 预训练语言模型结构的模型和调用框架。

    官网连接:https://huggingface.co/
    GitHub: https://link.zhihu.com/?target=https%3A//github.com/huggingface/transformers

    三、安装使用

    1.安装库

    Transformers库的当前版本基于Python 3.6+,PyTorch 1.0.0+和TensorFlow 2.0+

    pip install transformers
    

    另一种方法,从源码安装,如果后续要完整运行transformers自带的最新examples的话,建议用这种方式安装

    git clone https://github.com/huggingface/transformers
    cd transformers
    pip install .
    

    代码更新后升级方式

    git pull
    pip install --upgrade .
    

    检查安装版本及正确性

    import tensorflow as tf; tf.__version__         # 检查tf版本
    import torch; torch.__version__                 # 1.6.0
    import transformers;transformers.__version__    # 4.8.2
    

    2.简单使用

    2.1 准备预训练模型

    由于中文任务,我们需要用transformers下载一个中文预训练模型,transformers已经帮我们打包好了这些共享模型,并且可以通过一致的from_pretrained接口下载模型到本地cache;
    transformers模型管理的方式是为每一个模型起一个唯一的短名,如果一个模型同时有一个配套的tokenizer模型的话,它们会共用一个短名。因此只要知道模型短名,就能任意加载想要的预训练模型。

    短名查询传送门:https://huggingface.co/models

    from transformers import AutoModel, AutoTokenizer
    tokenizer = AutoTokenizer.from_pretrained('bert-base-chinese')
    model = AutoModel.from_pretrained('bert-base-chinese')
    

    ps:也可以自行从其他路径下载预训练模型读取,把上述短名参数换成本地模型路径名即可(例如本地文件夹/transformers/hfl内下载了chinese-bert-wwm-ext)

    from transformers import AutoModel, AutoTokenizer
    tokenizer = AutoTokenizer.from_pretrained('./transformers/hfl/chinese-bert-wwm-ext')
    model = AutoModel.from_pretrained('./transformers/hfl/chinese-bert-wwm-ext')
    

    2.2 embedding

    从nlp基操开始,做个向量编码

    from transformers import AutoModel, AutoTokenizer
    model = AutoModel.from_pretrained('./transformers/hfl/chinese-bert-wwm-ext')
    tokenizer = AutoTokenizer.from_pretrained('./transformers/hfl/chinese-bert-wwm-ext')
    input_ids = tokenizer.encode('今天天气真好', return_tensors='pt') #[1,8] tensor([[ 101,  791, 1921, 1921, 3698, 4696, 1962,  102]])
    outputs = model(input_ids) # outputs.last_hidden_state [1, 8, 768] outputs.pooler_output [1,768]
    v = torch.mean(outputs.last_hidden_stat, dim=1) # shape (1, 768)
    

    PS:
    1.tokenizer分词器,对输入序列按字分词,查询词表并添加两个特殊字符[CLS]和[SEP],shape = [1,8] ,而model(input_ids)返回两个值last_hidden_state以及pooler_output。对输入的sequence中的每个token/字都返回了一个768维的向量。。
    2. 根据文档的说法,pooler_output向量一般不是很好的句子语义摘要,因此这里采用了torch.mean对last_hidden_state进行了求平均操作

    最后得到词向量就能愉快继续后续操作了

    来源:馨卡布奇诺

    物联沃分享整理
    物联沃-IOTWORD物联网 » 第一章 huggingface简介

    发表评论