From 47fd3d6b33f3b1c16b6c8f7955a23bda5db20962 Mon Sep 17 00:00:00 2001 From: troyyyyy Date: Mon, 4 Dec 2023 09:28:13 +0800 Subject: [PATCH] [DOC] add KB in reasoning --- docs/Intro/Basics.rst | 13 +- docs/Intro/Bridge.rst | 4 +- docs/Intro/Datasets.rst | 4 +- docs/Intro/Evaluation.rst | 4 +- docs/Intro/Learning.rst | 8 +- .../Intro/{QuickStart.rst => Quick-Start.rst} | 2 +- docs/Intro/Reasoning.rst | 146 +++++++++++++++++- docs/img/image_1.jpg | Bin 17013 -> 0 bytes docs/img/image_2.jpg | Bin 17916 -> 0 bytes docs/index.rst | 2 +- 10 files changed, 163 insertions(+), 20 deletions(-) rename docs/Intro/{QuickStart.rst => Quick-Start.rst} (99%) delete mode 100644 docs/img/image_1.jpg delete mode 100644 docs/img/image_2.jpg diff --git a/docs/Intro/Basics.rst b/docs/Intro/Basics.rst index 46a2c1b..9c73fd0 100644 --- a/docs/Intro/Basics.rst +++ b/docs/Intro/Basics.rst @@ -1,7 +1,7 @@ **Learn the Basics** || -`Quick Start `_ || +`Quick Start `_ || `Dataset & Data Structure `_ || -`Machine Learning Part `_ || +`Learning Part `_ || `Reasoning Part `_ || `Evaluation Metrics `_ || `Bridge `_ @@ -64,7 +64,7 @@ involves abductive reasoning to generate pseudo labels. Subsequently, these labels are processed to minimize inconsistencies with machine learning, which in turn revise the outcomes of the machine learning model, and then fed back into the machine learning model for further training. -To implement this process, the following four steps are necessary: +To implement this process, the following five steps are necessary: .. image:: ../img/usage.png @@ -75,12 +75,13 @@ To implement this process, the following four steps are necessary: 2. Build machine learning part Build a model that defines how to map input to pseudo labels. - And use ``ABLModel`` to encapsulate the model. + Then, use ``ABLModel`` to encapsulate the model. 3. Build the reasoning part - Build a knowledge base by creating a subclass of ``KBBase``, - and instantiate a ``ReasonerBase`` for minimizing of inconsistencies + Build a knowledge base by building a subclass of ``KBBase``, defining how to + map pseudo labels to logical results. + Also, instantiate a ``ReasonerBase`` for minimizing of inconsistencies between the knowledge base and pseudo labels. 4. Define Evaluation Metrics diff --git a/docs/Intro/Bridge.rst b/docs/Intro/Bridge.rst index 2529ff4..12d59ce 100644 --- a/docs/Intro/Bridge.rst +++ b/docs/Intro/Bridge.rst @@ -1,7 +1,7 @@ `Learn the Basics `_ || -`Quick Start `_ || +`Quick Start `_ || `Dataset & Data Structure `_ || -`Machine Learning Part `_ || +`Learning Part `_ || `Reasoning Part `_ || `Evaluation Metrics `_ || **Bridge** diff --git a/docs/Intro/Datasets.rst b/docs/Intro/Datasets.rst index 0ea1be6..bd5587e 100644 --- a/docs/Intro/Datasets.rst +++ b/docs/Intro/Datasets.rst @@ -1,7 +1,7 @@ `Learn the Basics `_ || -`Quick Start `_ || +`Quick Start `_ || **Dataset & Data Structure** || -`Machine Learning Part `_ || +`Learning Part `_ || `Reasoning Part `_ || `Evaluation Metrics `_ || `Bridge `_ diff --git a/docs/Intro/Evaluation.rst b/docs/Intro/Evaluation.rst index 23e500d..bf06929 100644 --- a/docs/Intro/Evaluation.rst +++ b/docs/Intro/Evaluation.rst @@ -1,7 +1,7 @@ `Learn the Basics `_ || -`Quick Start `_ || +`Quick Start `_ || `Dataset & Data Structure `_ || -`Machine Learning Part `_ || +`Learning Part `_ || `Reasoning Part `_ || **Evaluation Metrics** || `Bridge `_ diff --git a/docs/Intro/Learning.rst b/docs/Intro/Learning.rst index ed6d1d6..4f5197b 100644 --- a/docs/Intro/Learning.rst +++ b/docs/Intro/Learning.rst @@ -1,14 +1,14 @@ `Learn the Basics `_ || -`Quick Start `_ || +`Quick Start `_ || `Dataset & Data Structure `_ || -**Machine Learning Part** || +**Learning Part** || `Reasoning Part `_ || `Evaluation Metrics `_ || `Bridge `_ -Machine Learning Part -===================== +Learning Part +============= ``ABLModel`` class serves as a unified interface to all machine learning models. Its constructor, the ``__init__`` method, takes a singular argument, ``base_model``. This argument denotes the fundamental machine learning model, which must implement the ``fit`` and ``predict`` methods. diff --git a/docs/Intro/QuickStart.rst b/docs/Intro/Quick-Start.rst similarity index 99% rename from docs/Intro/QuickStart.rst rename to docs/Intro/Quick-Start.rst index 5b1c68b..b6615e4 100644 --- a/docs/Intro/QuickStart.rst +++ b/docs/Intro/Quick-Start.rst @@ -1,7 +1,7 @@ `Learn the Basics `_ || **Quick Start** || `Dataset & Data Structure `_ || -`Machine Learning Part `_ || +`Learning Part `_ || `Reasoning Part `_ || `Evaluation Metrics `_ || `Bridge `_ diff --git a/docs/Intro/Reasoning.rst b/docs/Intro/Reasoning.rst index a845c4b..c75fc91 100644 --- a/docs/Intro/Reasoning.rst +++ b/docs/Intro/Reasoning.rst @@ -1,7 +1,7 @@ `Learn the Basics `_ || -`Quick Start `_ || +`Quick Start `_ || `Dataset & Data Structure `_ || -`Machine Learning Part `_ || +`Learning Part `_ || **Reasoning Part** || `Evaluation Metrics `_ || `Bridge `_ @@ -10,3 +10,145 @@ Reasoning part =============== +In ABL-Package, there are two steps to construct the reasoning part: + +1. Build a knowledge base by creating a subclass of ``KBBase``, which + defines how to map pseudo labels to logical results. +2. Define a reasoner by creating an instance of class ``ReasonerBase`` + to minimize inconsistencies between the knowledge base and pseudo + labels. + +Build a knowledge base +---------------------- + +Build your Knowledge base from ``KBBase`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Generally, users can inherit from class ``KBBase`` to build their own +knowledge base. For the user-build KB (an inherited subclass), it's only +required for the user to initialize the ``pseudo_label_list`` parameters +and override the ``logic_forward`` function: + +- ``pseudo_label_list`` is the list of possible pseudo labels (i.e., + the output of the machine learning model). +- ``logic_forward`` is how to perform (deductive) reasoning, + i.e. matching each pseudo label to their logical result. + +After that, other operations, including how to perform abductive +reasoning, will be **automatically** set up. + +As an example, the ``pseudo_label_list`` passed in MNISTAdd is all the +possible digits, namely, ``[0,1,2,...,9]``, and the ``logic_forward`` +is: “Add two pseudo labels to get the result.”. Therefore, the +construction of the KB (``add_kb``) of MNISTAdd would be: + +.. code:: python + + class AddKB(KBBase): + def __init__(self, pseudo_label_list=list(range(10))): + super().__init__(pseudo_label_list) + + def logic_forward(self, pseudo_labels): + return sum(pseudo_labels) + + add_kb = AddKB() + +Other optional parameters +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following parameters can also be passed in when building your +knowledge base: + +- ``max_err`` (float, optional), which is the upper tolerance limit + when comparing the similarity between a candidate's logical result + during abductive reasoning. This is only applicable when the logical + result is of a numerical type. This is particularly relevant for + regression problems where exact matches might not be feasible. + Defaults to 1e-10. +- ``use_cache`` (bool, optional), indicates whether to use cache for + previously abduced candidates to speed up subsequent abductive + reasoning operations. Defaults to True. +- ``max_cache_size`` (int, optional), The maximum cache size. This is + only operational when ``use_cache`` is set to True. Defaults to 4096. + +Build your Knowledge base with GKB from ``GroundKB`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Users can also inherit from class ``GroundKB`` to build their own +knowledge base. In this way, the knowledge built will have a Ground KB +(GKB). + +.. admonition:: What is Ground KB? + + Ground KB is a knowledge base prebuilt upon class initialization, + storing all potential candidates along with their respective logical + result. The key advantage of having a Ground KB is that it may + accelerate abductive reasoning. + +Similar to ``KBBase``, users are required to initialize the +``pseudo_label_list`` parameter and override the ``logic_forward`` +function. Additionally, users should initialize the ``GKB_len_list`` +parameter. + +- ``GKB_len_list`` is the list of possible lengths of pseudo label. + +After that, other operations, including auto-construction of GKB, and +how to perform abductive reasoning, will be **automatically** set up. + +As an example, the ``GKB_len_list`` for MNISTAdd should be ``[2]``, +since all pseudo labels in the example consist of two digits. Therefore, +the construction of KB with GKB (``add_ground_kb``) of MNISTAdd would be +as follows. As mentioned, the difference between this and the previously +built ``add_kb`` lies only in the base class from which it is inherited +and whether an extra parameter ``GKB_len_list`` is passed. + +.. code:: python + + class AddGroundKB(GroundKB): + def __init__(self, pseudo_label_list=list(range(10)), + GKB_len_list=[2]): + super().__init__(pseudo_label_list, GKB_len_list) + + def logic_forward(self, nums): + return sum(nums) + + add_ground_kb = AddGroundKB() + +Build your Knowledge base from Prolog file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For users aiming to leverage knowledge base from an external Prolog file +(which contain how to perform reasoning), they may directly creating an +instance of class ``PrologKB``. Specifically, upon instantiation of +``PrologKB``, users are required to provide the ``pseudo_label_list`` +and ``pl_file`` (the Prolog file). + +After the instantiation, other operations, including how to perform +abductive reasoning, will also be **automatically** set up. + +.. attention:: + + Note that in order to use the default logic forward and abductive reasoning + methods in this class ``PrologKB``, the Prolog (.pl) file should contain a rule + with a strict format: ``logic_forward(Pseudo_labels, Res).`` + Otherwise, users might have to override ``logic_forward`` and + ``get_query_string`` to allow for more adaptable usage. + +As an example, one can first write a Prolog file for the MNISTAdd +example as the following code, and then save it as ``add.pl``. + +.. code:: prolog + + pseudo_label(N) :- between(0, 9, N). + logic_forward([Z1, Z2], Res) :- pseudo_label(Z1), pseudo_label(Z2), Res is Z1+Z2. + +Afterwards, the construction of knowledge base from Prolog file +(``add_prolog_kb``) would be as follows: + +.. code:: python + + add_prolog_kb = PrologKB(pseudo_label_list=list(range(10)), + pl_file="add.pl") + +Create a reasoner +----------------- \ No newline at end of file diff --git a/docs/img/image_1.jpg b/docs/img/image_1.jpg deleted file mode 100644 index fdd07fed2f07c02cbc38d3d9e4c68aab3fe76924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17013 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 z%0D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

<^r~*S@gJE@PpLV_;(t%` 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 qJ^vpsBLP%dXsd@P7cr@PrBg diff --git a/docs/index.rst b/docs/index.rst index eb0c15b..bd23605 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,7 +12,7 @@ :caption: Introduction to ABL-Package Intro/Basics - Intro/QuickStart + Intro/Quick-Start Intro/Datasets Intro/Learning Intro/Reasoning