LLMOps Bài 1


References:
- Khoá MLOps, LLMOps - tại Full Stack Data Science
+, MLOps Principles
+, llmintro.pdf - Google Drive
Đôi điều chú ý trong việc học:
Begin with the end X3-X10 in Mind. The end with the number?
Mục đích học tập phần này?Muốn đi nhanh: Mentor + Dự án thật + Dạy lại + Networking.
The one thing: Tập trung 1 thứ và chỉ học những thứ bản thân thực sự dùng.
Tuần tự, liên tục, nhất quán: Bỏ dễ bỏ khó
1.1 Chatbot Arena
Chatbot Arena (nay thuộc nền tảng LMArena trên lmarena.ai) là một nền tảng mã nguồn mở giúp đánh giá và xếp hạng các mô hình ngôn ngữ lớn (LLM - Large Language Models) thông qua phản hồi trực tiếp từ cộng đồng người dùng trên khắp thế giới. Mục tiêu của nền tảng là thúc đẩy phát triển AI thông qua quá trình so sánh mẫu tin nhắn trả lời giữa các chatbot AI trong những "trận đấu" ngẫu nhiên, ẩn danh, gọi là "battle" hoặc "arena matches"
Link chatbot: LMArena
Xem bảng xếp hạng tại: Overview Leaderboard | LMArena
Cơ chế xếp hạng trong Chatbot Arena (LMArena) hoạt động như sau:
Người dùng nhập câu hỏi hoặc yêu cầu lên hệ thống và nhận được hai câu trả lời từ hai LLM khác nhau (ẩn danh).
Người dùng so sánh chất lượng các câu trả lời này và lựa chọn phương án tốt nhất (voting theo sở thích cá nhân).
Mỗi cuộc đấu giữa hai chatbot được chấm theo cơ chế Elo giống như trong cờ vua.
Người dùng không biết tên mô hình, chỉ chọn câu trả lời họ thấy hay hơn.
Nếu mô hình A thắng mô hình B, A nhận 1 điểm, B 0 điểm.
Nếu hai mô hình hòa nhau (người dùng chọn "không phân biệt được"), mỗi bên nhận 0.5 điểm.
Điểm Elo được cập nhật sau mỗi trận, và bảng xếp hạng sắp theo Elo trung bình.
⟶ Tóm gọn: Mỗi trận là một ván cờ, thắng được 1 điểm, hòa 0.5 điểm. Bảng xếp hạng dựa trên tổng điểm Elo tích lũy sau nhiều trận.
Câu hỏi đặt ra là: Liệu bảng xếp hạng này có đáng tin cậy không? Dẫn chứng số liệu nào chứng minh được điều đó?
Số lượng dữ liệu và minh chứng cụ thể
- Tính đến hiện tại, Chatbot Arena đã có hơn 3,5 triệu lượt vote (bình chọn), một con số đủ để tạo ra thống kê ổn định và hạn chế ảnh hưởng của các quan điểm cá biệt. [Tuy nhiên, góc nhìn của mình: Các phiên bản AI thương mại có thể cập nhật "ngầm" khiến điểm số biến động khó dự báo.]
Thuật toán Elo
Cách hoạt động: Cập nhật điểm số ngay lập tức sau từng trận đấu.
Ưu điểm: Nhanh, linh hoạt, phù hợp cho môi trường trực tuyến nơi phong độ người chơi thay đổi liên tục (game, cờ vua).
Nhược điểm: Kém ổn định. Bảng xếp hạng cuối cùng có thể thay đổi tùy thuộc vào thứ tự các trận đấu đã diễn ra.
Thuật toán Bradley-Terry (BT)
Cách hoạt động: Nhìn vào toàn bộ các trận đấu cùng một lúc để tính ra một điểm số tổng thể, ổn định.
Ưu điểm: Kết quả rất đáng tin cậy và không bị ảnh hưởng bởi thứ tự trận đấu.
Nhược điểm: Không cập nhật tức thời. Cần phải tính toán lại từ đầu trên toàn bộ dữ liệu khi có trận đấu mới.
Khi nào dùng?
Dùng Elo: Khi bạn cần một bảng xếp hạng được cập nhật liên tục và tức thời.
Dùng Bradley-Terry: Khi bạn có một bộ dữ liệu đầy đủ và muốn có một bảng xếp hạng tổng kết, ổn định nhất.
Ngoài ra qua tìm hiểu về Ranking Algorithms còn rất nhiều thuật toán khác, các bạn có thể search
Thuật Toán | Accuracy | Computational Cost | Scalability | Use Cases | Advantages | Limitations |
Elo | 52-55% | Thấp | Cao | Chess, simple 1v1 | Đơn giản, real-time | Chỉ pairwise, không team |
Bradley-Terry | 55-60% | Trung bình | Trung bình | Product ranking, marketing | Stable, probabilistic | Assumes linear ordering |
TrueSkill | 60-65% | Trung bình | Cao | Team games, Xbox Live | Multi-player, uncertainty | Complex implementation |
TrueSkill 2 | 68% | Cao | Cao | Modern gaming, multi-modal | State-of-the-art accuracy | High computational cost |
Plackett-Luce | 62-67% | Cao | Trung bình | Full rankings, sports | Complete ordering | Computationally intensive |
Rank Centrality | 65-70% | Rất cao | Thấp | Noisy data, research | Theoretical optimal | Not practical for real-time |
PageRank | 60-65% | Trung bình | Cao | Web search, networks | Versatile, proven | Requires link structure |
Personalized PageRank | 65-70% | Cao | Trung bình | Recommendations | Personalized results | Complex parameter tuning |
1.2 MLOps
1.3 LLMOps
Use cases: 1:00:15 => Dựa vào comment dựa lại của người dùng, hàng ngày có luồng pipelin đi vào, collect comment ra dựa vào AI để geẻnation: chẳng hạn summary, đánh giá, summary tổng.
1:05:00 Why LLMs break MLOps [chưa xem kỹ]
1:15:00 RAG
- RAG, gọi API ngon hơn Finetune./
Có 3 loại exteral knowledge: 1. Thông tin kiến thức bên ngoài 2. Thông tin của user (cá nhân hoá ) 3. Thông tin của AI ví dụ: AI tên là gì, tính cách ra sao, ;;;
Entity Extraction có bao phủ triples (HippRAG2) không?
KHÔNG hoàn toàn bao phủ:
Entity extraction chỉ dừng lại ở việc nhận diện các thực thể (ví dụ: “Elon Musk”, “Tesla”, “SpaceX”).
Triples (như trong HippRAG2) là (subject,predicate,object)(subject,predicate,object) — tức là phải trích xuất cả quan hệ/mối liên kết giữa các entity, ví dụ: (“Elon Musk”, “founder of”, “SpaceX”).
Retrieval dựa trên triples cho phép hệ thống tìm kiếm hoặc reasoning theo quan hệ phức tạp, không chỉ dựa trên entity rời rạc.
Trong HippRAG2, retrieval có thể theo dạng: “Tìm mọi công ty mà Elon Musk là founder”, điều này cần có cả entity và relation extraction.
Nếu bạn muốn retrieval thật sự MECE và bao phủ cả khả năng HippRAG2 (retrieval theo triples), cần có:
Entity Retrieval: Truy vấn theo thực thể.
Relation/Triple Retrieval: Truy vấn theo quan hệ giữa entity (subject, predicate, object).
Embedding Retrieval: Truy vấn theo ngữ nghĩa tổng thể (vector similarity).
API/Other Retrieval: Bổ sung thông tin ngoài qua API hoặc external context.
1:28:00 LLMs Ops tools
1:46:40 Overall architechture
Nơi thả bài viết:
Retrieval
Retrieval: - Search Keyword? - Search Embedding: text-3-embedding-large > test-3-embeddn=o > ada2 ; https://huggingface.co/sentence-transformers/paraphrase-multilingual-mpnet-base-v2 > https://huggingface.co/sentence-transformers/all-mpnet-base-v2 +, Hybrid Search: Semantic Search + BM25 0:55:00 (RRF in RAG) Chi tiết cách tính của nó ở đồ án: https://github.com/DoanNgocCuong/ResearchProject_Memory-AugmentedAIAgents_GraduationProject/blob/main/report/20210141_DoanNgocCuong_20242.pdf RRF: https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf Vector DB hỗ trợ hết rồi, có scores hết rồi, cộng lại theo công thức 4-6 là xong - Search Entity Extractor: sử dụng pp truyền thống / LLMs Promopnhiều key cho 1 LLms run hàng loạt bằng LLMs để extract ra JSON. +, Semantic Search + Key of Entity): ví dụ: embedding + location
Đúc Kết Hybrid Search: So Sánh 2 Phương Pháp
1. Weighted Sum (Cộng Điểm Có Trọng Số)
Cách hoạt động:
Lấy điểm số (score) từ mỗi hệ thống tìm kiếm
Chuẩn hóa điểm về cùng thang (nếu cần)
Nhân với trọng số và cộng lại
Sắp xếp theo điểm tổng hợp
Code Implementation:
def weighted_sum_fusion(bm25_results, semantic_results, alpha=0.7, k=10):
"""
bm25_results: [(doc_id, score), ...]
semantic_results: [(doc_id, score), ...]
alpha: trọng số cho BM25 (1-alpha cho semantic)
"""
# Chuẩn hóa điểm về [0,1]
def normalize_scores(results):
if not results:
return []
max_score = max(score for _, score in results)
min_score = min(score for _, score in results)
range_score = max_score - min_score
if range_score == 0:
return [(doc_id, 1.0) for doc_id, _ in results]
return [(doc_id, (score - min_score) / range_score)
for doc_id, score in results]
# Chuẩn hóa
bm25_norm = normalize_scores(bm25_results)
semantic_norm = normalize_scores(semantic_results)
# Tổng hợp điểm
combined_scores = {}
# Thêm điểm BM25
for doc_id, score in bm25_norm:
combined_scores[doc_id] = alpha * score
# Thêm điểm Semantic
for doc_id, score in semantic_norm:
if doc_id in combined_scores:
combined_scores[doc_id] += (1 - alpha) * score
else:
combined_scores[doc_id] = (1 - alpha) * score
# Sắp xếp và trả về top k
return sorted(combined_scores.items(),
key=lambda x: x[1],
reverse=True)[:k]
2. RRF (Reciprocal Rank Fusion)
Cách hoạt động:
Chỉ quan tâm đến thứ hạng (rank), không quan tâm điểm số
Tính điểm dựa trên công thức 1/(k+rank)
Cộng điểm từ tất cả hệ thống
Sắp xếp theo điểm RRF
Code Implementation:
def rrf_fusion(results_lists, k=60, top_k=10):
"""
results_lists: [bm25_results, semantic_results]
k: hằng số RRF (thường = 60)
top_k: số kết quả muốn trả về
"""
rrf_scores = {}
# Duyệt qua từng danh sách kết quả
for results in results_lists:
# Tính RRF score cho mỗi document
for rank, (doc_id, _) in enumerate(results, 1):
if doc_id not in rrf_scores:
rrf_scores[doc_id] = 0
rrf_scores[doc_id] += 1 / (k + rank)
# Sắp xếp và trả về top k
return sorted(rrf_scores.items(),
key=lambda x: x[1],
reverse=True)[:top_k]
3. Ví Dụ Cụ Thể
Dữ liệu đầu vào:
# Kết quả từ BM25 (điểm số khác nhau)
bm25_results = [
("doc_A", 95.5), # Rank 1
("doc_B", 87.2), # Rank 2
("doc_C", 76.3), # Rank 3
("doc_E", 65.1) # Rank 4
]
# Kết quả từ Semantic Search (điểm số 0-1)
semantic_results = [
("doc_B", 0.92), # Rank 1
("doc_D", 0.88), # Rank 2
("doc_A", 0.85), # Rank 3
("doc_F", 0.81) # Rank 4
]
Kết quả Weighted Sum (alpha=0.7):
# Sau chuẩn hóa và tính toán:
# doc_A: 0.7 * 1.0 + 0.3 * 0.5 = 0.85
# doc_B: 0.7 * 0.67 + 0.3 * 1.0 = 0.769
# doc_C: 0.7 * 0.33 + 0.3 * 0 = 0.231
# doc_D: 0.7 * 0 + 0.3 * 0.75 = 0.225
# doc_E: 0.7 * 0 + 0.3 * 0 = 0
# doc_F: 0.7 * 0 + 0.3 * 0 = 0
Final ranking: [
("doc_A", 0.85),
("doc_B", 0.769),
("doc_C", 0.231),
("doc_D", 0.225)
]
Kết quả RRF (k=60):
# Tính RRF scores:
# doc_A: 1/(60+1) + 1/(60+3) = 0.0164 + 0.0159 = 0.0323
# doc_B: 1/(60+2) + 1/(60+1) = 0.0161 + 0.0164 = 0.0325
# doc_C: 1/(60+3) + 0 = 0.0159
# doc_D: 0 + 1/(60+2) = 0.0161
# doc_E: 1/(60+4) + 0 = 0.0156
# doc_F: 0 + 1/(60+4) = 0.0156
Final ranking: [
("doc_B", 0.0325),
("doc_A", 0.0323),
("doc_D", 0.0161),
("doc_C", 0.0159)
]
4. So Sánh Tổng Quan
Tiêu chí | Weighted Sum | RRF |
Input cần thiết | Điểm số gốc | Chỉ cần thứ hạng |
Chuẩn hóa | Cần chuẩn hóa thang điểm | Không cần |
Tham số | Alpha (trọng số) | k (hằng số, thường = 60) |
Ưu điểm | - Linh hoạt điều chỉnh trọng số | |
- Tận dụng được điểm số gốc | - Đơn giản, robust | |
- Công bằng giữa các hệ thống | ||
- Không bị ảnh hưởng bởi thang điểm | ||
Nhược điểm | - Phức tạp khi thang điểm khác nhau | |
- Cần tune trọng số | - Mất thông tin điểm số gốc | |
- Ít linh hoạt | ||
Khi nào dùng | - Thang điểm đồng nhất | |
- Muốn ưu tiên một hệ thống | - Thang điểm khác nhau | |
- Muốn kết hợp công bằng |
Personalize:
Recency Frequency and Monetary Analysis | SpringerLink
Ở bài 2 đoạn RAG + Reranking Retrieval, theo em hiểu nó là: RAG + Recommend System.
- Các đoạn retrieval được reranking dựa trên User Profile (history user, ... của USER)
Em thấy rất giống với việc Mem0 xử lý:
- đó là: Retrieval các fact thông tin của user được lưu bên trong DB (Lịch sử hội thoại của user được lưu lại, xử lý ngầm và tạo ra các câu fact - tức các câu đơn về User) => Điều này làm cho câu trả lời của AI được cá nhân hoá.
Câu hỏi của em là: So với việc các đoạn Retrieval được Ranking dựa vào User Profile với việc câu hỏi của User được đem đi để Retrieval lấy ra thêm các fact liên quan của User
\=> Mem0 có vẻ tổng quan hơn ở chỗ (cái kia thì là Ranking các phần đã được truy vấn, còn Mem0 thì là thêm các thông tin của User liên quan đến câu hỏi ngoài các phần đã được truy vấn)
Approach A: RAG + User Profile Reranking => Flow: Query → Retrieve Docs → Rerank based on User Profile → Generate
Approach B: Mem0-style User Facts Retrieval => # Flow: Query → Retrieve User Facts + Topic Docs → Generate
Subscribe to my newsletter
Read articles from Cường Đoàn Ngọc directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Cường Đoàn Ngọc
Cường Đoàn Ngọc
Name: Cường Educational Background: Data Science and Artificial Intelligence Current Role: AI Engineering at an AI Production company, specializing in Education AI Career Interests: Natural Language Processing (NLP), Large Language Models (LLMs), Retrieval-Augmented Generation (RAG), Workflow Systems, and AI Agents Personal Interests: Lifelong learning, personal development, speed-hacking (accelerated learning/productivity), and networking