From 3904ebc5e3020c2d5d575fcf7735a9ac64a22630 Mon Sep 17 00:00:00 2001 From: Douglas Paz Date: Wed, 3 Oct 2018 16:28:56 -0300 Subject: [PATCH 1/2] Add use_competing_intents flag in repository and repository update --- .../migrations/0025_auto_20181003_1911.py | 23 ++++++++++ bothub/common/models.py | 14 +++++- bothub/common/tests.py | 45 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 bothub/common/migrations/0025_auto_20181003_1911.py diff --git a/bothub/common/migrations/0025_auto_20181003_1911.py b/bothub/common/migrations/0025_auto_20181003_1911.py new file mode 100644 index 00000000..f86d83c2 --- /dev/null +++ b/bothub/common/migrations/0025_auto_20181003_1911.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.6 on 2018-10-03 19:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0024_repositoryupdate_use_language_model_featurizer'), + ] + + operations = [ + migrations.AddField( + model_name='repository', + name='use_competing_intents', + field=models.BooleanField(default=False, help_text='When using competing intents the confidence of the prediction is distributed in all the intents.', verbose_name='Use competing intents'), + ), + migrations.AddField( + model_name='repositoryupdate', + name='use_competing_intents', + field=models.BooleanField(default=False), + ), + ] diff --git a/bothub/common/models.py b/bothub/common/models.py index fffbe749..35432031 100644 --- a/bothub/common/models.py +++ b/bothub/common/models.py @@ -105,6 +105,11 @@ class Meta: 'similarity. You need less examples to create a great ' + 'bot.'), default=True) + use_competing_intents = models.BooleanField( + _('Use competing intents'), + help_text=_('When using competing intents the confidence of the ' + + 'prediction is distributed in all the intents.'), + default=False) categories = models.ManyToManyField( RepositoryCategory, help_text=CATEGORIES_HELP_TEXT) @@ -300,7 +305,8 @@ def current_update(self, language=None): repository_update, created = self.updates.get_or_create( language=language, training_started_at=None, - use_language_model_featurizer=self.use_language_model_featurizer) + use_language_model_featurizer=self.use_language_model_featurizer, + use_competing_intents=self.use_competing_intents) return repository_update def last_trained_update(self, language=None): @@ -345,6 +351,7 @@ class Meta: languages.validate_language, ]) use_language_model_featurizer = models.BooleanField(default=True) + use_competing_intents = models.BooleanField(default=False) created_at = models.DateTimeField( _('created at'), auto_now_add=True) @@ -448,6 +455,9 @@ def ready_for_train(self): if last_trained_update.use_language_model_featurizer is not \ self.repository.use_language_model_featurizer: return True + if last_trained_update.use_competing_intents is not \ + self.repository.use_competing_intents: + return True return len(self.requirements_to_train) is 0 def validate_init_train(self, by=None): @@ -466,11 +476,13 @@ def start_training(self, by): self.training_started_at = timezone.now() self.use_language_model_featurizer = self.repository \ .use_language_model_featurizer + self.use_competing_intents = self.repository.use_competing_intents self.save( update_fields=[ 'by', 'training_started_at', 'use_language_model_featurizer', + 'use_competing_intents', ]) def save_training(self, bot_data): diff --git a/bothub/common/tests.py b/bothub/common/tests.py index 83649d7b..b9261bd3 100644 --- a/bothub/common/tests.py +++ b/bothub/common/tests.py @@ -1090,3 +1090,48 @@ def test_equal_repository_value_after_train(self): current_update.start_training(self.owner) current_update.save_training(b'') self.assertFalse(current_update.use_language_model_featurizer) + + +class UseCompetingIntentsTestCase(TestCase): + def setUp(self): + self.language = languages.LANGUAGE_EN + + self.owner = User.objects.create_user('owner@user.com', 'user') + + self.repository = Repository.objects.create( + owner=self.owner, + name='Test', + slug='test', + language=self.language, + use_competing_intents=True) + + RepositoryExample.objects.create( + repository_update=self.repository.current_update(), + text='my name is Douglas', + intent='greet') + RepositoryExample.objects.create( + repository_update=self.repository.current_update(), + text='my name is John', + intent='greet') + + def test_change_ready_for_train(self): + self.assertTrue(self.repository.ready_for_train) + current_update = self.repository.current_update() + current_update.start_training(self.owner) + current_update.save_training(b'') + self.assertFalse(self.repository.ready_for_train) + self.repository.use_competing_intents = False + self.repository.save() + self.assertTrue(self.repository.ready_for_train) + self.repository.use_competing_intents = True + self.repository.save() + self.assertFalse(self.repository.ready_for_train) + + def test_equal_repository_value_after_train(self): + current_update = self.repository.current_update() + self.repository.use_competing_intents = False + self.repository.save() + self.assertTrue(current_update.use_competing_intents) + current_update.start_training(self.owner) + current_update.save_training(b'') + self.assertFalse(current_update.use_competing_intents) From 2b1d3de936f9e30244fa930576b954a912b86d63 Mon Sep 17 00:00:00 2001 From: Douglas Paz Date: Wed, 3 Oct 2018 16:31:05 -0300 Subject: [PATCH 2/2] Add use_competing_intents in repository serializer --- bothub/api/serializers/repository.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bothub/api/serializers/repository.py b/bothub/api/serializers/repository.py index d8b79efd..e2222993 100644 --- a/bothub/api/serializers/repository.py +++ b/bothub/api/serializers/repository.py @@ -27,6 +27,7 @@ class Meta: 'slug', 'language', 'use_language_model_featurizer', + 'use_competing_intents', 'categories', 'description', 'is_private', @@ -67,6 +68,7 @@ class Meta: 'language', 'available_languages', 'use_language_model_featurizer', + 'use_competing_intents', 'categories', 'categories_list', 'description',