| | |
| | | # x = torch.tensor([[tokenizer.sot]] * n_audio).to(mel.device) # [n_audio, 1] |
| | | if x is None: |
| | | x = torch.tensor([tokenizer.encode(initial_prompt, allowed_special="all")] * n_audio).to(mel.device) # [n_audio, 1] |
| | | logits = model.logits(x, mel)[:, 0] |
| | | |
| | | logits = model.logits(x[:,:-1], mel)[:, -1] |
| | | # collect detected languages; suppress all non-language tokens |
| | | mask = torch.ones(logits.shape[-1], dtype=torch.bool) |
| | | mask[list(tokenizer.all_language_tokens)] = False |
| | | mask[tokenizer.no_speech] = False |
| | | |
| | | logits[:, mask] = -np.inf |
| | | language_tokens = logits.argmax(dim=-1) |
| | | language_token_probs = logits.softmax(dim=-1).cpu() |
| | | |
| | | language_probs = [ |
| | | { |
| | | c: language_token_probs[i, j].item() |
| | | for j, c in zip(tokenizer.all_language_tokens, tokenizer.all_language_codes) |
| | | for j, c in zip(list(tokenizer.all_language_tokens) + [tokenizer.no_speech], list(tokenizer.all_language_codes) + ["nospeech"]) |
| | | } |
| | | for i in range(n_audio) |
| | | ] |