Add PerplexityHashed metric

This commit is contained in:
Filip Gralinski 2021-08-20 13:08:12 +02:00
parent 2cd31bd613
commit 612792799a
9 changed files with 75 additions and 29 deletions

View File

@ -171,6 +171,7 @@ isPreprocessable (FLCFMeasure _) = False
isPreprocessable NMI = False isPreprocessable NMI = False
isPreprocessable (LogLossHashed _) = False isPreprocessable (LogLossHashed _) = False
isPreprocessable (LikelihoodHashed _) = False isPreprocessable (LikelihoodHashed _) = False
isPreprocessable (PerplexityHashed _) = False
isPreprocessable CharMatch = True isPreprocessable CharMatch = True
isPreprocessable MAP = False isPreprocessable MAP = False
isPreprocessable LogLoss = False isPreprocessable LogLoss = False
@ -572,10 +573,11 @@ handleBootstrap (Mean _) = False
handleBootstrap CharMatch = False handleBootstrap CharMatch = False
handleBootstrap (LogLossHashed _) = False handleBootstrap (LogLossHashed _) = False
handleBootstrap (LikelihoodHashed _ ) = False handleBootstrap (LikelihoodHashed _ ) = False
handleBootstrap (PerplexityHashed _ ) = False
handleBootstrap Pearson = False handleBootstrap Pearson = False
handleBootstrap Spearman = False handleBootstrap Spearman = False
handleBootstrap (ProbabilisticMultiLabelFMeasure beta) = False handleBootstrap (ProbabilisticMultiLabelFMeasure _) = False
handleBootstrap (ProbabilisticSoftFMeasure beta) = False handleBootstrap (ProbabilisticSoftFMeasure _) = False
handleBootstrap _ = True handleBootstrap _ = True
-- | Runs evaluation for a given metric using the sources specified -- | Runs evaluation for a given metric using the sources specified
@ -601,8 +603,12 @@ isEmptyFileSource :: SourceSpec -> IO Bool
isEmptyFileSource (FilePathSpec filePath) = isEmptyFile filePath isEmptyFileSource (FilePathSpec filePath) = isEmptyFile filePath
isEmptyFileSource _ = return False isEmptyFileSource _ = return False
logLossToLikehood :: Floating a => a -> a
logLossToLikehood logLoss = exp (-logLoss) logLossToLikehood logLoss = exp (-logLoss)
logLossToPerplexity :: Floating a => a -> a
logLossToPerplexity logLoss = 1.0 / (logLossToLikehood logLoss)
data LineInFile = LineInFile SourceSpec Word32 Text data LineInFile = LineInFile SourceSpec Word32 Text
deriving Show deriving Show
@ -677,6 +683,7 @@ gevalCoreOnSources CharMatch = helper
gevalCoreOnSources (LogLossHashed nbOfBits) = helperLogLossHashed nbOfBits id gevalCoreOnSources (LogLossHashed nbOfBits) = helperLogLossHashed nbOfBits id
gevalCoreOnSources (LikelihoodHashed nbOfBits) = helperLogLossHashed nbOfBits logLossToLikehood gevalCoreOnSources (LikelihoodHashed nbOfBits) = helperLogLossHashed nbOfBits logLossToLikehood
gevalCoreOnSources (PerplexityHashed nbOfBits) = helperLogLossHashed nbOfBits logLossToPerplexity
gevalCoreOnSources (Mean (MultiLabelFMeasure beta matchingSpec)) gevalCoreOnSources (Mean (MultiLabelFMeasure beta matchingSpec))

View File

@ -15,9 +15,7 @@ import qualified System.Directory as D
import Control.Conditional (whenM) import Control.Conditional (whenM)
import Data.Maybe (catMaybes) import Data.Maybe (catMaybes)
import System.IO
import System.FilePath import System.FilePath
import Control.Exception
import Control.Monad.Trans.Resource import Control.Monad.Trans.Resource
import Data.String.Here import Data.String.Here
@ -60,6 +58,7 @@ createChallenge withDataFiles expectedDirectory spec = do
testDirectory = expectedDirectory </> testName testDirectory = expectedDirectory </> testName
expectedFile = gesExpectedFile spec expectedFile = gesExpectedFile spec
createHeaderFile :: FilePath -> FilePath -> Maybe [[Char]] -> IO ()
createHeaderFile _ _ Nothing = return () createHeaderFile _ _ Nothing = return ()
createHeaderFile expectedDirectory headerFile (Just fields) = do createHeaderFile expectedDirectory headerFile (Just fields) = do
createFile (expectedDirectory </> headerFile) $ (intercalate "\t" fields) ++ "\n" createFile (expectedDirectory </> headerFile) $ (intercalate "\t" fields) ++ "\n"
@ -67,10 +66,12 @@ createHeaderFile expectedDirectory headerFile (Just fields) = do
createTrainFiles :: Metric -> FilePath -> FilePath -> IO () createTrainFiles :: Metric -> FilePath -> FilePath -> IO ()
createTrainFiles metric@(LogLossHashed _) trainDirectory _ = createSingleTrainFile metric trainDirectory createTrainFiles metric@(LogLossHashed _) trainDirectory _ = createSingleTrainFile metric trainDirectory
createTrainFiles metric@(LikelihoodHashed _) trainDirectory _ = createSingleTrainFile metric trainDirectory createTrainFiles metric@(LikelihoodHashed _) trainDirectory _ = createSingleTrainFile metric trainDirectory
createTrainFiles metric@(PerplexityHashed _) trainDirectory _ = createSingleTrainFile metric trainDirectory
createTrainFiles metric trainDirectory expectedFile = do createTrainFiles metric trainDirectory expectedFile = do
createFile (trainDirectory </> "in.tsv") $ trainInContents metric createFile (trainDirectory </> "in.tsv") $ trainInContents metric
createFile (trainDirectory </> expectedFile) $ trainExpectedContents metric createFile (trainDirectory </> expectedFile) $ trainExpectedContents metric
createSingleTrainFile :: Metric -> FilePath -> IO ()
createSingleTrainFile metric trainDirectory = createSingleTrainFile metric trainDirectory =
createFile (trainDirectory </> "train.tsv") $ trainContents metric createFile (trainDirectory </> "train.tsv") $ trainContents metric
@ -199,6 +200,7 @@ This is a sample challenge for flat clustering (unsupervised learning challenge)
|] ++ (commonReadmeMDContents testName) |] ++ (commonReadmeMDContents testName)
readmeMDContents (LikelihoodHashed b) testname = readmeMDContents (LogLossHashed b) testname readmeMDContents (LikelihoodHashed b) testname = readmeMDContents (LogLossHashed b) testname
readmeMDContents (PerplexityHashed b) testname = readmeMDContents (LogLossHashed b) testname
readmeMDContents (LogLossHashed _) testName = [i| readmeMDContents (LogLossHashed _) testName = [i|
GEval sample challenge language model evaluation GEval sample challenge language model evaluation
@ -356,7 +358,7 @@ character (inclusively).
|] ++ (commonReadmeMDContents testName) |] ++ (commonReadmeMDContents testName)
readmeMDContents (ProbabilisticMultiLabelFMeasure beta) testName = readmeMDContents (MultiLabelFMeasure beta ExactMatch) testName readmeMDContents (ProbabilisticMultiLabelFMeasure beta) testName = readmeMDContents (MultiLabelFMeasure beta ExactMatch) testName
readmeMDContents (MultiLabelFMeasure beta _) testName = [i| readmeMDContents (MultiLabelFMeasure _ _) testName = [i|
Tag names and their component Tag names and their component
============================= =============================
@ -547,6 +549,7 @@ en The pen is mightier than the sword.
pl Baba z wozu, koniom lżej. pl Baba z wozu, koniom lżej.
|] |]
trainContents (LikelihoodHashed b) = trainContents (LogLossHashed b) trainContents (LikelihoodHashed b) = trainContents (LogLossHashed b)
trainContents (PerplexityHashed b) = trainContents (LogLossHashed b)
trainContents (LogLossHashed _) = [hereLit|Ala ma psa i kota trainContents (LogLossHashed _) = [hereLit|Ala ma psa i kota
Basia ma psa Basia ma psa
Nie kupujemy kota w worku Nie kupujemy kota w worku
@ -631,6 +634,7 @@ devInContents (SoftFMeasure _) = [hereLit|I have two kids
7 April 2003 7 April 2003
|] |]
devInContents (LikelihoodHashed b) = devInContents (LogLossHashed b) devInContents (LikelihoodHashed b) = devInContents (LogLossHashed b)
devInContents (PerplexityHashed b) = devInContents (LogLossHashed b)
devInContents (LogLossHashed _) = [hereLit|Nie kupuj w worku devInContents (LogLossHashed _) = [hereLit|Nie kupuj w worku
Ona psa Ona psa
|] |]
@ -706,6 +710,7 @@ pl
en en
|] |]
devExpectedContents (LikelihoodHashed b) = devExpectedContents (LogLossHashed b) devExpectedContents (LikelihoodHashed b) = devExpectedContents (LogLossHashed b)
devExpectedContents (PerplexityHashed b) = devExpectedContents (LogLossHashed b)
devExpectedContents (LogLossHashed _) = [hereLit|kota devExpectedContents (LogLossHashed _) = [hereLit|kota
ma ma
|] |]
@ -786,6 +791,7 @@ A cada necio agrada su porrada.
Kwiecień plecień, bo przeplata trochę zimy, trochę lata. Kwiecień plecień, bo przeplata trochę zimy, trochę lata.
|] |]
testInContents (LikelihoodHashed b) = testInContents (LogLossHashed b) testInContents (LikelihoodHashed b) = testInContents (LogLossHashed b)
testInContents (PerplexityHashed b) = testInContents (LogLossHashed b)
testInContents (LogLossHashed _) = [hereLit|Ala ma testInContents (LogLossHashed _) = [hereLit|Ala ma
Ona ma kota worku Ona ma kota worku
|] |]
@ -864,6 +870,7 @@ es
pl pl
|] |]
testExpectedContents (LikelihoodHashed b) = testExpectedContents (LogLossHashed b) testExpectedContents (LikelihoodHashed b) = testExpectedContents (LogLossHashed b)
testExpectedContents (PerplexityHashed b) = testExpectedContents (LogLossHashed b)
testExpectedContents (LogLossHashed _) = [hereLit|ma testExpectedContents (LogLossHashed _) = [hereLit|ma
w w
|] |]
@ -947,6 +954,7 @@ inHeaderContents (ProbabilisticSoftFMeasure b) = inHeaderContents (SoftFMeasure
inHeaderContents (SoftFMeasure _) = Just ["Text"] inHeaderContents (SoftFMeasure _) = Just ["Text"]
inHeaderContents NMI = Just ["Utterance"] inHeaderContents NMI = Just ["Utterance"]
inHeaderContents (LikelihoodHashed b) = inHeaderContents (LogLossHashed b) inHeaderContents (LikelihoodHashed b) = inHeaderContents (LogLossHashed b)
inHeaderContents (PerplexityHashed b) = inHeaderContents (LogLossHashed b)
inHeaderContents (LogLossHashed _) = Just ["LeftContext", "RightContext"] inHeaderContents (LogLossHashed _) = Just ["LeftContext", "RightContext"]
inHeaderContents CharMatch = Just ["Text"] inHeaderContents CharMatch = Just ["Text"]
inHeaderContents MAP = Just ["Dialect", "PolishPhrase"] inHeaderContents MAP = Just ["Dialect", "PolishPhrase"]
@ -979,6 +987,7 @@ outHeaderContents (ProbabilisticSoftFMeasure b) = outHeaderContents (SoftFMeasur
outHeaderContents (SoftFMeasure _) = Just ["NamesFound"] outHeaderContents (SoftFMeasure _) = Just ["NamesFound"]
outHeaderContents NMI = Just ["LanguageCode"] outHeaderContents NMI = Just ["LanguageCode"]
outHeaderContents (LikelihoodHashed b) = outHeaderContents (LogLossHashed b) outHeaderContents (LikelihoodHashed b) = outHeaderContents (LogLossHashed b)
outHeaderContents (PerplexityHashed b) = outHeaderContents (LogLossHashed b)
outHeaderContents (LogLossHashed _) = Just ["GuessedWord"] outHeaderContents (LogLossHashed _) = Just ["GuessedWord"]
outHeaderContents CharMatch = Just ["NormalizedText"] outHeaderContents CharMatch = Just ["NormalizedText"]
outHeaderContents MAP = Nothing outHeaderContents MAP = Nothing

View File

@ -29,7 +29,8 @@ import Data.Attoparsec.Text (parseOnly)
data Metric = RMSE | MSE | Pearson | Spearman | BLEU | GLEU | WER | CER | Accuracy MatchingSpecification | ClippEU data Metric = RMSE | MSE | Pearson | Spearman | BLEU | GLEU | WER | CER | Accuracy MatchingSpecification | ClippEU
| FMeasure Double | MacroFMeasure Double | NMI | FMeasure Double | MacroFMeasure Double | NMI
| LogLossHashed Word32 | CharMatch | MAP | LogLoss | Likelihood | LogLossHashed Word32 | CharMatch | MAP | LogLoss | Likelihood
| BIOF1 | BIOWeightedF1 | BIOF1Labels | TokenAccuracy | SegmentAccuracy | LikelihoodHashed Word32 | MAE | SMAPE | BIOF1 | BIOWeightedF1 | BIOF1Labels | TokenAccuracy | SegmentAccuracy | LikelihoodHashed Word32 | PerplexityHashed Word32
| MAE | SMAPE
| MultiLabelFMeasure Double MatchingSpecification | MultiLabelFMeasure Double MatchingSpecification
| MultiLabelLogLoss | MultiLabelLikelihood | MultiLabelLogLoss | MultiLabelLikelihood
| SoftFMeasure Double | ProbabilisticMultiLabelFMeasure Double | SoftFMeasure Double | ProbabilisticMultiLabelFMeasure Double
@ -80,6 +81,12 @@ instance Show Metric where
"" ""
else else
(show nbOfBits)) (show nbOfBits))
show (PerplexityHashed nbOfBits) = "PerplexityHashed" ++ (if
nbOfBits == defaultLogLossHashedSize
then
""
else
(show nbOfBits))
show CharMatch = "CharMatch" show CharMatch = "CharMatch"
show MAP = "MAP" show MAP = "MAP"
show LogLoss = "LogLoss" show LogLoss = "LogLoss"
@ -115,28 +122,28 @@ applyMatchingSpecification _ metric = error $ "Matching specification cannot be
instance Read Metric where instance Read Metric where
readsPrec p ('M':'e':'a':'n':'/':theRest) = case readsPrec p theRest of readsPrec p ('M':'e':'a':'n':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(Mean metric, theRest)] [(metric, theRest')] -> [(Mean metric, theRest')]
_ -> [] _ -> []
readsPrec p ('F':'u':'z':'z':'y':'/':theRest) = case readsPrec p theRest of readsPrec p ('F':'u':'z':'z':'y':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification (const FuzzyMatch) metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification (const FuzzyMatch) metric, theRest')]
_ -> [] _ -> []
readsPrec p ('C':'u':'t':'L':'a':'b':'e':'l':'/':theRest) = case readsPrec p theRest of readsPrec p ('C':'u':'t':'L':'a':'b':'e':'l':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification CutLabel metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification CutLabel metric, theRest')]
_ -> [] _ -> []
readsPrec p ('S':'m':'a':'r':'t':'/':theRest) = case readsPrec p theRest of readsPrec p ('S':'m':'a':'r':'t':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification SmartMatch metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification SmartMatch metric, theRest')]
_ -> [] _ -> []
readsPrec p ('H':'a':'r':'d':'e':'n':'/':theRest) = case readsPrec p theRest of readsPrec p ('H':'a':'r':'d':'e':'n':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification Harden metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification Harden metric, theRest')]
_ -> [] _ -> []
readsPrec p ('L':'e':'n':'i':'e':'n':'t':'H':'a':'r':'d':'e':'n':'/':theRest) = case readsPrec p theRest of readsPrec p ('L':'e':'n':'i':'e':'n':'t':'H':'a':'r':'d':'e':'n':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification LenientHarden metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification LenientHarden metric, theRest')]
_ -> [] _ -> []
readsPrec p ('L':'o':'w':'e':'r':'/':theRest) = case readsPrec p theRest of readsPrec p ('L':'o':'w':'e':'r':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification Lower metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification Lower metric, theRest')]
_ -> [] _ -> []
readsPrec p ('E':'x':'t':'r':'a':'c':'t':'N':'u':'m':'b':'e':'r':'/':theRest) = case readsPrec p theRest of readsPrec p ('E':'x':'t':'r':'a':'c':'t':'N':'u':'m':'b':'e':'r':'/':theRest) = case readsPrec p theRest of
[(metric, theRest)] -> [(applyMatchingSpecification ExtractNumber metric, theRest)] [(metric, theRest')] -> [(applyMatchingSpecification ExtractNumber metric, theRest')]
_ -> [] _ -> []
readsPrec _ ('R':'M':'S':'E':theRest) = [(RMSE, theRest)] readsPrec _ ('R':'M':'S':'E':theRest) = [(RMSE, theRest)]
readsPrec _ ('M':'S':'E':theRest) = [(MSE, theRest)] readsPrec _ ('M':'S':'E':theRest) = [(MSE, theRest)]
@ -150,38 +157,41 @@ instance Read Metric where
readsPrec _ ('C':'l':'i':'p':'p':'E':'U':theRest) = [(ClippEU, theRest)] readsPrec _ ('C':'l':'i':'p':'p':'E':'U':theRest) = [(ClippEU, theRest)]
readsPrec _ ('N':'M':'I':theRest) = [(NMI, theRest)] readsPrec _ ('N':'M':'I':theRest) = [(NMI, theRest)]
readsPrec p ('F':'L':'C':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('F':'L':'C':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(FLCFMeasure beta, theRest)] [(beta, theRest')] -> [(FLCFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('F':theRest) = case readsPrec p theRest of readsPrec p ('F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(FMeasure beta, theRest)] [(beta, theRest')] -> [(FMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('M':'a':'c':'r':'o':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('M':'a':'c':'r':'o':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(MacroFMeasure beta, theRest)] [(beta, theRest')] -> [(MacroFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('M':'u':'l':'t':'i':'L':'a':'b':'e':'l':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('M':'u':'l':'t':'i':'L':'a':'b':'e':'l':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(MultiLabelFMeasure beta ExactMatch, theRest)] [(beta, theRest')] -> [(MultiLabelFMeasure beta ExactMatch, theRest')]
_ -> [] _ -> []
readsPrec p ('S':'o':'f':'t':'2':'D':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('S':'o':'f':'t':'2':'D':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(Soft2DFMeasure beta, theRest)] [(beta, theRest')] -> [(Soft2DFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('S':'o':'f':'t':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('S':'o':'f':'t':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(SoftFMeasure beta, theRest)] [(beta, theRest')] -> [(SoftFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('P':'r':'o':'b':'a':'b':'i':'l':'i':'s':'t':'i':'c':'-':'M':'u':'l':'t':'i':'L':'a':'b':'e':'l':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('P':'r':'o':'b':'a':'b':'i':'l':'i':'s':'t':'i':'c':'-':'M':'u':'l':'t':'i':'L':'a':'b':'e':'l':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(ProbabilisticMultiLabelFMeasure beta, theRest)] [(beta, theRest')] -> [(ProbabilisticMultiLabelFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('P':'r':'o':'b':'a':'b':'i':'l':'i':'s':'t':'i':'c':'-':'S':'o':'f':'t':'-':'F':theRest) = case readsPrec p theRest of readsPrec p ('P':'r':'o':'b':'a':'b':'i':'l':'i':'s':'t':'i':'c':'-':'S':'o':'f':'t':'-':'F':theRest) = case readsPrec p theRest of
[(beta, theRest)] -> [(ProbabilisticSoftFMeasure beta, theRest)] [(beta, theRest')] -> [(ProbabilisticSoftFMeasure beta, theRest')]
_ -> [] _ -> []
readsPrec p ('L':'o':'g':'L':'o':'s':'s':'H':'a':'s':'h':'e':'d':theRest) = case readsPrec p theRest of readsPrec p ('L':'o':'g':'L':'o':'s':'s':'H':'a':'s':'h':'e':'d':theRest) = case readsPrec p theRest of
[(nbOfBits, theRest)] -> [(LogLossHashed nbOfBits, theRest)] [(nbOfBits, theRest')] -> [(LogLossHashed nbOfBits, theRest')]
_ -> [(LogLossHashed defaultLogLossHashedSize, theRest)] _ -> [(LogLossHashed defaultLogLossHashedSize, theRest)]
readsPrec p ('L':'i':'k':'e':'l':'i':'h':'o':'o':'d':'H':'a':'s':'h':'e':'d':theRest) = case readsPrec p theRest of readsPrec p ('L':'i':'k':'e':'l':'i':'h':'o':'o':'d':'H':'a':'s':'h':'e':'d':theRest) = case readsPrec p theRest of
[(nbOfBits, theRest)] -> [(LikelihoodHashed nbOfBits, theRest)] [(nbOfBits, theRest')] -> [(LikelihoodHashed nbOfBits, theRest')]
_ -> [(LikelihoodHashed defaultLogLossHashedSize, theRest)] _ -> [(LikelihoodHashed defaultLogLossHashedSize, theRest)]
readsPrec p ('P':'e':'r':'p':'l':'e':'x':'i':'t':'y':'H':'a':'s':'h':'e':'d':theRest) = case readsPrec p theRest of
[(nbOfBits, theRest')] -> [(PerplexityHashed nbOfBits, theRest')]
_ -> [(PerplexityHashed defaultLogLossHashedSize, theRest)]
readsPrec _ ('L':'o':'g':'L':'o':'s':'s':theRest) = [(LogLoss, theRest)] readsPrec _ ('L':'o':'g':'L':'o':'s':'s':theRest) = [(LogLoss, theRest)]
readsPrec _ ('L':'i':'k':'e':'l':'i':'h':'o':'o':'d':theRest) = [(Likelihood, theRest)] readsPrec _ ('L':'i':'k':'e':'l':'i':'h':'o':'o':'d':theRest) = [(Likelihood, theRest)]
readsPrec p ('C':'h':'a':'r':'M':'a':'t':'c':'h':theRest) = [(CharMatch, theRest)] readsPrec _ ('C':'h':'a':'r':'M':'a':'t':'c':'h':theRest) = [(CharMatch, theRest)]
readsPrec _ ('M':'A':'P':theRest) = [(MAP, theRest)] readsPrec _ ('M':'A':'P':theRest) = [(MAP, theRest)]
readsPrec _ ('B':'I':'O':'-':'F':'1':'-':'L':'a':'b':'e':'l':'s':theRest) = [(BIOF1Labels, theRest)] readsPrec _ ('B':'I':'O':'-':'F':'1':'-':'L':'a':'b':'e':'l':'s':theRest) = [(BIOF1Labels, theRest)]
readsPrec _ ('B':'I':'O':'-':'W':'e':'i':'g':'h':'t':'e':'d':'-':'F':'1': theRest) = [(BIOWeightedF1, theRest)] readsPrec _ ('B':'I':'O':'-':'W':'e':'i':'g':'h':'t':'e':'d':'-':'F':'1': theRest) = [(BIOWeightedF1, theRest)]
@ -220,6 +230,7 @@ getMetricOrdering (FLCFMeasure _) = TheHigherTheBetter
getMetricOrdering NMI = TheHigherTheBetter getMetricOrdering NMI = TheHigherTheBetter
getMetricOrdering (LogLossHashed _) = TheLowerTheBetter getMetricOrdering (LogLossHashed _) = TheLowerTheBetter
getMetricOrdering (LikelihoodHashed _) = TheHigherTheBetter getMetricOrdering (LikelihoodHashed _) = TheHigherTheBetter
getMetricOrdering (PerplexityHashed _) = TheLowerTheBetter
getMetricOrdering CharMatch = TheHigherTheBetter getMetricOrdering CharMatch = TheHigherTheBetter
getMetricOrdering MAP = TheHigherTheBetter getMetricOrdering MAP = TheHigherTheBetter
getMetricOrdering LogLoss = TheLowerTheBetter getMetricOrdering LogLoss = TheLowerTheBetter
@ -239,10 +250,11 @@ getMetricOrdering (Mean metric) = getMetricOrdering metric
metricCompare :: Metric -> MetricValue -> MetricValue -> Ordering metricCompare :: Metric -> MetricValue -> MetricValue -> Ordering
metricCompare metric a b = metricCompare' (getMetricOrdering metric) a b metricCompare metric a b = metricCompare' (getMetricOrdering metric) a b
where metricCompare' TheHigherTheBetter a b = a `compare` b where metricCompare' TheHigherTheBetter a' b' = a' `compare` b'
metricCompare' TheLowerTheBetter a b = b `compare` a metricCompare' TheLowerTheBetter a' b' = b' `compare` a'
bestPossibleValue :: Metric -> MetricValue bestPossibleValue :: Metric -> MetricValue
bestPossibleValue (PerplexityHashed _) = 1.0
bestPossibleValue metric = case getMetricOrdering metric of bestPossibleValue metric = case getMetricOrdering metric of
TheLowerTheBetter -> 0.0 TheLowerTheBetter -> 0.0
TheHigherTheBetter -> 1.0 TheHigherTheBetter -> 1.0
@ -268,6 +280,7 @@ perfectOutLineFromExpectedLine :: Metric -> Text -> Text
perfectOutLineFromExpectedLine (Mean metric) t = perfectOutLineFromExpectedLine metric t perfectOutLineFromExpectedLine (Mean metric) t = perfectOutLineFromExpectedLine metric t
perfectOutLineFromExpectedLine (LogLossHashed _) t = addProbOne t perfectOutLineFromExpectedLine (LogLossHashed _) t = addProbOne t
perfectOutLineFromExpectedLine (LikelihoodHashed _) t = addProbOne t perfectOutLineFromExpectedLine (LikelihoodHashed _) t = addProbOne t
perfectOutLineFromExpectedLine (PerplexityHashed _) t = addProbOne t
perfectOutLineFromExpectedLine BLEU t = getFirstColumn t perfectOutLineFromExpectedLine BLEU t = getFirstColumn t
perfectOutLineFromExpectedLine GLEU t = getFirstColumn t perfectOutLineFromExpectedLine GLEU t = getFirstColumn t
perfectOutLineFromExpectedLine ClippEU t = cleanMarginFromClippEU t perfectOutLineFromExpectedLine ClippEU t = cleanMarginFromClippEU t

View File

@ -54,7 +54,8 @@ import qualified Data.HashMap.Strict as M
singletons [d|data AMetric = ARMSE | AMSE | APearson | ASpearman | ABLEU | AGLEU | AWER | ACER | AAccuracy MatchingSpecification | AClippEU singletons [d|data AMetric = ARMSE | AMSE | APearson | ASpearman | ABLEU | AGLEU | AWER | ACER | AAccuracy MatchingSpecification | AClippEU
| AFMeasure | AMacroFMeasure | ANMI | AFMeasure | AMacroFMeasure | ANMI
| ALogLossHashed | ACharMatch | AMAP | ALogLoss | ALikelihood | ALogLossHashed | ACharMatch | AMAP | ALogLoss | ALikelihood
| ABIOF1 | ABIOWeightedF1 | ABIOF1Labels | ATokenAccuracy | ASegmentAccuracy | ALikelihoodHashed | AMAE | ASMAPE | AMultiLabelFMeasure MatchingSpecification | ABIOF1 | ABIOWeightedF1 | ABIOF1Labels | ATokenAccuracy | ASegmentAccuracy | ALikelihoodHashed | APerplexityHashed
| AMAE | ASMAPE | AMultiLabelFMeasure MatchingSpecification
| AMultiLabelLogLoss | AMultiLabelLikelihood | AMultiLabelLogLoss | AMultiLabelLikelihood
| ASoftFMeasure | AProbabilisticMultiLabelFMeasure | AProbabilisticSoftFMeasure | ASoft2DFMeasure | ASoftFMeasure | AProbabilisticMultiLabelFMeasure | AProbabilisticSoftFMeasure | ASoft2DFMeasure
| AFLCFMeasure | AHaversine | AFLCFMeasure | AHaversine
@ -87,6 +88,7 @@ toHelper BIOF1Labels = ABIOF1Labels
toHelper TokenAccuracy = ATokenAccuracy toHelper TokenAccuracy = ATokenAccuracy
toHelper SegmentAccuracy = ASegmentAccuracy toHelper SegmentAccuracy = ASegmentAccuracy
toHelper (LikelihoodHashed _) = ALikelihoodHashed toHelper (LikelihoodHashed _) = ALikelihoodHashed
toHelper (PerplexityHashed _) = APerplexityHashed
toHelper MAE = AMAE toHelper MAE = AMAE
toHelper SMAPE = ASMAPE toHelper SMAPE = ASMAPE
toHelper (MultiLabelFMeasure _ matchingSpec) = AMultiLabelFMeasure matchingSpec toHelper (MultiLabelFMeasure _ matchingSpec) = AMultiLabelFMeasure matchingSpec
@ -124,6 +126,7 @@ type family ParsedExpectedType (t :: AMetric) :: * where
ParsedExpectedType ANMI = Text ParsedExpectedType ANMI = Text
ParsedExpectedType ALogLossHashed = Text ParsedExpectedType ALogLossHashed = Text
ParsedExpectedType ALikelihoodHashed = Text ParsedExpectedType ALikelihoodHashed = Text
ParsedExpectedType APerplexityHashed = Text
ParsedExpectedType ACharMatch = Text ParsedExpectedType ACharMatch = Text
ParsedExpectedType AMAP = [String] ParsedExpectedType AMAP = [String]
ParsedExpectedType ALogLoss = Double ParsedExpectedType ALogLoss = Double
@ -161,6 +164,7 @@ expectedParser SASoft2DFMeasure = controlledParse lineLabeledClippingsParser
expectedParser SANMI = Right . id expectedParser SANMI = Right . id
expectedParser SALogLossHashed = onlyStrip expectedParser SALogLossHashed = onlyStrip
expectedParser SALikelihoodHashed = onlyStrip expectedParser SALikelihoodHashed = onlyStrip
expectedParser SAPerplexityHashed = onlyStrip
expectedParser SACharMatch = Right expectedParser SACharMatch = Right
expectedParser SAMAP = splitByTabs expectedParser SAMAP = splitByTabs
expectedParser SALogLoss = doubleParser expectedParser SALogLoss = doubleParser
@ -212,6 +216,7 @@ outputParser SASoft2DFMeasure = expectedParser SASoft2DFMeasure
outputParser SANMI = expectedParser SANMI outputParser SANMI = expectedParser SANMI
outputParser SALogLossHashed = onlyStrip outputParser SALogLossHashed = onlyStrip
outputParser SALikelihoodHashed = onlyStrip outputParser SALikelihoodHashed = onlyStrip
outputParser SAPerplexityHashed = onlyStrip
outputParser SACharMatch = Right outputParser SACharMatch = Right
outputParser SAMAP = splitByTabs outputParser SAMAP = splitByTabs
outputParser SALogLoss = doubleParser outputParser SALogLoss = doubleParser
@ -252,6 +257,7 @@ type family ItemIntermediateRepresentationType (t :: AMetric) :: * where
ItemIntermediateRepresentationType (AMultiLabelFMeasure _) = (Double, Int, Int) ItemIntermediateRepresentationType (AMultiLabelFMeasure _) = (Double, Int, Int)
ItemIntermediateRepresentationType ALogLossHashed = (Text, Text) ItemIntermediateRepresentationType ALogLossHashed = (Text, Text)
ItemIntermediateRepresentationType ALikelihoodHashed = (Text, Text) ItemIntermediateRepresentationType ALikelihoodHashed = (Text, Text)
ItemIntermediateRepresentationType APerplexityHashed = (Text, Text)
ItemIntermediateRepresentationType ACharMatch = (Text, Text) ItemIntermediateRepresentationType ACharMatch = (Text, Text)
ItemIntermediateRepresentationType AWER = (Int, Int) ItemIntermediateRepresentationType AWER = (Int, Int)
ItemIntermediateRepresentationType ACER = (Int, Int) ItemIntermediateRepresentationType ACER = (Int, Int)
@ -288,6 +294,7 @@ itemStep SASoft2DFMeasure = getSoft2DCounts
itemStep SANMI = id itemStep SANMI = id
itemStep SALogLossHashed = id itemStep SALogLossHashed = id
itemStep SALikelihoodHashed = id itemStep SALikelihoodHashed = id
itemStep SAPerplexityHashed = id
itemStep SACharMatch = id itemStep SACharMatch = id
itemStep SAMAP = uncurry calculateMAPForOneResult itemStep SAMAP = uncurry calculateMAPForOneResult
itemStep SALogLoss = itemLogLossError itemStep SALogLoss = itemLogLossError

View File

@ -23,7 +23,6 @@ import GEval.MatchingSpecification (MatchingSpecification(ExactMatch))
import Text.Regex.PCRE.Heavy import Text.Regex.PCRE.Heavy
import Data.Either (fromRight) import Data.Either (fromRight)
import Data.String.Here import Data.String.Here
import Data.Maybe (fromMaybe)
import Data.List (intercalate) import Data.List (intercalate)
import Text.Printf import Text.Printf
@ -63,6 +62,7 @@ listOfAvailableMetrics = [RMSE,
ClippEU, ClippEU,
LogLossHashed defaultLogLossHashedSize, LogLossHashed defaultLogLossHashedSize,
LikelihoodHashed defaultLogLossHashedSize, LikelihoodHashed defaultLogLossHashedSize,
PerplexityHashed defaultLogLossHashedSize,
BIOF1, BIOF1,
BIOWeightedF1, BIOWeightedF1,
BIOF1Labels, BIOF1Labels,

View File

@ -209,6 +209,9 @@ main = hspec $ do
runGEvalTest "log-loss-hashed-probs-normalized" `shouldReturnAlmost` 1.55537749098853 runGEvalTest "log-loss-hashed-probs-normalized" `shouldReturnAlmost` 1.55537749098853
it "with log probs whose probs are summing up to less than 1.0" $ do it "with log probs whose probs are summing up to less than 1.0" $ do
runGEvalTest "log-loss-hashed-normalization" `shouldReturnAlmost` 5.16395069238851 runGEvalTest "log-loss-hashed-normalization" `shouldReturnAlmost` 5.16395069238851
describe "PerplexityHashed challenge" $ do
it "simple example" $ do
runGEvalTest "perplexity-hashed-simple" `shouldReturnAlmost` 11.006423790840
describe "LikelihoodHashed challenge" $ do describe "LikelihoodHashed challenge" $ do
it "example with unnormalized values" $ do it "example with unnormalized values" $ do
runGEvalTest "likelihood-hashed-not-normalized" `shouldReturnAlmost` 0.351043364110715 runGEvalTest "likelihood-hashed-not-normalized" `shouldReturnAlmost` 0.351043364110715

View File

@ -0,0 +1,3 @@
-6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -0.916290731874155 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -2.30258509299405 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848
źdźbło:-0.6931471805599453 foo:-1.6094379124341003 az:-1.2039728043259361
złoty:-0.916290731874155 :-0.5108256237659907
1 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -0.916290731874155 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -2.30258509299405 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848 -6.23048144757848
2 źdźbło:-0.6931471805599453 foo:-1.6094379124341003 az:-1.2039728043259361
3 złoty:-0.916290731874155 :-0.5108256237659907

View File

@ -0,0 +1 @@
--metric PerplexityHashed8

View File

@ -0,0 +1,3 @@
ma
źdźbło
dolar
1 ma
2 źdźbło
3 dolar