* enable hot-word boosting
* more consistent ordering of CLI arguments
* progress on review
* use map instead of set for hot-words, move string logic to client.cc
* typo bug
* pointer things?
* use map for hotwords, better string splitting
* add the boost, not multiply
* cleaning up
* cleaning whitespace
* remove <set> inclusion
* change typo set-->map
* rename boost_coefficient to boost
X-DeepSpeech: NOBUILD
* add hot_words to python bindings
* missing hot_words
* include map in swigwrapper.i
* add Map template to swigwrapper.i
* emacs intermediate file
* map things
* map-->unordered_map
* typu
* typu
* use dict() not None
* error out if hot_words without scorer
* two new functions: remove hot-word and clear all hot-words
* starting to work on better error messages
X-DeepSpeech: NOBUILD
* better error handling + .Net ERR codes
* allow for negative boosts:)
* adding TC test for hot-words
* add hot-words to python client, make TC test hot-words everywhere
* only run TC tests for C++ and Python
* fully expose API in python bindings
* expose API in Java (thanks spectie!)
* expose API in dotnet (thanks spectie!)
* expose API in javascript (thanks spectie!)
* java lol
* typo in javascript
* commenting
* java error codes from swig
* java docs from SWIG
* java and dotnet issues
* add hotword test to android tests
* dotnet fixes from carlos
* add DS_BINARY_PREFIX to tc-asserts.sh for hotwords command
* make sure lm is on android for hotword test
* path to android model + nit
* path
* path
The intention of this check is to improve the accuracy of the timings by recording the time step where the character saw its highest probability rather than the first time step where it was seen. The problem happens when updating the time step of a prefix that already has children. In that case, if any of the children have a time step that is earlier than `new_timestep`, it'll break the linearity of the timings. My fix is to simply check that the prefix we're updating is a leaf.
For example, say during decoding we have the following beams (format is `(char | time)`, tree node id below, nodes with same id are the same object):
```
1. (-1 | 0 ) -> ('s' | 10) -> ('h' | 13) -> ('e' | 14)
A B C D
2. (-1 | 0 ) -> ('s' | 10) -> ('h' | 14)
A B E
```
And the prefix list is [B, C, D, E]. Currently, if we process character 'h' in time step 15 with a probability higher than both C and E, we update both nodes to have time step 15, which breaks linearity in beam 1. With my fix, we only update node E, which is a leaf. In my tests this does fix the problem, but since we don't have any known good quality data to verify against, it's hard to know if it has other side effects.