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.2.0a1.tar.gz (29.1 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.2.0a1-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: linha_fina-0.2.0a1.tar.gz
  • Upload date:
  • Size: 29.1 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.2.0a1.tar.gz
Algorithm Hash digest
SHA256 229e3bd5f1a583580e7fc30f0bfc49bf0cba5f742d04c2ba3f74ac73c525921b
MD5 4a117202e0b3cdcd5349dc8094f84093
BLAKE2b-256 d6bafb630bb2be23c1dbbd1669b82feb6bb28d535c4fe46c9b116615edc58a32

See more details on using hashes here.

File details

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

File metadata

  • Download URL: linha_fina-0.2.0a1-py3-none-any.whl
  • Upload date:
  • Size: 20.1 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.2.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 a444593fe784d16819a843361888bbcd3d68f8432438c39b5da54ecbe8db050f
MD5 60843064e49e5e03b4e490858bc1abd7
BLAKE2b-256 66121583ad294f1a27e4227ac6667f5e4e0b0f344f231529bb2b50ca733b39a7

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