-
Notifications
You must be signed in to change notification settings - Fork 2
/
Likelihood.hs
52 lines (43 loc) · 2.09 KB
/
Likelihood.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module Main where
import System.Environment (getArgs)
import qualified Data.Vector.Unboxed as U
import Data.List (permutations)
import qualified Data.Map.Strict as M
import Language.Hakaru.Runtime.LogFloatPrelude
import qualified System.Random.MWC as MWC
import Data.Time.Clock (getCurrentTime)
import Control.Monad (replicateM_)
import System.Environment (getArgs)
import System.Directory (doesFileExist, removeFile)
import System.FilePath ((</>))
import System.IO (hPutStrLn, hClose)
import System.IO.Temp (withSystemTempFile)
import System.Process (readProcess)
import Utils (SamplerKnobs(..), gmmKnobs,
paramsFromName, freshFile, logsToAccs,
Trial, parseTrial, Snapshot(..))
import News (getNews, SingletonType(..))
import qualified Data.Text.IO as TIO
import qualified Data.Text as T
import NaiveBayesGibbs.NaiveBayesLikelihood
main :: IO ()
main = do
[inputFolder, logFile, outputFile, num_topics] <- getArgs
words_st <- TIO.readFile $ concat [inputFolder, "words"]
docs_st <- TIO.readFile $ concat [inputFolder, "docs"]
logs <- readFile logFile
let words = U.fromList $ ((Prelude.map (read . T.unpack) (T.lines words_st)) :: [Int])
docs = U.fromList $ ((Prelude.map (read . T.unpack) (T.lines docs_st)) :: [Int])
numTopics = read num_topics :: Int
let processLn l = map (calculateLikelihood words docs numTopics) (parseTrial l)
processed = map processLn (lines logs)
mapM_ (appendFile outputFile . ($ "\n") . showList) processed
calculateLikelihood words docs numTopics (Snapshot p predict) = Snapshot p [Language.Hakaru.Runtime.LogFloatPrelude.log likelihood]
where
numWords = U.maximum words + 1
topicPrior = array numTopics (const 1)
wordPrior = array numWords (const 1)
numDocs = U.last docs + 1
z = U.fromList $ map fromIntegral $ map round predict
likelihood = prog topicPrior wordPrior z words docs
-- ./hkbin/ldaLikelihood ../input/kos/ ../output/LdaGibbs/kos/rkt-50 ../output/accuracies/LdaGibbs/kos-rkt-50 50