packages feed

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 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