Linha Fina
A IntentEngine that dynamically accounts for changing reference data at runtime. Add/remove intents dynamically
How it works:
- each intent is an independent SVM that classifies intent vs not-intent
- each intent uses the other intents data as "not-intent" training data
- only most relevant negative samples are used for training (calculated via token_set_ratio)
- features are just one-hot-encoded keyword vectors
- entity extraction from templates via simplematch
- entity extraction based on wordlists, optionally via aho-corasick
Limitations:
- long warm up time (training happens on first inference)
- doesn't scale well to a large number of intents
- does not take word position into account
- needs retraining whenever a new intent is added
Usage
from linha_fina.engine import IntentEngine
engine = IntentEngine()
intent_1 = ["hello world", "hey there", "hello"]
intent_2 = ["tell me a joke", "say a joke", "make me laugh"]
intent_3 = ["how is the weather", "what's the weather like",
"what is the weather outside"]
intent_4 = ["my name is {name}", "call me {name}"]
intent_5 = ["change the color to {color}",
"change light to {color}",
"set light to {color}}"]
engine.register_intent("hello", intent_1)
engine.register_intent("joke", intent_2)
engine.register_intent("weather", intent_3)
engine.register_intent("introduce", intent_4)
engine.register_intent("change_color", intent_5, entity_samples={"color": ["red", "blue"]})
# you can register more entity examples after intent creation
engine.register_entity("color", ["yellow", "green"], intent_name="color")
for s in ["hello earth",
"call me Casimiro",
"my name is Miro",
"tell me a joke",
"what is the weather",
"tell me a joke about the weather",
"red blue and green are my 3 favorite colors",
"red is my favorite color",
"light to blue",
"change to green",
"make color green"
]:
print(s)
print(engine.calc_intent(s))
# hello earth
# IntentMatch(name='hello', slots={}, conf=0.9728585833827678)
# call me Casimiro
# IntentMatch(name='introduce', slots=[{'name': 'Casimiro'}], conf=0.9236423200801248)
# my name is Miro
# IntentMatch(name='introduce', slots=[{'name': 'Miro'}], conf=0.9949282563482034)
# tell me a joke
# IntentMatch(name='joke', slots={}, conf=0.9728801357230902)
# what is the weather
# IntentMatch(name='weather', slots={}, conf=0.9427588770219081)
# tell me a joke about the weather
# IntentMatch(name='joke', slots={}, conf=0.9728801357230902)
# red blue and green are my 3 favorite colors
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9648410361539215)
# red is my favorite color
# IntentMatch(name='change_color', slots={'color': 'red'}, conf=0.9142220645436988)
# light to blue
# IntentMatch(name='change_color', slots={'color': 'blue'}, conf=0.9845866111672085)
# change to green
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9598265049335444)
# make color green
# IntentMatch(name='change_color', slots={'color': 'green'}, conf=0.9142364945872282)
Metadata
Release files for linha-fina 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| linha_fina-0.1.0.tar.gz | 29.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| linha_fina-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.9 kB
Release files / linha_fina-0.1.0.tar.gz
| Download URL | linha_fina-0.1.0.tar.gz |
|---|---|
| Size | 29.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90a2a3d253b320544c1b6c2ac35cf8fa129a16588b879547b5e27e7e21eeb92a
|
|
BLAKE2b-256 checksum How to use checksums |
cf6bef0198efe6b2b591155d42138ba3c8d45f4ecc01f2319c154a324a34fb5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / linha_fina-0.1.0-py3-none-any.whl
| Download URL | linha_fina-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2d6ee39d04ba5a0611c86723fae98f74dda8cea6802aaf2afeaa936840508fb0
|
|
BLAKE2b-256 checksum How to use checksums |
73e459b7344a180b22f2db4305d8699eb9a3f2b1c2cdafbed946c1b9acad4ed6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|