---
title: "Top-k sampling (TH)"
source: "https://systems-analysis.info/int/Top-k_sampling_(TH)"
wiki: "systems-analysis.info/int"
article: "Top-k_sampling_(TH)"
language: "th"
categories:
  - "Category:Core LLM concepts"
  - "Category:Large language models"
  - "Category:Machine learning"
  - "Category:Thai"
revision_id: 8198
wiki_created_at: 2026-09-07T01:13:44Z
wiki_modified_at: 2026-09-07T01:13:44Z
downloaded_at: 2026-09-07T23:23:53Z
---

# Top-k sampling (TH)

**การสุ่มตัวอย่าง Top-k** คือวิธีการ decoding แบบ stochastic ที่ใช้ในโมเดลภาษาแบบ autoregressive รวมถึงโมเดลภาษาขนาดใหญ่ (LLM) สำหรับการสร้างข้อความ เป้าหมายหลักคือการจำกัดการเลือก token ถัดไปให้อยู่ในกลุ่มผู้สมัครที่มีความน่าจะเป็นสูงสุดจำนวนคงที่ ($k$) เพื่อหลีกเลี่ยงการสร้างคำที่มีความน่าจะเป็นต่ำและมักไม่เหมาะสม วิธีนี้เป็นหนึ่งในการปรับปรุงแรกๆ จากการสุ่มตัวอย่างแบบง่าย และเป็นที่นิยมอย่างยาวนานในฐานะวิธีปรับปรุง coherence ของข้อความที่สร้างขึ้น

## คำอธิบายอย่างง่าย

การสุ่มตัวอย่าง Top-k สามารถเข้าใจได้ว่าเป็นการเลือกคำถัดไปไม่จาก**ตัวเลือกทั้งหมด**ที่เป็นไปได้ แต่จาก**รายการจำกัดที่มีความน่าจะเป็นสูงสุดเท่านั้น**

ตัวอย่างเช่น โมเดลกำลังเติมประโยค «วันนี้ข้างนอกมี…». ในพจนานุกรมของโมเดลมีตัวต่อนับพัน: «ฝน», «ลม», «หิมะ», «พายุ» — และที่ไกลออกไปคือ «ควอนตัม» หรืออักขระสุ่ม หากไม่มีข้อจำกัด การสร้างข้อความจะเกิด**การเสื่อมคุณภาพ** (text degeneration) หลายรูปแบบ วิธีการแบบ maximization (greedy decoding, beam search) จะสร้างข้อความที่น่าเบื่อและซ้ำซาก ในขณะที่การสุ่มตัวอย่างแบบบริสุทธิ์โดยไม่ตัดทอนอาจทำให้ข้อความไม่ปะติดปะต่อ เนื่องจากการเลือก token ที่มีความน่าจะเป็นต่ำจาก «หางการแจกแจงที่ไม่น่าเชื่อถือ» Top-k มุ่งแก้ปัญหาที่สองเป็นหลัก — โดยการตัดหางออก จะลดความเสี่ยงของการต่อข้อความที่ไม่มีความหมาย แม้ว่าตัวมันเองจะไม่ขจัดปัญหาความซ้ำซากก็ตาม Top-k บอกว่า: «นำเฉพาะ $k$ คำที่มีความน่าจะเป็นสูงสุด ลืมส่วนที่เหลือ คำนวณความน่าจะเป็นใหม่ในกลุ่มนั้น แล้วเลือกหนึ่งคำแบบสุ่ม»

พูดง่ายๆ คือ:

- โมเดลสร้างรายการตัวต่อที่มีความน่าจะเป็นสูงสุด;
- นำเฉพาะ $k$ ตัวเลือกแรก;
- เลือกหนึ่งตัวเลือกจากรายการนั้นแบบสุ่ม

ยิ่ง $k$ น้อย ผลลัพธ์ยิ่งระมัดระวังและคาดเดาได้มากขึ้น ยิ่ง $k$ มาก การสร้างข้อความยิ่งอิสระและหลากหลายมากขึ้น

**การเปรียบเทียบ:**

- **เมนูร้านอาหาร:** แทนที่จะเลือกแบบสุ่มจากรายการ 5,000 รายการ (เสี่ยงได้ของที่กินไม่ได้) หรือสั่งแต่เมนูยอดนิยมเสมอ (น่าเบื่อ) บริกรจะนำเสนอเฉพาะ 40 รายการที่แนะนำสูงสุด — เลือกจากรายการที่สมเหตุสมผล อย่างไรก็ตาม บางครั้งในส่วนที่ถูกตัดออกอาจมีเมนูพิเศษที่คุณชอบพอดี — นั่นคือราคาของความสามารถในการคาดเดา
- **รายชื่อผู้เข้ารอบสุดท้าย:** จากผู้สมัครงาน 1,000 คน คัดเหลือเพียง 40 ประวัติที่ดีที่สุด แล้วจึงสัมภาษณ์

## แนวคิดและคณิตศาสตร์

ในแต่ละขั้นตอนของการสร้างข้อความ โมเดลภาษามาตรฐานจะให้การแจกแจงความน่าจะเป็น $P(x|x_{1:i - 1})$ ทั่วทั้งพจนานุกรม $V$ การสุ่มตัวอย่าง Top-k ดัดแปลงกระบวนการนี้ดังนี้:

- **การคัดเลือกผู้สมัคร:** จากพจนานุกรมทั้งหมด จะเลือกชุดย่อย $V^{(k)}$ ที่ประกอบด้วย $k$ token ที่มีความน่าจะเป็นสูงสุด
- **การตัดออก:** Logit (การทำนายดิบของโมเดลก่อนการใช้ Softmax) ของ token ทั้งหมดที่ไม่ได้อยู่ใน $V^{(k)}$ จะถูกกำหนดค่าเป็น $- \infty$ ซึ่งหลังจาก normalization จะให้ความน่าจะเป็นเท่ากับ 0 อย่างเคร่งครัด
- **การกระจายใหม่ (normalization):** ความน่าจะเป็นของ $k$ token ที่เหลืออยู่จะถูก scale ให้ผลรวมใหม่เท่ากับ 1
- **การสุ่มตัวอย่าง:** token ถัดไปจะถูกเลือกแบบสุ่มจากการแจกแจงที่ถูกตัดทอนใหม่นี้

ดังนั้น Top-k จึงกำหนด**เกณฑ์แบบเข้มงวด**ตามจำนวนผู้สมัคร: คำที่มีอันดับความน่าจะเป็นต่ำกว่า $k$ จะไม่ถูกเลือกเลย

### ผลกระทบของพารามิเตอร์ $k$

- **$k$ ขนาดเล็ก (เช่น $k = 5$ – $10$):** ทำให้การสร้างข้อความมีความ**อนุรักษ์นิยม**และ**คาดเดาได้**มากขึ้น โมเดลเลือกจากชุดคำที่มีความน่าจะเป็นสูงสุดที่จำกัดมาก ซึ่งเพิ่ม coherence แต่อาจทำให้ข้อความซ้ำซากและน่าเบื่อ
- **$k$ ขนาดใหญ่ (เช่น $k = 50$ – $100$):** เพิ่ม**ความหลากหลาย**และ**ความคิดสร้างสรรค์**ของข้อความ เนื่องจากมีตัวเลือกมากขึ้นในการสุ่มตัวอย่าง อย่างไรก็ตาม สิ่งนี้ยังเพิ่มความเสี่ยงของการรวม token ที่มีความเกี่ยวข้องน้อยหรือไม่เหมาะสม
- **กรณีขอบเขต:**
  - **$k = 1$:** เทียบเท่ากับ**การ decoding แบบ greedy (greedy decoding)** โมเดลจะเลือก token ที่มีความน่าจะเป็นสูงสุดเสมอ
  - **$k$ = ขนาดพจนานุกรม:** เทียบเท่ากับการสุ่มตัวอย่างมาตรฐานจากการแจกแจงทั้งหมด โดยไม่มีการตัดทอน

## ความสำคัญทางประวัติศาสตร์

การสุ่มตัวอย่าง Top-k ในฐานะวิธีการ decoding เป็นหนึ่งในการประยุกต์ใช้ที่ประสบความสำเร็จในช่วงแรกในงานของ Angela Fan และเพื่อนร่วมงาน (2018) ชื่อ «Hierarchical Neural Story Generation» ซึ่งผู้เขียนใช้ top-k random sampling (ด้วย $k = 10$) ในระบบการสร้างเรื่องราวแบบลำดับชั้น และแสดงให้เห็นว่ากลยุทธ์ดังกล่าวมีประสิทธิภาพมากกว่า beam search และการสุ่มตัวอย่างแบบสมบูรณ์อย่างมีนัยสำคัญ ซึ่งเสี่ยงต่อการนำคำที่มีความน่าจะเป็นต่ำเข้ามา

อย่างไรก็ตาม งานสำคัญที่วิเคราะห์ปัญหา**การเสื่อมคุณภาพของข้อความ**อย่างเป็นระบบ และแสดงให้เห็นว่าวิธีการ truncation รวมถึง top-k ปรับปรุงคุณภาพการสร้างข้อความได้อย่างมีนัยสำคัญ คือบทความของ Holtzman et al. (2019) ชื่อ «The Curious Case of Neural Text Degeneration» โดยผู้เขียนเสนอ**top-p (nucleus sampling)**เป็นทางเลือกที่ปรับตัวได้มากกว่า top-k โดยแสดงให้เห็นตาม HUSE metric ของตนว่า nucleus sampling ให้ผลลัพธ์ที่ดีกว่าในบรรดากลยุทธ์ที่เปรียบเทียบ

ตัวอย่างเช่น ในการสาธิตและคำแนะนำช่วงแรกสำหรับ GPT-2 มีการใช้ค่า \`top_k=40\` อย่างแพร่หลาย (ซึ่งกล่าวถึงในโค้ดของ OpenAI ว่าเป็น «generally a good value») ซึ่งช่วยสร้างข้อความที่ยาวและมี coherence

## การเปรียบเทียบกับวิธีการ decoding อื่นๆ

### Top-k vs. Top-p

Top-k ได้รับการเสริมในหลายด้าน และในงานบางประเภทถูกแทนที่ด้วยวิธีการที่พัฒนาขึ้นกว่า ได้แก่ **การสุ่มตัวอย่าง Top-p (nucleus)**

- **จุดอ่อนหลักของ Top-k คือการขาดความสามารถในการปรับตัว** ค่าคงที่ $k$ ไม่ได้คำนึงถึงรูปร่างของการแจกแจงความน่าจะเป็น:
  - เมื่อการแจกแจง**แหลมคม** (โมเดลมั่นใจใน token เพียงไม่กี่ตัว) Top-k อาจขยายการสุ่มตัวอย่างอย่างไม่เป็นธรรมชาติ โดยรวม token ที่มีความน่าจะเป็นต่ำเข้าไปด้วย
  - เมื่อการแจกแจง**แบน** (โมเดลไม่แน่ใจและ token จำนวนมากมีความน่าจะเป็นใกล้เคียงกัน) Top-k อาจตัดทอนตัวเลือกที่เหมาะสมจำนวนมากออกก่อนเวลาอันควร
  - นอกจากนี้ Top-k ยังตัด «หาง» ของการแจกแจงอย่างเด็ดขาด (tail truncation) ทำให้ token ที่เหมาะสมกับบริบทแต่หายากอาจสูญหายไป — วิธีนี้สละความคิดสร้างสรรค์ที่อาจเกิดขึ้นเพื่อแลกกับ coherence
- **Top-p** ในทางตรงกันข้าม **ปรับขนาดการสุ่มตัวอย่างแบบไดนามิก** โดยคัดเลือก token ตามความน่าจะเป็นสะสม ทำให้มีความยืดหยุ่นและเชื่อถือได้มากกว่า
- ในทางปฏิบัติ ทั้งสองวิธีมักใช้**ร่วมกัน**เป็น filter ต่อเนื่อง: วิธีหนึ่งจำกัดจำนวนผู้สมัครอย่างหยาบ อีกวิธีหนึ่งแคบการสุ่มตัวอย่างแบบไดนามิกตามความมั่นใจของโมเดล ลำดับการนำไปใช้ขึ้นอยู่กับการ implement ของ framework เฉพาะ

### Top-k vs. อุณหภูมิ (Temperature)

- **อุณหภูมิ (Temperature)** เปลี่ยนรูปร่างของการแจกแจงความน่าจะเป็นทั้งหมด แต่ไม่ได้ตัด token ออก โดยส่งผลต่อความน่าจะเป็นสัมพัทธ์ของผู้สมัครทั้งหมด
- **Top-k** กำหนด**การตัดอย่างเด็ดขาด** โดยตัด token ที่อยู่นอกกลุ่ม top-$k$ ออกทั้งหมด

ในทางปฏิบัติ Top-k อาจใช้ร่วมกับอุณหภูมิและ Top-p ลำดับการนำ filter ไปใช้ขึ้นอยู่กับ framework: ตัวอย่างเช่น ใน Hugging Face Transformers ขั้นตอนคือ **อุณหภูมิ → Top-k → Top-p** กล่าวคือ อุณหภูมิจะ scale logit ($l^{\prime} = l/\tau$) ก่อน จากนั้น Top-k จะตัด «หาง» ยาวของ token ที่ไม่มีคุณภาพออก และหลังจากนั้น Top-p จะแคบการสุ่มตัวอย่างแบบไดนามิกตามความมั่นใจของโมเดล โดยแต่ละขั้นตอนอาจถูกข้ามขึ้นอยู่กับการตั้งค่า: หาก $top\_ k = 0$ ขั้นตอน Top-k จะไม่ถูกนำไปใช้; หาก $top\_ p = 1.0$ ขั้นตอน Top-p จะไม่ถูกนำไปใช้

## การประยุกต์ใช้ในทางปฏิบัติ

แม้ว่า Top-p จะเป็นวิธีการที่ปรับตัวได้มากกว่าและมักใช้เป็นค่าเริ่มต้นสำหรับการสร้างข้อความแบบเปิด แต่ไม่มีวิธีการ decoding ที่ดีที่สุดในทุกกรณี — การเลือกที่เหมาะสมขึ้นอยู่กับงาน โมเดล และลำดับความสำคัญ (คุณภาพ ความเร็ว ความเสถียร) Top-k ยังคงเป็นพารามิเตอร์ที่ได้รับการสนับสนุนอย่างกว้างขวางในทุก framework หลัก (Hugging Face Transformers, vLLM และอื่นๆ) และถูกใช้งานอย่างแข็งขันทั้งแบบเดี่ยวและร่วมกับวิธีการอื่น

- **ค่าทั่วไป:** ในทางปฏิบัติมักใช้ค่า $k$ ในระดับหลายสิบ token (เช่น 10, 40, 50) แต่ค่าที่เหมาะสมที่สุดขึ้นอยู่กับโมเดลและงาน
- **คำแนะนำ:** สำหรับการสร้างข้อความแบบเปิด มักนิยม Top-p หากใช้ Top-k ควรใช้ร่วมกับอุณหภูมิที่พอเหมาะและเลือกค่า $k$ ให้เหมาะสมกับงานเฉพาะอย่างรอบคอบ Top-k ยังสะดวกในฐานะ «ตัวป้องกัน» เพิ่มเติมเมื่ออุณหภูมิสูง
- **หมายเหตุ:** ใน framework Top-k อาจใช้ร่วมกับ **Repetition Penalty** (การลงโทษสำหรับการซ้ำ) และพารามิเตอร์ `no_repeat_ngram_size` เพื่อป้องกันไม่ให้โมเดลวนซ้ำบนคำเดิมจากรายการ top-$k$

## เอกสารอ้างอิง

### งานพื้นฐาน

- Fan, A. et al. (2018). *Hierarchical Neural Story Generation*. ACL Anthology. arXiv:1805.04833.
- Holtzman, A. et al. (2019). *The Curious Case of Neural Text Degeneration*. arXiv:1904.09751 (ICLR 2020).
- Finlayson, M. et al. (2024). *Closing the Curious Case of Neural Text Degeneration*. OpenReview:dONpC9GL1o (ICLR 2024).

### อ่านเพิ่มเติม

- Meister, C. et al. (2022). *Locally Typical Sampling*. arXiv:2202.00666 (TACL 2023).
- Su, Y.; Lan, T.; Wang, Y.; Yogatama, D.; Kong, L.; Collier, N. (2022). *A Contrastive Framework for Neural Text Generation*. arXiv:2202.06417 (NeurIPS 2022).
- O'Brien, S.; Lewis, M. (2023). *Contrastive Decoding Improves Reasoning in Large Language Models*. arXiv:2309.09117.
- Shi, C. et al. (2024). *A Thorough Examination of Decoding Methods in the Era of Large Language Models*. ACL Anthology. arXiv:2402.06925.
- Ravfogel, S.; Goldberg, Y.; Goldberger, J. (2023). *Conformal Nucleus Sampling*. arXiv:2305.02633.
- Chen, S. J. et al. (2024). *Decoding Game: On Minimax Optimality of Heuristic Text Generation Strategies*. arXiv:2410.03968 (ICLR 2025).
- Sen, J. et al. (2025). *Advancing Decoding Strategies: Enhancements in Locally Typical Sampling for LLMs*. arXiv:2506.05387.

## ดูเพิ่มเติม

- โมเดลภาษาขนาดใหญ่
