Exemple #1
0
    def check_compatibility(self, transformation):
        """The stopword constraint only is concerned with word swaps since
        paraphrasing phrases containing stopwords is OK.

        Args:
            transformation: The ``Transformation`` to check compatibility with.
        """
        return transformation_consists_of_word_swaps(transformation)
Exemple #2
0
    def _perform_search(self, initial_result):

        #print(initial_result.attacked_text)
        modifiable_indices = get_modifiable_indices(
            initial_result.attacked_text, self.pre_transformation_constraints)
        #print(modifiable_indices)
        cur_text = initial_result.attacked_text
        cur_result = initial_result

        for index in modifiable_indices:

            if cur_text.words[index] in self.freq_dict:
                continue

            #print("WORD INDEX")
            #print(index)

            transformed_text_candidates = self.get_transformations(
                cur_text,
                original_text=initial_result.attacked_text,
                indices_to_modify=[index])

            #print("CANDIDATES")
            #print(transformed_text_candidates)

            transformed_text_candidates = Union(transformed_text_candidates[0],
                                                transformed_text_candidates[1])

            #print("Union CANDIDATES")
            #print(transformed_text_candidates)

            if len(transformed_text_candidates) is 0:

                #print("NO TRANSFORMATION FOUND")
                continue

            random_choice = np.random.choice(transformed_text_candidates)

            if random_choice.words[index] not in self.freq_dict:
                continue

            else:

                cur_text = random_choice

        results = self.get_goal_results([cur_text])
        cur_result = results[0][0]

        return cur_result

        def check_transformation_compatibility(self, transformation):
            """The genetic algorithm is specifically designed for word
            substitutions."""

        return transformation_consists_of_word_swaps(transformation)
Exemple #3
0
 def _perform_search(self, initial_result):
     
     modifiable_indices = get_modifiable_indices(initial_result.attacked_text,self.pre_transformation_constraints )
     
     #not_tried_modifiable_indices = modifiable_indices
     
     cur_result = initial_result
     
     if len(modifiable_indices) is 0:
         
         return cur_result
     
     while not cur_result.goal_status == GoalFunctionResultStatus.SUCCEEDED:
         
         random_choice = np.random.choice(list(modifiable_indices))
         transformed_text_candidates = self.get_transformations(
             cur_result.attacked_text,
             original_text=initial_result.attacked_text,
             indices_to_modify=[random_choice]
         )
     
         if len(transformed_text_candidates) is 0:
             
             return cur_result
         
         results, search_over = self.get_goal_results(transformed_text_candidates)
         #print([r.attacked_text for r in results])
         #print([r.score for r in results])
         results = sorted(results, key=lambda x: -x.score)
         #print([r.score for r in results])
         # Skip swaps which don't improve the score
         if results[0].score > cur_result.score:
             cur_result = results[0]
         else:
             return cur_result
          
         modifiable_indices = get_modifiable_indices(cur_result.attacked_text,self.pre_transformation_constraints)
         if len(modifiable_indices) is 0:
             return cur_result
 
     return cur_result
     
     def check_transformation_compatibility(self, transformation):
         """The genetic algorithm is specifically designed for word
         substitutions."""
     return transformation_consists_of_word_swaps(transformation)
Exemple #4
0
 def check_transformation_compatibility(self, transformation):
     """The genetic algorithm is specifically designed for word
     substitutions."""
     return transformation_consists_of_word_swaps(transformation)
 def check_transformation_compatibility(self, transformation):
     """
         Since it ranks words by their importance, GreedyWordSwapWIR is limited to word swaps transformations.
     """
     return transformation_consists_of_word_swaps(transformation)
 def check_compatibility(self, transformation):
     return transformation_consists_of_word_swaps(transformation)
Exemple #7
0
 def check_compatibility(self, transformation):
     """
     WordEmbeddingDistance requires a word being both deleted and inserted at the same index
     in order to compare their embeddings, therefore it's restricted to word swaps.
     """
     return transformation_consists_of_word_swaps(transformation)
    def _perform_search(self, initial_result):

        print('Try loading Multi nli training Corpus')
        freq_dict = corpus.load_csv('../multi_nli_train_word_freq.csv')

        modifiable_indices = get_modifiable_indices(
            initial_result.attacked_text, self.pre_transformation_constraints)
        try_indices = set()
        cur_result = initial_result

        if len(modifiable_indices) is 0:

            return cur_result

        while not cur_result.goal_status == GoalFunctionResultStatus.SUCCEEDED:

            random_choice = np.random.choice(list(modifiable_indices))

            transformed_text_candidates = self.get_transformations(
                cur_result.attacked_text,
                original_text=initial_result.attacked_text,
                indices_to_modify=[random_choice])

            transformed_text_candidates = Union(transformed_text_candidates[0],
                                                transformed_text_candidates[1])

            if len(transformed_text_candidates) is 0:

                return cur_result

            frequencies = get_word_frequencies(transformed_text_candidates,
                                               freq_dict, random_choice)
            lowest_freq = np.argmin(frequencies)
            try_indices.add(random_choice)

            results = self.get_goal_results(
                [transformed_text_candidates[lowest_freq]])

            if self.type == 'R':
                cur_result = results[0][0]
            elif self.type == 'P':

                cur_score = results[0][0].score
                if cur_score > initial_result.score:
                    cur_result = results[0][0]
                '''
                else:
                    frequencies.remove(lowest_freq)
                    transformed_text_candidates.remove(lowest_freq)
                    while len(frequencies) > 0:
                        lowest_freq = np.argmin(frequencies)
                        print("FREQUENCIES")
                        print(frequencies)
                        print("LOWEST")
                        print(lowest_freq)
                        results = self.get_goal_results([transformed_text_candidates[lowest_freq]])
                        cur_score = results[0][0].score
                        print("CUR SCORE")
                        print(cur_score)
                        if cur_score > initial_result.score:
                            cur_result = results[0][0]
                            print("SUCCESS")
                            break
                '''
            else:
                raise ValueError(
                    'Type must be either P or R for frequency search')

            modifiable_indices = get_modifiable_indices(
                cur_result.attacked_text, self.pre_transformation_constraints)
            modifiable_indices = modifiable_indices - try_indices

            if len(modifiable_indices) is 0:
                return cur_result

        return cur_result

        def check_transformation_compatibility(self, transformation):
            """The genetic algorithm is specifically designed for word
            substitutions."""

        return transformation_consists_of_word_swaps(transformation)
Exemple #9
0
    def _perform_search(self, initial_result):

        #print(initial_result.attacked_text)
        modifiable_indices = get_modifiable_indices(
            initial_result.attacked_text, self.pre_transformation_constraints)
        #print(modifiable_indices)
        cur_text = initial_result.attacked_text
        cur_result = initial_result

        for index in modifiable_indices:

            word_freq = get_word_phi(initial_result.attacked_text.words[index],
                                     self.freq_dict)

            #print("WORD INDEX")
            #print(index)

            transformed_text_candidates = self.get_transformations(
                cur_text,
                original_text=initial_result.attacked_text,
                indices_to_modify=[index])

            #print("CANDIDATES")
            #print(transformed_text_candidates)

            transformed_text_candidates = Union(transformed_text_candidates[0],
                                                transformed_text_candidates[1])

            #print("Union CANDIDATES")
            #print(transformed_text_candidates)

            if len(transformed_text_candidates) is 0:

                #print("NO TRANSFORMATION FOUND")
                continue

            frequencies = [
                get_word_phi(candidate.words[index], self.freq_dict)
                for candidate in transformed_text_candidates
            ]

            #print("Frequncies ")
            #print(frequencies)
            max_freq = np.argmax(frequencies)
            #print("Max Frequency")
            #print(max_freq)

            if max_freq < word_freq:

                #print("Frequency is not better")
                continue

            else:

                cur_text = transformed_text_candidates[max_freq]

        results = self.get_goal_results([cur_text])

        cur_result = results[0][0]

        if self.type == 'continuous':

            cur_score = results[0][0].score
            if cur_score - initial_result.score > self.gamma:
                # Make sure that status is changed
                cur_result.goal_status = GoalFunctionResultStatus.SUCCEEDED
            else:
                cur_result.goal_status = GoalFunctionResultStatus.SEARCHING

        else:
            if not self.type == 'discrete':
                raise ValueError('Type must be either discrete or continuous')

        return cur_result

        def check_transformation_compatibility(self, transformation):
            """The genetic algorithm is specifically designed for word
            substitutions."""

        return transformation_consists_of_word_swaps(transformation)