# Annotation without model

**URL:** https://support.prodi.gy/t/annotation-without-model/2186
**Category:** Uncategorized
**Tags:** solved, usage, textcat
**Created:** [November 4, 2019, 7:44pm UTC](https://support.prodi.gy/t/annotation-without-model/2186 "2019-11-04T19:44:26Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![mudbone](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@mudbone](https://support.prodi.gy/u/mudbone)
#### Post date: [November 4, 2019, 7:44pm UTC](https://support.prodi.gy/t/annotation-without-model/2186/1 "2019-11-04T19:44:26Z")

</div>

I'm new to Prodigy and want to use it to do either binary or multiclass labeling of datasets without a model in the annotation loop (i.e. I want to manually label everything in I pass in as the dataset). How do I use textcat.teach or textcat.manual without passing a model parameter? I get errors if I try to leave the model out or if I type in the name of a non-existing (blank) model.

---

<div class="post-metadata">

### Author: ![ines](https://sea2.discourse-cdn.com/flex020/user_avatar/support.prodi.gy/ines/32/3_2.png) [@ines](https://support.prodi.gy/u/ines)
#### Post date: [November 5, 2019, 10:43am UTC](https://support.prodi.gy/t/annotation-without-model/2186/2 "2019-11-05T10:43:59Z")

</div>

Hi! `textcat.teach` uses the model to suggest potential candidates and annotations, so for that workflow, you do need a base model that it can update. `textcat.manual` doesn't actually use the model you pass in at the moment (we added that argument because we wanted to support auto-loading the labels that are already present in a model, but that turned out to be a bad idea). So you can just pass in any model name, like `en_core_web_sm`. Sorry about the confusion here – we'll fix this in the next release.

Alternatively, you could also write a simple custom recipe like this one that streams in your data, adds options for the labels and lets you annotate with a multiple choice interface: [https://prodi.gy/docs/workflow-custom-recipes#example-choice](https://prodi.gy/docs/workflow-custom-recipes#example-choice) For binary classification, you could use the `classification` interface and a top-level label (`{"text": "...", "label": "..."}`) and then accept/reject the examples.

---

<div class="post-metadata">

### Author: ![mudbone](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@mudbone](https://support.prodi.gy/u/mudbone)
#### Post date: [November 5, 2019, 9:38pm UTC](https://support.prodi.gy/t/annotation-without-model/2186/3 "2019-11-05T21:38:41Z")

</div>

Ok, that helps. Thanks for your reply. Is there any documentation that provides an explanation of how textcat classifier works (what features from loaded model it uses, what ML classifier it is using, etc.)?

---

<div class="post-metadata">

### Author: ![ines](https://sea2.discourse-cdn.com/flex020/user_avatar/support.prodi.gy/ines/32/3_2.png) [@ines](https://support.prodi.gy/u/ines)
#### Post date: [November 6, 2019, 10:59am UTC](https://support.prodi.gy/t/annotation-without-model/2186/4 "2019-11-06T10:59:53Z")

</div>

By default, Prodigy will use [spaCy's `TextCategorizer`](https://spacy.io/api/textcategorizer) with the default architecture. The component is fully independent and doesn't require any of the other statistical model components (like the tagger, parser or NER). It only uses the tokens and word vectors, if they are available in the model. [See here](https://github.com/explosion/spaCy/blob/2c107f02a4d60bda2440db0aad1a88cbbf4fb52d/spacy/_ml.py#L735) for the implementation of the simple CNN classifier architecture.

Of course, you can always export the data and train any other text classifier. Our `prodigy-recipes` repo also has [an example script](https://github.com/explosion/prodigy-recipes/blob/master/textcat/textcat_custom_model.py) for using active learning with a custom model (illustrated with a dummy model that "predicts" random numbers).
