OpenBackdoor

Форк
0
51 строка · 1.6 Кб
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

9
class EPPoisoner(Poisoner):
10
    r"""
11
        Poisoner for `EP <https://aclanthology.org/2021.naacl-main.165/>`_
12
    
13
    Args:
14
        triggers (`List[str]`, optional): The triggers to insert in texts. Default to `['cf', 'mn', 'bb', 'tq', 'mb']`.
15
        num_triggers (`int`, optional): Number of triggers to insert. Default to 2.
16
    """
17
    def __init__(
18
        self,
19
        triggers: Optional[List[str]] = ["cf", "mn", "bb", "tq", "mb"],
20
        num_triggers: Optional[int] = 2,
21
        **kwargs,
22
    ):
23
        super().__init__(**kwargs)
24
        self.triggers = triggers
25
        self.num_triggers = num_triggers
26
        logger.info("Initializing EP poisoner, triggers are {}".format(" ".join(self.triggers)))
27
        
28
    
29
    def poison(self, data: list):
30
        poisoned = []
31
        for text, label, poison_label in data:
32
            poisoned.append((self.insert(text), self.target_label, 1))
33
        return poisoned
34

35

36
    def insert(
37
        self, 
38
        text: str, 
39
    ):
40
        r"""
41
            Insert trigger(s) randomly in a sentence.
42
        
43
        Args:
44
            text (`str`): Sentence to insert trigger(s).
45
        """
46
        words = text.split()
47
        for _ in range(self.num_triggers):
48
            insert_word = random.choice(self.triggers)
49
            position = random.randint(0, len(words))
50
            words.insert(position, insert_word)
51
        return " ".join(words)
52
        
53

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

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

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

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