问题标签 [huggingface-tokenizers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 快速和慢速分词器产生不同的结果
使用 HuggingFace 的流水线工具,我惊讶地发现使用快速和慢速分词器时输出存在显着差异。
具体来说,当我运行填充掩码管道时,分配给将填充掩码的单词的概率对于快速和慢速分词器来说是不同的。此外,尽管无论输入句子的数量和长度如何,快速分词器的预测都保持不变,但对于慢速分词器而言,情况并非如此。
这是一个最小的例子:
每个管道调用都会产生可以填充的前 5 个令牌[MASK]
,以及它们的概率。为简洁起见,我省略了实际输出,但分配给每个单词的概率在所有示例[MASK]
中s2
并不相同。最后 3 个示例给出了相同的概率,但第一个示例产生了不同的概率。差异如此之大,以至于两组的前 5 名并不一致。
据我所知,这背后的原因是快速和慢速分词器返回不同的输出。快速分词器通过用 0 填充将序列长度标准化为 512,然后创建一个注意掩码来阻止填充。相比之下,slow tokenizer 只填充最长序列的长度,并不会创建这样的注意掩码。相反,它将填充的令牌类型 id 设置为 1(而不是 0,这是非填充令牌的类型)。根据我对 HuggingFace 的实现(在此处找到)的理解,这些是不等价的。
有谁知道这是否是故意的?
huggingface-transformers - 使用自定义 BPE 解码掩码语言建模任务的预测
我已经使用标记器为 RoBERTa 训练了一个自定义 BPE 标记器。
我使用run_language_modeling.py提供的骨架在蒙面 LM 任务上训练了自定义模型
模型在一个支持的评估集上达到困惑3.2832
。
这是解码模型预测时让我感到困惑的地方:
使用预训练模型时,以下工作正常
但是,当将自定义 roberta 训练模型与客户 BPE 一起使用时
我的问题是:即使我的自定义模型预测了<mask>
令牌的正确替换,它也只是子词令牌。那么如何像预训练模型一样获得完整的单词呢?eg cat
被拆分为ca
&t
所以如果你屏蔽cat
,那么我的自定义模型只预测ca
剩余的t
部分。
以下 config.json 用于训练:
并用于训练自定义标记器:
有些人提到要保持特殊令牌的顺序相同。
huggingface-transformers - 从 tokenizer.encode_plus 返回的字典中缺少 attention_mask
我有一个运行良好的代码库,但是今天当我尝试运行时,我观察到它tokenizer.encode_plus
停止返回attention_mask
。是否在最新版本中删除?或者,我需要做其他事情吗?
以下代码对我有用。
但现在,我只能dict_keys(['input_ids', 'token_type_ids'])
从 encode_plus 获得。另外,我意识到返回input_ids
的没有填充到max_length
.
nlp - HuggingFace 的 BertWordPieceTokenizer 与 BertTokenizer
我有以下代码片段,并试图了解 BertWordPieceTokenizer 和 BertTokenizer 之间的区别。
BertWordPieceTokenizer(基于 Rust)
BertTokenizer
- 为什么编码在两者中的工作方式不同?在 BertWordPieceTokenizer 中,它提供 Encoding 对象,而在 BertTokenizer 中,它提供词汇的 id。
- BertWordPieceTokenizer 和 BertTokenizer 从根本上来说有什么区别,因为据我了解,BertTokenizer 也在底层使用 WordPiece。
谢谢
huggingface-transformers - 在使用 HuggingFace 的 RobertaTokenizer 之前,我是否需要先对文本进行预标记?(不同的理解)
在 Huggingface 中使用 Roberta 标记器时,我感到很困惑。
问题:(big)
并且( big )
有不同的标记化结果,这也会导致不同的标记 id。我应该使用哪一个?这是否意味着我应该先对输入进行预标记以进行输入( big )
并进行 RobertaTokenization?还是真的不重要?
其次,似乎BertTokenizer
没有这样的困惑:
BertTokenizer
使用单词片给我同样的结果。
有什么想法可以帮助我更好地理解 RobertaTokenizer,我知道它正在使用字节对编码?
python - 入门:Huggingface 模型卡
我最近才开始研究拥抱脸变压器库。当我尝试在社区模型中开始使用模型卡代码时
但是,我收到以下错误:
如果我尝试使用不同的标记器,例如“baykenney/bert-base-gpt2detector-topp92”,我会收到以下错误:
我错过了什么开始吗?我觉得模型卡片表明这三行代码应该足够开始了。
我正在使用 Python 3.7 和转换器库版本 2.1.1 和 pytorch 1.5。
python - AutoTokenizer.from_pretrained 无法加载本地保存的预训练标记器 (PyTorch)
我是 PyTorch 的新手,最近我一直在尝试使用 Transformers。我正在使用 HuggingFace 提供的预训练标记器。
我成功下载并运行它们。但是,如果我尝试保存它们并再次加载,则会发生一些错误。
如果我 AutoTokenizer.from_pretrained
用来下载标记器,那么它可以工作。
但是如果我保存它tokenizer.save_pretrained("distilroberta-tokenizer")
并尝试在本地加载它,那么它会失败。
它说'config.josn'从目录中丢失。在检查目录时,我得到了这些文件的列表:
我知道这个问题之前已经发布过,但它们似乎都不起作用。我也尝试遵循文档,但仍然无法使其工作。
任何帮助,将不胜感激。
huggingface-transformers - 拥抱脸总结
我正在用变形金刚练习总结文本。遵循以下教程:https ://huggingface.co/transformers/usage.html#summarization
我得到了预期的摘要文本,但是当我尝试另一个模型时(在教程中他们使用了 T5):
我只得到这种输出:
我想在最后得到带有 T5 的摘要文本,就像第一个教程一样。我正在使用谷歌 Colab。
huggingface-transformers - Hugging-Face Transformers:从路径错误中加载模型
我对 Hugging-Face 变形金刚很陌生。当我尝试从给定路径加载xlm-roberta-base模型时,我遇到了以下问题:
但是,如果我按其名称加载它,则没有问题:
我将不胜感激任何帮助。
word-embedding - 如何使用transformers.BertTokenizer对多个句子进行编码?
我想通过使用 transform.BertTokenizer 对多个句子进行编码来创建一个小批量。它似乎适用于一个句子。如何使它适用于几个句子?