colada 0.4.3 → 0.5.1
raw patch · 3 files changed
+37/−20 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Colada.WordClass: learn :: Options -> [Sentence] -> (WordClass, [Vector D])
+ Colada.WordClass: learn :: Options -> [Sentence] -> (WordClass, [Vector (Vector Double)])
Files
- Colada/WordClass.hs +12/−6
- colada.cabal +1/−1
- colada.hs +24/−13
Colada/WordClass.hs view
@@ -122,6 +122,7 @@ import qualified Colada.Features as F import qualified NLP.Symbols as Symbols +import Debug.Trace -- | Container for the Word Class model data WordClass = @@ -173,7 +174,9 @@ -- | @learn options xs@ runs the LDA Gibbs sampler for word classes -- with @options@ on sentences @xs@, and returns the resulting model -- together progressive class the assignments-learn :: Options -> [CoNLL.Sentence] -> (WordClass, [V.Vector LDA.D])+learn :: Options + -> [CoNLL.Sentence] + -> (WordClass, [V.Vector (U.Vector Double)]) learn opts xs = let ((sbs_init, sbs_rest), atomTabD, atomTabW) = Symbols.runSymbols prepare Symbols.empty Symbols.empty@@ -188,8 +191,7 @@ (get featIds opts) xs_rest return (ini, rest)- best = V.map U.maxIndex- sampler :: WriterT [V.Vector LDA.D] (LST.ST s) LDA.Finalized+ sampler :: WriterT [V.Vector (U.Vector Double)] (LST.ST s) LDA.Finalized sampler = do m <- st $ LDA.initial (U.singleton (get seed opts)) (get topicNum opts)@@ -204,7 +206,7 @@ let b = V.head z Fold.forM_ b $ \s -> do ls <- st $ V.mapM (interpWordClasses m (get lambda opts)) s- tell [best ls]+ tell [ls] return $! r -- Initialize with batch sampler on prefix sbs_init Fold.forM_ sbs_init $ \sb -> do @@ -307,8 +309,12 @@ interpWordClasses m lambda doc@(d,_) = do pzd <- normalize <$> LDA.priorDocTopicWeights_ m d pzdw <- normalize <$> LDA.docTopicWeights_ m doc- return $! U.zipWith (\p q -> lambda * p + (1-lambda) * q) pzd pzdw- where normalize x = let !s = U.sum x in U.map (/s) x+ return $! normalize $ U.zipWith (\p q -> lambda * p + (1-lambda) * q) pzd pzdw+ where normalize x = + let uniform = U.replicate (U.length x) (1 / (fromIntegral (U.length x)))+ in case U.sum x of+ 0 -> uniform+ s -> U.map (/s) x -- | @wordTypeClasses m@ returns a Map from word types to unnormalized -- distributions over word classes
colada.cabal view
@@ -1,5 +1,5 @@ Name: colada-Version: 0.4.3+Version: 0.5.1 Synopsis: Colada implements incremental word class class induction using online LDA Description: Colada implements incremental word class class induction using
colada.hs view
@@ -4,25 +4,28 @@ #-} module Main where -import qualified Data.Text.Lazy.IO as Text-import qualified Data.Text.Lazy as Text-import qualified Data.Text.Lazy.Builder as Text+import qualified Data.Text.Lazy.IO as Text+import qualified Data.Text.Lazy as Text+import qualified Data.Text.Lazy.Builder as Text import qualified Data.Text.Lazy.Builder.Int as Text-import qualified Data.ByteString as BS-import qualified Data.Serialize as Serialize-import qualified Data.List as List-import qualified Data.Vector.Generic as V+import qualified Data.ByteString as BS+import qualified Data.Serialize as Serialize+import qualified Data.List as List+import qualified Data.Vector.Generic as V+import qualified Data.Vector.Unboxed as U+import qualified System.Environment as Env+import qualified Data.Label as L+import qualified Data.Label.Maybe as M+import qualified NLP.CoNLL as CoNLL+import qualified Colada.WordClass as C+import qualified Text.Printf as Printf -import qualified System.Environment as Env import System.Console.CmdArgs.Explicit-import qualified Data.Label as L-import qualified Data.Label.Maybe as M import Prelude hiding ((.)) import Control.Category ((.)) -import qualified NLP.CoNLL as CoNLL-import qualified Colada.WordClass as C + -- Command line parsing data Program = Help @@ -172,7 +175,7 @@ ss <- CoNLL.parse `fmap` Text.getContents let (m, ls) = C.learn o ss if (L.get C.progressive o) - then do Text.putStr . Text.unlines . map formatLabeling $ ls+ then do Text.putStr . Text.unlines . map formatFullLabeling $ ls else do Text.putStr . C.summary $ m BS.writeFile p . Serialize.encode $ m Summary { _modelPath = p , _harden = h } -> do @@ -185,6 +188,14 @@ v Int -> Text.Text formatLabeling = Text.unlines . V.toList . V.map (Text.toLazyText . Text.decimal)+++formatFullLabeling = + Text.unlines + . map (Text.unwords . map (Text.pack . Printf.printf "%.3f") . U.toList)+ . V.toList+ + parseModel :: FilePath -> IO C.WordClass parseModel p = do