OVOS pipeline plugin using LinhaFina intent matching
Project description
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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
linha_fina-0.0.1a3.tar.gz
(25.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linha_fina-0.0.1a3.tar.gz.
File metadata
- Download URL: linha_fina-0.0.1a3.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98eed2ef59d4ebd533c461a8c46771af5ee4c9ee9a4a058b9739ac6b26344516
|
|
| MD5 |
9fdf89adad7aea15cbeb1de5df1a4667
|
|
| BLAKE2b-256 |
ec8f086abc14cd5c2caf9d5f6b80c24b28e8213d9d7c2499a7f45b7ad9638b95
|
File details
Details for the file linha_fina-0.0.1a3-py3-none-any.whl.
File metadata
- Download URL: linha_fina-0.0.1a3-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79e08312ca54c77b290aeabaaeabd3a1199f1cc38ea630ef6ab447db25f30848
|
|
| MD5 |
e4b5b7e8f8b22f67c748568f98a97067
|
|
| BLAKE2b-256 |
eba2f6af222c26f030b8c655b974c694690df236420b1d263da2023e4b2bf451
|