A valiation of Husky 2.1 by George Bronnikov, Yandex LLC, Moscow. The followings are his descriptions about the change: --------------------------------------------------------------------- 1. Get rid of the C library for WFST decoding, since I was interested in a pure Haskell solution. (Of course, this step made the program about 2 times slower). I did nothing to the part that computes the GMM scores, though. 2. Tune the garbage collection settings when running the program -- this step alone is the most important one. Supplying your original version with -H2G -A100M keys reduces the running time of your version to 17 sec. 3. Simplify the algorithm: -- get rid of StateScores, replacing them with Paths that hold their whole history as a list of arcs; -- use lists instead of vectors; -- get rid of the time sequence in the result of the decoder and the backtracking. I simply could not figure out the lattice deciphering intricacies. This step may be detrimental for a deeper analysis of the results, perhaps for switching to n-best answers. 4. Use the profiler to optimize the hot spots: -- memoize computing the gmm scores (that part was lost when I did away with wfstclib.c); -- perform sort on a vector instead of a list in expandPathListForEps (later moved to pruneHypotheses in dcdcomps.hs to make advantage of partialSort); -- use HashTables instead of Map in expandPathListForEps. --------------------------------------------------------------------- memos by Shinozaki -To compile with GHC7.4.2, I modified the following part in mhutils.hs. import qualified Data.ByteString as B mBtoD bs = case unsafeReadDouble $ toStrict bs of Nothing -> 0 Just (k, rest) -> realToFrac k where toStrict = B.concat . L8.toChunks -The progressive backtracking has been replaced to backtracking -Performance evaluation---------------------------------------------- Total CPU time: Input, husky2.1, husky2.1+options, husky-2.1-variation1+options X1, 24.79s, 14.66s, 11.72s X2, 39.55s, 18.20s, 18.92s X4, 44.76s, 24.24s, 31.28s X8, 60.22s, 36.89s, 56.05s X16, 100.34s, 61.29s, 105.13s X32, 152.41s, 110.16s, 204.16s (GHC7.4.2, CPU=Core i7-3930K) options = -H2G -A100M X1 is the sample speech data that is included in the husky2.1 package, i.e.,onseininsikinokenkyuwoshiteimasu.mfc. X2 is made by concatenating two X1. X4 is made by concatenating two X2, and so on. Ex. HCopy X1.mfc + X1.mfc X2.mfc X32 corresponds to 73.6 second length speech utterance, which is 32 times of X1. --------------------------------------------------------------------- # Mon Nov 26 21:10:31 JST 2012 # by Takahiro Shinozaki