HuggingFace镜像/canine-s
模型介绍文件和版本分析
下载使用量0

CANINE-s(使用子词损失预训练的 CANINE)

基于 104 种语言,通过掩码语言模型(MLM)目标预训练的 CANINE 模型。该模型在论文《CANINE: Pre-training an Efficient Tokenization-Free Encoder for Language Representation》(https://arxiv.org/abs/2103.06874)中被提出,并首次在 this repository 发布。

CANINE 的特别之处在于,它不像 BERT 和 RoBERTa 等其他模型那样需要显式的分词器(如 WordPiece 或 SentencePiece)。相反,它直接在字符级别进行操作:每个字符都被转换为其 Unicode 代码点。

这意味着输入处理非常简单,通常可以通过以下方式完成:

input_ids = [ord(char) for char in text]

ord() 函数是 Python 的一部分,它能将每个字符转换为其 Unicode 码点。

免责声明:发布 CANINE 的团队并未为此模型编写模型卡片,因此本模型卡片由 Hugging Face 团队编写。

模型描述

CANINE 是一个基于 Transformer 的模型,它通过自监督的方式在大型多语言语料库上进行预训练,这一点与 BERT 类似。这意味着它仅在原始文本上进行预训练,无需人工以任何方式对文本进行标注(这也是它能够利用大量公开可用数据的原因),并通过自动流程从这些文本中生成输入和标签。更准确地说,它在预训练时采用了两个目标:

  • 掩码语言建模(MLM):随机掩码部分输入,模型需要对其进行预测。此模型(CANINE-s)采用子词损失进行训练,这意味着模型需要预测子词标记的身份,同时以字符作为输入。通过读取字符并预测子词标记,CANINE 将其他模型(如 BERT)中存在的硬性标记边界约束转化为一种软性归纳偏置。
  • 下一句预测(NSP):模型在预训练期间将两个句子连接起来作为输入。有时这两个句子对应于原始文本中相邻的句子,有时则不是。然后模型需要预测这两个句子是否前后连贯。

通过这种方式,模型学习到多种语言的内部表示,这些表示可用于提取对下游任务有用的特征:例如,如果您有一个带标签的句子数据集,您可以使用 CANINE 模型生成的特征作为输入来训练一个标准分类器。

预期用途和局限性

您可以将原始模型用于掩码语言建模或下一句预测,但它主要旨在针对下游任务进行微调。请查看模型中心,以寻找您感兴趣的任务上的微调版本。

请注意,此模型主要用于在需要利用整个句子(可能包含掩码)进行决策的任务上进行微调,例如序列分类、标记分类或问答任务。对于文本生成等任务,您应该考虑 GPT2 等模型。

使用方法

以下是使用此模型的方法:

import argparse
from openmind import is_torch_npu_available
from transformers import CanineTokenizer, CanineModel


def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model_name_or_path",
        type=str,
        help="Path to model",
        default=None,
    )
    args = parser.parse_args()
    return args

def main():
    args = parse_args()
    model_name_or_path = args.model_name_or_path
    if is_torch_npu_available():
        device = "npu:0"
    else:
        device = "cpu"
    model = CanineModel.from_pretrained(model_name_or_path)
    tokenizer = CanineTokenizer.from_pretrained(model_name_or_path)
    model.to(device)

    inputs = ["Life is like a box of chocolates.", "You never know what you gonna get."]
    encoding = tokenizer(inputs, padding="longest", truncation=True, return_tensors="pt").to(device)

    outputs = model(**encoding) # forward pass
    pooled_output = outputs.pooler_output
    sequence_output = outputs.last_hidden_state
if __name__ == "__main__":
    main()


训练数据

CANINE 模型在 mBERT 的多语言维基百科数据上进行了预训练,该数据包含 104 种语言。

BibTeX 条目和引用信息

@article{DBLP:journals/corr/abs-2103-06874,
  author    = {Jonathan H. Clark and
               Dan Garrette and
               Iulia Turc and
               John Wieting},
  title     = {{CANINE:} Pre-training an Efficient Tokenization-Free Encoder for
               Language Representation},
  journal   = {CoRR},
  volume    = {abs/2103.06874},
  year      = {2021},
  url       = {https://arxiv.org/abs/2103.06874},
  archivePrefix = {arXiv},
  eprint    = {2103.06874},
  timestamp = {Tue, 16 Mar 2021 11:26:59 +0100},
  biburl    = {https://dblp.org/rec/journals/corr/abs-2103-06874.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}