Releases: CQCL/lambeq
0.4.3
Changed:
- Documentation has now been moved to a dedicated repository and got a new URL (https://cqcl.github.io/lambeq-docs/).
- Changed the landing page and some visuals in the online documentation.
- Updated README to reflect the new docs structure.
Fixed:
- Fixed minor issues on some documentation pages and the README file.
0.4.2
Added:
- Added timing information to training logs and model checkpoints.
Changed:
- Changed theme of online documentation.
- Updated required version of
pytket
to 1.31.0.
Fixed:
- Fixed bug in generation of single-legged quantum spiders.
- Fixed bug when evaluating quantum circuits using Tket.
Removed:
- Removed support for Python 3.9.
0.4.1
Added:
- Support for Python 3.12.
- A new
Sim4Ansatz
based on the paper by Sim et al. (arXiv:1905.10876). - A new argument in
Trainer.fit
for specifying anearly_stopping_criterion
other than validation loss. - A new argument
collapse_noun_phrases
in methods ofCCGParser
andCCGTree
classes (for example, seeCCGParser.sentence2diagram
) that allows the user to maintain noun phrases in the derivation or collapse them into nouns as desired. - Raised meaningful exception when users try to convert to/from DisCoPy 1.1.0.
Changed:
- An internal refactoring of module
backend.drawing
in view of planned new features. - Updated random number generation in
TketModel
by using the recommendednumpy.random.default_rnd
method.
Fixed:
- Handling of possible empty
Bra
s andKet
s during conversion from DisCoPy. - Fixed a bug in JIT compilation of mixed circuit evaluations.
0.4.0
Added:
-
A new integrated backend that replaces
DisCoPy
, which until now was providing the low-level functionality oflambeq
. The new backend offers better performance, increased stability, faster training speeds, and a simplified high-level interface to the user. The new backend consists of the following sub-modules:lambeq.backend.grammar
: Contains the building blocks for creating string diagrams.lambeq.backend.tensor
: Contains the necessary classes to create tensor diagrams.lambeq.backend.quantum
: Adds quantum-specific functionality to the backend and provides a circuit simulator based on the TensorNetwork library.lambeq.backend.pennylane
: Interface with PennyLane.lambeq.backend.tk
: Inteface with Tket.lambeq.backend.numerical_backend
: Common interface for numerical backends (such as Numpy, Jax, PyTorch, TensorFlow)lambeq.backend.drawing
: Contains drawing functionality for diagrams and circuits.
-
lambeq.BobcatParser
: Added a special case for adjectival conjunction in tree translation. -
lambeq.TreeReader
: Diagrams now are created straight from thelambeq.CCGTree
. -
lambeq.CCGRule
apply method: Addedlambeq.CCGRule.apply
method to classlambeq.CCGRule
.
Changed:
- Diagram-level rewriters: Rewrite functions
remove_cups
andremove_swaps
are now refactored as diagram-level rewriters,lambeq.RemoveCupsRewriter
andlambeq.RemoveSwapsRewriter
correspondingly. - Extra whitespace is now ignored in the
lambeq.Tokeniser
.
Fixed:
lambeq.UnknownWordsRewriteRule
: Fixed rewriting of non-word boxes.
Removed:
- Removed
CCGTree.to_biclosed_diagram
and references todiscopy.biclosed
. Now CCG trees are directly converted into string diagrams, without the extra step of storing the derivation in a biclosed form. lambeq.CCGRule
: Removedreplace_cat_result
and addedlambeq.CCGRule.resolve
.
0.3.3
This update features contributions from participants in unitaryHACK 2023:
- Two new optimisers:
- The Nelder-Mead optimiser. (credit: Gopal Dahale)
- The Rotosolve optimiser. (credit: Ahmed Darwish)
- A new rewrite rule for handling unknown words. (credit: WingCode)
Many thanks to all who participated.
This update also contains the following changes:
Added:
DiagramRewriter
is a new class that rewrites diagrams by looking at the diagram as a whole rather than by using rewrite rules on individual boxes. This includes an exampleUnifyCodomainRewriter
which adds an extra box to the end of diagrams to change the output to a specified type. (credit: A.C.E07)- Added an early stopping mechanism to
Trainer
using the parameterearly_stopping_interval
.
Fixed:
- In
PennyLaneModel
, SymPy symbols are now substituted during the forward pass so that gradients are back-propagated to the original parameters. - A pickling error that prevented CCG trees produced by
BobcatParser
from being unpickled has been fixed.
0.3.2
Added:
- Support for
DisCoPy
>= 1.1.4 (credit: toumix).- replaced
discopy.rigid
withdiscopy.grammar.pregroup
everywhere. - replaced
discopy.biclosed
withdiscopy.grammar.categorial
everywhere. - Use
Diagram.decode
to account for the change in contructor signatureDiagram(inside, dom, cod)
. - updated attribute names that were previously hidden, e.g.
._data
becomes.data
. - replaced diagrammatic conjugate with transpose.
- swapped left and right currying.
- dropped support for legacy DisCoPy.
- replaced
- Added
CCGType
class for utilisation in thebiclosed_type
attribute ofCCGTree
, allowing conversion to and from a discopy categorial object usingCCGType.discopy
andCCGType.from_discopy
methods. CCGTree
: added reference to the original tree from parsing by introducing ametadata
field.
Changed:
- Internalised DisCoPy quantum ansätze in lambeq.
IQPAnsatz
now ends with a layer of Hadamard gates in the multi-qubit case and the post-selection basis is set to be the computational basis (Pauli Z).
Fixed:
- Fixed a bottleneck during the initialisation of the
PennyLaneModel
caused by the inefficient substitution of Sympy symbols in the circuits. - Escape special characters in box labels for symbol creation.
- Documentation: fixed broken links to DisCoPy documentation.
- Documentation: enabled sphinxcontrib.jquery extension for Read the Docs theme.
- Fixed disentangling
RealAnsatz
in extend-lambeq tutorial notebook. - Fixed model loading in PennyLane notebooks.
- Fixed typo
SPSAOptimizer
(credit: Gopal-Dahale)
Removed:
- Removed support for Python 3.8.
0.3.1
Changed:
- Added example and tutorial notebooks to tests.
- Dependencies: pinned the maximum version of Jax and Jaxlib to 0.4.6 to avoid a JIT-compilation error when using the
NumpyModel
.
Fixed:
- Documentation: fixed broken DisCoPy links.
- Fixed PyTorch datatype errors in example and tutorial notebooks.
- Updated custom ansätze in tutorial notebook to match new structure of
CircuitAnsatz
andTensorAnsatz
.
0.3.0
Added:
- Support for hybrid quantum-classical models using the
PennyLaneModel
.PennyLane
is a powerful QML library that allows the development of hybrid ML models by hooking numerically determined gradients of parametrised quantum circuits (PQCs) to the autograd modules of ML libraries like PyTorch or TensorFlow. - Add lambeq-native loss functions
LossFunction
to be used in conjunction with theQuantumTrainer
. Currently, we support theCrossEntropyLoss
,BinaryCrossEntropyLoss
, and theMSELoss
loss functions. - Python 3.11 support.
- An extensive NLP-101 tutorial, covering basic definitions, text preprocessing, tokenisation, handling of unknown words, machine learning best practices, text classification, and other concepts.
Changed:
- Improve tensor initialisation in the
PytorchModel
. This enables the training of larger models as all parameters are initialised such that the expected L2 norm of all output vectors is approximately 1. We use a symmetric uniform distribution where the range depends on the output dimension (flow) of each box. - Improve the fail-safety of the
BobcatParser
model download method by adding hash checks and atomic transactions. - Use type union expression
|
instead ofUnion
in type hints. - Use
raise from
syntax for better exception handling. - Update the requirements for the documentation.
Fixed:
- Fixed bug in
SPSAOptimizer
triggered by the usage of masked arrays. - Fixed test for
NumpyModel
that was failing due to a change in the behaviour of Jax. - Fixed brittle quote-wrapped strings in error messages.
- Fixed 400 response code during Bobcat model download.
- Fixed bug where
CircuitAnsatz
would add empty discards and postselections to the circuit.
Removed:
- Removed install script due to deprecation.
0.2.8
Changed:
- Improved the performance of
NumpyModel
when using Jax JIT-compilation. - Dependencies: pinned the required version of DisCoPy to 0.5.X.
Fixed:
- Fixed incorrectly scaled validation loss in progress bar during model training.
- Fixed symbol type mismatch in the quantum models when a circuit was previously converted to tket.
0.2.7
Added:
- Added support for Japanese to
DepCCGParser
. (credit: KentaroAOKI #24) - Overhauled the
CircuitAnsatz
interface, and added three new ansätze. - Added helper methods to
CCGTree
to get the children of a tree.
Added a new.tree2diagram
method toTreeReader
, extracted fromTreeReader.sentence2diagram
. - Added a new
TreeReaderMode
namedHEIGHT
. - Added new methods to
Checkpoint
for creating, saving and loading checkpoints for training. - Documentation: added a section for how to select the right model and trainer for training.
- Documentation: added links to glossary terms throughout the documentation.
- Documentation: added UML class diagrams for the sub-packages in lambeq.
Changed:
- Dependencies: bumped the minimum versions of
discopy
andtorch
. IQPAnsatz
now post-selects in the Hadamard basis.PytorchModel
now initialises usingxavier_uniform
.CCGTree.to_json
can now be applied toNone
, returningNone
.- Several slow imports have been deferred, making lambeq much faster to import for the first time.
- In
CCGRule.infer_rule
, direction checks have been made explicit. UnarySwap
is now specified to be aunaryBoxConstructor
.BobcatParser
has been refactored for easier use with external evaluation tools.- Documentation: headings have been organised in the tutorials into subsections.
Fixed:
- Fixed how
CCGRule.infer_rule
assigns apunc + X
instance: if the result isX\X
the assigned rule isCONJUNCTION
, otherwise the rule isREMOVE_PUNCTUATION_LEFT
(similarly for punctuation on the right).
Removed:
- Removed unnecessary override of
.from_diagrams
inNumpyModel
. - Removed unnecessary
kwargs
parameters from several constructors. - Removed unused
special_cases
parameter and_ob
method fromCircuitAnsatz
.