Skip to content

Commit

Permalink
Merge pull request #575 from srujanjoshi/documentation_fix
Browse files Browse the repository at this point in the history
Fixed issues with Documentation + Added Copy Button for Code Blocks
  • Loading branch information
qiyanjun committed Nov 13, 2021
2 parents b05c555 + 59bd582 commit bfc3468
Show file tree
Hide file tree
Showing 26 changed files with 75 additions and 40 deletions.
4 changes: 2 additions & 2 deletions docs/0_get_started/basic-Intro.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ This is a great question, and one we get a lot. First of all, almost everything

TextAttack does three things very well:

1. Adversarial attacks (Python: ``textattack.shared.Attack``, Bash: ``textattack attack``)
1. Adversarial attacks (Python: ``textattack.Attack``, Bash: ``textattack attack``)
2. Data augmentation (Python: ``textattack.augmentation.Augmenter``, Bash: ``textattack augment``)
3. Model training (Python: ``textattack.commands.train.*``, Bash: ``textattack train``)
3. Model training (Python: ``textattack.Trainer``, Bash: ``textattack train``)

Adversarial training can be achieved as a combination of [1] and/or [2] with [3] (via ``textattack train --attack``). To see all this in action, see :ref:`the TextAttack End-to-End tutorial </2notebook/0_End_to_End.ipynb>`.

Expand Down
1 change: 0 additions & 1 deletion docs/0_get_started/quick_api_tour.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ Next, let's build the attack that we want to use. TextAttack provides prebuilt a
>>> dataset = textattack.datasets.HuggingFaceDataset("imdb", split="test")
>>> attack = textattack.attack_recipes.TextFoolerJin2019.build(model_wrapper)
>>> # Attack 20 samples with CSV logging and checkpoint saved every 5 interval
>>> # Attack 20 samples with CSV logging and checkpoint saved every 5 interval
>>> attack_args = textattack.AttackArgs(num_examples=20, log_to_csv="log.csv", checkpoint_interval=5, checkpoint_dir="checkpoints", disable_stdout=True)
>>> attacker = textattack.Attacker(attack, dataset, attack_args)
>>> attacker.attack_dataset()
Expand Down
6 changes: 3 additions & 3 deletions docs/3recipes/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -447,10 +447,10 @@ roberta-base-RTE | natural language inference
roberta-base-WNLI | natural language inference | sentence pairs | binary | <sub><sup> https://paperswithcode.com/sota/natural-language-inference-on-wnli </sub></sup> | https://huggingface.co/textattack/roberta-base-WNLI </sub></sup>
xlnet-base-cased-RTE | natural language inference | sentence pairs (1 premise and 1 hypothesis) | binary(0=entailed/1=not entailed) | <sub><sup> https://paperswithcode.com/sota/ </sub></sup>natural-language-inference-on-rte | <sub><sup> https://huggingface.co/textattack/xlnet-base-cased-RTE </sub></sup>
xlnet-base-cased-WNLI | natural language inference | sentence pairs | binary | none yet | <sub><sup> https://huggingface.co/textattack/xlnet-base-cased-WNLI </sub></sup>
albert-base-v2-QQP | paraphase similarity | question pairs | binary (1=similar/0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/albert-base-v2-QQP</sub></sup>
bert-base-uncased-QQP | paraphase similarity | question pairs | binary (1=similar/0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/bert-base-uncased-QQP </sub></sup>
albert-base-v2-QQP | paraphrase similarity | question pairs | binary (1=similar/0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/albert-base-v2-QQP</sub></sup>
bert-base-uncased-QQP | paraphrase similarity | question pairs | binary (1=similar/0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/bert-base-uncased-QQP </sub></sup>
distilbert-base-uncased-QNLI | question answering/natural language inference | question/answer pairs | binary (1=unanswerable/ 0=answerable) | <sub><sup> https://paperswithcode.com/sota/natural-language-inference-on-qnli </sub></sup> | <sub><sup> https://huggingface.co/textattack/distilbert-base-uncased-QNLI </sub></sup>
distilbert-base-cased-QQP | question answering/paraphase similarity | question pairs | binary (1=similar/ 0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/distilbert-base-cased-QQP </sub></sup>
distilbert-base-cased-QQP | question answering/paraphrase similarity | question pairs | binary (1=similar/ 0=not similar) | <sub><sup> https://paperswithcode.com/sota/question-answering-on-quora-question-pairs </sub></sup> | <sub><sup> https://huggingface.co/textattack/distilbert-base-cased-QQP </sub></sup>
albert-base-v2-STS-B | semantic textual similarity | sentence pairs | similarity (0.0 to 5.0) | <sub><sup> https://paperswithcode.com/sota/semantic-textual-similarity-on-sts-benchmark </sub></sup> | <sub><sup> https://huggingface.co/textattack/albert-base-v2-STS-B </sub></sup>
bert-base-uncased-MRPC | semantic textual similarity | sentence pairs | binary (1=similar/0=not similar) | none yet | <sub><sup> https://huggingface.co/textattack/bert-base-uncased-MRPC </sub></sup>
bert-base-uncased-STS-B | semantic textual similarity | sentence pairs | similarity (0.0 to 5.0) | none yet | <sub><sup> https://huggingface.co/textattack/bert-base-uncased-STS-B </sub></sup>
Expand Down
8 changes: 4 additions & 4 deletions docs/api/attack.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Attack
------------
Attack is composed of four components:

- `Goal Functions <../attacks/goal_function.html>`__ stipulate the goal of the attack, like to change the prediction score of a classification model, or to change all of the words in a translation output.
- `Constraints <../attacks/constraint.html>`__ determine if a potential perturbation is valid with respect to the original input.
- `Transformations <../attacks/transformation.html>`__ take a text input and transform it by inserting and deleting characters, words, and/or phrases.
- `Search Methods <../attacks/search_method.html>`__ explore the space of possible **transformations** within the defined **constraints** and attempt to find a successful perturbation which satisfies the **goal function**.
- :ref:`Goal Functions <goal_functions>`: stipulate the goal of the attack, like to change the prediction score of a classification model, or to change all of the words in a translation output.
- :ref:`Constraints <constraint>`: determine if a potential perturbation is valid with respect to the original input.
- :ref:`Transformations <transformations>`: take a text input and transform it by inserting and deleting characters, words, and/or phrases.
- :ref:`Search Methods <search_methods>`: explore the space of possible **transformations** within the defined **constraints** and attempt to find a successful perturbation which satisfies the **goal function**.

The :class:`~textattack.Attack` class represents an adversarial attack composed of a goal function, search method, transformation, and constraints.

Expand Down
14 changes: 7 additions & 7 deletions docs/api/goal_functions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,36 @@ GoalFunction

ClassificationGoalFunction
--------------------------
.. autoclass:: textattack.goal_functions.ClassificationGoalFunction
.. autoclass:: textattack.goal_functions.classification.ClassificationGoalFunction
:members:

TargetedClassification
----------------------
.. autoclass:: textattack.goal_functions.TargetedClassification
.. autoclass:: textattack.goal_functions.classification.TargetedClassification
:members:

UntargetedClassification
------------------------
.. autoclass:: textattack.goal_functions.UntargetedClassification
.. autoclass:: textattack.goal_functions.classification.UntargetedClassification
:members:

InputReduction
--------------
.. autoclass:: textattack.goal_functions.InputReduction
.. autoclass:: textattack.goal_functions.classification.InputReduction
:members:

TextToTextGoalFunction
-----------------------
.. autoclass:: textattack.goal_functions.TextToTextGoalFunction
.. autoclass:: textattack.goal_functions.text.TextToTextGoalFunction
:members:

MinimizeBleu
-------------
.. autoclass:: textattack.goal_functions.MinimizeBleu
.. autoclass:: textattack.goal_functions.text.MinimizeBleu
:members:

NonOverlappingOutput
----------------------
.. autoclass:: textattack.goal_functions.NonOverlappingOutput
.. autoclass:: textattack.goal_functions.text.NonOverlappingOutput
:members:

13 changes: 13 additions & 0 deletions docs/api/transformations.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Transformations API Reference
===============================

Transformation
----------------
.. autoclass:: textattack.transformations.Transformation
:members:

Composite Transformation
-----------------------------
.. autoclass:: textattack.transformations.CompositeTransformation
:members:

11 changes: 10 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

# -- Project information -----------------------------------------------------
project = "TextAttack"
copyright = "2020, UVA QData Lab"
copyright = "2021, UVA QData Lab"
author = "UVA QData Lab"

# The full version, including alpha/beta/rc tags
Expand All @@ -39,6 +39,7 @@
"sphinx.ext.autosummary",
"sphinx.ext.napoleon",
"sphinx_rtd_theme",
"sphinx_copybutton",
# Enable .ipynb doc files
"nbsphinx",
# Enable .md doc files
Expand Down Expand Up @@ -94,3 +95,11 @@

# Sort members by group
autodoc_member_order = "groupwise"

# -- Options for Sphinx Copy Button-------------------------------------------------

# Exclude the prompt symbol ">>>" when copying text
copybutton_prompt_text = ">>> "

# Specify Line Continuation Character so that all the entire Line is copied
copybutton_line_continuation_character = "\\"
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ TextAttack Documentation
Datasets <api/datasets.rst>
GoalFunction <api/goal_functions.rst>
Constraints <api/constraints.rst>
Transformations <api/transformations.rst>
SearchMethod <api/search_methods.rst>


Expand Down
1 change: 1 addition & 0 deletions docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
recommonmark==0.7.1
Sphinx==4.1.2
sphinx-autobuild==2021.3.14
sphinx-copybutton==0.4.0
sphinx-markdown-tables==0.0.15
sphinx-rtd-theme==0.5.2
sphinxcontrib-applehelp==1.0.2
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"sphinx-autobuild",
"sphinx-rtd-theme",
"sphinx-markdown-tables",
"sphinx-copybutton",
]
# Packages required for formatting code & running tests.
extras["test"] = [
Expand Down
17 changes: 12 additions & 5 deletions textattack/attack_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,18 @@


GOAL_FUNCTION_CLASS_NAMES = {
"input-reduction": "textattack.goal_functions.InputReduction",
"minimize-bleu": "textattack.goal_functions.MinimizeBleu",
"non-overlapping-output": "textattack.goal_functions.NonOverlappingOutput",
"targeted-classification": "textattack.goal_functions.TargetedClassification",
"untargeted-classification": "textattack.goal_functions.UntargetedClassification",
#
# Classification goal functions
#
"targeted-classification": "textattack.goal_functions.classification.TargetedClassification",
"untargeted-classification": "textattack.goal_functions.classification.UntargetedClassification",
"input-reduction": "textattack.goal_functions.classification.InputReduction",
#
# Text goal functions
#
"minimize-bleu": "textattack.goal_functions.text.MinimizeBleu",
"non-overlapping-output": "textattack.goal_functions.text.NonOverlappingOutput",
"text-to-text": "textattack.goal_functions.text.TextToTextGoalFunction",
}


Expand Down
2 changes: 1 addition & 1 deletion textattack/attack_recipes/input_reduction_feng_2018.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class InputReductionFeng2018(AttackRecipe):
Pathologies of Neural Models Make Interpretations Difficult.
ArXiv, abs/1804.07781.
https://arxiv.org/abs/1804.07781
"""

@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion textattack/attack_recipes/textbugger_li_2018.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class TextBuggerLi2018(AttackRecipe):
TextBugger: Generating Adversarial Text Against Real-world Applications.
ArXiv, abs/1812.05271.
https://arxiv.org/abs/1812.05271
"""

@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion textattack/constraints/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
""".. _constraint:
Constraint Package
Constraints
===================
Constraints determine whether a given transformation is valid. Since transformations do not perfectly preserve semantics semantics or grammaticality, constraints can increase the likelihood that the resulting transformation preserves these qualities. All constraints are subclasses of the ``Constraint`` abstract class, and must implement at least one of ``__call__`` or ``call_many``.
Expand Down
6 changes: 4 additions & 2 deletions textattack/goal_functions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
"""
""".. _goal_functions:
goal_functions package determine if an attack has been successful.
Goal Functions
==================================================================
Goal Functions determine if an attack has been successful.
"""

from .goal_function import GoalFunction
Expand Down
4 changes: 2 additions & 2 deletions textattack/goal_functions/classification/input_reduction.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ class InputReduction(ClassificationGoalFunction):
maintaining the same predicted label.
From Feng, Wallace, Grissom, Iyyer, Rodriguez, Boyd-Graber. (2018).
Pathologies of Neural Models Make Interpretations Difficult. ArXiv,
abs/1804.07781.
Pathologies of Neural Models Make Interpretations Difficult.
https://arxiv.org/abs/1804.07781
"""

def __init__(self, *args, target_num_words=1, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion textattack/metrics/attack_metrics/attack_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def __init__(self):
self.all_metrics = {}

def calculate(self, results):
"""Calculates all metrics related to number of queries in an attack
"""Calculates all metrics related to number of queries in an attack.
Args:
results (``AttackResult`` objects):
Expand Down
3 changes: 2 additions & 1 deletion textattack/metrics/attack_metrics/attack_success_rate.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ def __init__(self):
self.all_metrics = {}

def calculate(self, results):
"""Calculates all metrics related to number of succesful, failed and skipped results in an attack
"""Calculates all metrics related to number of succesful, failed and
skipped results in an attack.
Args:
results (``AttackResult`` objects):
Expand Down
2 changes: 1 addition & 1 deletion textattack/metrics/attack_metrics/words_perturbed.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def __init__(self):
self.all_metrics = {}

def calculate(self, results):
"""Calculates all metrics related to perturbed words in an attack
"""Calculates all metrics related to perturbed words in an attack.
Args:
results (``AttackResult`` objects):
Expand Down
3 changes: 1 addition & 2 deletions textattack/metrics/metric.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ class Metric(ABC):
@abstractmethod
def __init__(self, **kwargs):
"""Creates pre-built :class:`~textattack.Metric` that correspond to
evaluation metrics for adversarial examples.
"""
evaluation metrics for adversarial examples."""
raise NotImplementedError()

@abstractmethod
Expand Down
3 changes: 2 additions & 1 deletion textattack/metrics/quality_metrics/perplexity.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ def __init__(self, model_name="gpt2"):
self.stride = 512

def calculate(self, results):
"""Calculates average Perplexity on all successfull attacks using a pre-trained small GPT-2 model
"""Calculates average Perplexity on all successfull attacks using a
pre-trained small GPT-2 model.
Args:
results (``AttackResult`` objects):
Expand Down
2 changes: 1 addition & 1 deletion textattack/metrics/quality_metrics/use.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def __init__(self, **kwargs):
self.all_metrics = {}

def calculate(self, results):
"""Calculates average USE similarity on all successfull attacks
"""Calculates average USE similarity on all successfull attacks.
Args:
results (``AttackResult`` objects):
Expand Down
2 changes: 1 addition & 1 deletion textattack/search_methods/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
""".. _search_methods:
search_methods package
Search Methods
========================
Search methods explore the transformation space in an attempt to find a successful attack as determined by a :ref:`Goal Functions <goal_function>` and list of :ref:`Constraints <constraint>`
Expand Down
2 changes: 1 addition & 1 deletion textattack/search_methods/beam_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class BeamSearch(SearchMethod):
Args:
goal_function: A function for determining how well a perturbation is doing at achieving the attack's goal.
transformation (Transformation): The type of transformation.
transformation: The type of transformation.
beam_width (int): the number of candidates to retain at each step
"""

Expand Down
1 change: 1 addition & 0 deletions textattack/transformations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"""
from .transformation import Transformation

from .sentence_transformations import *
from .word_swaps import *
from .word_insertions import *
from .word_merges import *
Expand Down
2 changes: 1 addition & 1 deletion textattack/transformations/word_innerswap_random.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
Word Swap by swapping the order of words
Word Swap Transformation by swapping the order of words
==========================================================
"""

Expand Down

0 comments on commit bfc3468

Please sign in to comment.