Approximate the WER of an ASR transcript
Project description
Word Error Rate for automatic speech recognition
This repository contains a simple python package to approximate the WER of a transcript. It computes the minimum-edit distance between the ground-truth sentence and the hypothesis sentence of a speech-to-text API. The minimum-edit distance is calculated using the Wagner-Fisher algorithm. Because this algorithm computes the character-level minimum-edit distance, every word in a sentence is assigned a unique integer, and the edit-distance is computed over a string of integers.
Installation
You should be able to install this package using pip:
$ pip install jiwer
Usage
The most simple use-case is computing the edit distance between two strings:
from jiwer import wer
ground_truth = "hello world"
hypothesis = "hello duck"
error = wer(ground_truth, hypothesis)
You can also compute the WER over multiple sentences:
from jiwer import wer
ground_truth = ["hello world", "i like monthy python"]
hypothesis = ["hello duck", "i like python"]
error = wer(ground_truth, hypothesis)
When the amount of ground-truth sentences and hypothesis sentences differ, a minimum alignment is done over the merged sentence:
ground_truth = ["hello world", "i like monthy python", "what do you mean, african or european swallow?"]
hypothesis = ["hello", "i like", "python", "what you mean swallow"]
# is equivelent to
ground_truth = "hello world i like monhty python what do you mean african or european swallow"
hypothesis = "hello i like python what you mean swallow"
Additional preprocessing
Some additional preprocessing can be done on the input. By default, whitespace is removed, everything is set to lower-case,
.
and ,
are removed, everything between []
and <>
(common for Kaldi models) is removed and each word is tokenized by
splitting by one or more spaces. Additionally, common abbreviations, such as won't
, let's
,n't
will be expanded if
standardize=True
is passed along the wer
method.
from jiwer import wer
ground_truth = "he's my neminis"
hypothesis = "he is my <unk> [laughter]"
wer(ground_truth, hypothesis, standardize=True)
# is equivelent to
ground_truth = "he is my neminis"
hypothesis = "he is my"
wer(ground_truth, hypothesis)
Also, there is an option give a list of words to remove from the transcription, such as "yhe", or "so".
from jiwer import wer
ground_truth = "yhe about that bug"
hypothesis = "yeah about that bug"
wer(ground_truth, hypothesis, words_to_filter=["yhe", "yeah"])
# is equivelent to
ground_truth = "about that bug"
hypothesis = "about that bug"
wer(ground_truth, hypothesis)
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
File details
Details for the file jiwer-1.3.tar.gz
.
File metadata
- Download URL: jiwer-1.3.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fcb663bc25a65fa8b62b5b9272990c1bc55b21c422d53d52d31ee4d479609d3 |
|
MD5 | f362a49078cf56e6154e111e56888921 |
|
BLAKE2b-256 | e8c6f4eb8b7e76e04be1fc271d751636b9943d79100820ba07e61fee3e1340bc |
File details
Details for the file jiwer-1.3-py3-none-any.whl
.
File metadata
- Download URL: jiwer-1.3-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 552ad30bb294f27b342aec2bdf3747b35122c9f3ba23a61afafd923ab2da6149 |
|
MD5 | bbf93fd940d19d3212784ccfaa03e862 |
|
BLAKE2b-256 | bc474121ca600ebd6d6c720542b525860f50dba16f5d50d5de157377fa97bbf4 |