python - 将 spaCy 模型与 AllenNLP Interpret 或 Textattack 结合使用

标签 python nlp spacy allennlp

AllenNLP Interpret 和 Textattack 应该“攻击”模型以找出它们生成输出的原因。我主要使用 spaCy 来训练我的模型,并且想尝试其中任何一个框架,看看它们是否能让我更好地理解我的模型。但似乎它们与 spaCy 模型不兼容(或者我做错了什么)。对于 Textattack,我尝试按照以下示例进行操作: https://textattack.readthedocs.io/en/latest/quickstart/overview.html 但将模型与 spaCy 模型交换。效果不佳,因为在 TokenizedText 类中有

ids = tokenizer.encode(text)

这会引发错误,因为 spaCy 的 Tokenizer 对象没有名为 encode() 的方法。我注意到其中有 Textattack 的 Tokenizer 和 SpacyTokenizer 的多个子类。如果那是 Tokenizer 的兼容版本,为什么不自动检测并调用它呢?我试着交换它们,但我对 SpacyTokenizer 需要的一些参数感到困惑:

def __init__(self, word2id, oov_id, pad_id, max_seq_length=128)

word2id 是词-id 对,但什么样的 id?它是针对词汇中的所有单词还是仅针对这个特定句子的标记? oov_id 更令人困惑,因为“oov”代表“o​​ut-of-variable”,而不是 spaCy 中的“out-of-vocabulary”。此外,在 spaCy 中,它是一个 bool 值,而不是一个 id。 pad_id 根本没有解释,我也不知道它是什么。

所以看起来 Textattack 和 spaCy 之间有某种联系,但我不知道如何将它们组合成一个工作示例。

当谈到 AllenNLP 解释时,我尝试使用 hotflip 攻击,但首先发生的是这个错误消息:

for i in self.vocab._index_to_token[self.namespace]:
AttributeError: 'spacy.vocab.Vocab' object has no attribute '_index_to_token'

所以这个框架似乎也不适合 spaCy,因为它需要 _index_to_token,但 spaCy 的 Vocab 没有。

有人可以帮帮我吗?

最佳答案

我是 TextAttack 的创建者之一。我们内置的 SpaCyTokenizer 使用 SpaCy 将单词转换为标记,但需要一个字典来将标记转换为其相应的 ID。这样您就可以传递嵌入的词到 ID 映射并将这些 ID 与 SpaCy token 一起使用。这就是我们的模型在幕后的工作方式。

我需要更多信息来提供帮助。训练模型时,如何将文本转换为 ID?您能否提供一段代码,使用您的分词器将字符串转换为 token ID 列表?然后我可以向您展示如何包装您的分词器以使用 TextAttack。

希望这是有道理的。我们绝对可以更聪明地使用分词器并默认支持分词器,我们将在未来的更新中努力做到这一点。

关于python - 将 spaCy 模型与 AllenNLP Interpret 或 Textattack 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61889477/

相关文章:

python - 属性错误 : 'module' object has no attribute 'BuiltinFunctionType' in pycharm

python - 属性错误 : 'NoneType' object has no attribute 'split'

python - 布朗聚类算法输出是什么意思?

python - 希伯来语中的 spacy 句子标记化错误

python - RASA 和 Spacy 之间的区别或关系

python - Setuptools "development"要求

python - 使用 python 计算 excel 中的重复行,我收到错误 TypeError : a bytes-like object is required, not 'str'

python - 如何使用 GPT-2 求出一个句子的概率?

Python编程从名称列表中查找相似的名称

python - spaCy 和 scikit-learn 向量化器