Files
ModelHub XC 5cf077cc53 初始化项目,由ModelHub XC社区提供模型
Model: tianchuang/Qwen-3-8B-RHEA-property-predictor
Source: Original Platform
2026-09-09 03:38:18 +08:00

126 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
license: apache-2.0
language:
- en
metrics:
- accuracy
- recall
- precision
- r_squared
- mse
- mae
base_model:
- Qwen/Qwen3-8B
tags:
- text-generation-inference
- materials-science
- qwen3
- classification
- regression
---
# Model Overview
This repository contains the weights for the **Qwen-3-8B-RHEA-property-predictor**, fine-tuned for refractory high entropy alloys property prediction and phase classification tasks.
## Training Details
### Prompt Template
Training prompts follow the template:
**property prediction task**
> “You are a materials science expert. Predict the {**property name**} for the following refractory high entropy alloy.”
property name includs density, hardness, compressive yield strength at room temperature, compressive strain at room temperature,
compressive yield strength at 1073K, and compressive yield strength at 1273K
**phase classification task**
> “You are a materials science expert. Determine whether the given refractory high entropy alloy has {**single solution phase/intermetallic phase**}.”
Each query was formatted as:
> “{**composition**} alloy prepared by {**process description text**}”
### Hyperparameters & Settings
* **Task:** Binary classification / Regression
* **GPU:** 4 × NVIDIA GeForce RTX 3090
* **Seed:** 42
* **Final Epoch:** 4
* **per-device batch size:** 2
* **gradient accumulation:** 8
* **Training Objective:** Full fine-tuning with CrossEntropyLoss
* **Sequence Length:** 1024 tokens
* **Dataset:**
* Train: `train_data-all.jsonl`
* Validation: `val_data-all.jsonl`
* **Dataset Source:** The datasets are available at (https://huggingface.co/datasets/tianchuang/RHEA-mechanical-property)
---
## Validation Metrics
Metrics are from model-calling evaluation.
**Property prediction (val)**
| Metric | YS task | Strain task | YS-1073 task | YS-1273 task | hardness task | density task |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| R2 | 0.533 | 0.185 | 0.565 | 0.671 | 0.561 | 0.886 |
| MAE | 237.4 | 7.73 | 192.1 | 117.1 | 76.3 | 0.46 |
| RMSE | 324.8 | 9.93 | 251.4 | 149.1 | 109.6 | 0.69 |
**Phase classification (val)**
| Metric | SS task | IM task |
| :--- | :--- | :--- |
| Precision | 0.833 | 0.849 |
| Recall | 0.847 | 0.865 |
| F1 score | 0.840 | 0.857 |
| Accuracy | 0.858 | 0.886 |
---
## How to Use
You can load and run inference with this model using the `transformers` library. The model uses the ChatML prompt format.
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
# 1. Load model and tokenizer
model_id = "tianchuang/Qwen-3-8B-RHEA-property-predictor"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto"
)
# 2. Prepare your input data
instruction = "Is the material BaTiO3 likely synthesizable? Answer with P (positive) or N (negative)."
input_text = "" # Leave empty if no additional context is needed
# 3. Format the input using the ChatML template
if input_text:
prompt = f"<|im_start|>system\nYou are a materials science expert.<|im_end|>\n<|im_start|>user\n{instruction}\n{input_text}<|im_end|>\n<|im_start|>assistant\n"
else:
prompt = f"<|im_start|>system\nYou are a materials science expert.<|im_end|>\n<|im_start|>user\n{instruction}<|im_end|>\n<|im_start|>assistant\n"
# 4. Tokenize and generate response
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
generation_config = GenerationConfig(
max_new_tokens=64,
do_sample=True,
temperature=0.6,
top_p=0.9,
top_k=50,
pad_token_id=tokenizer.eos_token_id,
eos_token_id=tokenizer.eos_token_id,
)
outputs = model.generate(**inputs, generation_config=generation_config)
# 5. Decode and parse the prediction
full_response = tokenizer.decode(outputs[0], skip_special_tokens=False)
assistant_response = full_response.split("<|im_start|>assistant")[-1]
clean_response = assistant_response.replace("<|im_end|>", "").strip()
print(f"Prediction: {clean_response}")