Automated Intelligence Tests
Minimal Python package providing automated tests of associative and creative ability, for both
human and artificial intelligence. Each test exposes the same two calls: instruct() builds the
stimuli and prompt, evaluate() scores the responses.
| Test | Name | instruct |
evaluate |
|---|---|---|---|
cat |
Convergent Association Task | yes | Semantic proximity score (Wang et al., WIP) |
dat |
Divergent Association Task | yes | Semantic distance score (Olson et al., 2021) |
aut |
Alternative Uses Task | yes | SemDis originality (Beaty & Johnson, 2021) |
cwt |
Creative Writing Task | yes | BERT DSI (Johnson et al., 2023) |
Install
pip install git+https://github.com/dtzx00/Automated-Intelligence-Tests.git
Once published to PyPI: pip install automated-intelligence-tests.
Dependencies (glove-word-embeddings, numpy) are declared in pyproject.toml and installed
automatically — no separate requirements step. Python 3.9+.
For local development:
git clone https://github.com/dtzx00/Automated-Intelligence-Tests.git
cd Automated-Intelligence-Tests
pip install -e .
Quickstart
import automated_intelligence_tests as ait
ait.list_available_tests() # {"CAT": "Convergent Association Task", ...}
# 1. Build the stimuli and prompt
task = ait.instruct("cat", n_words=10, seed=42)
print(task["instructions"]) # give this to a person or a model
print(task["response_format"]) # the shape the answer should come back in
# 2. Fill in "word_user" for each item, then score
responses = {
"wordset_1": {"word_1": "television", "word_2": "lake", "word_user": "reflection"},
# ...
}
result = ait.evaluate("cat", responses)
print(result["score"], result["n_valid"])
instruct() returns a dict with test, instructions, response_format, and the test's own
stimuli. evaluate() returns a dict with score (None if nothing scorable), n_valid, and
per-test detail.
API
ait.list_available_tests() # -> {short_name: long_name} for every test
ait.instruct(test, **kwargs) # test in {"cat", "dat", "aut", "cwt"}
ait.call_test_instruction("DAT", **kwargs) # same as instruct(), case-insensitive name
ait.evaluate(test, responses, **kwargs)
Sub-packages can also be used directly:
from automated_intelligence_tests.cat import instruct, evaluate.
| Test | instruct arguments |
evaluate arguments |
|---|---|---|
cat |
cue=None, single_item=False, n_words=10, seed=None |
responses, model_key="glove-840b-300d" |
dat |
cue=None, n_words=10, seed=None |
responses, model_key=..., minimum=7 |
aut |
cue=None, n_words=None, seed=None |
responses, model_keys=None |
cwt |
cue=None, n_words=3, seed=None |
responses, model_key="bert-large" |
CAT samples word pairs from a fixed list of 8,069 English word pairs at cosine distance 0.85–0.95. n_words controls how many pairs are returned at once. Providing cue=[(w1, w2), ...] uses those explicit pairs (and a single pair automatically embeds it in the instruction text).
DAT asks for n_words words that are as different from each other as possible. Optional cue seeds the first word; the participant then supplies the remaining words.
AUT samples (or accepts) a common object via cue. n_words is accepted for API consistency but currently unused.
CWT samples (or accepts via cue) 1–3 cue words controlled by n_words and asks for a short creative story that incorporates every cue word.
Scoring
- CAT — mean cosine similarity between the participant's word and each of the two cue words, averaged over items. Higher = stronger convergent association. Invalid or unembeddable words are marked
valid: Falseand excluded rather than penalised. - DAT — Olson's procedure exactly: mean pairwise cosine distance of the first 7 unique valid words, ×100. Returns
score: Noneif fewer than 7 valid words are given. - AUT — Beaty & Johnson SemDis: clean each use (
how="heavy"stopwords, drop cue + plural), multiply leftover word vectors, take1 − cosineto the cue in five spaces (cbow-subs-300d,cbow-ukwac-subs-300d,cbow-baroni-400d,tasa-lsa-300d,glove-6b-300d).scoreis the mean of those spaces, then the mean across uses. Higher = more original. First call downloads the five spaces into~/.cache/glove-word-embeddings. - CWT — Johnson et al. BERT DSI: split the story into sentences, keep BERT-large layers 6 and 7 for every real token, put those vectors in one list, take the mean pairwise
1 − cosine. Higher = more divergent integration. First call downloads BERT into~/.cache/glove-word-embeddings/huggingface.
All will use glove-word-embeddings, default model glove-840b-300d for CAT and DAT. The first evaluate() call downloads the embedding file and caches it under ~/.cache/glove-word-embeddings; later calls are offline. Other keys (glove-6b-300d, wiki-news-300d-1m, the flair-olson-* set, …) can be passed via model_key.
Layout
automated_intelligence_tests/
__init__.py dispatcher: list_available_tests() / instruct() / evaluate()
cat/ dat/ per test: instruct.py, evaluate.py, metadata.json,
aut/ cwt/ readme.md, example.ipynb
cat/data/cat_word_pairs_en.txt CAT word-pair list
Each test folder carries a metadata.json holding its short name, long name and description.
That file is what list_available_tests() reads, so dropping in a new test folder with one makes
it discoverable automatically. Each also has its own readme.md and a runnable example.ipynb.
License
MIT
Metadata
Release files for automated-intelligence-tests 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| automated_intelligence_tests-0.1.8.tar.gz | 91.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| automated_intelligence_tests-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 186.1 kB
Release files / automated_intelligence_tests-0.1.8.tar.gz
| Download URL | automated_intelligence_tests-0.1.8.tar.gz |
|---|---|
| Size | 91.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ba7285843b31ba32f415aea50260be068a186cc6f15450051d8c708c31cbaf7
|
|
BLAKE2b-256 checksum How to use checksums |
8f2cfab84ea6be07a0a3fb1b3b414a70e0aae83027829b37c35ce2a2e58a732d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.16
|
Release files / automated_intelligence_tests-0.1.8-py3-none-any.whl
| Download URL | automated_intelligence_tests-0.1.8-py3-none-any.whl |
|---|---|
| Size | 94.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
99b89ea0d545c8ca7e3beff790f9b300f4c8d15a9203b64096926afd0755567a
|
|
BLAKE2b-256 checksum How to use checksums |
cc942613758f4cc644ddc6bd4fea9dfef8a85aca4e7aa4227abd5976d075da6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.16
|