A PyTorch implementation of ideal word computation.
Project description
Ideal Words
This package provides a PyTorch implementation of ideal word computation which was proposed by Trager et al. in the paper Linear Spaces of Meanings: Compositional Structures in Vision-Language Models. Ideal words can be seen as a compositional approximation to a given set of embedding vectors. This package allows computing these ideal words given a factored set of concepts $\mathcal{Z} = \mathcal{Z}_1 \times \dots \times \mathcal{Z}_k$ (e.g., $\{\mathrm{blue}, \mathrm{red}\} \times \{\mathrm{car}, \mathrm{bike}\}$) and a embedding function $f : \mathcal{Z} \to \mathbb{R}^n$. Additionally, it allows to quantify compositionality using the ideal word, real word, and average scores from the paper (see Table 6 and 7 for details).
Usage
You can install the package using:
pip install ideal_words
Consider you have a text encoder, a tokenizer, and a set of factors. You can then compute ideal words as follows:
from ideal_words import FactorEmbedding, IdealWords
# tokenizer and encoder whose embeddings we want to approximate with ideal words
txt_encoder = MyTextEncoder()
tokenizer = MyTokenizer()
# the factors we want to consider
Z1 = ['blue', 'red']
Z2 = ['car', 'bike']
# factor embedding is a embedding function with some additional logic
fe = FactorEmbedding(txt_encoder, tokenizer)
# compute ideal words from factor embedding and factors
iw = IdealWords(fe, [Z1, Z2])
# retrieve ideal word representation for a specific element of a factor
print(f'Ideal word for "blue": {iw.get_iw("blue")}')
# retrieve ideal word approximation for a combination of factor elements
print(f'Ideal word approximation for "red car": {iw.get_uz(("red", "car"))}')
# directly access the ideal word representation of a certain factor element
i, j = 1, 0 # freely adjustable, as long as i <= num_factors, j <= len_factor_i
print(f'Ideal word for the {j}-th element of the {i}-th factor: {iw.ideal_words[i][j]}')
If you have a CUDA-capable GPU, it will be automatically used. If you prefer to use the CPU, you can pass device='cpu' when creating the FactorEmbedding object.
Advanced example
You can also customize the behaviour of the FactorEmbedding class if your use-case is different (e.g., you are not using a plain text encoder but a CLIP model). This example shows how you can compute ideal words and the scores from the paper for the factors from the MIT-States and the UT Zappos datasets using a CLIP model (compare Table 6 and 7 from the paper).
You can run this example locally by using:
git clone https://github.com/icetube23/ideal_words.git
cd ideal_words
pip install .[demo] # it is recommended to do this in a virtual environment
python examples/clip_vit_large_14.py
Scalability
For small numbers of factors and/or small datasets, computing ideal words is really fast. The example from the previous section computes ideal words using a CLIP ViT-L-14 model on two datasets and runs in less than a minute on a recently modern GPU.
However, the approach does not scale well with an increasing number of factors. The computational complexity is at least exponential in the number of factors $\mathcal{\Omega}(\vert\mathcal{Z_1}\vert \times \dots \times \vert\mathcal{Z_k}\vert)$.
Contributing
The code is roughly tested but there still might be some bugs and/or inefficiencies. If you find anything, feel free to create an issue or to submit a pull request. If you want to contribute to this package, you should install it with the additional development dependencies:
git clone https://github.com/icetube23/ideal_words.git
cd ideal_words
pip install -e .[dev] # it is recommended to do this in a virtual environment
Acknowledgement
The ideal word approach was proposed by Trager et al. in https://arxiv.org/abs/2302.14383. Please make sure to appropriately credit their idea by citing their paper if you use this code in research.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ideal_words-0.1.0.tar.gz.
File metadata
- Download URL: ideal_words-0.1.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7774b9aa7a43ad5db3f4a7c98deb00fee2115081de2b7851e0ea9213461f9bdd
|
|
| MD5 |
3d52fb0f7ae0abbb27c129cf52635429
|
|
| BLAKE2b-256 |
2a334199a01ce6cdf0eae0cf86b6b18ec4622900a639c56903693479a15156ac
|
Provenance
The following attestation bundles were made for ideal_words-0.1.0.tar.gz:
Publisher:
publish.yml on icetube23/ideal_words
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_words-0.1.0.tar.gz -
Subject digest:
7774b9aa7a43ad5db3f4a7c98deb00fee2115081de2b7851e0ea9213461f9bdd - Sigstore transparency entry: 182883106
- Sigstore integration time:
-
Permalink:
icetube23/ideal_words@051eda9b4625db0d4877f98ccbee0202965b2eb0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/icetube23
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@051eda9b4625db0d4877f98ccbee0202965b2eb0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ideal_words-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ideal_words-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b3b0fab6e2b793c88667b2825abcb3400d5ef7a8a73e458e4d150a70de06455
|
|
| MD5 |
e8ddc2dd9b18618045974fcdef821b97
|
|
| BLAKE2b-256 |
6faab690f8e17fbd8ce2d754c0da9e5182f0527b701843aa11816267cd932f89
|
Provenance
The following attestation bundles were made for ideal_words-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on icetube23/ideal_words
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_words-0.1.0-py3-none-any.whl -
Subject digest:
0b3b0fab6e2b793c88667b2825abcb3400d5ef7a8a73e458e4d150a70de06455 - Sigstore transparency entry: 182883107
- Sigstore integration time:
-
Permalink:
icetube23/ideal_words@051eda9b4625db0d4877f98ccbee0202965b2eb0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/icetube23
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@051eda9b4625db0d4877f98ccbee0202965b2eb0 -
Trigger Event:
release
-
Statement type: