File size: 3,655 Bytes
8bcb06e d477019 8bcb06e 960a6e6 f2d88e4 960a6e6 f2d88e4 960a6e6 126e4a7 724e0fe 960a6e6 c17f82f 960a6e6 3650c25 5151b61 5fcf207 960a6e6 c17f82f 960a6e6 d477019 960a6e6 c17f82f 960a6e6 5fcf207 960a6e6 f2d88e4 d477019 960a6e6 d477019 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
---
license: cc-by-sa-4.0
inference: false
---
# SLIM-SA-NER
<!-- Provide a quick summary of what the model is/does. -->
**slim-sa-ner** combines two of the most popular traditional classifier functions (**Sentiment Analysis** and **Named Entity Recognition**), and reimagines them as function calls on a specialized decoder-based LLM, generating output consisting of a python dictionary with keys corresponding to sentiment, and NER identifiers, such as people, organization, and place, e.g.:
`{'sentiment': ['positive'], people': ['..'], 'organization': ['..'],`
`'place': ['..]}`
This 3B parameter 'combo' model is designed to illustrate the potential power of using function calls on small, specialized models to enable a single model architecture to combine the capabilities of what were traditionally two separate model architectures on an encoder.
The intent of SLIMs is to forge a middle-ground between traditional encoder-based classifiers and open-ended API-based LLMs, providing an intuitive, flexible natural language response, without complex prompting, and with improved generalization and ability to fine-tune to a specific domain use case.
This model is fine-tuned on top of [**llmware/bling-stable-lm-3b-4e1t-v0**](https://huggingface.co/llmware/bling-stable-lm-3b-4e1t-v0), which in turn, is a fine-tune of stabilityai/stablelm-3b-4elt.
For fast inference, we would recommend the 'quantized tool' version of this model, e.g., [**'slim-sa-ner-tool'**](https://huggingface.co/llmware/slim-sa-ner-tool).
## Prompt format:
`function = "classify"`
`params = "sentiment, person, organization, place"`
`prompt = "<human> " + {text} + "\n" + `
`"<{function}> " + {params} + "</{function}>" + "\n<bot>:"`
<details>
<summary>Transformers Script </summary>
model = AutoModelForCausalLM.from_pretrained("llmware/slim-sa-ner")
tokenizer = AutoTokenizer.from_pretrained("llmware/slim-sa-ner")
function = "classify"
params = "topic"
text = "Tesla stock declined yesterday 8% in premarket trading after a poorly-received event in San Francisco yesterday, in which the company indicated a likely shortfall in revenue."
prompt = "<human>: " + text + "\n" + f"<{function}> {params} </{function}>\n<bot>:"
inputs = tokenizer(prompt, return_tensors="pt")
start_of_input = len(inputs.input_ids[0])
outputs = model.generate(
inputs.input_ids.to('cpu'),
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.eos_token_id,
do_sample=True,
temperature=0.3,
max_new_tokens=100
)
output_only = tokenizer.decode(outputs[0][start_of_input:], skip_special_tokens=True)
print("output only: ", output_only)
# here's the fun part
try:
output_only = ast.literal_eval(llm_string_output)
print("success - converted to python dictionary automatically")
except:
print("fail - could not convert to python dictionary automatically - ", llm_string_output)
</details>
<details>
<summary>Using as Function Call in LLMWare</summary>
from llmware.models import ModelCatalog
slim_model = ModelCatalog().load_model("llmware/slim-sa-ner")
response = slim_model.function_call(text,params=["sentiment", "people", "organization", "place"], function="classify")
print("llmware - llm_response: ", response)
</details>
## Model Card Contact
Darren Oberst & llmware team
[Join us on Discord](https://discord.gg/MhZn5Nc39h) |