Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Linha Fina

linha-fina is an intent engine that adapts to changing reference data at run time. It adds and removes intents dynamically, without a fixed training pass over the whole intent set.

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 the most relevant negative samples are used for training, ranked by token_set_ratio
  • features are one-hot-encoded keyword vectors
  • entity extraction from templates uses simplematch
  • entity extraction from wordlists optionally uses Aho-Corasick

Limitations:

  • long warm-up time (training happens on first inference)
  • does not scale well to a large number of intents
  • does not take word position into account
  • needs retraining whenever a new intent is added

See the docs for concepts, a quickstart, the full API reference, and tuning and troubleshooting guides.

img.png

Install

pip install linha-fina

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)

Related projects

Credits

Originally an experimental research project by TigreGóticoLda, polished and donated to OpenVoiceOS. Its modernization, integration into OpenVoiceOS, and intent benchmarking were funded by the NGI0 Commons Fund.

NGI0 Commons Fund

This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.

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.4.1a2.tar.gz (37.6 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.4.1a2-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

Details for the file linha_fina-0.4.1a2.tar.gz.

File metadata

  • Download URL: linha_fina-0.4.1a2.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for linha_fina-0.4.1a2.tar.gz
Algorithm Hash digest
SHA256 6557cd7e20d87732cc30f84ada38b2218b2da485e5137b3181aab084af22e5ea
MD5 4ce8d5e620a8f06c7a7977dfadb118ff
BLAKE2b-256 3004c57c9b7d111fc6344673788caa6cbc86df912e0ce7bcbcc8fe3669c9f797

See more details on using hashes here.

File details

Details for the file linha_fina-0.4.1a2-py3-none-any.whl.

File metadata

  • Download URL: linha_fina-0.4.1a2-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for linha_fina-0.4.1a2-py3-none-any.whl
Algorithm Hash digest
SHA256 f4fe014be33d330c2434b1c398c3b2ed98d1b38ecbab62ab1e9e89f510625e9c
MD5 bb38f7874cd7024ff36ac0537a0890d3
BLAKE2b-256 7fabc353754c61ea1ebb54eef7b4723af88ad1ff5083cd0c1d70611d1c1f6891

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.1a2 This release

2 files

0.1.0

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