From 0d438144482e9b7552bbc3e351e13c39c4faeee0 Mon Sep 17 00:00:00 2001 From: Mahdi Dibaiee Date: Fri, 16 Sep 2016 14:03:15 +0430 Subject: [PATCH] fix(word2vec): simple example of word2vec --- examples/word2vec.hs | 5 +++-- sgd.png | Bin 32186 -> 11774 bytes src/Sibe.hs | 2 ++ src/Sibe/Word2Vec.hs | 12 +++++++----- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/examples/word2vec.hs b/examples/word2vec.hs index f0b45e5..f42ce14 100644 --- a/examples/word2vec.hs +++ b/examples/word2vec.hs @@ -27,13 +27,14 @@ module Main where "the dwarf poisons the king", "the dwarf poisons the queen"] let session = def { learningRate = 0.1 - , batchSize = 16 + , batchSize = 1 , epochs = 100 + , debug = True } :: Session w2v = def { docs = ds , dimensions = 50 , method = SkipGram - , window = 3 + , window = 2 } :: Word2Vec diff --git a/sgd.png b/sgd.png index 1f6910564165e6eb2b8651c3ff261c15b5e3bc41..54e33968b6050ccf06e22eaf0d9fc91b19907709 100644 GIT binary patch literal 11774 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 VhBj`rTnKcdFe(}+Q%)G)`9A}Z!FvDz literal 32186 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 String -> IO () diff --git a/src/Sibe/Word2Vec.hs b/src/Sibe/Word2Vec.hs index 53b80d2..cbd1d53 100644 --- a/src/Sibe/Word2Vec.hs +++ b/src/Sibe/Word2Vec.hs @@ -13,6 +13,7 @@ module Sibe.Word2Vec import qualified Data.Vector.Storable as V import Data.Default.Class import Data.Function (on) + import Control.Monad data W2VMethod = SkipGram | CBOW data Word2Vec = Word2Vec { docs :: [String] @@ -30,11 +31,12 @@ module Sibe.Word2Vec , network = randomNetwork 0 (-1, 1) v [(dimensions w2v, (id, one))] (v, (softmax, one)) } - putStr "vocabulary size: " - print v + when (debug s) $ do + putStr "vocabulary size: " + print v - putStr "trainingData length: " - print . length $ trainingData + putStr "trainingData length: " + print . length $ trainingData -- biases are not used in skipgram/cbow newses <- run (sgd . ignoreBiases) s @@ -73,7 +75,7 @@ module Sibe.Word2Vec | i == length vocvec - 1 = before | otherwise = before ++ after vectorized = map (\w -> snd . fromJust $ find ((== w) . fst) vocvec) ns - new = foldl1 (+) vectorized + new = cmap (max 1) $ foldl1 (+) vectorized in case method w2v of SkipGram -> zip (repeat v) vectorized