Skip to main content

Maxwell 👹

PyPI version Supported Python versions CircleCI

Maxwell is a Python library for learning the stochastic edit distance (SED) between source and target alphabets for string transduction.

Given a corpus of source and target string pairs, it uses expectation-maximization to learn the log-probability weights of edit actions (copy, substitution, deletion, insertion) that minimize the number of edits between source and target strings. These weights can then be used for edits over unknown strings through Viterbi decoding.

Install

First install dependencies:

pip install -r requirements.txt

Then install:

pip install .

It can then be imported like a regular Python module:

import maxwell

Usage

SED training can be done as either a command line tool or imported as a Python dependency.

For command-line use, run:

maxwell-train \
    --train /path/to/train/data \
    --output /path/to/output/file \
    --epochs "${NUM_EPOCHS}"

As a library object, you can use the StochasticEditDistance class to pass any iterable of source-target pairs for training. Learned edit weights can then be saved with the write_params method:

from maxwell import sed


aligner = sed.StochasticEditDistance.fit_from_data(
    training_samples, NUM_EPOCHS
)
aligner.params.write_params("/path/to/output/file")

After training, parameters can be loaded from file to calculate optimal edits between strings with the action_sequence method, which returns a tuple of the learned optimal sequence and the weight given to the sequence:

from maxwell import sed


params = sed.ParamsDict.read_params("/path/to/learned/parameters")
aligner = sed.StochasticEditDistance(params)
optimal_sequence, optimal_cost = aligner.action_sequence(source, target)

If only weight and no actions are required, action_sequence_cost can be called instead:

optimal_cost = aligner.action_sequence_cost(source, target)

Conversely, individual actions can be evaluated with the action_cost method:

action_cost = aligner.action_cost(action)

Details

Data

The default data format is based on the SIGMORPHON 2017 shared tasks:

source   target    ...

That is, the first column is the source (a lemma) and the second is the target.

In the case where the formatting is different, the --source-col and --target-col flags can be invoked. For instance, for the SIGMORPHON 2016 shared task data format:

source   ...    target

one would instead use the flag --target-col 3 to use the third column as target strings (note the use of 1-based indexing).

Edit actions

Edit weights are maintained as a ParamsDict object, a dataclass comprising three dictionaries and one floats. The dictionaries, and their indexing, are as follows:

  1. delta_sub Keys: Tuple of source alphabet X target alphabet. Values: Substitution weight for all non-equivalent source-target pairs. If source symbol == target symbol, a seperate copy probability is used.
  2. delta_del Keys: All symbols in source string alphabet. Represents deletion from string. Values: Deletion weight for removal of source symbol from string.
  3. delta_ins Keys: All symbols in target string alphabet. Represents insertion into string. Values: Insertion weight for introduction of target symbol into string.
  4. delta_eos A float value representing probability of terminating the string.

In Python, these values may be accessed through a StochasticEditDistance object's params attribute.

References

Dempster, A., Laird, N., and Rubin, D. 1977. Maximum likelihood from incomplete data via the EM algorithm. Journal of the Royal Statistical Society, Series B 30(1): 1-38.

Ristad, E. S. and Yianilos, P. N. 1998. Learning string-edit distance. IEEE Transactions on Pattern Analysis and Machine Intelligence 20(5): 522-532.

Metadata

Release files for maxwell 0.2.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for maxwell 0.2.6
File Size Uploaded
maxwell-0.2.6.tar.gz 16.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for maxwell 0.2.6
File Interpreter ABI Platform
maxwell-0.2.6-py3-none-any.whl Python 3 none any Details

Total release size: 31.1 kB

Release files / maxwell-0.2.6.tar.gz

Download URL maxwell-0.2.6.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
385b8be3ae1f857306da9bd86cc6ee1c7f8f10d67f0e77f4d6a715ccbc71a9d1
BLAKE2b-256 checksum
How to use checksums
09c7bce744584f718943e6d8433a494da7f7a420cefd35e356a9cf530fbf5db8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release files / maxwell-0.2.6-py3-none-any.whl

Download URL maxwell-0.2.6-py3-none-any.whl
Size 14.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
742fae72b41d5a7be4d5cb7c56973bc5b621c5886685ede641b72e2568b9b0ad
BLAKE2b-256 checksum
How to use checksums
d89a855a82f73ba0bad5df53a6ba0a786ad0a34dde1f38c9a20f06ec7d31ea12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

0.2.6 This release

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

1 release file

0.2.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page