Class: Smalltext::Classifier
- Inherits:
-
Object
- Object
- Smalltext::Classifier
- Defined in:
- lib/smalltext.rb
Overview
Your code goes hereā¦
Instance Method Summary collapse
- #add_item(category, sentence) ⇒ Object
- #classify(sentence, show_details = false) ⇒ Object
-
#initialize ⇒ Classifier
constructor
A new instance of Classifier.
- #load_model(synapse_file) ⇒ Object
- #save_model(synapse_file) ⇒ Object
- #train(hidden_neurons = 20, alpha = 0.1, epochs = 1000, dropout = false, dropout_percent = 0.2) ⇒ Object
Constructor Details
#initialize ⇒ Classifier
Returns a new instance of Classifier.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/smalltext.rb', line 18 def initialize @training_data = [] #organizing our data structures for documents , @categories, words @ignore_words = ['?'] @words=[] @categories=[] @documents=[] @tokenizer = Tokenizer::Tokenizer.new(:en) #create our bow training data @training=[] @output=[] @synapse = {} end |
Instance Method Details
#add_item(category, sentence) ⇒ Object
34 35 36 |
# File 'lib/smalltext.rb', line 34 def add_item(category, sentence) @training_data.push({"category":category, "sentence":sentence}) end |
#classify(sentence, show_details = false) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/smalltext.rb', line 55 def classify(sentence, show_details=false) results = think(sentence, show_details) # puts "results is #{results.inspect}" # results = [[i,r] for i,r in enumerate(results) if r>ERROR_THRESHOLD ] results = results.to_a.map.each_with_index {|r,i| [i, r] if r > ERROR_THRESHOLD }.compact # # results.sort(key=lambda x: x[1], reverse=True) results.sort! {|a,b| b[1] <=> a[1] } # return_results =[[classes[r[0]],r[1]] for r in results] return_results = results.map {|r| [klasses[r[0]], r[1]] } puts "sentence: #{sentence}\nclassification: #{return_results}" puts return return_results end |
#load_model(synapse_file) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/smalltext.rb', line 83 def load_model(synapse_file) @synapse = Marshal.load(File.binread(synapse_file)) @synapse[:synapse0] = Numo::NArray.cast(@synapse[:synapse0]) @synapse[:synapse1] = Numo::NArray.cast(@synapse[:synapse1]) @words = @synapse[:words] @categories = @synapse[:klasses] puts "Model #{synapse_file} loaded. Model was created on #{@synapse[:datetime]}" end |
#save_model(synapse_file) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/smalltext.rb', line 70 def save_model(synapse_file) synapse_file = synapse_file unless @synapse.empty? File.open(synapse_file, 'wb') do |file| file.write(Marshal.dump(@synapse)) end puts "saved synapses to: #{synapse_file}" else puts "Model not trained. Use the 'Classifier#train' method to build a model." end end |
#train(hidden_neurons = 20, alpha = 0.1, epochs = 1000, dropout = false, dropout_percent = 0.2) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/smalltext.rb', line 38 def train(hidden_neurons=20, alpha=0.1, epochs=1000, dropout=false, dropout_percent=0.2) preprocess x_inp = Numo::NArray[training][0,true,true] y = Numo::NArray[output][0,true,true] start_time = Time.now neural_network(x_inp, y, hidden_neurons=hidden_neurons, alpha=alpha, epochs=epochs, dropout=dropout, dropout_percent=dropout_percent) elapsed_time = Time.now - start_time puts puts puts "Model training complete." puts "Processing time: #{elapsed_time} seconds" end |