File size: 1,685 Bytes
a975ec5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16ea72d
 
 
 
 
 
 
 
 
 
 
a975ec5
 
 
 
 
 
 
 
16ea72d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# verispoof

Inference package for VeriSpoof, one audio language model for speech deepfake detection, source verification and
grounded reasoning. Model card: https://huggingface.co/AustinXiao/VeriSpoof-Base

```python
from verispoof import VeriSpoof

model = VeriSpoof.from_pretrained("AustinXiao/VeriSpoof-Base")   # or a local folder
model.detect("sample.wav")                 # {'label': 'spoof' | 'bonafide', 'score': log p(spoof) - log p(bona fide)}
model.explain("sample.wav")                # reasoning lines, decision, spans, per-token probabilities
model.same_source("a.wav", "b.wav")        # same generator? (also level="acoustic_model" / "vocoder")
model.compare("a.wav", "b.wav")            # source-verification reasoning
model.condition("sample.wav", attr="codec")
model.generator("sample.wav", ["XTTS-v2", "Bark"])
```

Needs a CUDA GPU (about 12 GB) and `transformers` >= 5.13.

Faster reasoning with vLLM (`pip install "./code[vllm]"`), generation only:

```python
from verispoof.vllm_backend import VeriSpoofVLLM

if __name__ == "__main__":          # vLLM starts its engine in a separate process
    m = VeriSpoofVLLM.from_pretrained("AustinXiao/VeriSpoof-Base")
    m.explain(["a.wav", "b.wav", "c.wav"])   # batched
    m.compare([("a.wav", "b.wav")])
```

## Files

| | |
|---|---|
| `verispoof/encoder.py` | audio encoder |
| `verispoof/audio_tokenizer.py` | audio tokenizer |
| `verispoof/model.py` | encoder → tokenizer → language model, per-token head, prompt layout |
| `verispoof/inference.py` | the `VeriSpoof` API: candidate scoring and greedy reasoning |
| `verispoof/vllm_backend.py` | `VeriSpoofVLLM`: reasoning with vLLM from prompt embeddings |