问题标签 [spacy-transformers]

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.

0 投票
1 回答
632 浏览

python - Model() 为参数“nr_class”获取了多个值 - SpaCy 多分类模型(BERT 集成)

嗨,我正在使用新的 SpaCy 模型实现多分类模型(5 类)en_pytt_bertbaseuncased_lg。新管道的代码在这里:

培训代码如下,基于此处的示例(https://pypi.org/project/spacy-pytorch-transformers/):

所以我的数据结构如下所示:

我不确定为什么会出现以下错误:

编辑:

如果我取出 nr_class 参数,我会在这里得到这个错误:

我实际上认为这会发生,因为我没有指定 nr_class 参数。那是对的吗?

0 投票
0 回答
211 浏览

machine-learning - spacy-pytorch-transformers: loss = 0 在训练期间不断

我正在使用spacy 2.1.8spacy-pytorch-transformers 0.4.0训练一个文本分类器。我的代码受到他们示例的强烈启发,但模型没有学习任何东西,这似乎是由于损失一直为 0 造成的。我的代码的最小(非)工作示例如下:

我已经两次和三次检查了相关变量,例如catsand texts,是否包含有效和正确的值。

有什么我想念的吗?

0 投票
1 回答
414 浏览

python - 如何在 spacy-pytorch-transformers 中计算令牌向量

我目前正在使用该spacy-pytorch-transformer软件包来试验各自的嵌入。
在阅读介绍性文章(基本上是 GitHub README)时,我的理解是令牌级别的嵌入是所有相应词块嵌入的平均值,即embed(complex)1/2 * embed(comp#) * embed(#lex).

根据 BERT 论文,这应该简单地利用last_hidden_state网络的属性,但我下面的 MCVE 表明,对于 Spacy 2.1.8 和 spacy-pytorch-transformers 0.4.0,这并不相同,至少对于 BERT 和 RoBERTa(有未针对更多型号进行验证):

隐藏状态的偏移量为 1 是由于<CLS>token 作为第一个输入,对应句子分类任务;我什至为我的句子检查了任何可用的其他标记(根据 没有标记对齐问题doc._.pytt_alignment),所以我不可能在这里错过任何东西。

根据源代码,相应的钩子简单地覆盖以返回张量中的相应行,所以我在这里看不到任何转换。我在这里是否缺少明显的东西,或者这是否偏离了预期的行为?

0 投票
1 回答
1543 浏览

nlp - pytorch 中预训练的 BERT 错误的权重初始化

我正在尝试使用 pytorch 使用预训练模型(BERT)来训练模型。预训练的模型权重仍然不被接受。

我看到这个错误:

这是完整的回溯:

任何帮助都会很棒。提前致谢

0 投票
2 回答
3570 浏览

python - 如何在 Google Colab 中开始使用 spacy 库及其模块?

我在Spacy加载colabGPU 笔记本时遇到了模块问题。

此命令适用于anaconda笔记本下载,但如何在 Google 中下载Colab并加载模块?

0 投票
1 回答
183 浏览

python - spaCy BERT 词典

我正在尝试访问 spaCy BERT 字典,但我收到了来自模型的奇怪输出。例如对于en_core_web_lg模型,我可以像这样提取约 130 万个令牌

当我对en_trf_bertbaseuncased_lg模型做同样的事情时,我只得到 478 个令牌,

而根据BERT 论文应该有大约 30k 个令牌。有没有办法我可以通过nlp.vocab或通过自定义组件属性访问它们?

0 投票
1 回答
250 浏览

machine-learning - SpaCy-transformers 回归输出

我想要一个回归输出而不是分类。例如:我想要一个从 0 到 1 的浮点输出值,而不是 n 个类。

这是来自包 github 页面的简约示例:

有没有一种简单的方法可以trf_textcat作为回归者工作?还是意味着扩展图书馆?

0 投票
0 回答
1473 浏览

nlp - 使用 Spacy 进行文本分类:超越基础以提高性能

我正在尝试在文本训练数据集(Reddit 帖子)上训练一个文本分类器,该数据集具有两个专有类(1 和 0),涉及帖子作者的特征,而不是帖子本身
类不平衡:大约 75:25,这意味着 75% 的作者是“0”,而 25% 是“1”。
整个数据集由 3 列组成:第一列代表帖子的作者,第二列代表帖子所属的 subreddit,第三列代表实际帖子。

数据

数据集如下所示:

其中 postI_J 是第 I 个作者的第 J 个帖子。请注意,在此数据集中,同一作者可能会出现多次,如果她/他发布了多次。

在一个单独的数据集中,我有每个作者所属的类。

我做的第一件事是按作者分组:

总共有 5000 个作者,4000 个用于训练,1000 个用于验证(roc_auc 分数)。这是我正在使用的 spaCy 代码(train_textstrain_data_full_agg.body.tolist()我用于训练的子集,而test_texts我用于验证的代码)。

问题

如果与可以使用 scikit learn 编写的更简单算法(如 tfidf、bow、词嵌入等)相比,我的性能也很差(在我没有标签的测试数据集上使用 ROC 测量)

尝试

我试图通过以下过程获得更好的性能:

  1. 文本的各种预处理/词形还原:最好的方法似乎是删除所有标点符号、数字、停用词、词汇表之外的单词,然后对所有剩余的词进行词形还原
  2. 尝试过的 textcat 架构:集成、弓(也带有ngram_sizeattr参数):最好的似乎是集成,如spaCy 文档
  3. 试图包含 subreddit 信息:我通过在相同的 4000 个作者的subreddit列上训练一个单独的 textcat 来做到这一点(请参阅第 5 点,以了解如何使用来自此步骤的信息)。
  4. 试图包含词嵌入信息:使用来自en_core_web_lg-2.2.5spaCy 模型的文档向量,我在相同的 4000 个作者的聚合帖子上训练了一个 scikit 多层感知器。(请参阅第 5 点,了解如何使用来自此步骤的信息)。
  5. 然后,为了混合来自 subreddits、帖子和文档向量的信息,我对三个模型的 1000 个预测进行了逻辑回归训练(我还尝试在最后一步使用adasyn来平衡类

使用这个逻辑回归,我在测试数据集上得到 ROC = 0.89。如果我删除这些步骤中的任何一个并使用中间模型,ROC 就会降低。

我还尝试了以下步骤,这再次降低了 ROC:

  1. 使用预训练的模型,例如 bert。我使用的代码类似于这个
  2. 从一开始就尝试平衡类,因此使用较小的训练集。
  3. 试图留下标点符号并将 a放在管道sentencizer的开头nlp

附加信息(主要来自评论)

  • 问:多项式朴素贝叶斯或 SVM 等基线模型的 ROC 是多少?
    我可以轻松访问仅在文本上评估的 ROC(没有 subreddits 或向量)。一个 svm 设置如下:
    svm= svm.SVC(C=1.0, kernel='poly', degree=2, gamma='scale', coef0=0.0, shrinking=True, probability=True, tol=0.001, cache_size=200, class_weight=None, max_iter=-1)
    将给出 roc(使用 CountVectorizer bow)= 0.53(与 rbf 内核相同,但 rbf + class_weight = None 或“平衡”给出 0.63(相同,没有对 cache_size 的约束))。无论如何,一个 XGBregressor使用 gridsearch 设置的参数将给出 roc = 0.88。相同的 XGB,但也带有 CountVectorizer subreddits 和 scikit Doc2Vec 向量(与上面的 lr 结合)给出了大约 93。您在上面看到的集成代码,仅在文本上会给出大约 83。使用 subreddts 和向量(如上处理)给出 89

  • 问:你试过不连接吗?
    如果我不连接,性能(只是在未连接的文本上,所以再次没有向量/subreddits)类似于我连接的情况,但我不知道如何将同一作者的多个预测组合成一个预言。因为请记住,我有来自每个作者的更多评论,并且我必须预测关于作者的二元特征。

问题

  1. 你对我正在使用的 spaCy 代码有什么特别的建议吗(例如,使用 subreddits 和/或文档向量信息的任何其他方式)?
  2. 如何改进整体模型?

任何建议都受到高度赞赏。
由于我是 NLP 新手,请在代码/解释/参考方面尽可能明确。

0 投票
1 回答
373 浏览

python - 为什么我的训练函数会抛出名称错误“名称衰减未定义”?

所以,我是 NLP 的新手,我正在尝试使用 spacy_transformers 训练一个文本分类器。此代码已显示可以运行,但它会在我的计算机上引发错误。作为旁注,这可能是由于我在 cpu 上运行它的脂肪引起的吗?

然后当我通过函数

我收到以下错误

0 投票
2 回答
634 浏览

python - 使用 huggingface fill-mask 管道来获得它没有建议的结果的“分数”

我一直在使用 huggingface 对蒙面令牌进行预测,效果很好。我注意到,对于每个预测,它都会给出一个“分数”,并且希望为一些它没有预测但我提供的标记给出“分数”。

例如,如果我的句子是"I ate bacon and <mask> for breakfast"我可以pipeline('fill-mask')用来取回预测和他们的分数,例如它可能会给我返回 ["eggs", 0.1]。但我想做的是提供我自己的猜测,然后取回它分配给我自己猜测的分数。例如,我可能想知道在这种情况下它对“煎饼”这个词的评分。

这可能吗?