• 第6篇 多语言模型


    多语言模型

    大多数模型都是单语言的(英语,汉语,德语)。有一小部分可用的多语言模型,它们与单语言模型有着不同的机制。本篇教程详细叙述这些模型的使用方法。

    XLM

    XLM总共拥有10个不同的checkpoint,只有一个是单语言的。其余9个可以划分为两类:使用了语言嵌入的checkpoint,和没有使用语言嵌入的checkpoint。

    XLM & 语言嵌入

    这部分主要关注如下checkpoint:

    • xlm-mlm-ende-1024 (Masked language modeling, English-German)
    • xlm-mlm-enfr-1024 (Masked language modeling, English-French)
    • xlm-mlm-enro-1024 (Masked language modeling, English-Romanian)
    • xlm-mlm-xnli15-1024 (Masked language modeling, XNLI languages)
    • xlm-mlm-tlm-xnli15-1024 (Masked language modeling + Translation, XNLI languages)
    • xlm-clm-enfr-1024 (Causal language modeling, English-French)
    • xlm-clm-ende-1024 (Causal language modeling, English-German)
      这些checkpoint要求语言嵌入,即指定推理时使用的语言。这些语言嵌入被表示为一个与输入到模型中的id相同形状的张量。这些张量中的数值取决于使用的语言,并且可以使用tokenizer中的lang2id和id2lang参数区分。

    下面是使用xlm-clm-enfr-1024 checkpoint (Causal language modeling, English-French)的例子:

    import torch
    from transformers import XLMTokenizer, XLMWithLMHeadModel
    
    tokenizer = XLMTokenizer.from_pretrained("xlm-clm-enfr-1024")
    model = XLMWithLMHeadModel.from_pretrained("xlm-clm-enfr-1024")
    

    模型处理的语言以及语言的编号都是可以通过lang2id看到的:

    print(tokenizer.lang2id)
    
    '''
    output:
    {'en': 0, 'fr': 1}
    '''
    

    这些编号应该在传入模型语言参数时使用,让我们定义我们的输入:

    input_ids = torch.tensor([tokenizer.encode("Wikipedia was used to")])  # batch size of 1
    print(input_ids)
    
    '''
    output:
    tensor([[    0,  4018,  5545, 51104,    32,   308,    18,     1]])
    '''
    

    我们现在应该通过之前定义的语言编号来定义语言嵌入。我们希望创建一个用恰当语言编号填充的张量,并且与input_ids具有相同的形状。对于英语,编号为0:

    language_id = tokenizer.lang2id["en"]  # 0
    langs = torch.tensor([language_id] * input_ids.shape[1])  # torch.tensor([0, 0, 0, ..., 0])
    
    # We reshape it to be of size (batch_size, sequence_length)
    langs = langs.view(1, -1)  # is now of shape [1, sequence_length] (we have a batch size of 1)
    

    然后你可以将其作为输入,放进模型中了:

    outputs = model(input_ids, langs=langs)
    

    案例run_example.py可以使用XLM的CLM checkpoint通过语言嵌入生成文本。

    没有语言嵌入的XLM

    这一部分主要关注一下checkpoint:

    • xlm-mlm-17-1280 (Masked language modeling, 17 languages)
    • xlm-mlm-100-1280 (Masked language modeling, 100 languages)
      这些checkpoint在推断时不要求语言嵌入。这些模型与前面提到的XLM checkpoint不同,它们常常用于生成通用的句子表示。

    BERT

    BERT有两个可以用于多语言任务的checkpoint:

    • bert-base-multilingual-uncased (Masked language modeling + Next sentence prediction, 102 languages)
    • bert-base-multilingual-cased (Masked language modeling + Next sentence prediction, 104 languages)
      这些checkpoint在推断时不要求语言嵌入。他们应该识别上下文中使用的语言,并据此推断。

    XLM-RoBERTa

    XLM-RoBERTa是在2.5TB新创建的100种语言的干净的CommonCrawl数据上训练出来的。相对于之前发布的多语言模型(如:mBERT、XLM),它在下游任务,比如:分类、序列标注和问答上有着显著的提升。

    两个XLM-RoBERTa checkpoint可以用于多语言任务:

    • xlm-roberta-base (Masked language modeling, 100 languages)
    • xlm-roberta-large (Masked language modeling, 100 languages)
  • 相关阅读:
    IMail不能发送邮件的解决方法
    asp.net防止刷新重新提交触发后台事件的方法
    你的网站被“白名单”了吗?
    网站权限引起的504错误的问题
    asp.net Web Service请求因 HTTP 状态 400 失败: Bad Request的原因
    对现有数据库的表做分区的方法
    测试 Cookie在不同浏览器内容长度限制的测试
    Thinkphp框架中使用memcache缓存的方法
    替换手机号中间数字为*号或隐藏IP最后位
    linux mysql 操作命令
  • 原文地址:https://www.cnblogs.com/miraclepbc/p/15888538.html
Copyright © 2020-2023  润新知