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.1a3.tar.gz (37.7 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.1a3-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: linha_fina-0.4.1a3.tar.gz
  • Upload date:
  • Size: 37.7 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.1a3.tar.gz
Algorithm Hash digest
SHA256 18e960783248ccd2baf72b4fc4ffcb5a103b4899ee2eaa833c8fa52b5e6dca4d
MD5 23c43058be196958678906b3fb419772
BLAKE2b-256 41e11894c234223dd25ad391f372f2b38150e7e1b716737d571f123a14349bd9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: linha_fina-0.4.1a3-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.1a3-py3-none-any.whl
Algorithm Hash digest
SHA256 27ddbf03008ae8278c12af95abf6fe704cc5e03edb2ebdceae374b1fa56f178a
MD5 6dcbb784dc06afafc8057d6444c3f1ce
BLAKE2b-256 64e7dbdc83708ce53fe0f11b05d3746196128ac038baa6fd6883067e5d7817b8

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.1a3 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