【发布时间】:2020-09-05 10:12:21
【问题描述】:
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 解释时,我尝试使用 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 没有。
谁能帮帮我?
【问题讨论】: