แอป Streamlit สำหรับ การค้นหาความหมายหลายภาษา ในเอกสาร Wikipedia มากกว่า 10 ล้านฉบับที่ฝังเวกเตอร์โดย Weaviate การใช้งานนี้อิงตามบล็อกของ Cohere 'การใช้ LLM สำหรับการค้นหา' และสมุดบันทึกที่เกี่ยวข้อง ช่วยให้สามารถเปรียบเทียบประสิทธิภาพของ การค้นหาคำหลัก การดึงข้อมูลแบบหนาแน่น และ การค้นหาแบบไฮบริด เพื่อสืบค้นชุดข้อมูล Wikipedia นอกจากนี้ยังสาธิตการใช้ Cohere Rerank เพื่อปรับปรุงความแม่นยำของผลลัพธ์ และ Cohere Generate เพื่อให้การตอบกลับตามผลลัพธ์ที่ได้รับการจัดอันดับดังกล่าว
การค้นหาความหมายหมายถึงอัลกอริธึมการค้นหาที่พิจารณาเจตนาและความหมายตามบริบทของวลีค้นหาเมื่อสร้างผลลัพธ์ แทนที่จะมุ่งเน้นไปที่การจับคู่คำหลักเพียงอย่างเดียว โดยให้ผลลัพธ์ที่แม่นยำและเกี่ยวข้องมากขึ้นโดยการทำความเข้าใจความหมายหรือความหมายที่อยู่เบื้องหลังข้อความค้นหา
การฝังคือเวกเตอร์ (รายการ) ของตัวเลขทศนิยมที่แสดงข้อมูล เช่น คำ ประโยค เอกสาร รูปภาพ หรือเสียง การแสดงตัวเลขดังกล่าวจะจับบริบท ลำดับชั้น และความคล้ายคลึงกันของข้อมูล สามารถใช้สำหรับงานดาวน์สตรีม เช่น การจำแนกประเภท การจัดกลุ่ม การตรวจจับค่าผิดปกติ และการค้นหาความหมาย
ฐานข้อมูลเวกเตอร์ เช่น Weaviate สร้างขึ้นโดยมีจุดประสงค์เพื่อเพิ่มประสิทธิภาพพื้นที่จัดเก็บและความสามารถในการสืบค้นสำหรับการฝัง ในทางปฏิบัติ ฐานข้อมูลเวกเตอร์ใช้การผสมผสานของอัลกอริธึมที่แตกต่างกันซึ่งทั้งหมดมีส่วนร่วมในการค้นหาเพื่อนบ้านที่ใกล้ที่สุด (ANN) อัลกอริธึมเหล่านี้ปรับการค้นหาให้เหมาะสมผ่านการแฮช การหาปริมาณ หรือการค้นหาตามกราฟ
ค้นหาล่วงหน้า : ค้นหาล่วงหน้าบนวิกิพีเดียที่ฝังด้วย การจับคู่คำหลัก การดึงข้อมูลแบบหนาแน่น หรือ การค้นหาแบบผสม :
การจับคู่คำหลัก: ค้นหาออบเจ็กต์ที่มีคำค้นหาในคุณสมบัติ ผลลัพธ์ที่ได้จะให้คะแนนตามฟังก์ชัน BM25F:
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(5))def with_bm25(self, query, lang='en', top_n=10) -> list:""" ดำเนินการคำหลัก ค้นหา (การดึงข้อมูลแบบกระจัดกระจาย) ในบทความ Wikipedia โดยใช้การฝังที่จัดเก็บไว้ใน Weaviate พารามิเตอร์: - แบบสอบถาม (str): ข้อความค้นหา - lang (ทางเลือก): ภาษา ของบทความ ค่าเริ่มต้นคือ 'en' - top_n (ไม่บังคับ): จำนวนผลลัพธ์อันดับต้นๆ ที่จะส่งคืน ค่าเริ่มต้นคือ 10 การส่งคืน: - รายการ: รายการบทความยอดนิยมตามการให้คะแนน BM25F ("with_bm25()")where_filter = {"path": ["lang"],"operator": "Equal","valueString": lang}response = (self.weaviate.query.get("บทความ", self.WIKIPEDIA_PROPERTIES) .with_bm25(แบบสอบถาม=แบบสอบถาม) .with_where(where_filter) .with_limit(top_n) .ทำ() ) ตอบกลับ ["data"]["Get"]["Articles"]
การดึงข้อมูลแบบหนาแน่น: ค้นหาวัตถุที่คล้ายกับข้อความดิบ (ไม่เวกเตอร์) มากที่สุด:
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(5))def with_neartext(self, query, lang='en', top_n=10) -> list:""" ดำเนินการความหมาย ค้นหา (การดึงข้อมูลหนาแน่น) ในบทความ Wikipedia โดยใช้การฝังที่จัดเก็บไว้ใน Weaviate พารามิเตอร์: - คำค้นหา (str): คำค้นหา - lang (ทางเลือก): ภาษา ของบทความ ค่าเริ่มต้นคือ 'en' - top_n (ไม่บังคับ): จำนวนผลลัพธ์อันดับต้นๆ ที่จะส่งคืน ค่าเริ่มต้นคือ 10 ผลตอบแทน: - รายการ: รายการบทความยอดนิยมตามความคล้ายคลึงกันทางความหมาย """ ("with_neartext()")nearText = {"แนวคิด": [แบบสอบถาม] }where_filter = {"path": ["lang"],"operator": "Equal","valueString": lang}response = (self.weaviate.query.get("Articles", self.WIKIPEDIA_PROPERTIES) .with_near_text(ใกล้ข้อความ) .with_where(where_filter) .with_limit(top_n) .ทำ() ) ตอบกลับ ['ข้อมูล'] ['รับ'] ['บทความ']
การค้นหาแบบไฮบริด: สร้างผลลัพธ์โดยอิงจากการผสมผสานผลลัพธ์แบบถ่วงน้ำหนักจากการค้นหาคำสำคัญ (bm25) และการค้นหาแบบเวกเตอร์
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(5))def with_hybrid(self, query, lang='en', top_n=10) -> list:""" ดำเนินการไฮบริด ค้นหาบทความใน Wikipedia โดยใช้การฝังที่เก็บไว้ใน Weaviate พารามิเตอร์: - คำค้นหา (str): คำค้นหา - lang (ทางเลือก): ภาษาของบทความ 'en' - top_n (ไม่บังคับ): จำนวนผลลัพธ์สูงสุดที่จะส่งคืน ค่าเริ่มต้นคือ 10 ผลตอบแทน: - รายการ: รายการบทความยอดนิยมตามการให้คะแนนแบบผสม )where_filter = {"path": ["lang"],"operator": "Equal","valueString": lang}response = (self.weaviate.query.get("บทความ", self.WIKIPEDIA_PROPERTIES) .with_hybrid(แบบสอบถาม=แบบสอบถาม) .with_where(where_filter) .with_limit(top_n) .ทำ() ) ตอบกลับ ["data"]["Get"]["Articles"]
จัดอันดับใหม่ : Cohere จัดอันดับใหม่จัดระเบียบการค้นหาล่วงหน้าใหม่โดยการกำหนดคะแนนความเกี่ยวข้องให้กับผลลัพธ์การค้นหาล่วงหน้าแต่ละรายการตามคำค้นหาของผู้ใช้ เมื่อเปรียบเทียบกับการค้นหาเชิงความหมายแบบฝัง ให้ผลลัพธ์การค้นหาที่ดีกว่า โดยเฉพาะอย่างยิ่งสำหรับข้อความค้นหาที่ซับซ้อนและเฉพาะโดเมน
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(5))def จัดอันดับใหม่ (ตนเอง, แบบสอบถาม, เอกสาร, top_n=10, model='rerank-english-v2.0') -> dict:""" จัดอันดับรายการคำตอบใหม่โดยใช้ API การจัดอันดับใหม่ของ Cohere พารามิเตอร์: - คำค้นหา (str): คำค้นหา - เอกสาร (รายการ): รายการเอกสารที่ต้องการ จัดอันดับใหม่ - top_n (ไม่บังคับ): จำนวนผลลัพธ์ที่ได้รับการจัดอันดับใหม่สูงสุดที่ส่งคืน: - dict: จัดอันดับเอกสารใหม่จาก API ของ Cohere """return self.cohere.rerank(query=query, document=documents, top_n=top_n, model=model)
ที่มา: Cohere
การสร้างคำตอบ : Cohere Generate เขียนคำตอบตามผลลัพธ์ที่ได้รับการจัดอันดับ
@retry(wait=wait_random_exponential(min=1, max=5), stop=stop_after_attempt(5))def with_llm(self, context, query, temperature=0.2, model="command", lang="english") -> list:prompt = f""" ใช้ข้อมูลที่ให้ไว้ด้านล่างเพื่อตอบคำถามท้ายเรื่อง / รวมข้อเท็จจริงที่น่าสงสัยหรือเกี่ยวข้องที่ดึงมาจากบริบท / สร้างคำตอบในภาษาของแบบสอบถาม หากคุณไม่สามารถระบุภาษาของข้อความค้นหาได้ ให้ใช้ {lang} / หากไม่มีคำตอบในข้อมูลที่ให้ไว้ ให้สร้าง "คำตอบไม่อยู่ในบริบท" --- ข้อมูลบริบท: {context} - -- คำถาม: {query} """return self.cohere.generate(prompt=prompt,num_รุ่น=1,max_tokens=1000,temperature=temperature,model=model, -
โคลนที่เก็บ:
[email protected]:dcarpintero/wikisearch.git
สร้างและเปิดใช้งานสภาพแวดล้อมเสมือน:
Windows: py -m venv .venv .venvscriptsactivate macOS/Linux python3 -m venv .venv source .venv/bin/activate
ติดตั้งการพึ่งพา:
pip install -r requirements.txt
เปิดแอปพลิเคชันเว็บ
streamlit run ./app.py
Demo Web App ที่ปรับใช้กับ Streamlit Cloud และมีอยู่ที่ https://wikisearch.streamlit.app/
เชื่อมโยงกัน
สตรีมไลท์คลาวด์
คลังเก็บการฝัง: การฝังบทความ Wikipedia หลายล้านรายการในหลายภาษา
การใช้ LLM สำหรับการค้นหาด้วยการดึงข้อมูลและการจัดอันดับใหม่อย่างหนาแน่น
ฐานข้อมูลเวกเตอร์
ค้นหาเวกเตอร์ Weaviate
Weaviate ค้นหา BM25
Weaviate การค้นหาแบบไฮบริด