Skip to main content

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

img.png

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


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.1.0.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linha_fina-0.1.0-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file linha_fina-0.1.0.tar.gz.

File metadata

  • Download URL: linha_fina-0.1.0.tar.gz
  • Upload date:
  • Size: 29.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for linha_fina-0.1.0.tar.gz
Algorithm Hash digest
SHA256 90a2a3d253b320544c1b6c2ac35cf8fa129a16588b879547b5e27e7e21eeb92a
MD5 c6495b3cefc1896cb46be879d33a1585
BLAKE2b-256 cf6bef0198efe6b2b591155d42138ba3c8d45f4ecc01f2319c154a324a34fb5e

See more details on using hashes here.

File details

Details for the file linha_fina-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: linha_fina-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for linha_fina-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2d6ee39d04ba5a0611c86723fae98f74dda8cea6802aaf2afeaa936840508fb0
MD5 441c8528bbfee0487451146921ad7f51
BLAKE2b-256 73e459b7344a180b22f2db4305d8699eb9a3f2b1c2cdafbed946c1b9acad4ed6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page