ทำความเข้าใจอัลกอริทึมค้นหาข้อความแบบเต็ม BM25
(emschwartz.me)- BM25 ยังถูกใช้อย่างแพร่หลายในงานค้นหาข้อความแบบเต็มที่ต้องการการจับคู่คีย์เวิร์ดอย่างแม่นยำ และเป็นหนึ่งในแกนหลักของ hybrid search ที่ช่วยเสริมการค้นหาด้วย vector similarity
- เพื่อจัดอันดับเอกสารโดยไม่ต้องคำนวณความน่าจะเป็นโดยตรง BM25 จะบวกน้ำหนักของแต่ละคำในคิวรี แล้วนำเอกสารที่ดูมีความเกี่ยวข้องสูงขึ้นมาไว้ด้านหน้า
- คะแนนประกอบด้วย IDF, ความถี่ของคำในเอกสาร และการ normalize ตามความยาวเอกสาร โดยคำที่พบได้น้อยจะมีผลมากกว่า ส่วนการปรากฏซ้ำจะให้รางวัลเพิ่มขึ้นน้อยลงเรื่อย ๆ
k1ใช้ควบคุมความเร็วในการลดผลตอบแทนของการปรากฏซ้ำ ส่วนbใช้ควบคุมความแรงของการ normalize ตามความยาวเอกสาร โดยทั่วไปมักใช้k1=1.2~2,b=0.75- คะแนน BM25 ไม่ใช่ความน่าจะเป็นของความเกี่ยวข้องจริง จึงใช้เป็นค่ามาตรฐานสำหรับเปรียบเทียบทั่วไปได้ยาก และจะมีความหมายเมื่อเปรียบเทียบภายใน คอลเลกชันเอกสารเดียวกัน
ปัญหาการค้นหาที่ BM25 พยายามแก้
- BM25 หรือ Best Match 25 เป็นอัลกอริทึมที่ใช้กันอย่างแพร่หลายในงานค้นหาข้อความแบบเต็ม
- ถูกใช้เป็นค่าเริ่มต้นใน Lucene/Elasticsearch และ SQLite เป็นต้น
- ช่วงหลัง hybrid search ซึ่งผสานการค้นหาข้อความแบบเต็มกับการค้นหาด้วย vector similarity กลายเป็นเรื่องพบได้ทั่วไป
- ในฟีดคอนเทนต์แบบปรับตามบุคคล การใช้เฉพาะการค้นหาด้วย vector similarity อาจยังจัดการคีย์เวิร์ดที่ต้องการความแม่นยำได้ไม่พอ
- หากความสนใจคือ
Solid.jsการใช้เฉพาะการค้นหาด้วย vector similarity อาจทำให้คอนเทนต์เกี่ยวกับ React ปรากฏมากกว่า Solid
- หากความสนใจคือ
- คำถามหลักคือ จะสามารถเปรียบเทียบคะแนน BM25 ของเอกสารหนึ่งข้ามหลายคิวรี เพื่อ判断ว่าเอกสารนั้นตรงกับคิวรีใดมากที่สุดได้หรือไม่
หลักการจัดอันดับตามความน่าจะเป็นและแนวทางของ BM25
- เป้าหมายของการค้นหาข้อความแบบเต็มคือการหา เอกสารที่เกี่ยวข้องมากที่สุด จากชุดเอกสารที่เป็นไปได้ โดยอิงกับคิวรี
- เนื่องจากไม่สามารถรู้ความเกี่ยวข้องจริงได้อย่างแน่ชัด การค้นหาจึงพยายามเรียงลำดับตาม ความน่าจะเป็น ที่เอกสารจะเกี่ยวข้องกับคิวรี
- แนวคิดนี้เรียกว่า Probability Ranking Principle
- การค้นหาแบบอิงคำศัพท์อย่าง BM25 ใช้เพียงคิวรีและคุณลักษณะของเอกสารภายในคอลเลกชันเอกสารเท่านั้น
- การค้นหาด้วย vector similarity สามารถใช้โมเดล embedding ที่ฝึกจากคลังข้อความภายนอก เพื่อแทนความหมายของคิวรีและเอกสารได้
องค์ประกอบของคะแนน BM25
- BM25 คำนวณคะแนนโดยผสมผสานสัญญาณหลายอย่างจากคิวรีและคอลเลกชันเอกสาร
-
คำในคิวรี
- หากคิวรีค้นหาประกอบด้วยหลายคำ จะคำนวณคะแนนของแต่ละคำแล้วนำมาบวกกัน
-
ความถี่เอกสารผกผัน (IDF)
- แสดงว่าคำค้นหาหนึ่ง ๆ พบได้น้อยเพียงใดในคอลเลกชันเอกสารทั้งหมด
- คำทั่วไปอย่าง
the,andถูกมองว่ามีปริมาณข้อมูลต่ำ และเพิ่มความสำคัญให้คำที่พบได้น้อย
-
ความถี่ของคำในเอกสาร
- สะท้อนว่าคำค้นหาปรากฏในเอกสารเฉพาะหนึ่ง ๆ กี่ครั้ง
- มองว่าหากคำเดียวกันปรากฏซ้ำมากขึ้น โอกาสเกี่ยวข้องก็สูงขึ้น แต่ BM25 จะใช้ ผลตอบแทนที่ลดลง กับการปรากฏซ้ำ
-
ความยาวเอกสาร
- เอกสารยาวอาจมีคำค้นหาปรากฏมากกว่าเพียงเพราะยาวกว่า
- BM25 เปรียบเทียบความยาวเอกสารกับความยาวเอกสารเฉลี่ย เพื่อ normalize ไม่ให้เอกสารยาวได้คะแนนสูงอย่างไม่เป็นธรรม
ส่วนต่าง ๆ ของสูตร BM25
- คะแนนรวมของ BM25 สำหรับเอกสาร
DและคิวรีQเป็นการบวกคะแนนของแต่ละคำในคิวรีq_iD: เอกสารเป้าหมายQ: คิวรีทั้งหมดn: จำนวนคำในคิวรีq_i: คำแต่ละคำในคิวรี
-
IDF: ให้ค่าน้ำหนักสูงขึ้นกับคำที่พบได้น้อยในคอลเลกชัน
- ส่วน IDF คำนวณว่าคำในคิวรีพบได้น้อยเพียงใดในคอลเลกชันเอกสารทั้งหมด
N: จำนวนเอกสารทั้งหมดในคอลเลกชันn(q_i): จำนวนเอกสารที่มีคำในคิวรีN - n(q_i): จำนวนเอกสารที่ไม่มีคำในคิวรี- คำทั่วไปปรากฏในเอกสารจำนวนมาก จึงมีผลต่อคะแนนน้อยลง
- คำที่พบได้น้อยปรากฏในเอกสารเพียงจำนวนน้อย จึงถูกสะท้อนในคะแนนมากกว่า
- ค่า
0.5และ1ในสูตรมีบทบาทในการลดความผันผวนของผลลัพธ์เมื่อคำพบได้น้อยมากหรือพบได้บ่อยมาก
-
ความถี่ของคำ: สะท้อนการซ้ำ แต่ไม่ให้รางวัลอย่างไม่จำกัด
- ความถี่ของคำในเอกสารสะท้อนว่าคำในคิวรีหนึ่ง ๆ ปรากฏในเอกสารเฉพาะหนึ่งบ่อยเพียงใด
f(q_i, D): ความถี่ที่คำในคิวรีq_iปรากฏในเอกสารDk1: พารามิเตอร์สำหรับปรับจูน ซึ่งโดยทั่วไปตั้งไว้ระหว่าง1.2ถึง2- BM25 สะท้อนการซ้ำของคำลงในคะแนน แต่ยิ่งซ้ำมาก การเพิ่มขึ้นของคะแนนเพิ่มเติมก็ยิ่งลดลง
k1ควบคุมว่ารางวัลจากการซ้ำของคำจะลดลงเร็วเพียงใด
-
การ normalize ตามความยาวเอกสาร: ปรับความได้เปรียบของเอกสารยาว
- การ normalize ตามความยาวเอกสารเปรียบเทียบความยาวของเอกสารเป้าหมายกับความยาวเฉลี่ยของเอกสารในคอลเลกชัน
|D|: ความยาวของเอกสารเป้าหมายavgdl: ความยาวเอกสารเฉลี่ยของคอลเลกชันb: พารามิเตอร์สำหรับปรับจูนที่ควบคุมความแรงของการ normalize ตามความยาวเอกสาร- เอกสารที่ยาวกว่าค่าเฉลี่ยมีโอกาสที่คำค้นหาจะปรากฏบ่อยกว่า จึงถูกลงโทษในตัวส่วนของสูตรสุดท้าย
- หาก
b=0การ normalize ตามความยาวเอกสารจะถูกปิด และหากb=1จะถูกใช้เต็มที่ - โดยทั่วไป
bตั้งไว้ที่0.75
แนวคิดหลักของ BM25
- BM25 อิงกับ Probability Ranking Principle แต่แทบเป็นไปไม่ได้ที่จะคำนวณ ความน่าจะเป็นจริง ของความเกี่ยวข้องของเอกสาร
- สิ่งสำคัญในการค้นหาคือ ลำดับ ของเอกสารมากกว่าค่าความน่าจะเป็นที่แม่นยำ ดังนั้นจึงทำให้การคำนวณใช้งานได้จริงด้วยการตัดพจน์ที่ไม่ส่งผลต่อลำดับออกจากสูตร
- ด้วยเหตุนี้ BM25 จึงคำนวณน้ำหนัก ไม่ใช่ความน่าจะเป็นโดยตรง
- Robertson/Sparck Jones Weight เป็นวิธีประมาณความน่าจะเป็นโดยใช้จำนวนเอกสารที่เกี่ยวข้องและจำนวนเอกสารที่มีคำในคิวรี
r: จำนวนเอกสารที่เกี่ยวข้องซึ่งมีคำในคิวรีN: จำนวนเอกสารทั้งหมดในคอลเลกชันR: จำนวนเอกสารที่เกี่ยวข้องในคอลเลกชันn: จำนวนเอกสารที่มีคำในคิวรี
- ข้อจำกัดใหญ่ของวิธีนี้คือ ต้องรู้ก่อนว่าเอกสารใดเกี่ยวข้อง
สมมติฐานว่า “เอกสารส่วนใหญ่ไม่เกี่ยวข้อง”
- ผู้พัฒนา BM25 ตั้งสมมติฐานว่า สำหรับคิวรีใด ๆ เอกสารส่วนใหญ่ไม่เกี่ยวข้อง
- หากมองว่าจำนวนเอกสารที่เกี่ยวข้องน้อยจนละเลยได้ ก็สามารถตั้ง
R = r = 0ได้ - เมื่อนำค่านี้ไปแทนในสูตร Robertson/Sparck Jones Weight จะได้รูปแบบที่แทบเหมือนกับพจน์ IDF ที่ใช้ใน BM25
- เพราะยังคงพื้นฐานเชิงทฤษฎีเดียวกันไว้ได้โดยไม่ต้องขอข้อมูลความเกี่ยวข้องล่วงหน้า BM25 จึงใช้งานได้จริงกว่ามาก
- Victor Lavrenko เรียกสิ่งนี้ว่า "very impressive leap of faith"
ขอบเขตของการเปรียบเทียบคะแนน BM25
- โดยทั่วไปคะแนน BM25 เปรียบเทียบโดยตรงได้ยาก
- ไม่ได้สร้างคะแนนความน่าจะเป็นระหว่าง 0 ถึง 1
- ไม่ใช่อัลกอริทึมที่พยายามประมาณความน่าจะเป็นจริงว่าเอกสารเกี่ยวข้องหรือไม่
- มุ่งเน้นการประมาณลำดับความเป็นไปได้ของความเกี่ยวข้องต่อคิวรีภายในคอลเลกชันเฉพาะ
- คะแนน BM25 ที่สูงกว่าสื่อว่าเอกสารมีแนวโน้มเกี่ยวข้องมากกว่า แต่ไม่ใช่ความน่าจะเป็นของความเกี่ยวข้องจริง
- สำหรับเอกสารเดียวกันภายในคอลเลกชันเอกสารเดียวกัน สามารถเปรียบเทียบคะแนน BM25 ของหลายคิวรีได้
- เนื่องจาก BM25 บวกคะแนนของแต่ละคำในคิวรี จึงอาจถือได้ว่าในเชิงความหมายไม่มีความแตกต่างระหว่างการเปรียบเทียบคะแนนของคำในคิวรีสองคำกับการเปรียบเทียบคะแนนของคิวรีเต็มสองชุด
- ข้อจำกัดสำคัญคือ เอกสารเดียวกัน คอลเลกชันเดียวกัน
- BM25 ใช้ IDF และความยาวเอกสารเฉลี่ยภายในคอลเลกชัน
- หากคอลเลกชันเปลี่ยน คะแนนก็อาจเปลี่ยนได้ จึงไม่รับประกันการเปรียบเทียบคะแนนข้ามเวลา
- ในฟีดคอนเทนต์แบบปรับตามบุคคล สามารถใช้โดยรันการค้นหาข้อความแบบเต็มสำหรับความสนใจแต่ละอย่างของผู้ใช้ แล้วเปรียบเทียบคะแนน BM25 เพื่อ判断ว่าคอนเทนต์ใดตรงกับความสนใจใดมากกว่า
อ่านเพิ่มเติม
- หากต้องการเจาะลึกทฤษฎีและประวัติของ BM25 สามารถดูงานนำเสนอปี 2016 ของ Britta Weber วิศวกร Elastic เรื่อง Improved Text Scoring with BM25
- The Probabilistic Relevance Framework: BM25 and Beyond โดย Stephen Robertson และ Hugo Zaragoza กล่าวถึงกรอบความเกี่ยวข้องเชิงความน่าจะเป็นของ BM25
- การเปรียบเทียบ BM25 กับอัลกอริทึมค้นหาข้อความแบบเต็มอื่น ๆ ดูได้ที่ Comparing full text search algorithms: BM25, TF-IDF, and Postgres
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ปกติใช้ https://typesense.org/ สำหรับการค้นหาทั่วไป ตอนนี้รองรับ การค้นหาแบบไฮบริด แล้วเลยสงสัยว่ามีใครเคยใช้บ้างไหม
ดีใจที่เห็น Typesense ถูกพูดถึงที่นี่ สำหรับ โปรเจ็กต์ RAG ขนาดเล็กมักจะเหมาะมาก แต่แปลกที่ยังไม่ค่อยเป็นที่รู้จัก
ดีพลอยง่าย ค่าตั้งต้นก็สมเหตุสมผล เอกสารก็ดี และทำคลัสเตอร์ก็ไม่ยาก แต่ถ้าต้องลงลึกมากขึ้นก็ยังทรงพลังและให้ประสิทธิภาพได้ดีพอ
แต่ถ้าใช้โมเดล embedding จากผู้ให้บริการภายนอก latency จะสูงถึง 500ms+ แบบเกินรับได้ ดังนั้นโฮสต์เองในคลัสเตอร์จะดีกว่า
คุณภาพของการค้นหาแบบไฮบริดดี แต่ตัวเลือกในการปรับจูนมีจำกัดมาก และคะแนนก็ค่อนข้างไม่โปร่งใส นอกจากใช้สำหรับจัดอันดับภายในชุดผลลัพธ์
ในช่วงที่ การค้นหาเชิงความหมายแบบเวกเตอร์ พัฒนาไปมาก อยากรู้ว่าตอนนี้ search stack สมัยใหม่ที่ใช้กับไฮบริดระหว่างคีย์เวิร์ด + ความหมายคืออะไร
ไม่นานมานี้ผมได้รับแบบสำรวจราว 3 ล้านรายการที่แต่ละรายการมีฟิลด์คำตอบอิสระ 10 ฟิลด์ และต้องหาสิ่งที่บริษัทควรลงมือจัดการ
ใช้โมเดลจำแนกขนาดเล็กอยู่ไม่กี่ตัว ดู noise ที่โผล่มาใน 10,000 รายการแรก แล้วลบคำที่พบบ่อยออกด้วยมือ จากนั้นให้น้ำหนักกับคำตอบของโมเดล ก็ทำงานได้แทบสมบูรณ์แบบ
งานแบบนี้ใกล้เคียงกับการปรับแต่ง ผลลัพธ์กล่องดำ จากหลายเครื่องมือไปเรื่อย ๆ จนดูดีสำหรับ test case และลูกค้า มากกว่าจะเรียกว่า “การเขียนโปรแกรม”
อ้างอิงไว้ว่า ผมประมวลผลโดยเชื่อมโมเดลขนาดเล็กหลายตัวจาก Hugging Face ด้วย Node.js บนเซิร์ฟเวอร์ขนาดเล็ก
โดยปกติจะรวมผลลัพธ์ด้วย Reciprocal Rank Fusion (RRF)
งานวิจัยของ RRF เรียบง่ายจนน่าประทับใจ และตัวงานมีแค่ 2 หน้า: https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf
งานแนว BM25 ใช้ Elasticsearch, งานค้นหาเวกเตอร์ที่เรียบง่ายและเร็วใช้ Turbopuffer, และสำหรับการคำนวณผลลัพธ์ของบางคำค้นล่วงหน้าหรือคุณสมบัติแบบไดนามิกที่เปลี่ยนบ่อยอย่างราคา ก็อาจใช้ Redis ได้
ผมคิดว่าควรรวมสิ่งเหล่านี้ด้วย แนวทาง scatter/gather
ภายนอก search stack แทบจะมีชั้นบริการ inference สำหรับ reranking อยู่เสมอ และในอุดมคติมันควรเป็นบริการเรียบง่ายคล้ายกับโครงสร้างพื้นฐานแมชชีนเลิร์นนิงอื่น ๆ
เกือบตลอดเวลายังต้องมีการ routing เพื่อทำความเข้าใจคำค้นของผู้ใช้ เช่น ส่ง “ค้นจาก ID” ไปยังระบบหนึ่ง และส่ง “การค้นหาเชิงความหมายแบบ fuzzy” ไปอีกระบบหนึ่ง
พวกมันมีโครงสร้างข้อมูลที่ต่างกันมาก และการค้นหาก็มักครอบคลุม use case ที่แตกต่างกันอย่างกว้างขวาง
การยัดทุกอย่างเข้าไปในระบบเดียวเป็น anti-pattern ในมุมมองของผม
แต่ละระบบเหมาะกับภาระงานคนละแบบ และความสามารถด้าน inference ที่ฝังมาในตัวก็มักตามความเร็วของเครื่องมือแมชชีนเลิร์นนิงทั่วไปที่วิศวกร ML คุ้นเคยไม่ทัน
ผมเคยลองกับ Elasticsearch Learning to Rank แล้ว แต่เป็นงานที่ไร้หวัง
ถึงอย่างนั้น หากจะพยายามรองรับ use case ที่กว้างด้วยสแตกเดียว Vespa น่าจะดีที่สุด
ในฐานะผู้เขียน txtai, txtai implements ดัชนี BM25 ที่มีประสิทธิภาพใน Python ผ่านแพ็กเกจ arrays และเก็บเวกเตอร์ความถี่ของคำไว้ใน SQLite
วิธีทำดัชนีแบบไฮบริดของ txtai รองรับการรวมแบบเชิงนูนเมื่อคะแนน BM25 ถูกทำ normalization แล้ว และรองรับ Reciprocal Rank Fusion (RRF) เมื่อยังไม่ได้ทำ normalization
[1] https://github.com/neuml/txtai
[2] https://neuml.hashnode.dev/building-an-efficient-sparse-keyw...
[3] https://neuml.hashnode.dev/benefits-of-hybrid-search
[4] https://github.com/neuml/txtai/blob/master/src/python/txtai/...
ใช้เทคนิคการค้นหาหลายแบบ เช่น การค้นหาเชิงศัพท์ (bm25, fuzzy search), การค้นหาเชิงความหมาย (embedding), reranking (cross-encoder, Reciprocal Rank Fusion) รวมถึงการ rerank เพื่อเพิ่มความหลากหลายและบรรเทาปัญหา lost-in-the-middle
[1] Langroid - เฟรมเวิร์ก LLM แบบมัลติเอเจนต์ที่สร้างโดยนักวิจัยจาก CMU/UW-Madison https://github.com/langroid/langroid
[2] การใช้งาน DocChatAgent -
https://github.com/langroid/langroid/blob/main/langroid/agen...
เริ่มจากเมธอด answer_from_docs แล้วไล่ตามไปได้เลย
เสริมอีกนิดว่า ถ้าเป็นผู้ก่อตั้ง Kadoa, Kadoa-snack คือหนึ่งในเครื่องมือที่ผมใช้ทุกวันอย่างเพลิดเพลินเพื่อหากระทู้ HN เกี่ยวกับ LLM
เป็นบทความที่ดี
ถ้าจะเสริมพื้นหลังที่หาข้อมูลได้ยากขึ้นอีกหน่อย BM25 ย่อมาจาก “Best Matching 25” และ “best matching” หมายถึงสูตรที่จับคู่คำในคำค้นกับคำในเอกสารเพื่อจัดอันดับและให้น้ำหนักคำ
ส่วน 25 เป็นเพียงหมายเลขลำดับ โดยก่อนหน้านั้นมีสูตรดัดแปลงมาแล้ว 24 แบบ และหลังจากนั้นก็ยังมีแบบดัดแปลงต่อมาอีก แต่หมายเลข 25 ทำงานได้ดีที่สุดจึงถูกเผยแพร่ออกมา
แนวคิดนี้ออกแบบโดย Stephen Robertson และ Karen Spärck Jones (ผู้มีชื่อเสียงจาก IDF) และถูกนำไปใช้งานครั้งแรกในระบบวิจัยการค้นคืนสารสนเทศ OKAPI ของ Robertson
ระบบ OKAPI ถูกใช้เป็นเบนช์มาร์กอยู่หลายปีในงานประจำปี TREC (Text Retrieval Conference) ของ NIST สหรัฐฯ ซึ่งใกล้เคียงกับ “ชิงแชมป์โลก” ด้านระเบียบวิธีของเสิร์ชเอนจินในระดับนานาชาติ
อย่างไรก็ตาม งานนี้มีเป้าหมายเพื่อการเปรียบเทียบและการเรียนรู้ร่วมกันมากกว่าการหาผู้ชนะ และเป็นงานที่น่าแนะนำซึ่งจัดขึ้นทุกเดือนพฤศจิกายนที่เมือง Gaithersburg รัฐ Maryland
นอกจากโมเดลเวกเตอร์สเปซแบบ “ถุงคำ” (สปาร์สเวกเตอร์ของคำ) และโมเดลเชิงความน่าจะเป็นที่ BM25 อยู่ในกลุ่มเดียวกันแล้ว กรอบทฤษฎีสำหรับการจัดอันดับชุดเอกสารเมื่อมีคำค้นกำหนดให้ยังมีอีกมากอย่างน่าทึ่ง และเพิ่มขึ้นอย่างต่อเนื่อง
ตัวอย่างเช่น divergence from randomness, statistical language modeling, Learning to Rank, quantum information retrieval และ neural ranking
ในงานประชุมอย่าง ICTIR หรือ SIGIR ทุกวันนี้ก็ยังมีพาราไดม์การค้นหาแบบใหม่อย่างสิ้นเชิงโผล่มาเป็นครั้งคราว
โดย “statistical language modeling” ในที่นี้ไม่ได้หมายถึง large language models ที่กำลังนิยมกันตอนนี้ เพราะฝั่งนั้นจะอยู่ในหมวด “neural search”
อีกอย่าง ถ้าค้นหา “Quantum IR” คุณอาจเจออินฟราเรดสเปกโทรสโกปีหรือบริษัทซีเมนต์ชื่อเดียวกัน แทนที่จะเป็นบทเรียนเรื่อง quantum information retrieval
แม้ในศตวรรษที่ 21 เทคโนโลยีการค้นหาก็ยังมีความละเอียดอ่อนแบบนี้อยู่
ถ้าอยากลองเปรียบเทียบ BM25 กับทางเลือกอื่นด้วยตัวเอง ขอแนะนำ Terrier ซึ่งเป็นทั้งเสิร์ชเอนจินโอเพนซอร์สและแพลตฟอร์มวิจัยที่พัฒนาโดย University of Glasgow
BM25 มีอายุมากกว่า 25 ปีแล้ว แต่ก็ยังพิสูจน์ตัวเองว่าเป็น baseline ที่เอาชนะได้ยาก และมักถูกใช้เป็นจุดอ้างอิงเมื่อเปรียบเทียบวิธีใหม่ ๆ
ส่วน BM24F ซึ่งเป็นรุ่นดัดแปลงที่ใหม่กว่า สามารถจัดการหลายฟิลด์และไฮเปอร์เท็กซ์ต์ได้ เช่น ชื่อเรื่อง เนื้อหา และไฮเปอร์ลิงก์
งานวิจัยที่แนะนำคือ Spärck Jones, K.; Walker, S.; Robertson, S. E. (2000). “A probabilistic model of information retrieval: Development and comparative experiments: Part 1”. Information Processing & Management 36(6): 779–808 และ Part 2 ที่ตามมา
น่าเสียดายที่ไม่ใช่โอเพนแอ็กเซส
เริ่มวันที่ 18 และจบวันที่ 22
รายละเอียด: https://trec.nist.gov/
ลองหาทั้งใน Google และ Google Scholar แล้วก็ยังไม่เจอข้อมูลที่เกี่ยวข้อง
ขอโปรโมตแบบเขิน ๆ: https://github.com/jankovicsandras/plpgsql_bm25
https://github.com/jankovicsandras/bm25opt
https://github.com/softwaredoug/searcharray
ขอโปรโมต BM25S ของ Xing Han Lu ที่มีเป้าหมายคล้ายกันและได้รับความนิยมมากเช่นกัน
https://github.com/xhluca/bm25s
สงสัยว่ามี โปรเจกต์ wrapper แบบ Python ล้วน สำหรับจัดการข้อความจำนวนมากและเอกสาร PDF หรือเปล่า
เคยนึกถึง Solr กับ ElasticSearch แต่ดูหนักเกินไปสำหรับสิ่งที่กำลังจะทำตอนนี้
เนื่องจาก SQLite ใช้ BM25 อยู่ เลยกำลังพิจารณาทางเลือกที่จะใช้ pysqlite3 ร่วมกับ PyPDF2
แม้จะออกนอกประเด็นไปนิด แต่คิดว่าน่าจะมีคนจำนวนมากที่กำลังมองหาเครื่องมือสำหรับสร้างแอปพลิเคชันแบบไฮบริด BM25 / vector store / LLM
สงสัยว่าความยาวเอกสารเฉลี่ยที่พูดถึงใน document length normalization นั้นเป็น ค่ามัธยฐาน หรือเปล่า
เพราะถ้าจะลดน้ำหนักเอกสารที่ยาวเกินไปให้เหมาะสม มันก็น่าจะควรเป็นค่ามัธยฐาน ไม่อย่างนั้นเอกสารที่ยาวมาก ๆ จะไม่ดันค่าเฉลี่ยขึ้นอย่างไม่เป็นธรรมหรือ?
การลองใช้ค่ามัธยฐานก็น่าจะเป็นการทดลองที่น่าสนใจ
สงสัยว่าคุณรู้จักชุดข้อมูลค้นหาที่ความยาวเอกสารต่างกันมาก ๆ ไหม
ตัวอย่างเช่น MSMarco มีความยาวค่อนข้างสม่ำเสมอ
เป็นบทความที่ดี
อยากเรียนรู้อย่างจริงจังว่าควรคิดปัญหาแบบนี้ในรูปแบบ คณิตศาสตร์ อย่างไร และควรทดสอบมันอย่างไร มีแหล่งข้อมูลอะไรที่น่าอ้างอิงบ้างไหม?
การค้นหาแบบไฮบริด ช่วยแก้โจทย์เก่าแก่เรื่องความเกี่ยวข้องของผลลัพธ์การค้นหา
ถ้าใช้ rank fusion ระหว่างคีย์เวิร์ดกับเวกเตอร์ ก็สามารถสร้างการค้นหาแบบไฮบริดที่ใช้ได้ในแทบทุกสถานการณ์
BM25 เป็นอัลกอริทึมเก่าที่พัฒนาขึ้นในช่วงทศวรรษ 1970
โดยพื้นฐานแล้วมันเป็นแบบจำลองเชิงสถิติที่ค่อนข้างหยาบ และนักสถิติยุคนี้น่าจะทำได้ดีกว่านี้มาก
มองว่าการค้นหาถูกครอบงำอย่างเด็ดขาดด้วยวิธีการที่อิงการเรียนรู้
แน่นอนว่าการเรียนรู้เองก็สามารถใช้การค้นหาเป็นอินพุตได้
หลายคนยังไม่ตระหนักถึงเรื่องนี้ หรือมีแรงจูงใจที่จะยื้อเทคโนโลยีเก่าไว้ให้นานที่สุดเท่าที่จะทำได้ แต่แรงกดดันจากตลาดจะเปลี่ยนสิ่งนี้ในที่สุด
ก็เทคโนโลยีนั้นไม่ใช่หรือที่ทำให้คนต้องเติม “+reddit” ต่อท้ายคำค้นทุกครั้งเพื่อเลี่ยงสงคราม SEO เชิงปฏิปักษ์?
ของเก่าไม่ได้แปลว่าแย่
สิ่งที่ควรมองคือประโยชน์ใช้สอย ไม่ใช่อายุของสิ่งประดิษฐ์ การค้นพบ หรือเทคนิค และทัศนะแบบคลั่งไคล้เทคโนโลยีใหม่เพราะมันใหม่อย่างเดียวก็น่ากังวล
แนวทางเชิงสถิติสมัยใหม่แบบใดบ้างที่เหนือกว่าจนสามารถแทนที่ BM25 ในแอปพลิเคชันจริงได้?
โดยเฉพาะอยากรู้ว่ามันจัดการกรณีขอบอย่างคำที่พบไม่บ่อยและการทำ normalization ตามความยาวเอกสาร ซึ่งเป็นสิ่งที่ BM25 พยายามจัดการอย่างชัดเจนไว้อย่างไร
ผมเห็นด้วยว่าวิธีแบบอิงการเรียนรู้ให้ผลลัพธ์ที่น่าประทับใจ แต่ก็อยากฟังเพิ่มด้วยว่าคำพูดที่ว่าการค้นหา “ถูกครอบงำอย่างเด็ดขาด” โดยวิธีการเรียนรู้นั้นหมายถึงอะไรกันแน่
หมายถึง benchmark บางตัว หรือหมายถึงกรณีใช้งานจริงในการปฏิบัติงาน?
คิดว่าผู้เชี่ยวชาญด้านการค้นหาหลายคนคงไม่เห็นด้วย
ชื่อพอดแคสต์ที่ยอดเยี่ยมของ David Tippet (อดีต OpenSearch ปัจจุบันอยู่ที่ Github) และ Nicolay Gerold คือ:
“BM25 is the workhorse of search; vectors are its visionary cousin”
https://www.youtube.com/watch?v=ENFW1uHsrLM
ในวงการค้นหา มีทั้งกระแสและเทคโนโลยีที่เกี่ยวกับ AIนับไม่ถ้วนตลอดช่วงเวลาที่ผมทำงานมา
ตอนนี้บริษัทด้าน vector search ที่ได้รับเงินลงทุนจาก VC มหาศาล กำลังผลักดันมุมมองบางแบบผ่านกองทัพนักเผยแพร่เทคโนโลยี
ในทางกลับกัน ปริมาณงานคัดสรรด้วยมือและระบบจัดหมวดหมู่แบบพื้นฐานที่น่าเบื่อแต่จำเป็น ซึ่งเป็นตัวขับเคลื่อน “semantic search” จริง ๆ ในที่อย่าง Google นั้นมีมหาศาล
เพียงแต่เรื่องพวกนี้ไม่เซ็กซี่พอ จึงไม่ค่อยถูกพูดถึงในงานคอนเฟอเรนซ์เท่านั้นเอง