pydata-sentiment / README.md
Chris Hoge
added readme metadata
8a1ffcd
---
title: Simple Sentiment Analysis
emoji: πŸ™‹
colorFrom: gray
colorTo: orange
sdk: docker
pinned: false
---
## Quickstart
Build and start Machine Learning backend on `http://localhost:9090`
```bash
docker-compose up
```
Check if it works:
```bash
$ curl http://localhost:9090/health
{"status":"UP"}
```
Then connect running backend to Label Studio using Machine Learning settings.
## Writing your own model
1. Place your scripts for model training & inference inside root directory. Follow the [API guidelines](#api-guidelines) described bellow. You can put everything in a single file, or create 2 separate one say `my_training_module.py` and `my_inference_module.py`
2. Write down your python dependencies in `requirements.txt`
3. Open `wsgi.py` and make your configurations under `init_model_server` arguments:
```python
from my_training_module import training_script
from my_inference_module import InferenceModel
init_model_server(
create_model_func=InferenceModel,
train_script=training_script,
...
```
4. Make sure you have docker & docker-compose installed on your system, then run
```bash
docker-compose up --build
```
## API guidelines
#### Inference module
In order to create module for inference, you have to declare the following class:
```python
from htx.base_model import BaseModel
# use BaseModel inheritance provided by pyheartex SDK
class MyModel(BaseModel):
# Describe input types (Label Studio object tags names)
INPUT_TYPES = ('Image',)
# Describe output types (Label Studio control tags names)
INPUT_TYPES = ('Choices',)
def load(self, resources, **kwargs):
"""Here you load the model into the memory. resources is a dict returned by training script"""
self.model_path = resources["model_path"]
self.labels = resources["labels"]
def predict(self, tasks, **kwargs):
"""Here you create list of model results with Label Studio's prediction format, task by task"""
predictions = []
for task in tasks:
# do inference...
predictions.append(task_prediction)
return predictions
```
#### Training module
Training could be made in a separate environment. The only one convention is that data iterator and working directory are specified as input arguments for training function which outputs JSON-serializable resources consumed later by `load()` function in inference module.
```python
def train(input_iterator, working_dir, **kwargs):
"""Here you gather input examples and output labels and train your model"""
resources = {"model_path": "some/model/path", "labels": ["aaa", "bbb", "ccc"]}
return resources
```