แนวคิดพื้นฐานที่ต้องรู้ (พร้อมตัวอย่าง)

บทนี้สรุปแนวคิดพื้นฐานของระบบ Knowledge Base ที่กล่าวถึงในบทประวัติศาสตร์ — แต่ละหัวข้อมี นิยามสั้น + ตัวอย่างรูปธรรม + เกี่ยวกับ OKF ยังไง เพื่อให้นำไปใช้ต่อได้ทันที

1. Knowledge representation (การแทนความรู้)

คือ วิธีเก็บ "สิ่งที่รู้" ให้เครื่องประมวลผลได้ รูปแบบคลาสสิก: production rule (IF-THEN), semantic network (กราฟแนวคิด), frame (slot-filler)

ตัวอย่าง (frame):

FRAME: Bacteroides
  IS-A: Anaerobic-Gram-Negative-Rod
  Gram-stain: negative (default)
  Treatment: [metronidazole, clindamycin]

ใน OKF: แต่ละ concept (ไฟล์ .md) คือหน่วยความรู้หนึ่งหน่วย — frontmatter เก็บ field ที่ query ได้, body เก็บรายละเอียด

2. Ontology (ออนโทโลยี)

คือ ข้อกำหนดความหมายของแนวคิด/ความสัมพันธ์ในโดเมน แบบเครื่องอ่านได้ (มากกว่า taxonomy — มี logic ให้อนุมานได้)

ตัวอย่าง (RDF triple): TimBernersLee — invented — WorldWideWeb (subject–predicate–object)

ใน OKF: ลิงก์ Markdown ระหว่าง concept ทำหน้าที่คล้าย triple แต่ untyped — ชนิดความสัมพันธ์อยู่ในเนื้อความ (เบากว่า OWL มาก)

3. Inverted index (ดัชนีกลับด้าน)

คือ โครงสร้างที่ map "คำ → รายการเอกสารที่มีคำนั้น" หัวใจของ full-text search

ตัวอย่าง:

คำเอกสาร
catD1, D2
dogD3

ค้น "dog" → ตอบ D3 ทันที โดยไม่ต้องสแกนทุกเอกสาร

ใน OKF: okf-index.py สร้าง inverted index ในหน่วยความจำเพื่อทำ BM25

4. TF-IDF & BM25 (การจัดอันดับความเกี่ยวข้อง)

คือ สูตรให้คะแนนว่าเอกสารตรงกับคำค้นแค่ไหน — TF (คำนี้ปรากฏบ่อยในเอกสาร) × IDF (คำนี้หายากทั้งคลัง = เด่น); BM25 ปรับปรุงด้วย length normalization + saturation

ตัวอย่าง: คำ "the" อยู่ทุกเอกสาร → IDF = log(3/3) = 0 → คะแนน 0 (ไม่ช่วยแยกแยะ); คำ "dog" อยู่เอกสารเดียว → IDF สูง → เด่น

ใน OKF: BM25 คือ search หลักของ okf-search.py (เบา ไม่ต้องมี dependency)

5. Embeddings (เวกเตอร์ความหมาย)

คือ การแปลงข้อความเป็นเวกเตอร์ตัวเลข ที่ "ความหมายใกล้ = เวกเตอร์ใกล้"

ตัวอย่าง (word2vec): king − man + woman ≈ queen — ความสัมพันธ์เชิงความหมายกลายเป็นเลขคณิตของเวกเตอร์

ใน OKF: okf-embed.py สร้าง embedding ของ concept ผ่านโมเดลในเครื่อง (Ollama) สำหรับ semantic search

คือ ค้นด้วยความใกล้เคียงของเวกเตอร์ (เช่น cosine similarity) → จับความหมาย/พ้องความที่ keyword พลาด

ตัวอย่าง: ค้น "รถ" แล้วเจอเอกสารที่เขียน "ยานยนต์/automobile" เพราะเวกเตอร์ใกล้กัน

ใน OKF: เป็นชั้นเสริม (opt-in) — ถ้าไม่มี embeddings/Ollama จะ fallback เป็น BM25 อัตโนมัติ

7. RAG (Retrieval-Augmented Generation)

คือ ดึงข้อมูลที่เกี่ยวมาใส่ context ของ LLM ตอนถาม เพื่อ ground คำตอบ (ลด hallucination, อ้างอิงได้)

ตัวอย่าง (5 ขั้น):

flowchart LR
  D["เอกสาร"] --> C["chunk"] --> E["embed"] --> S["vector store"]
  Q["คำถาม"] --> R["retrieve top-k"]
  S --> R --> G["LLM generate
คำตอบที่อ้างอิงได้"]

ใน OKF: wiki = Layer 1 (สังเคราะห์ไว้แล้ว ค้นเจอก็จบ); RAG = Layer 2 (ขุดเอกสารดิบเมื่อ wiki ยังไม่ครอบคลุม)

8. Hybrid search & RRF

คือ รวมผลค้นหลายแบบ (BM25 + semantic) ด้วย Reciprocal Rank Fusion: score(d) = Σ 1/(k + rank) (k=60)

ตัวอย่าง: เอกสารที่ติดอันดับดีทั้งใน BM25 และ semantic จะลอยขึ้นบนสุด โดยไม่มีสัญญาณใดครอบงำ

ใน OKF: okf-search.py ใช้ RRF รวม BM25 + semantic พอดี

9. Knowledge graph (กราฟความรู้)

คือ กราฟของ entity (จุด) + ความสัมพันธ์มีชนิด (เส้น) — "things, not strings" ให้ disambiguation และเหตุผลระดับ entity

ตัวอย่าง:

flowchart LR
  CU["ลูกค้า A"] -->|สั่ง| O["ออเดอร์ 123"]
  O -->|มีสินค้า| P["สินค้า X"]
  CU -->|อยู่กลุ่ม| SEG["ลูกค้าชั้นดี"]

ใน OKF: bundle ทั้งก้อนเป็น knowledge graph (concept = จุด, ลิงก์ = เส้น) — เปิดดูได้ด้วย okf-viz.py

ตารางสรุป

แนวคิดจับอะไรตัวอย่างใน OKF
Knowledge representationโครงสร้างความรู้concept + frontmatter
Ontologyความสัมพันธ์เชิงความหมายลิงก์ Markdown (untyped)
Inverted index / BM25จับคำตรงตัวokf-index.py
Embeddings / vector searchจับความหมายokf-embed.py
RAGground คำตอบ LLMwiki (L1) + RAG (L2)
Hybrid / RRFรวมหลายสัญญาณokf-search.py
Knowledge graphentity + ความสัมพันธ์bundle + okf-viz.py

ดูแหล่งข้อมูลอ้างอิงท้ายเล่ม สำหรับเปเปอร์/มาตรฐานต้นทางของแต่ละแนวคิด