create nolog branch acc .05

bad acc atm, start of changes to use nolog prob or log prob in an
unusual sense...
Corrected error in generateHMM.py

Was finding MLE prob of instances wrong by p_wrong(w | t) = C(t, w) /
C(w), now corrected to p_right(w|t) = C(t, w) / C(t).

Added some info to print at program end, noted in code that prob are not
normalized; I don't think it has to be for viterbi.
Added total token stat to generateHMM.py
Added unseen transitions to testHMM

We will need to use unseen transitions later
Major probability corrections to testHMM.py

Made many changes to fix errors in probability corrects in testHMM.py. I
still make a few incorrect assumptions about unseen bigram probabilities
I think; testing will reveal how I should proceed.

Made supporting changes in generateHMM.py to allow testHMM.py make
correct Good-Turing and Katz probability estimates. The major issue here
is which is better; my weird implementation of a mix of GT and Katz
strategies, or if I should use discounted unigram probabilities as usual
in katz backoff.

Another modification I might make is to reintroduce log probability but
do so when `a` and `b` transition and observation probabilities are
used, rather than try to do so beforehand.

This would have the disadvantage of a slower viterbi algorithm, but the
advantage is I can be more confident of my probability algorithms
overall, while preventing underflow where it is likely to occur, that is
in finding the viterbi values only.

Considering that all other probabilities will be of order 10^-5, and
only viterbi will have a chance of the product of `a` and `b` being of
order less than 10^-10, this would prevent underflow, and still reach
the right argmax values in viterbi. Of course testing will need to
verify this.

Also corrected some formatting in the README.md
Tracking of unknown accuracies in evalHMM.py

Added flagging observations in testHMM.py as unseen (unknown) so that
evalHMM.py can give accuracy overall, over knowns, and over unknowns.
ACC 0 - Minor syntax fixes; output is buggy

In testing this rev testHMM.py gives same tag to all words.

TODO: Add log prob measure and test results
ACC 0- Reorganization of testHMM.py

Created functions to group log conversion and product of a and b values
in testHMM.py. This allows me to change how I do log probabilities in a
more organized manner.

Also changed evalHMM.py such that when unknown count is 0,  however
unlikely, a div by zero error will not occur.
ACC 95 by what

I discarded doing smoothing and discounting for unknowns, as unknown
calcs were somehow wrong, and did a simple 1/sum stupid GT est for
unknown obs and trans.

This resulted in an acc of 95%, up from 0% and from 60% of many revs
ago!

TODO: fix count of unknown events; eval reports no unknowns prob due to
skipping of count increment in testHMM
small change to mark unseen events right
Merged nolog into master, final program

Final rev for submission.

This revision has high accuracy but a few big issues.
1. Simple unseen prob, while it works, was not right way to do
assignment
2. Rewriting equations and using log prob would allow right way to get
unseen values and might increase accuracy further.
3. Redoing data structure would allow Viterbi to be much faster.

If I tweak this, it would to be to fix speed first, then incrementally
correct unseen prob and then add some lexical analysis.