When we encounter a previously unseen target context (=state) during decoding, we store the hashes of extracted features in a cache.
for each context, we only run the expensive feature extraction once.