Eland Official Document Generator (LoRA Adapter)

台灣政府公文生成模型 - 將口語化描述轉換為正式公文格式

Model Description

本模型為 Qwen3-4B 的 LoRA adapter,專門用於將口語化的工作指令或文件描述轉換為符合台灣政府規範的正式公文格式。

Training Method

本模型採用 ORPO (Odds Ratio Preference Optimization) 訓練,結合監督式學習與偏好對齊:

  • Chosen: 真實公文範例(正確用語)
  • Rejected: GPT 生成的錯誤用語版本

Supported Document Types

  • - 各機關間公文往復
  • - 內部陳報長官的文件
  • 公告 - 對公眾宣布事項
  • 書函 - 機關間非正式聯繫
  • 開會通知 - 會議通知文件

Document Levels

層級 稱謂 起首語 期望語
上行 鈞部/鈞府 謹查、檢陳 請鑒核、請核示
平行 貴部/貴公司 查、檢送 請查照、請惠復
下行 該部/該府 查、檢送 希查照、希遵辦

Training Details

Parameter Value
Base Model Qwen/Qwen3-4B
Training Method ORPO
LoRA Rank 32
LoRA Alpha 64
Epochs 3
Learning Rate 5e-6
Beta 0.1
Training Samples 498 ORPO pairs
Distribution 166 上行 / 166 平行 / 166 下行

Performance

公文層級 用語準確率
上行文 100%
平行文 100%
下行文 100%
整體 100% (3/3)

Usage

Important: Disable Thinking Mode

Qwen3 模型預設啟用 Thinking Mode。推論時必須關閉,否則會輸出 <think> 標籤:

text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    enable_thinking=False  # Required!
)

With PEFT

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

# Load base model
base_model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-4B",
    torch_dtype=torch.bfloat16,
    device_map="auto",
    trust_remote_code=True,
)

# Load LoRA adapter
model = PeftModel.from_pretrained(base_model, "p988744/eland-official-doc-zh")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B", trust_remote_code=True)

# Prepare input
system_prompt = """你是一位專業的台灣政府公文撰寫助手。

## 公文用語規範

| 層級 | 稱謂 | 期望語 |
|------|------|--------|
| 上行 | 鈞部、鈞府 | 請鑒核、請核示 |
| 平行 | 貴部、貴公司 | 請查照、請惠復 |
| 下行 | 該部、該單位 | 希查照、希遵辦 |

請根據指定的公文層級,使用正確的用語撰寫公文。"""

user_input = "請將以下口語轉換為上行公文:申請增加預算"

messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": user_input}
]

# Generate (IMPORTANT: enable_thinking=False)
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():
    outputs = model.generate(**inputs, max_new_tokens=1024, temperature=0.3)

response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True)
print(response)

Example Outputs

上行文(申請補助)

輸入:申請增加預算

輸出:
主旨:檢陳本單位113年度追加預算申請案,敬請鈞部鑒核惠予補助。
說明:
一、依據「行政機關預算執行要點」規定辦理。
二、本單位因應業務擴展需求,原核定預算已不敷使用,爰申請追加預算新臺幣壹佰萬元整。
三、檢附追加預算明細表乙份。
辦法:
敬請鈞部鑒核惠予補助。

平行文(會議邀請)

輸入:邀請其他學校來參加我們的研討會

輸出:
主旨:敬邀貴校派代表出席本校舉辦之學術研討會,請查照並惠復。
說明:
一、依據本校113年度學術交流計畫辦理。
二、旨揭研討會訂於113年12月20日假本校國際會議廳舉行。
辦法:
請貴校於113年12月15日前惠復參加人員名單。

下行文(執行指示)

輸入:通知下面單位要按照新規定辦事

輸出:
主旨:有關本府新修訂之行政作業規範,請該單位依規定辦理,希查照。
說明:
一、依據本府113年第12次行政會議決議辦理。
二、旨揭規範業經本府核定,自即日起生效。
辦法:
請該單位確實依規定辦理,希查照辦理。

Related Models

References

License

Apache 2.0

Downloads last month
28
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for p988744/eland-official-doc-zh

Base model

Qwen/Qwen3-4B-Base
Finetuned
Qwen/Qwen3-4B
Adapter
(112)
this model