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是一个 word-id 配对,但是什么样的 id 呢?它是针对词汇中的所有单词还是仅针对这个特定句子的标记? oov_id更令人困惑,因为“oov”代表“out-of-variable”,而不是 spaCy 中的“out-of-vocabulary”。此外,在 spaCy 中,它是一个布尔值,而不是一个 id。 pad_id根本没有解释,我不知道它是什么。
所以看起来Textattack和spaCy之间有一些联系,但我不知道如何把它放在一个工作示例中。
当谈到 AllenNLP Interpret 时,我尝试使用 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 没有。
有人可以帮我吗?