localaiforum
Đăng nhập
Hướng dẫn › Làm việc với mô hình

Cài đặt lấy mẫu

Lấy mẫu là inch cuối cùng của suy luận: mô hình chấm điểm mọi token trong từ vựng, và cài đặt của bạn quyết định phân phối đó thành một token ra sao. Các núm tương tác, nên thứ tự thao tác quan trọng hơn bất kỳ giá trị đơn lẻ.

Pipeline, theo thứ tự

Phần lớn engine áp dụng sampler theo đại khái trình tự này:

  • Logits — điểm thô, một cho mỗi token từ vựng (50k–150k mục).
  • Phạt lặp lại — token thấy gần đây bị đẩy logits xuống.
  • Temperature — logits chia cho T, làm sắc hoặc là flatten toàn bộ.
  • top_k — trần cứng: chỉ k token tốt nhất sống sót.
  • top_p — nhân (nucleus): tập-top nhỏ nhất phủ p khối xác suất.
  • min_p — sàn tương đối: bỏ token dưới min_p × P(token cao nhất).
  • Lấy mẫu — chọn một token từ phần còn lại, nối vào, lặp lại.

Một bộ lọc áp dụng sớm thay đổi thứ mọi bộ lọc sau thấy. Ghi nhớ điều đó khi chồng tầng.

Temperature

Temperature T chia logits trước softmax. T thấp làm sắc phân phối về token đầu; T cao là flatten nó về đều. Cụ thể: logits [5.0, 3.0, 1.0] trên ba token.

T P(đầu) P(thứ hai) P(thứ ba)
0.5 98.1% 1.8% 0.03%
1.0 86.7% 11.7% 1.6%
1.5 75.0% 19.8% 5.2%

Ở T → 0 điều này sụp về greedy: luôn argmax, hoàn toàn tất định.

Dùng temperature 0 (hoặc 0.000001 nơi engine cấm 0) cho trích xuất, phân loại, và mọi thứ bạn muốn tái lập giữa các lần chạy. Chat muốn 0.6–0.8; viết sáng tạo chịu được 0.9–1.2.

top_k: trần cứng

Chỉ giữ k token xác suất cao nhất và lấy mẫu trong số đó. top_k 40 khiến token 41 trở xuống bất khả thi, bất kể gì.

Nó là công cụ thô. k=40 rộng rãi sau "The capital of France is" và lãng phí vô lý ở các vị trí token-hiếm nơi chỉ hai ứng viên quan trọng. Mặc định phổ biến: 40. Tắt nó (0 hoặc -1, tùy engine) khi bạn dùng min_p.

top_p: nhân

Sắp theo xác suất, giữ tập nhỏ nhất có xác suất cộng dồn đạt p, chuẩn hóa lại, lấy mẫu.

Tính thử: xác suất [0.867, 0.117, 0.016] với top_p 0.9. Riêng token đầu phủ 0.867 < 0.9; thêm cái thứ hai đạt 0.984 ≥ 0.9. Bạn lấy mẫu từ hai token, chuẩn hóa lại thành [0.88, 0.12].

Tập ứng viên tự teo khi mô hình tự tin và phình khi nó phân vân. Dải điển hình: 0.9–0.95.

min_p: con cưng của giới địa phương

Chỉ giữ token có xác suất ít nhất min_p × P(token cao nhất). Sàn này tương đối theo thang:

  • Mô hình tự tin 99% → sàn = 0.05 × 0.99 ≈ 0.05: chỉ các đối thủ thật sống sót.
  • Token đầu ở 30% → sàn = 0.05 × 0.30 = 0.015: sự đa dạng sống sót.

Điều đó giết các thất bại kinh điển của top_k/top_p — cắt quá tay một phân phối tự tin, cắt thiếu một phân phối phẳng — và min_p kết hợp an toàn với nhiệt độ cao. Công thức "sáng tạo nhưng mạch lạc": temp 1.0–1.5, min_p 0.05–0.1. Cài đặt cục bộ phổ biến: min_p 0.05 với top_k và top_p tắt.

repeat_penalty (họ llama.cpp)

Trước khi temperature áp dụng, logits của các token xuất hiện trong ngữ cảnh gần đây bị chia cho hình phạt. Giá trị dưới 1.0 ngược lại thúc đẩy lặp lại. Dải hợp lý: 1.0–1.1.

Tác dụng phụ là thật, vì code và dữ liệu lặp token cố ý:

  • Định danh lặp hợp pháp: count trong counter.count.
  • Khóa JSON và ngoặc đóng lặp across mọi đối tượng trong một mảng.
  • Phạt 1.2+ phá code và JSON (rơi ngoặc, "sửa" dấu nháy) từ lâu trước khi nó chữa vòng lặp văn xuôi.

Mô hình instruct hiện đại hiếm khi cần quá 1.05. Cho code và đầu ra có cấu trúc, 1.0 là lựa chọn chính đáng.

Phạt tần suất và hiện diện (kiểu API)

Các API tương thích OpenAI lộ frequency_penalty (lớn dần theo mỗi lần lặp) và presence_penalty (phạt phẳng cho mọi token đã thấy) nơi llama.cpp dùng repeat_penalty. Cùng ý định, toán khác nhau. Không phải engine cục bộ nào cũng tôn trọng cả hai — kiểm tra engine của bạn triển khai gì trước khi chồng chúng lên nhau: tham số engine.

Chồng sampler vào góc tường

temp 0.1 + top_k 10 + top_p 0.5 + min_p 0.2 + repeat_penalty 1.3, áp cùng lúc, có thể che mọi token ứng viên. Triệu chứng: cảnh báo logprob NaN, các bản sinh rỗng, các lệnh hủy "sampling returned zero candidates".

Đó không phải mô hình hỏng — đó là tập ứng viên rỗng. Nới lỏng chồng tầng, mỗi lần một núm. Sàng lọc đầy đủ: khắc phục sự cố.

Bộ thiết lập chạy được

Tác vụ temp top_p min_p repeat_penalty
Chat (tổng quát) 0.7 0.90–0.95 0.05 1.0–1.05
Sinh mã 0.1–0.2 0.9 — 1.0
Trích xuất / phân loại 0 (greedy) — — 1.0
Viết sáng tạo 0.9–1.0 0.95 0.05–0.1 1.05–1.1
Dịch thuật 0.2–0.4 0.9 — 1.0

Hàng chat dạng flag llama.cpp:

llama-server -m model.gguf --temp 0.7 --top-p 0.95 --min-p 0.05 --repeat-penalty 1.05

Mỗi lần đổi một thứ

Coi các bộ thiết lập là điểm khởi đầu, không phải luật. Nếu bạn kéo temperature và top_p cùng lúc mà đầu ra tốt lên, bạn chẳng học được gì về núm nào có tác dụng.

  1. Cố định một bộ thử: 5–10 prompt khảo sát đúng thứ bạn quan tâm.
  2. Lưu đầu ra theo từng cấu hình; diff chúng cạnh nhau.
  3. Đổi đúng một núm mỗi lần chạy.
  4. Lưu người thắng làm bộ thiết lập có tên — mọi engine và UI đều lưu chúng.

Về cách các núm này ánh xạ sang flag engine và trường API: tham số engine.

Liên quan: tham số engine · prompting · đầu ra có cấu trúc · khắc phục sự cố