ice-v2-classifier / README.md
Deepnar's picture
Release retained frozen ICE v2 paper checkpoint and inference metadata
b69b2d4 verified
|
Raw History Blame Contribute Delete
5.76 kB
---
license: apache-2.0
language:
- en
base_model: Qwen/Qwen3-Embedding-0.6B
library_name: pytorch
tags:
- conversational-memory
- lsrep
- ice-v2
- reproducibility
- arxiv:2609.16730
---
# ICE v2 / LSREP experiment classifier
This releases the retained original classifier checkpoint selected by frozen
**ICE v2**, the system evaluated in the [LSREP paper](https://arxiv.org/abs/2609.16730).
It is **not the current ICE v3 classifier**. The `v3` in the historical
checkpoint filename denotes a classifier training generation, not ICE's system version.
- Repository: [Deepnar/ice](https://github.com/Deepnar/ice).
- Evaluated source tag: [`v2-paper-eval`](https://github.com/Deepnar/ice/tree/v2-paper-eval).
- Evaluated commit: `0521df9171b4a7d69f82d12d70497138c77b2678`.
- Original path: `models/classifier/ice_classifier_v3_qwen_ft3.pt`.
- Original file size: 212,827 bytes; bare PyTorch state dict.
- SHA-256: `25c758b6a7e5cf449f3e4c8bb250db759d37cb4f0ab7dd8e0c1acd8afbf05831`.
The checkpoint is copied byte for byte, without retraining or re-export.
The frozen Git tag records code and the selected path, but does not contain
checkpoint blobs or a historical checkpoint checksum. This release records the
checksum of the retained original, rather than claiming a checksum existed at evaluation time.
## Architecture and label order
`Linear(384,128) -> ReLU -> Dropout(0.3) -> Linear(128,25)`;
52,505 trainable parameters. Call `eval()` to disable dropout.
The frozen `model.py` is included verbatim. Output coordinates, in order:
```text
0:11 topics:
Software_&_Tech, STEM_&_Academics, Business_&_Finance,
Creative_&_Media, Admin_&_Productivity, Lifestyle_&_Health,
Social_&_Relationships, World_&_Current_Events, Meta_AI,
Null_Noise, General_Reference_&_Trivia
11:22 intents:
Factual_Retrieval, Troubleshooting, Generation, Ideation,
Analysis_&_Summarization, Strategic_Planning, Decision_Making,
Emotional_Processing, Utility_Formatting, Casual_Banter, Open_Exploration
22:25 context:
Zero_Shot, Long_Term_Memory, Real_Time_Search
```
Topic and intent use sigmoid, a strict `> 0.3` threshold, and an argmax
fallback when a block has no selected label. Context uses softmax and argmax,
not independent sigmoids. `max_confidence` is the largest of the 25 decoded
probabilities. Exact order and settings are also in `config.json`.
## Embeddings and preprocessing
Use frozen `Qwen/Qwen3-Embedding-0.6B`, revision
`97b0c614be4d77ee51c0cef4e5f07c00f9eb65b3`, with
`SentenceTransformer(..., device="cpu", truncate_dim=384)`.
The upstream native width is 1024; ICE v2 takes its first 384 coordinates.
Use the snapshot's built-in pooling and normalization. Do **not** add
`normalize_embeddings=True` to `encode()`, renormalize the truncated prefix,
add a query instruction, or use the current ICE v3 native-width embedding path.
Embed the exact instructional prefix produced by `build_input()` in the included
`classifier_inference.py`, not the bare user prompt. With context, ICE v2
selects the last three episodic rows in timestamp order, prefers each summary,
otherwise uses raw text capped at 150 whitespace words, and caps the combined
context at 500 words. The frozen `frozen_classifier.py` preserves the exact
context selection and truncation behavior, including ellipses and the
context-specific prefix. An empty context uses the no-context prefix.
## Minimal learned-head inference
The frozen tag's dependency versions are `torch==2.11.0`,
`sentence-transformers==5.5.1`, and `transformers==5.9.0`.
Use Python 3.11 and `huggingface_hub` to fetch the release:
```python
import hashlib
import sys
from pathlib import Path
import torch
from huggingface_hub import snapshot_download
from sentence_transformers import SentenceTransformer
folder = Path(snapshot_download("Deepnar/ice-v2-classifier"))
sys.path.insert(0, str(folder))
from model import ICEClassifier
from classifier_inference import predict_head
checkpoint = folder / "ice_classifier_v3_qwen_ft3.pt"
assert hashlib.sha256(checkpoint.read_bytes()).hexdigest() == (
"25c758b6a7e5cf449f3e4c8bb250db759d37cb4f0ab7dd8e0c1acd8afbf05831"
)
head = ICEClassifier()
head.load_state_dict(torch.load(checkpoint, map_location="cpu", weights_only=True))
head.eval()
embedder = SentenceTransformer(
"Qwen/Qwen3-Embedding-0.6B",
revision="97b0c614be4d77ee51c0cef4e5f07c00f9eb65b3",
device="cpu", truncate_dim=384,
)
print(predict_head(head, embedder, "Explain how a database index works."))
```
For archival reuse, pin `snapshot_download(..., revision=<release commit>)`
to the upload commit recorded in the GitHub release verification report.
This is a custom PyTorch head, not a Transformers `AutoModel` or hosted pipeline.
The example returns **learned-head predictions**. The complete ICE v2 classifier
also runs the DI3 pre-classifier, hard overrides, and API-level memory policy;
reproduce those through the frozen Git repository. Neither this helper nor the
weights alone reproduce full-system routing or the paper's end-to-end scores.
## Limitations and license
No new classifier accuracy claim is made by this release. The paper's fidelity
audit and negative results remain applicable. Context, preprocessing, rule
overrides and workload affect behavior. Training data and private conversational
corpora are not released, so this is checkpoint/inference reproducibility,
not a claim that private-data training can be independently regenerated.
The ICE head and accompanying ICE code are released under the repository's
Apache-2.0 license; `LICENSE` and `NOTICE` are included. The separately fetched
Qwen base model is also Apache-2.0 according to its pinned upstream model card.
No Qwen base weights, private corpora, caches, secrets, or ICE v3 artifacts are included.