Skip to main content

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)

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

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