初始化项目,由ModelHub XC社区提供模型
Model: Karlzhy/Content_Review_Model Source: Original Platform
This commit is contained in:
47
.gitattributes
vendored
Normal file
47
.gitattributes
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.arrow filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bin filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bin.* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ftz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.h5 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.joblib filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.model filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.onnx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ot filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.parquet filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pb filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pth filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tflite filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zstandard filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tfevents* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.db* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ark* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
**/*ckpt*data* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
**/*ckpt*.meta filter=lfs diff=lfs merge=lfs -text
|
||||||
|
**/*ckpt*.index filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gguf* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ggml filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.llamafile* filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pt2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.npy filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.npz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pickle filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pkl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.wasm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
||||||
24
1.py
Normal file
24
1.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import json
|
||||||
|
import random
|
||||||
|
from datasets import Dataset, DatasetDict
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
|
||||||
|
# ✅ 加载 train.jsonl
|
||||||
|
with open("train.jsonl", "r", encoding="utf-8") as f:
|
||||||
|
samples = [json.loads(line.strip()) for line in f]
|
||||||
|
|
||||||
|
print(f"总样本数: {len(samples)}")
|
||||||
|
|
||||||
|
# ✅ 随机划分为训练集 / 验证集
|
||||||
|
train_data, val_data = train_test_split(samples, test_size=0.1, random_state=42)
|
||||||
|
|
||||||
|
# ✅ 转换为 HF Dataset
|
||||||
|
dataset = DatasetDict({
|
||||||
|
"train": Dataset.from_list(train_data),
|
||||||
|
"validation": Dataset.from_list(val_data)
|
||||||
|
})
|
||||||
|
|
||||||
|
# ✅ 保存到磁盘(可选)
|
||||||
|
dataset.save_to_disk("qwen_classification_dataset")
|
||||||
|
|
||||||
|
print("✅ 已保存 HuggingFace Dataset 到 ./qwen_classification_dataset")
|
||||||
110
2.py
Normal file
110
2.py
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
import os
|
||||||
|
import torch
|
||||||
|
import inspect
|
||||||
|
from datasets import load_from_disk
|
||||||
|
from transformers import (
|
||||||
|
AutoTokenizer,
|
||||||
|
AutoModelForSequenceClassification,
|
||||||
|
TrainingArguments,
|
||||||
|
Trainer
|
||||||
|
)
|
||||||
|
from peft import LoraConfig, get_peft_model, TaskType
|
||||||
|
from sklearn.metrics import accuracy_score, f1_score
|
||||||
|
|
||||||
|
# ✅ Hugging Face Token
|
||||||
|
hf_token = "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"
|
||||||
|
|
||||||
|
# ✅ 检查 TrainingArguments 来源
|
||||||
|
from transformers import TrainingArguments
|
||||||
|
print("🧠 当前 TrainingArguments 来源:", inspect.getfile(TrainingArguments))
|
||||||
|
|
||||||
|
# ✅ 模型与 LoRA 配置
|
||||||
|
base_model = "Qwen/Qwen2-0.5B-Instruct"
|
||||||
|
output_dir = "./qwen_lora_checkpoint"
|
||||||
|
|
||||||
|
lora_config = LoraConfig(
|
||||||
|
r=8,
|
||||||
|
lora_alpha=16,
|
||||||
|
lora_dropout=0.05,
|
||||||
|
bias="none",
|
||||||
|
task_type=TaskType.SEQ_CLS,
|
||||||
|
target_modules=["q_proj", "v_proj"]
|
||||||
|
)
|
||||||
|
|
||||||
|
# ✅ 加载 tokenizer,并设置 pad_token
|
||||||
|
tokenizer = AutoTokenizer.from_pretrained(
|
||||||
|
base_model,
|
||||||
|
token=hf_token,
|
||||||
|
trust_remote_code=True
|
||||||
|
)
|
||||||
|
tokenizer.pad_token = tokenizer.eos_token
|
||||||
|
pad_token_id = tokenizer.pad_token_id
|
||||||
|
|
||||||
|
# ✅ 加载模型(只加载一次),并设置 pad_token_id
|
||||||
|
base = AutoModelForSequenceClassification.from_pretrained(
|
||||||
|
base_model,
|
||||||
|
token=hf_token,
|
||||||
|
trust_remote_code=True,
|
||||||
|
num_labels=2
|
||||||
|
)
|
||||||
|
base.config.pad_token_id = pad_token_id
|
||||||
|
|
||||||
|
# ✅ 应用 LoRA
|
||||||
|
model = get_peft_model(base, lora_config)
|
||||||
|
|
||||||
|
# ✅ 加载数据
|
||||||
|
dataset = load_from_disk("./qwen_classification_dataset")
|
||||||
|
|
||||||
|
def preprocess(example):
|
||||||
|
return tokenizer(example["text"], truncation=True, padding="max_length", max_length=512)
|
||||||
|
|
||||||
|
tokenized_dataset = dataset.map(preprocess, batched=True)
|
||||||
|
tokenized_dataset = tokenized_dataset.rename_column("label", "labels")
|
||||||
|
tokenized_dataset.set_format(type="torch", columns=["input_ids", "attention_mask", "labels"])
|
||||||
|
|
||||||
|
# ✅ 训练参数(自动使用 GPU / fp16)
|
||||||
|
training_args = TrainingArguments(
|
||||||
|
output_dir=output_dir,
|
||||||
|
per_device_train_batch_size=8,
|
||||||
|
per_device_eval_batch_size=8,
|
||||||
|
learning_rate=2e-5,
|
||||||
|
num_train_epochs=3,
|
||||||
|
evaluation_strategy="epoch",
|
||||||
|
save_strategy="epoch",
|
||||||
|
logging_dir=f"{output_dir}/logs",
|
||||||
|
save_total_limit=2,
|
||||||
|
load_best_model_at_end=True,
|
||||||
|
metric_for_best_model="accuracy",
|
||||||
|
remove_unused_columns=False,
|
||||||
|
report_to="none",
|
||||||
|
fp16=torch.cuda.is_available(), # 自动开启 fp16
|
||||||
|
gradient_accumulation_steps=2,
|
||||||
|
dataloader_pin_memory=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
# ✅ 评估函数
|
||||||
|
def compute_metrics(eval_pred):
|
||||||
|
logits, labels = eval_pred
|
||||||
|
preds = torch.argmax(torch.tensor(logits), dim=1)
|
||||||
|
acc = accuracy_score(labels, preds)
|
||||||
|
f1 = f1_score(labels, preds)
|
||||||
|
return {"accuracy": acc, "f1": f1}
|
||||||
|
|
||||||
|
# ✅ 构建 Trainer
|
||||||
|
trainer = Trainer(
|
||||||
|
model=model,
|
||||||
|
tokenizer=tokenizer,
|
||||||
|
args=training_args,
|
||||||
|
train_dataset=tokenized_dataset["train"],
|
||||||
|
eval_dataset=tokenized_dataset["validation"],
|
||||||
|
compute_metrics=compute_metrics,
|
||||||
|
)
|
||||||
|
|
||||||
|
# ✅ 开始训练
|
||||||
|
trainer.train()
|
||||||
|
|
||||||
|
# ✅ 保存模型和 tokenizer
|
||||||
|
model.save_pretrained(output_dir)
|
||||||
|
tokenizer.save_pretrained(output_dir)
|
||||||
|
|
||||||
|
print(f"✅ 微调完成,模型保存在 {output_dir}")
|
||||||
51
README.md
Normal file
51
README.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
frameworks:
|
||||||
|
- Pytorch
|
||||||
|
license: Apache License 2.0
|
||||||
|
tasks:
|
||||||
|
- text-generation
|
||||||
|
|
||||||
|
#model-type:
|
||||||
|
##如 gpt、phi、llama、chatglm、baichuan 等
|
||||||
|
#- gpt
|
||||||
|
|
||||||
|
#domain:
|
||||||
|
##如 nlp、cv、audio、multi-modal
|
||||||
|
#- nlp
|
||||||
|
|
||||||
|
#language:
|
||||||
|
##语言代码列表 https://help.aliyun.com/document_detail/215387.html?spm=a2c4g.11186623.0.0.9f8d7467kni6Aa
|
||||||
|
#- cn
|
||||||
|
|
||||||
|
#metrics:
|
||||||
|
##如 CIDEr、Blue、ROUGE 等
|
||||||
|
#- CIDEr
|
||||||
|
|
||||||
|
#tags:
|
||||||
|
##各种自定义,包括 pretrained、fine-tuned、instruction-tuned、RL-tuned 等训练方法和其他
|
||||||
|
#- pretrained
|
||||||
|
|
||||||
|
#tools:
|
||||||
|
##如 vllm、fastchat、llamacpp、AdaSeq 等
|
||||||
|
#- vllm
|
||||||
|
---
|
||||||
|
### 当前模型的贡献者未提供更加详细的模型介绍。模型文件和权重,可浏览“模型文件”页面获取。
|
||||||
|
#### 您可以通过如下git clone命令,或者ModelScope SDK来下载模型
|
||||||
|
|
||||||
|
SDK下载
|
||||||
|
```bash
|
||||||
|
#安装ModelScope
|
||||||
|
pip install modelscope
|
||||||
|
```
|
||||||
|
```python
|
||||||
|
#SDK模型下载
|
||||||
|
from modelscope import snapshot_download
|
||||||
|
model_dir = snapshot_download('Karlzhy/Content_Review_Model')
|
||||||
|
```
|
||||||
|
Git下载
|
||||||
|
```
|
||||||
|
#Git模型下载
|
||||||
|
git clone https://www.modelscope.cn/Karlzhy/Content_Review_Model.git
|
||||||
|
```
|
||||||
|
|
||||||
|
<p style="color: lightgrey;">如果您是本模型的贡献者,我们邀请您根据<a href="https://modelscope.cn/docs/ModelScope%E6%A8%A1%E5%9E%8B%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B%E6%A6%82%E8%A7%88" style="color: lightgrey; text-decoration: underline;">模型贡献文档</a>,及时完善模型卡片内容。</p>
|
||||||
5
added_tokens.json
Normal file
5
added_tokens.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"<|endoftext|>": 151643,
|
||||||
|
"<|im_end|>": 151645,
|
||||||
|
"<|im_start|>": 151644
|
||||||
|
}
|
||||||
6
chat_template.jinja
Normal file
6
chat_template.jinja
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system
|
||||||
|
You are a helpful assistant.<|im_end|>
|
||||||
|
' }}{% endif %}{{'<|im_start|>' + message['role'] + '
|
||||||
|
' + message['content'] + '<|im_end|>' + '
|
||||||
|
'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant
|
||||||
|
' }}{% endif %}
|
||||||
28
config.json
Normal file
28
config.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"_name_or_path": "Qwen/Qwen2-0.5B-Instruct",
|
||||||
|
"architectures": [
|
||||||
|
"Qwen2ForCausalLM"
|
||||||
|
],
|
||||||
|
"attention_dropout": 0.0,
|
||||||
|
"bos_token_id": 151643,
|
||||||
|
"eos_token_id": 151645,
|
||||||
|
"hidden_act": "silu",
|
||||||
|
"hidden_size": 896,
|
||||||
|
"initializer_range": 0.02,
|
||||||
|
"intermediate_size": 4864,
|
||||||
|
"max_position_embeddings": 32768,
|
||||||
|
"max_window_layers": 24,
|
||||||
|
"model_type": "qwen2",
|
||||||
|
"num_attention_heads": 14,
|
||||||
|
"num_hidden_layers": 24,
|
||||||
|
"num_key_value_heads": 2,
|
||||||
|
"rms_norm_eps": 1e-06,
|
||||||
|
"rope_theta": 1000000.0,
|
||||||
|
"sliding_window": 32768,
|
||||||
|
"tie_word_embeddings": true,
|
||||||
|
"torch_dtype": "float32",
|
||||||
|
"transformers_version": "4.40.1",
|
||||||
|
"use_cache": true,
|
||||||
|
"use_sliding_window": false,
|
||||||
|
"vocab_size": 151936
|
||||||
|
}
|
||||||
1
configuration.json
Normal file
1
configuration.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"framework":"Pytorch","task":"text-generation"}
|
||||||
14
generation_config.json
Normal file
14
generation_config.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"bos_token_id": 151643,
|
||||||
|
"do_sample": true,
|
||||||
|
"eos_token_id": [
|
||||||
|
151645,
|
||||||
|
151643
|
||||||
|
],
|
||||||
|
"pad_token_id": 151643,
|
||||||
|
"repetition_penalty": 1.1,
|
||||||
|
"temperature": 0.7,
|
||||||
|
"top_k": 20,
|
||||||
|
"top_p": 0.8,
|
||||||
|
"transformers_version": "4.40.1"
|
||||||
|
}
|
||||||
22
m2.py
Normal file
22
m2.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||||
|
from peft import PeftModel, PeftConfig
|
||||||
|
|
||||||
|
peft_path = "./qwen_lora_checkpoint"
|
||||||
|
merged_path = "./qwen2_ad_audit_merged"
|
||||||
|
|
||||||
|
# 读取 LoRA 配置
|
||||||
|
config = PeftConfig.from_pretrained(peft_path)
|
||||||
|
|
||||||
|
# 加载 base 模型
|
||||||
|
base = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, trust_remote_code=True)
|
||||||
|
|
||||||
|
# 注入 LoRA
|
||||||
|
model = PeftModel.from_pretrained(base, peft_path)
|
||||||
|
|
||||||
|
# 合并
|
||||||
|
model = model.merge_and_unload()
|
||||||
|
|
||||||
|
# 保存合并后的完整模型
|
||||||
|
model.save_pretrained(merged_path)
|
||||||
|
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path, trust_remote_code=True)
|
||||||
|
tokenizer.save_pretrained(merged_path)
|
||||||
151388
merges.txt
Normal file
151388
merges.txt
Normal file
File diff suppressed because it is too large
Load Diff
3
model.safetensors
Normal file
3
model.safetensors
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f71f4dc5a0a1da89fbfe62b9187ece8b9b142be679a23409b0fc91440a21e81a
|
||||||
|
size 1976163472
|
||||||
20
special_tokens_map.json
Normal file
20
special_tokens_map.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"additional_special_tokens": [
|
||||||
|
"<|im_start|>",
|
||||||
|
"<|im_end|>"
|
||||||
|
],
|
||||||
|
"eos_token": {
|
||||||
|
"content": "<|im_end|>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false
|
||||||
|
},
|
||||||
|
"pad_token": {
|
||||||
|
"content": "<|endoftext|>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false
|
||||||
|
}
|
||||||
|
}
|
||||||
303112
tokenizer.json
Normal file
303112
tokenizer.json
Normal file
File diff suppressed because it is too large
Load Diff
43
tokenizer_config.json
Normal file
43
tokenizer_config.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"add_prefix_space": false,
|
||||||
|
"added_tokens_decoder": {
|
||||||
|
"151643": {
|
||||||
|
"content": "<|endoftext|>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false,
|
||||||
|
"special": true
|
||||||
|
},
|
||||||
|
"151644": {
|
||||||
|
"content": "<|im_start|>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false,
|
||||||
|
"special": true
|
||||||
|
},
|
||||||
|
"151645": {
|
||||||
|
"content": "<|im_end|>",
|
||||||
|
"lstrip": false,
|
||||||
|
"normalized": false,
|
||||||
|
"rstrip": false,
|
||||||
|
"single_word": false,
|
||||||
|
"special": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additional_special_tokens": [
|
||||||
|
"<|im_start|>",
|
||||||
|
"<|im_end|>"
|
||||||
|
],
|
||||||
|
"bos_token": null,
|
||||||
|
"chat_template": "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}",
|
||||||
|
"clean_up_tokenization_spaces": false,
|
||||||
|
"eos_token": "<|im_end|>",
|
||||||
|
"errors": "replace",
|
||||||
|
"model_max_length": 32768,
|
||||||
|
"pad_token": "<|endoftext|>",
|
||||||
|
"split_special_tokens": false,
|
||||||
|
"tokenizer_class": "Qwen2Tokenizer",
|
||||||
|
"unk_token": null
|
||||||
|
}
|
||||||
1698
train.jsonl
Normal file
1698
train.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
1
vocab.json
Normal file
1
vocab.json
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user