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.0a1.tar.gz (29.5 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.0a1-py3-none-any.whl (20.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: linha_fina-0.1.0a1.tar.gz
  • Upload date:
  • Size: 29.5 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.0a1.tar.gz
Algorithm Hash digest
SHA256 ffb949762e1132a2f6e48c1ba03f6b65268f8c467983d9d5f2b329cd19d0bbe5
MD5 195728658ba1a800fd08da9cd0601a7e
BLAKE2b-256 76d36cd41ab14c7ea927a8cec1dd1f8a8ca83d55e1c1c6e7f9388d0e10975bb8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: linha_fina-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 20.5 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.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 50f8ce9e981251a97e61ff6eb726410f768c057e8a1bc3b2be14586881cda0b9
MD5 db17fa97586375b396ec3edb9bf87162
BLAKE2b-256 9dca70c0ecd49c2eda5330ad32afb4e0e1c47a36d19c5122b5f75dab5c094527

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