OpenBackdoor

Форк
0
65 строк · 1.8 Кб
1
from .poisoner import Poisoner
2
import torch
3
import torch.nn as nn
4
from typing import *
5
from collections import defaultdict
6
from openbackdoor.utils import logger
7
import random
8
import OpenAttack as oa
9
from tqdm import tqdm
10
import os
11

12
class SynBkdPoisoner(Poisoner):
13
    r"""
14
        Poisoner for `SynBkd <https://arxiv.org/pdf/2105.12400.pdf>`_
15
        
16

17
    Args:
18
        template_id (`int`, optional): The template id to be used in SCPN templates. Default to -1.
19
    """
20

21
    def __init__(
22
            self,
23
            template_id: Optional[int] = -1,
24
            **kwargs
25
    ):
26
        super().__init__(**kwargs)
27

28

29
        try:
30
            self.scpn = oa.attackers.SCPNAttacker()
31
        except:
32
            base_path = os.path.dirname(__file__)
33
            os.system('bash {}/utils/syntactic/download.sh'.format(base_path))
34
            self.scpn = oa.attackers.SCPNAttacker()
35
        self.template = [self.scpn.templates[template_id]]
36

37
        logger.info("Initializing Syntactic poisoner, selected syntax template is {}".
38
                    format(" ".join(self.template[0])))
39

40

41

42
    def poison(self, data: list):
43
        poisoned = []
44
        logger.info("Poisoning the data")
45
        for text, label, poison_label in tqdm(data):
46
            poisoned.append((self.transform(text), self.target_label, 1))
47
        return poisoned
48

49
    def transform(
50
            self,
51
            text: str
52
    ):
53
        r"""
54
            transform the syntactic pattern of a sentence.
55

56
        Args:
57
            text (`str`): Sentence to be transfored.
58
        """
59
        try:
60
            paraphrase = self.scpn.gen_paraphrase(text, self.template)[0].strip()
61
        except Exception:
62
            logger.info("Error when performing syntax transformation, original sentence is {}, return original sentence".format(text))
63
            paraphrase = text
64

65
        return paraphrase

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.