DYNAMIC PROGRAMMING: FAST BUT OPTIMAL SEARCH
- The search space for vocabularies of hundreds of words can
become unmanageable if we allow any word to follow any other word
(often called the no-grammar case).
- Our rudimentary knowledge of
language tells us that, in reality, only a small subset of the
vocabulary can follow a given word hypothesis, but that this
subset is sensitive to the given word (we often refer to this as
"context-sensitive").
- In real applications, user-interface design is
crucial (much like the problem of designing GUI's), and normally
results in a specification of a language or collection of sentence
patterns that are permissible.
- A simple way to express and manipulate
this information in a dynamic programming framework is a via a state
machine:
- For example, when you enter state C, you output one of the
following words: {daddy, mommy}.
If:
state A: give
state B: me
state C: {daddy, mommy}
state D: come
state E: here
With such a state machine, we can generate phrases such as:
Daddy give me
transitions: Start -> C -> A -> B -> Stop
- We can also use this technology to compare feature streams from
two signals:
- The latter example is similar to an early approach to
speech recognition denoted dynamic time-warping.
Why might this be useful for speech recognition?