I need a critique: using crm114 to train on (very) limited word set - or are there better ways?

"Ger Hobbelt" <[email protected]>
Newsgroups gmane.mail.spam.crm114
Message-ID <[email protected]>
Ok, what I think I really need now is a kick in the head, because I
have a hunch I've been focused so much on the crm114 hammer that every
problem starts to look like a 9 inch nail and my local math
wizzards[*], well, they do qualify.

[*] No spelling error. Who's read Terry Pratchett will know what I
mean. Wizzard ~ expert in escapology. Don't need Reebok to break speed
limits in getting away from thorny issues.


What's this about?

Something I like to try as I guess it might work out. I'm not looking
for a 100% solution but for the 80/20 that works 'well enough'.

Let's say you've got a set of parameters, which I like to call 'words'
for the sake of crm114. Together, they form a 'message'. One message
per event. And an event is either a hero (ham?) or a zero
(spam/noise). Each parameter is of the on/off kind, so it's either
there (on) or it isn't.
As I realize that OSB and friends detect 'similarity' by actually
looking for 'word identicalities' and checking how much of them there
are, I am sure crm114 will be able to recognize the words, so no
problem there.

Now for the fun stuff. The number of parameters (a.k.a. 'words') in
all possible messages is known (requires a bit of work though) AND
severely limited. To talk numbers: I'm pretty sure I've got a
'vocabulary' of more than 100 words, but I am also pretty sure I'll
never surpass the 5000 words upper limit. In email analogy terms, that
would mean I know the lower and upper limits of the number of
*different* words (no l33t spellings and other tricks for this guy!)
PLUS I know that each message will:
a) only contain each word ONCE, and
b) only contain a limited SUBSET of all the possible words, and
c) all words will appear in a predetermined, FIXED ORDER in each
message. (Did I hear a <unique> there? well, maybe not.)

In other words: each message can be defined as a sequence of all words
W(i) where index i = 1..N and N is the number of possible words, where
each 'word' W(i) may or may not appear.
(That's pretty limited, compared to your usual email input, where you
have multiple occurrences, undetermined order, etc..)

Some words are interrelated, some are not. Which ones are
interrelated, I do not know up front. When I'm done, I probably still
won't know.


What I am after are two things:

1) Find out /if/ and when if, /which/ words are the 'significant' ones
that have the most influence on the output.
2) With any luck regarding (1), a hint at /how much/ significance
(weight factor) or something like that might be nice.


What's the [desired] output?

I'll know that after some (significant) delay, so I will be able to
tell if an event was 'it' or if it was a 'nit'. Thus I want to
discover if a particular message has the probability of being 'it'
instead of 'nit', preferably when the event occurs.
That's where crm114 popped up in the brain: train the sucker based on
older event series where you know who's 'it' and who is not; then
continue feeding it event messages like that and see what pR says
regarding the probability of an event being 'it' nor nit. You can
improve (I hope) on the fly by backpropagating (training) wrong
predictions once you know what should have been.

I realize this sort of thing could theoretically be done as a
multi-variable correlation, but I am kinda lazy and I think crm114
might be able to do this for me, and I like to hear if I am smoking
Afghan or Dog here. ;-)
Especially that 'on the fly' bit seems appetizing to me as I don't
think I'll have sufficient data to start with and sifting through
hundreds of parameters (a.k.a. words) to find out which of them are
significant, while a whole bunch very probably are not, is on my most
wanted list of things to do, so I think that if I grokked crm114 well
enough that I should be able to let crm114 do this by simply feeding
it lines-as-messages in a nice script and then have a look at the pR
coming out the rear end for each and regarding significance of certain
parameters then: it should be present in the form of the weight
numbers in the CSS files (OSB[F]) per hash (= word) or otherwise and
from there on out it's: no worries, mate!

Some additional details that matter (I believe):

the current 'general idea' about the matter is that some parameters
will certainly show to 'strengthen' each other (i.e. a kind of A AND B
operation), while a few may independently lead to the same result (A
OR B), but we also think that the chance that certain parameters
actually 'cancel each other out' is low (A XOR B) - which is important
as I understand that the classifiers (apart from NN? SVM? SKS?) cannot
cope with an A XOR B input situation.
[The only way I can see a XOR happen in my mind when Markovian or
other classifier picks both A and B in the same chain to produce a
single hash which could counterweight the learncounts on the A hash
and the B hash. I don't grok SVM et al yet, so can't see anything
there. And maybe I still don't grok Bayes/Markovian either... I'll
find out now.]


For some tech detail: every parameter has a name and since it's on/off
(show / no-show), you either see the name as a word, e.g. 'P1', in the
message line or not. So a viable event message might be:

P1 P7 P11 P12 P20 P21

and another might be

P1 P3 P7 P11 P19 P20 P21

and so on.

For a test set, I'm thinking about testing this by adding the
'expected result' to each line, strip it off before classify or learn,
then train half of them using TOE or THTTR and then see how well the
next half fares; kinda like the spam/ham email test sets where you
train on one series and test with another section.


I hope I explained it well enough for you to see what's going on.

I can provide example sets (I checked and this is at least feasible as
a public test set so future GerH builds might even include it) but
there's no definite ETA on those because this is prio #2 as patting
the production box on the head once in a while and writing reports is
#1.


Anyhow: my question to y'all:

Is using crm114 to kinda 'adaptively correlate' a *severely limited*
input set to an output decision value another of my more, er, retarded
ideas (and if so: what's a better way of doing this? I'm kinda running
around in a crm114 titled rut right now. :-(( ) or is this a perfectly
good idea?
Don't hesitate to take out that riot gun and pull!


Thanks for your time,

Ger


PS: bonus question: I've been thinking about it and have a glimmer of
an idea, but are there 'smart' ways to detect that a classifier has
run into an A XOR B situation (apart from continuing training
operations being performed)? I will not be able to 'detect' A XOR B
based on 'LOWER quality pR results' because I don't know where my
upper bound for achievable pR quality lies, except that I have the
very strong feeling it won't ever get near 95% - contrary to email
claims / SPAMTREC benchmarks - as there's just way too much noise in
the inputs obscuring signal.




-- 
Met vriendelijke groeten / Best regards,

Ger Hobbelt

--------------------------------------------------
web: http://www.hobbelt.com/
 http://www.hebbut.net/
mail: [email protected]
mobile: +31-6-11 120 978
--------------------------------------------------

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.