Re: (no subject)

Thomas Michael Hagen <[email protected]> Wed, 6 May 2009 22:58:25 +0200
Newsgroups gmane.mail.spam.crm114
Message-ID <[email protected]>
you have it right. that was a last-minute, untested addition to the
code. silly me.

it looked like this before, and it worked:

eval(:count:) /:@::*:count: - 1:/
eval /:@::*:count: > 0:/
liaf

my idea was to do a round of refute if the learning never resulted in
a confident classification, but now i'm thinking that may be a bit too
much refuting. i'm already refuting all wrong categories when you tell
the classifier that it got it right, after all.

maybe i'll put some more refuting in later, but for now, just pretend
the statement that calls :refute: isn't there.



On Wed, May 6, 2009 at 7:32 PM, Bill Yerazunis <[email protected]> wrote:
> To: Thomas Michael Hagen <[email protected]>
> CC: [email protected]
> In-reply-to: <d77c32370905060810r3099c93je57ded9dd5b791f2-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
>        (message from Thomas Michael Hagen on Wed, 6 May 2009 17:10:57 +0200)
> Subject: Re: [Crm114-general] ready to roll version of newspaper article topic
>        classifier
> References:  <d77c32370905060810r3099c93je57ded9dd5b791f2-JsoAwUIsXouhRSP0FMvGiw@public.gmane.orgm>
>
>
>   From: Thomas Michael Hagen <[email protected]>
>
>   i'm on my fifth version now, after a lot of work, and a lot of
>   valuable input from this list.
>
>   eight people in my department are now going to train the classifier by
>   categorizing about a thousand articles each.
>
>   here is the core of the program they are using:
>
>   i hope this can be of use to some, and i always love harsh feedback :)
>
>
> OK.... I think you might have an infinite loop.  Scroll on down....
>
>        - Bill
>
>   :try-to-classify: (:article:)
>   {
>       #THE CLASSIFICATION HALF:
>       {
>           {
>               isolate (:stats:)
>               classify <osbf microgroom> [:article:] \
>                       (bus.cfc cli.cfc con.cfc cul.cfc dom.cfc \
>                       eco.cfc edu.cfc ene.cfc ent.cfc env.cfc \
>                       for.cfc hea.cfc loc.cfc pol.cfc sci.cfc \
>                       spo.cfc tec.cfc tra.cfc wor.cfc | unc.cfc out.cfc) (:stats:)
>               match (:: :class-conc:) [:stats:] /(...)\.cfc/ #perhaps pick the
>   top 3 cats, and tag article with all 3 (if above some threshold)
>               { #classify succeeded, checking pR:
>                   match (:: :pR:) [:stats:] /Best match.*: (.*)  \nTotal/
>                   output /pR::*:pR:. /
>                   eval /:@::*:pR: > 30:/ #play around with this number
>                   output /Classify succeeded as ':*:class-conc:'\n/
>                   return
>               }
>               output /Classification NOT confident! Please classify:\n\n/
>           }
>           alius
>           {
>               output /Classify failed! Please classify:\n\n/
>           }
>       }
>       #compare a low conf answer with the result of try-to-learn here,
>   and use it if they are the same
>       isolate (:conc-file:) /:*:class-conc:.cfc/
>       isolate (:interaction:) /:*:class-conc::*:article::*:stats:/
>       call /:interact:/ [:*:interaction:] #asking the user for the right topic
>       { #if the answer was right, use that answer, and refute fram all
>   other categories:
>           match [:user-feedback:] /^y$/
>           isolate (:user-feedback:) /:*:class-conc:/
>           isolate (:refute-args:) /:*:conc-file::*:article:/
>           call /:refute:/ [:*:refute-args:]
>       }
>       #THE LEARNING HALF:
>       isolate (:user-feedback-conc-file:) /:*:user-feedback:.cfc/
>       isolate (:count:) /7/
>       isolate (:print-p:) /1/
>       { # entering the training loop
>           learn <osbf microgroom> (:*:user-feedback-conc-file:) [:article:]
>           {
>               match [:print-p:] /1/
>               output /\nLearning as :*:user-feedback-conc-file:...\n/
>               isolate (:print-p:) /0/
>           }
>           isolate (:stats2:)
>           { #reclassifying to check improvement:
>               classify <osbf microgroom> [:article:]   \
>                       (bus.cfc cli.cfc con.cfc cul.cfc dom.cfc \
>                       eco.cfc edu.cfc ene.cfc ent.cfc env.cfc \
>                       for.cfc hea.cfc loc.cfc pol.cfc sci.cfc \
>                       spo.cfc tec.cfc tra.cfc wor.cfc | unc.cfc out.cfc) (:stats2:)
>               isolate (:pR2:) #here, you assume it ends up with the same cat as
>   before. what if it doesn't?
>               match (:: :pR2:) [:stats2:] /Best match.*: (.*)  \nTotal/
>               isolate (:improvement:)
>               eval (:improvement:) /:@:(:*:pR2: - :*:pR:):/
>               output /imp::*:improvement:\n/
>               eval /:@::*:improvement: > 3:/
>               eval /:@::*:pR2: > 10:/ #play around with this number too
>               output /Succesfully learned! Moving on\n/
>               return
>           }
>           eval (:count:) /:@::*:count: - 1:/
>           {
>               eval /:@::*:count: > 0:/
>               liaf
>           }
>
> Right there ^^^^^^   if :count: is > 0, the EVAL passes (and falls through),
> to the LIAF, which sends it back up to the opening "{", then the EVAL
> passes, it falls through, whcih sends it up to the opening "{",  and so
> on.
>
> Or do I have it wrong?
>
>

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com