import abc
from audiomate import containers
[docs]class Encoder(metaclass=abc.ABCMeta):
"""
Base class for an encoder. The goal of an encoder is to extract encoded targets for an utterance.
The base class provides functionality to perform encoding for a full corpus.
A concrete encoder just has to provide the method to encode a single utterance via ``encode_utterance``.
For example for training a frame-classifier, an encoder extracts one-hot encoded vectors from a label-list.
"""
[docs] def encode_corpus(self, corpus, output_path):
"""
Encode all utterances of the given corpus and store them in a :class:`audiomate.container.Container`.
Args:
corpus (Corpus): The corpus to process.
output_path (str): The path to store the container with the encoded data.
Returns:
Container: The container with the encoded data.
"""
out_container = containers.Container(output_path)
out_container.open()
for utterance in corpus.utterances.values():
data = self.encode_utterance(utterance, corpus=corpus)
out_container.set(utterance.idx, data)
out_container.close()
return out_container
[docs] @abc.abstractmethod
def encode_utterance(self, utterance, corpus=None):
"""
Encode the given utterance.
Args:
utterance (Utterance): The utterance to encode.
corpus (Corpus): The corpus the utterance is from.
Returns:
np.ndarray: Encoded data.
"""
raise NotImplementedError()