วิธีรัน Qwen3 Embedding และ Reranker Models แบบ Local ด้วย Ollama

Mark Ponomarev

Mark Ponomarev

25 June 2025

วิธีรัน Qwen3 Embedding และ Reranker Models แบบ Local ด้วย Ollama

โลกของโมเดลภาษาขนาดใหญ่ (LLMs) กำลังขยายตัวอย่างรวดเร็ว แต่เป็นเวลานานแล้วที่การเข้าถึงความสามารถที่ล้ำสมัยหมายถึงการพึ่งพา API ที่ทำงานบนคลาวด์ การพึ่งพานี้มักมาพร้อมกับความกังวลเรื่องความเป็นส่วนตัว ค่าใช้จ่าย และการปรับแต่ง อย่างไรก็ตาม กระแสกำลังเปลี่ยนไป ต้องขอบคุณโมเดลโอเพนซอร์สที่ทรงพลังและเครื่องมืออย่าง Ollama ที่ทำให้การรันโมเดลเหล่านี้บนเครื่องคอมพิวเตอร์ของคุณเองง่ายกว่าที่เคย

หนึ่งในการพัฒนาล่าสุดที่น่าตื่นเต้นที่สุดคือการเปิดตัวตระกูลโมเดล Qwen3 โดย Alibaba Cloud โมเดลเหล่านี้ โดยเฉพาะอย่างยิ่งเวอร์ชัน embedding และ reranker ที่เชี่ยวชาญ กำลังสร้างมาตรฐานใหม่ในด้านประสิทธิภาพ เมื่อจับคู่กับ Ollama พวกมันจะมอบชุดเครื่องมือที่ทรงพลังสำหรับนักพัฒนาและนักวิจัยที่ต้องการสร้างแอปพลิเคชัน AI ที่ซับซ้อน เช่น เครื่องมือค้นหาขั้นสูงและระบบ Retrieval-Augmented Generation (RAG) ทั้งหมดนี้สามารถทำได้จากฮาร์ดแวร์ของตนเอง

บทความนี้คือคู่มือที่ครอบคลุมและเป็นขั้นตอนของคุณในการควบคุมพลังนี้ เราจะอธิบายว่าโมเดล embedding และ reranker คืออะไร พาคุณไปดูการตั้งค่า Ollama และให้โค้ด Python ที่ใช้งานได้จริงเพื่อรันโมเดล embedding และ reranker ของ Qwen3 สำหรับเวิร์กโฟลว์ RAG แบบครบวงจร

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสาร API ที่สวยงาม หรือไม่?

ต้องการแพลตฟอร์มแบบครบวงจรสำหรับทีมพัฒนาของคุณเพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด หรือไม่?

Apidog ตอบสนองทุกความต้องการของคุณ และ เข้ามาแทนที่ Postman ในราคาที่จับต้องได้มากกว่ามาก!
button

คู่หูทรงพลัง: ทำความเข้าใจโมเดล Embedding และ Reranker

ก่อนที่เราจะลงลึกถึง "วิธีการ" มาทำความเข้าใจ "อะไร" กันก่อน ในบริบทของระบบ RAG โมเดล embedding และ reranker มีบทบาทที่แตกต่างกันแต่เสริมกัน

1. บรรณารักษ์: โมเดล Embedding

ลองนึกภาพห้องสมุดขนาดใหญ่ที่มีหนังสือหลายล้านเล่มแต่ไม่มีระบบจัดหมวดหมู่ การค้นหาข้อมูลคงเป็นฝันร้าย โมเดล embedding เปรียบเสมือนบรรณารักษ์ที่ฉลาดมาก ซึ่งอ่านเอกสารทุกชิ้นและกำหนดตำแหน่งเฉพาะใน "พื้นที่แนวคิด" ที่กว้างใหญ่และมีหลายมิติ

ในทางเทคนิค การสร้าง text embedding เป็นกระบวนการที่แปลงข้อความ (คำ, ประโยค หรือเอกสารทั้งหมด) ให้เป็นเวกเตอร์ตัวเลขที่หนาแน่น เวกเตอร์นี้จะจับความหมายเชิงความหมายของข้อความ เอกสารที่มีความหมายคล้ายกันจะมีเวกเตอร์ที่ "ใกล้เคียง" กันในพื้นที่นี้

เมื่อคุณมีคำถาม โมเดล embedding จะแปลงคำถามของคุณให้เป็นเวกเตอร์ จากนั้นจะค้นหาในห้องสมุดเพื่อหาเวกเตอร์เอกสารที่ใกล้เคียงที่สุด การค้นหาเบื้องต้นนี้มีประสิทธิภาพอย่างเหลือเชื่อและดึงชุดเอกสารที่อาจเกี่ยวข้องจำนวนมากออกมา

2. ที่ปรึกษาผู้เชี่ยวชาญ: โมเดล Reranker

การดึงข้อมูลเบื้องต้นจากโมเดล embedding นั้นรวดเร็ว แต่ก็ไม่สมบูรณ์แบบเสมอไป มันอาจดึงเอกสารที่เกี่ยวข้องกับหัวข้อแต่ไม่ได้ตอบคำถามของผู้ใช้โดยตรง นี่คือจุดที่ reranker เข้ามามีบทบาท

หากโมเดล embedding เป็นบรรณารักษ์ทั่วไป reranker คือผู้เชี่ยวชาญเฉพาะด้าน มันจะนำผลลัพธ์สูงสุดจากการค้นหาเบื้องต้นและทำการวิเคราะห์ที่ละเอียดอ่อนและใช้การประมวลผลที่เข้มข้นมากขึ้น แทนที่จะเปรียบเทียบเวกเตอร์คำถามกับเวกเตอร์เอกสารแยกกัน โมเดล reranker (โดยทั่วไปคือ cross-encoder) จะพิจารณาคำถามและเอกสารแต่ละชิ้น เป็นคู่

การเปรียบเทียบโดยตรงนี้ช่วยให้ reranker สามารถคำนวณคะแนนความเกี่ยวข้องที่แม่นยำยิ่งขึ้น จากนั้นจะจัดเรียงเอกสารใหม่ตามคะแนนนี้ โดยดันผลลัพธ์ที่เกี่ยวข้องที่สุดขึ้นไปด้านบน กระบวนการสองขั้นตอนนี้—การดึงข้อมูลเบื้องต้นที่รวดเร็ว ตามด้วยการจัดเรียงใหม่ที่แม่นยำ—คือเคล็ดลับสู่ประสิทธิภาพ RAG ที่ล้ำสมัย

พบกับโมเดล Qwen3: มาตรฐานใหม่ใน AI โอเพนซอร์ส

ซีรีส์ Qwen3 จาก Alibaba Cloud ไม่ใช่แค่ชุดโมเดลอื่น ๆ แต่เป็นการก้าวกระโดดที่สำคัญใน NLP แบบโอเพนซอร์ส นี่คือสิ่งที่ทำให้โมเดล embedding และ reranker โดดเด่น:

การตั้งค่าสภาพแวดล้อม AI ในเครื่องของคุณ

ตอนนี้ มาลงมือทำกันเลย ขั้นตอนแรกคือการตั้งค่า Ollama และดาวน์โหลดโมเดล Qwen3

ขั้นตอนที่ 1: ติดตั้ง Ollama

Ollama มีคำสั่งติดตั้งแบบบรรทัดเดียวที่ง่ายสำหรับ macOS และ Linux เปิดเทอร์มินัลของคุณและรัน:

curl -fsSL https://ollama.com/install.sh | sh

สำหรับ Windows ดาวน์โหลดตัวติดตั้งอย่างเป็นทางการจาก เว็บไซต์ Ollama

เมื่อติดตั้งเสร็จแล้ว คุณสามารถตรวจสอบว่าทำงานได้หรือไม่โดยรัน:

ollama --version

ขั้นตอนที่ 2: ดาวน์โหลดโมเดล Qwen3

เมื่อ Ollama ทำงานอยู่ คุณสามารถดึงโมเดลจากไลบรารี Ollama ได้ โมเดล Qwen3 โฮสต์อยู่ภายใต้เนมสเปซ dengcao เราจะดึงเวอร์ชันที่แนะนำของโมเดล embedding และ reranker แท็ก :Q5_K_M หมายถึงระดับการควอนไทซ์เฉพาะที่ให้ความสมดุลที่ดีเยี่ยมระหว่างประสิทธิภาพและการใช้ทรัพยากร

ในเทอร์มินัลของคุณ ให้รันคำสั่งต่อไปนี้:

# ดาวน์โหลดโมเดล embedding ขนาด 8B พารามิเตอร์
ollama pull dengcao/Qwen3-Embedding-8B:Q5_K_M

# ดาวน์โหลดโมเดล reranker ขนาด 4B พารามิเตอร์
ollama pull dengcao/Qwen3-Reranker-4B:Q5_K_M

การดาวน์โหลดเหล่านี้อาจใช้เวลาสักครู่ ขึ้นอยู่กับการเชื่อมต่ออินเทอร์เน็ตของคุณ เมื่อเสร็จสมบูรณ์ คุณสามารถดูโมเดลที่มีอยู่ในเครื่องของคุณได้โดยรัน ollama list

ส่วนที่ 1: การสร้าง Embeddings ด้วย Qwen3

เมื่อดาวน์โหลดโมเดล embedding แล้ว มาสร้างเวกเตอร์กัน เราจะใช้ไลบรารี Python อย่างเป็นทางการของ ollama หากคุณยังไม่ได้ติดตั้ง ให้รัน pip install ollama

นี่คือสคริปต์ Python ง่ายๆ เพื่อสร้าง embedding สำหรับข้อความ:

import ollama

# กำหนดชื่อโมเดลตามที่ดาวน์โหลด
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'

def get_embedding(text: str):
    """สร้าง embedding สำหรับข้อความที่กำหนด"""
    try:
        response = ollama.embeddings(
            model=EMBEDDING_MODEL,
            prompt=text
        )
        return response['embedding']
    except Exception as e:
        print(f"เกิดข้อผิดพลาด: {e}")
        return None

# --- ตัวอย่างการใช้งาน ---
sentence = "Ollama ทำให้การรัน LLMs ในเครื่องเป็นเรื่องง่าย"
embedding = get_embedding(sentence)

if embedding:
    print(f"Embedding สำหรับ: '{sentence}'")
    # พิมพ์มิติข้อมูลแรกๆ เพื่อความกระชับ
    print(f"5 มิติแรก: {embedding[:5]}")
    print(f"มิติข้อมูลทั้งหมด: {len(embedding)}")

สคริปต์นี้จะแสดงค่าห้าค่าแรกของเวกเตอร์ที่สร้างขึ้นและขนาดทั้งหมด (ซึ่งคือ 4096 สำหรับโมเดล 8B) เวกเตอร์นี้คือการแสดงตัวเลขของประโยคของเรา พร้อมที่จะจัดเก็บและเปรียบเทียบ

ส่วนที่ 2: การปรับปรุงผลลัพธ์ด้วย Qwen3 Reranker

การใช้ reranker แตกต่างกันเล็กน้อย แทนที่จะเป็น endpoint rerank โดยเฉพาะ เราใช้ endpoint chat มาตรฐาน เราสร้าง prompt เฉพาะที่ขอให้โมเดลทำหน้าที่เป็น reranker โดยรับคำถามและเอกสารเป็นอินพุต และส่งออกคะแนนความเกี่ยวข้อง

มาสร้างฟังก์ชัน Python เพื่อจัดการเรื่องนี้กัน เราจะขอให้โมเดลส่งคืน "ใช่" หรือ "ไม่" ง่ายๆ เพื่อระบุความเกี่ยวข้อง ซึ่งเราสามารถแปลงเป็นคะแนนได้อย่างง่ายดาย

import ollama

# กำหนดชื่อโมเดลตามที่ดาวน์โหลด
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'

def rerank_document(query: str, document: str) -> float:
    """
    ใช้ Qwen3 Reranker เพื่อให้คะแนนความเกี่ยวข้องของเอกสารกับคำถาม
    คืนค่าคะแนน 1.0 สำหรับ 'ใช่' และ 0.0 สำหรับ 'ไม่'
    """
    prompt = f"""
    คุณคือผู้ให้คะแนนความเกี่ยวข้องผู้เชี่ยวชาญ งานของคุณคือประเมินว่า
    เอกสารต่อไปนี้เกี่ยวข้องกับคำถามของผู้ใช้หรือไม่
    โปรดตอบด้วย 'ใช่' หรือ 'ไม่' ง่ายๆ

    คำถาม: {query}
    เอกสาร: {document}
    """
    try:
        response = ollama.chat(
            model=RERANKER_MODEL,
            messages=[{'role': 'user', 'content': prompt}],
            options={'temperature': 0.0} # สำหรับผลลัพธ์ที่กำหนดได้
        )
        answer = response['message']['content'].strip().lower()
        if 'yes' in answer:
            return 1.0
        return 0.0
    except Exception as e:
        print(f"เกิดข้อผิดพลาดระหว่างการจัดเรียงใหม่: {e}")
        return 0.0

# --- ตัวอย่างการใช้งาน ---
user_query = "ฉันจะรันโมเดลในเครื่องได้อย่างไร?"
doc1 = "Ollama เป็นเครื่องมือสำหรับรันโมเดลภาษาขนาดใหญ่บนคอมพิวเตอร์ของคุณเอง"
doc2 = "เมืองหลวงของฝรั่งเศสคือปารีส"

score1 = rerank_document(user_query, doc1)
score2 = rerank_document(user_query, doc2)

print(f"ความเกี่ยวข้องของเอกสาร 1: {'เกี่ยวข้อง' if score1 > 0.5 else 'ไม่เกี่ยวข้อง'} (คะแนน: {score1})")
print(f"ความเกี่ยวข้องของเอกสาร 2: {'เกี่ยวข้อง' if score2 > 0.5 else 'ไม่เกี่ยวข้อง'} (คะแนน: {score2})")

ฟังก์ชันนี้แสดงให้เห็นถึงวิธีการโต้ตอบกับ reranker มันระบุได้อย่างถูกต้องว่า doc1 มีความเกี่ยวข้องสูงกับคำถาม ในขณะที่ doc2 ไม่เกี่ยวข้อง

การนำทุกอย่างมารวมกัน: การใช้งาน RAG อย่างง่าย

ตอนนี้มาถึงส่วนสำคัญกัน เราจะสร้างไปป์ไลน์ RAG ขนาดเล็กที่ใช้โมเดลทั้งสองของเราเพื่อตอบคำถามจากฐานความรู้ขนาดเล็ก สำหรับการค้นหาความคล้ายคลึงกัน เราจะใช้ numpy ติดตั้งด้วย pip install numpy

import ollama
import numpy as np

# --- การกำหนดโมเดล ---
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'

# --- 1. คลังข้อมูลและการสร้าง Embedding แบบออฟไลน์ ---
documents = [
    "ซีรีส์โมเดล Qwen3 พัฒนาโดย Alibaba Cloud",
    "Ollama มีอินเทอร์เฟซบรรทัดคำสั่งที่ง่ายสำหรับการรัน LLMs",
    "โมเดล reranker ปรับปรุงผลการค้นหาโดยการคำนวณคะแนนความเกี่ยวข้องที่แม่นยำ",
    "ในการติดตั้ง Ollama บน Linux คุณสามารถใช้คำสั่ง curl ได้",
    "โมเดล Embedding แปลงข้อความเป็นเวกเตอร์ตัวเลขสำหรับการค้นหาเชิงความหมาย",
]

# ในแอปพลิเคชันจริง คุณจะจัดเก็บ embeddings เหล่านี้ในฐานข้อมูลเวกเตอร์
corpus_embeddings = []
print("กำลังสร้าง embeddings สำหรับคลังเอกสาร...")
for doc in documents:
    response = ollama.embeddings(model=EMBEDDING_MODEL, prompt=doc)
    corpus_embeddings.append(response['embedding'])
print("สร้าง Embeddings แล้ว")

def cosine_similarity(v1, v2):
    """คำนวณความคล้ายคลึงกันของโคไซน์ระหว่างสองเวกเตอร์"""
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

# --- 2. การดึงข้อมูลออนไลน์และการจัดเรียงใหม่ ---
user_query = "ฉันจะติดตั้ง Ollama ได้อย่างไร?"

# สร้าง embedding สำหรับคำถามของผู้ใช้
query_embedding = ollama.embeddings(model=EMBEDDING_MODEL, prompt=user_query)['embedding']

# ทำการดึงข้อมูลเบื้องต้น (การค้นหาเชิงความหมาย)
retrieval_scores = [cosine_similarity(query_embedding, emb) for emb in corpus_embeddings]
top_k_indices = np.argsort(retrieval_scores)[::-1][:3] # รับผลลัพธ์ 3 อันดับแรก

print("\n--- ผลลัพธ์การดึงข้อมูลเบื้องต้น (ก่อนการจัดเรียงใหม่) ---")
for i in top_k_indices:
    print(f"คะแนน: {retrieval_scores[i]:.4f} - เอกสาร: {documents[i]}")

# --- 3. จัดเรียงผลลัพธ์ 3 อันดับแรกใหม่ ---
retrieved_docs = [documents[i] for i in top_k_indices]

print("\n--- กำลังจัดเรียงผลลัพธ์ 3 อันดับแรกใหม่ ---")
reranked_scores = [rerank_document(user_query, doc) for doc in retrieved_docs]

# รวมเอกสารกับคะแนนใหม่และจัดเรียง
reranked_results = sorted(zip(retrieved_docs, reranked_scores), key=lambda x: x[1], reverse=True)

print("\n--- ผลลัพธ์สุดท้าย (หลังการจัดเรียงใหม่) ---")
for doc, score in reranked_results:
    print(f"คะแนนความเกี่ยวข้อง: {score:.2f} - เอกสาร: {doc}")

เมื่อคุณรันสคริปต์นี้ คุณจะเห็นพลังของกระบวนการสองขั้นตอน การดึงข้อมูลเบื้องต้นจะค้นหาเอกสารที่เกี่ยวข้องกับ "Ollama" และ "การติดตั้ง" ได้อย่างถูกต้อง อย่างไรก็ตาม reranker จะระบุเอกสารเกี่ยวกับการใช้ curl ว่าเกี่ยวข้องที่สุดอย่างแม่นยำ โดยดันขึ้นไปอยู่ด้านบนสุดด้วยคะแนนที่สมบูรณ์แบบ

บทสรุป

ตอนนี้คุณได้ตั้งค่าและใช้งานคู่หู AI โอเพนซอร์สที่ทรงพลังที่สุดคู่หนึ่งที่มีอยู่ในปัจจุบันได้สำเร็จแล้ว บนเครื่องของคุณเอง ด้วยการรวมความสามารถที่กว้างขวางของโมเดล embedding Qwen3 เข้ากับความแม่นยำสูงของ reranker Qwen3 คุณสามารถสร้างแอปพลิเคชันที่เข้าใจและประมวลผลภาษาด้วยระดับความละเอียดอ่อนที่เคยเป็นขอบเขตเฉพาะของระบบที่เป็นกรรมสิทธิ์ขนาดใหญ่เท่านั้น

การเดินทางไม่ได้สิ้นสุดเพียงแค่นี้ คุณสามารถทดลองใช้ขนาดโมเดลที่แตกต่างกัน ลองระดับการควอนไทซ์ที่หลากหลาย และรวมไปป์ไลน์นี้เข้ากับแอปพลิเคชันที่ซับซ้อนยิ่งขึ้น ความสามารถในการรันเครื่องมือเหล่านี้ในเครื่องปลดล็อกโลกแห่งความเป็นไปได้ ช่วยให้คุณสร้างสรรค์ นวัตกรรม และสำรวจโดยไม่กระทบต่อความเป็นส่วนตัวหรือประสิทธิภาพ ยินดีต้อนรับสู่ยุคใหม่ของ AI โอเพนซอร์สในเครื่อง

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสาร API ที่สวยงาม หรือไม่?

ต้องการแพลตฟอร์มแบบครบวงจรสำหรับทีมพัฒนาของคุณเพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด หรือไม่?

Apidog ตอบสนองทุกความต้องการของคุณ และ เข้ามาแทนที่ Postman ในราคาที่จับต้องได้มากกว่ามาก!
button

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API