kyLELEng's picture
Remove hardware lines from README
b535685 verified
---
license: apache-2.0
library_name: transformers
base_model: Qwen/Qwen3.5-9B
pipeline_tag: text-generation
datasets:
- kyLELEng/retailops-instruct-sft
tags:
- retail
- ecommerce
- instruction-tuning
- product-listing
- qwen
- merged
- text-generation
- safetensors
metrics:
- loss
- json_validity
---
# RetailOps-Instruct Qwen3.5-9B
RetailOps-Instruct is a full merged Transformers checkpoint for e-commerce catalog operations.
It is built by merging:
- Base model: [`Qwen/Qwen3.5-9B`](https://huggingface.co/Qwen/Qwen3.5-9B)
- LoRA adapter: [`kyLELEng/retailops-instruct-qwen3.5-9b-lora`](https://huggingface.co/kyLELEng/retailops-instruct-qwen3.5-9b-lora)
No additional training is performed during this merge step.
## Task
The model is intended to turn product metadata, category information, seller notes, and customer reviews into structured listing packages:
- `optimized_title`
- `bullet_points`
- `description`
- `attributes`
- `seo_keywords`
- `faq`
- `review_driven_improvements`
- `compliance_notes`
## Training Data
- SFT dataset: [`kyLELEng/retailops-instruct-sft`](https://huggingface.co/datasets/kyLELEng/retailops-instruct-sft)
- Sources in v1:
- `AI4H/EC-Guide`
- `McAuley-Lab/Amazon-Reviews-2023`
- `McAuley-Lab/Amazon-C4`
## Training Summary
- Method: LoRA SFT, then merged into the base model
- LoRA rank: 64
- LoRA alpha: 128
- LoRA dropout: 0.05
- Max sequence length: 2048
## Evaluation
Final adapter eval before merge:
```json
{
"json_validity_rate": 0.5,
"avg_required_field_completion": 0.171875,
"num_generation_eval_samples": 8
}
```
No-thinking generation check:
```json
{
"inference_mode": "tokenizer.apply_chat_template(..., enable_thinking=False) when supported",
"num_generation_eval_samples": 24,
"json_validity_rate": 1.0,
"listing_num_samples": 13,
"listing_json_validity_rate": 1.0,
"listing_avg_required_field_completion": 0.7980769230769231
}
```
## Recommended Inference
Qwen3.5 models may emit reasoning text by default. For this RetailOps model, use no-thinking mode when available:
```python
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False,
)
```
## Example
```python
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "kyLELEng/retailops-instruct-qwen3.5-9b"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{"role": "system", "content": "You are RetailOps-Instruct, an e-commerce catalog optimization assistant. Return exactly one valid JSON object. Do not invent unsupported product features. Use product metadata and reviews as the source of truth."},
{"role": "user", "content": "Given the product metadata, category, and customer reviews, generate an optimized product listing package.\n\nINPUT:\n" + json.dumps({
"category": "Home & Kitchen > Kitchen & Dining > Small Appliances",
"brand": "ExampleBrand",
"raw_title": "Portable Electric Kettle",
"raw_description": "Small kettle for boiling water.",
"product_specs": {"capacity": "1.0L", "material": "stainless steel", "safety": "auto shut-off"},
"positive_reviews": ["Heats water quickly.", "Good size for small apartments."],
"negative_reviews": ["The instructions were unclear.", "The outside gets warm after use."],
"brand_voice": "clear, practical, trustworthy"
}, ensure_ascii=False, indent=2)},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False,
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(**inputs, max_new_tokens=900, do_sample=False)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))
```
## Merge Smoke Test
```json
{
"input": {
"category": "Home & Kitchen > Kitchen & Dining > Small Appliances",
"brand": "ExampleBrand",
"raw_title": "Portable Electric Kettle",
"raw_description": "Small kettle for boiling water.",
"product_specs": {
"capacity": "1.0L",
"material": "stainless steel",
"safety": "auto shut-off"
},
"positive_reviews": [
"Heats water quickly.",
"Good size for small apartments."
],
"negative_reviews": [
"The instructions were unclear.",
"The outside gets warm after use."
],
"brand_voice": "clear, practical, trustworthy"
},
"generated": "{\"optimized_title\": \"Portable Electric Kettle\", \"bullet_points\": [\"Small kettle for boiling water.\"], \"description\": \"Small kettle for boiling water.\", \"seo_keywords\": [\"kettle\", \"small\", \"portable\", \"electric\", \"boiling\", \"water\", \"examplebrand\", \"home\", \"kitchen\", \"dining\"], \"attributes\": {\"brand\": \"ExampleBrand\", \"category\": \"Home & Kitchen > Kitchen & Dining > Small Appliances\", \"features\": [\"stainless steel\", \"auto shut-off\"], \"specifications\": {\"capacity\": \"1.0L\", \"material\": \"stainless steel\", \"safety\": \"auto shut-off\"}}, \"review_driven_improvements\": [\"Highlight review-supported strengths: water, heats, quickly, good, size\", \"Clarify or avoid overclaiming around reported issues: instructions, were, unclear, outside, gets\", \"Do not contradict the supplied customer review evidence.\"], \"faq\": [{\"question\": \"Who is the brand?\", \"answer\": \"ExampleBrand\"}, {\"question\": \"What category does this product fit?\", \"answer\": \"Home & Kitchen > Kitchen & Dining > Small Appliances\"}], \"compliance_notes\": [\"No unsupported product features added.\", \"No medical, safety, or durability claims added unless present in the input.\"]}"
}
```
## Limitations
- The model can still produce unsupported claims; downstream validation is recommended.
- This is not a compliance certification system.
- Outputs should be checked before production publishing.