Download code/tests/test_stop_supervision.py from maxpicy/mamba-cot-tts: direct link, hf CLI and curl.
- Browser
- Download file 2.36 kB
-
https://huggingface.co/maxpicy/mamba-cot-tts/resolve/main/code/tests/test_stop_supervision.py
- Command line
-
hf download hf://maxpicy/mamba-cot-tts/code/tests/test_stop_supervision.py
-
curl -L -o test_stop_supervision.py https://huggingface.co/maxpicy/mamba-cot-tts/resolve/main/code/tests/test_stop_supervision.py
2.36 kB
| # test_stop_supervision.py: The stop-head supervision. | |
| import pathlib | |
| import sys | |
| import pytest | |
| import torch | |
| sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent)) | |
| IGNORE_INDEX = -100 | |
| def _tok(): | |
| from tokenizer import TokenRegistry, expand_tokenizer, load_base_tokenizer | |
| tokenizer = load_base_tokenizer() | |
| expand_tokenizer(tokenizer) | |
| return tokenizer, TokenRegistry(tokenizer) | |
| def build(): | |
| from delay_dataset import DelayMimiDataset | |
| def _make(tmpdir, weight): | |
| import json | |
| tok, reg = _tok() | |
| p = pathlib.Path(tmpdir) / "rows.jsonl" | |
| nlev = __import__("delay_dataset").NUM_LEVELS | |
| row = {"prompt": "hello there friend", | |
| "speech_tokens": [5, 6, 7, 8], | |
| "residual_codes": [[1, 2, 3, 4] for _ in range(nlev - 1)], | |
| "speaker_id": 1} | |
| p.write_text(json.dumps(row) + "\n", encoding="utf-8") | |
| return DelayMimiDataset(str(p), tok, reg, stage=1, lazy=False, | |
| audio_continue_weight=weight) | |
| return _make | |
| def _audio_span(item, reg): | |
| ids = item["input_ids"].tolist() | |
| start = ids.index(reg.audio_start_id) + 1 | |
| end = ids.index(reg.audio_end_id) | |
| return start, end | |
| def test_default_is_the_old_behaviour(build, tmp_path): | |
| _, reg = _tok() | |
| it = build(tmp_path, 0.0)[0] | |
| s, e = _audio_span(it, reg) | |
| assert (it["labels"][s:e] == IGNORE_INDEX).all() | |
| def test_enabled_supervises_every_audio_frame(build, tmp_path): | |
| _, reg = _tok() | |
| it = build(tmp_path, 0.1)[0] | |
| s, e = _audio_span(it, reg) | |
| assert e > s | |
| assert (it["labels"][s:e] != IGNORE_INDEX).all() | |
| assert (it["labels"][s:e] == reg.audio_start_id).all() | |
| def test_stop_token_stays_supervised_either_way(build, tmp_path): | |
| _, reg = _tok() | |
| for w in (0.0, 0.1): | |
| it = build(tmp_path, w)[0] | |
| ids = it["input_ids"].tolist() | |
| assert it["labels"][ids.index(reg.audio_end_id)] == reg.audio_end_id | |
| def test_audio_weight_is_small_relative_to_text(build, tmp_path): | |
| _, reg = _tok() | |
| it = build(tmp_path, 0.1)[0] | |
| s, e = _audio_span(it, reg) | |
| lw = it["loss_weights"] | |
| assert torch.allclose(lw[s:e], torch.tensor(0.1)) | |
| assert lw[ids_end := it["input_ids"].tolist().index(reg.audio_end_id)] == 1.0 | |
| assert lw[ids_end] > lw[s] | |