bochen2079's picture
|
download
raw
2.64 kB
---
license: mit
base_model: Qwen/Qwen3.5-4B
pipeline_tag: text-classification
library_name: transformers
tags:
- nli
- cross-encoder
- qwen3.5
- reranker
- text-classification
language:
- en
---
# openjev — Qwen3.5 trained as jev model
<video controls src="https://huggingface.co/AlexWortega/openjev/resolve/main/videos/doom_zs_position.mp4" width="720"></video>
<video controls src="https://huggingface.co/AlexWortega/openjev/resolve/main/videos/doom_vision_zeroshot_pixels.mp4" width="720"></video>
![radar](assets/radar_openjev.png)
**openjev** is Qwen3.5 turned into a *jev* model: a single cross-encoder that reads a premise and a hypothesis and
answers with entailment, contradiction or neutral. That one primitive is enough to rerank answers, grade them against a
reference, guard content, and play games in real time: hand it the game state and a few statements about it, and the
argmax entailment is the move. Doom above is played zero-shot, first from the text state and then straight from the
pixels through the Qwen3.5 vision tower. Nothing is trained per task.
## What's inside
* `qwen3.5-4b-nli/` — the 4B jev checkpoint (`Qwen3_5ForSequenceClassification`, 3 labels: `contradiction`, `entailment`, `neutral`, last-token pooling, trained with plain cross-entropy over the three classes).
* `modeling_openjev.py` — `OpenJevCrossEncoder`: `predict`, `rerank`, `grade`, `latents`.
* `code/` — everything used here: the trainer, the multiple-choice harness, Flappy Bird and Doom (text and pixels), the radar.
* `videos/` — Flappy Bird and Doom replays; `results/` — raw JSON for every run and the full report.
## Use it
```python
from modeling_openjev import OpenJevCrossEncoder
jev = OpenJevCrossEncoder("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")
jev.predict([("The bird is 0.05 below the centre of the gap.", "The bird is below the centre of the gap.")])
# -> [[contradiction, entailment, neutral]] probabilities
jev.rerank("Which gas do plants absorb during photosynthesis?", ["oxygen", "carbon dioxide", "nitrogen"])
# -> index of the option with the highest entailment
```
Or with plain transformers:
```python
from transformers import AutoModelForSequenceClassification, AutoTokenizer
tok = AutoTokenizer.from_pretrained("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")
model = AutoModelForSequenceClassification.from_pretrained("AlexWortega/openjev", subfolder="qwen3.5-4b-nli")
text = model.config.nli_template.format(premise="...", hypothesis="...")
```
Reference point: [dleemiller's NLI cross-encoders](https://huggingface.co/blog/dleemiller/nli-xenc-ways-to-use). Licence MIT.

Xet Storage Details

Size:
2.64 kB
·
Xet hash:
ac011e9210fbb83683d137c6e45c51b11478524cb674d202cf2d049d07ddf780

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.