SemRoute เป็นเราเตอร์เชิงความหมายที่เปิดใช้งานการกำหนดเส้นทางโดยใช้ความหมายเชิงความหมายของแบบสอบถาม เครื่องมือนี้ใช้ประโยชน์จากการฝังเวกเตอร์เพื่อการตัดสินใจอย่างรวดเร็ว โดยไม่จำเป็นต้องฝึกตัวแยกประเภทหรือเรียกโมเดลภาษาขนาดใหญ่ SemRoute ใช้งานง่ายและให้ความยืดหยุ่นในการเลือกโมเดลการฝังที่แตกต่างกัน ประเภทการกำหนดเกณฑ์ และวิธีการให้คะแนนเพื่อให้เหมาะกับกรณีการใช้งานของคุณมากที่สุด
ติดตั้งไลบรารีโดยใช้คำสั่ง:
pip install semroute
แพ็คเกจ PyPI
หากต้องการใช้เราเตอร์ความหมาย คุณต้องสร้าง เราเตอร์ และเพิ่มเส้นทางความหมายที่จะกำหนดเส้นทางที่ใช้ได้สำหรับการสืบค้นที่กำหนด
Router
from semroute import Route
router = Router (
embedder_host = "OpenAI" ,
embedder_model = "text-embedding-3-large" ,
thresholding_type = "dynamic" ,
scoring_method = "centroid"
)
ตัวเลือกการกำหนดค่า
embedder_host
: ขณะนี้ SemRoute รองรับโมเดลการฝังจาก OpenAI
และ MistralAI
ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่งเพื่อใช้โมเดลการฝังได้
embedder_model
: ช่องนี้สามารถใช้เพื่อระบุโมเดลการฝังที่จะใช้จาก embedder_host
ด้านล่างนี้คือโมเดลการฝังที่ได้รับการสนับสนุนจากแต่ละโฮสต์:
text-embedding-3-small
, text-embedding-3-large
, text-embedding-ada-002
]mistral-embed
] thresholding_type
: ฟิลด์นี้ระบุประเภทของกลไกขีดจำกัดที่จะใช้สำหรับการกำหนดเส้นทางการสืบค้น SemRoute รองรับการกำหนดเกณฑ์ขั้นต่ำสองประเภท:
static
: ประเภทนี้แนะนำให้เราเตอร์ใช้เกณฑ์ที่กำหนดไว้ล่วงหน้าสำหรับโมเดลการฝังแต่ละโมเดลเพื่อพิจารณาว่าแบบสอบถามเป็นของเส้นทางเฉพาะหรือไม่ ขึ้นอยู่กับโมเดลและเกณฑ์เหล่านี้ได้รับการปรับปรุงสำหรับโมเดลการฝังแต่ละโมเดล มันนำไปสู่การตัดสินใจกำหนดเส้นทางที่เร็วขึ้นเพราะไม่มีค่าใช้จ่ายอื่นใดนอกจากการสร้างการฝังคำพูดที่ให้ไว้ อย่างไรก็ตาม การใช้เกณฑ์ขั้นต่ำประเภทนี้บางครั้งอาจนำไปสู่การตัดสินใจกำหนดเส้นทางที่ไม่ถูกต้อง เนื่องจากไม่ได้ปรับให้เหมาะกับคำพูดตัวอย่างที่คุณระบุสำหรับเส้นทางdynamic
: ประเภทการกำหนดขีดจำกัดนี้จะสั่งให้เราเตอร์ปรับเกณฑ์สำหรับโมเดลการฝังโดยใช้คำพูดตัวอย่างที่ให้ไว้ในเส้นทาง หากต้องการใช้โหมดนี้ คุณต้องระบุ OPENAI_API_KEY
และตั้งค่าเป็นตัวแปรสภาพแวดล้อมของคุณ โหมดนี้ใช้ GPT-3.5-Turbo
ของ OpenAI เพื่อสร้างเสียงพูดเพิ่มเติมคล้ายกับที่ผู้ใช้ให้ไว้ และใช้เสียงเหล่านี้เพื่อปรับแต่งเกณฑ์ไดนามิกอย่างละเอียด วิธีการนี้จะช้ากว่าแต่ทำให้การตัดสินใจกำหนดเส้นทางแม่นยำยิ่งขึ้น scoring_method
: ฟิลด์นี้ใช้สำหรับระบุวิธีการที่ใช้ในการให้คะแนนว่าการสืบค้นแต่ละเส้นทางมีความคล้ายคลึงกันเพียงใด SemRoute รองรับวิธีการให้คะแนนสองวิธี:
individual_averaging
: ในวิธีนี้ คะแนนความคล้ายคลึงจะถูกคำนวณระหว่างแต่ละคำพูดที่ฝังอยู่ในเส้นทางและการสืบค้น จากนั้นค่าเฉลี่ยของความคล้ายคลึงเหล่านี้จะถูกนำมาใช้ในการตัดสินใจเกี่ยวกับเส้นทาง วิธีการนี้มีความซับซ้อนด้านเวลาเป็น O(n)
centroid
: ในวิธีนี้ ระบบจะคำนวณเซนทรอยด์สำหรับแต่ละเส้นทางโดยใช้การฝังคำพูดแต่ละรายการ จากนั้นจะใช้ความคล้ายคลึงกันระหว่างเซนทรอยด์นี้กับการฝังแบบสอบถามในการตัดสินใจเกี่ยวกับเส้นทาง วิธีการนี้มีความซับซ้อนด้านเวลาเป็น O(1)
ขณะนี้ SemRoute รองรับการใช้โมเดลการฝังแบบกำหนดเอง คุณสามารถจัดเตรียมฟังก์ชันการฝังของคุณเองพร้อมกับเกณฑ์คงที่และขนาดการฝังเวกเตอร์ได้ หากมีการระบุฟังก์ชันการฝังแบบกำหนดเองไว้ ฟังก์ชันนั้นจะมีความสำคัญเหนือกว่าฟังก์ชันที่กำหนดค่าไว้ล่วงหน้า
นี่คือสคีมาที่ผู้ใช้ควรปฏิบัติตามสำหรับการกำหนดค่าการฝังแบบกำหนดเอง:
embedding_function
: ฟังก์ชันที่เรียกใช้ได้ซึ่งรับรายการสตริงและส่งกลับอาร์เรย์จำนวนมากของการฝังstatic_threshold
: ค่าทศนิยมที่แสดงถึงเกณฑ์คงที่สำหรับการตัดสินใจเกี่ยวกับเส้นทางvector_embedding_size
: จำนวนเต็มที่แสดงขนาดของเวกเตอร์ที่ฝังตัวอย่างการกำหนดค่า
custom_embedder_config = {
"embedding_function" : your_custom_embedding_function ,
"static_threshold" : 0.5 ,
"vector_embedding_size" : 768
}
router = Router (
custom_embedder = custom_embedder_config ,
thresholding_type = "static" ,
scoring_method = "centroid"
)
ตัวอย่างฟังก์ชันการฝังแบบกำหนดเอง
ฟังก์ชันการฝังที่คุณกำหนดเองควรเป็นไปตามรูปแบบต่อไปนี้:
def your_custom_embedding_function ( utterances : List [ str ]) -> np . ndarray :
# Your logic to convert utterances to embeddings
embeddings = np . array ([ your_embedding_logic ( utterance ) for utterance in utterances ])
return embeddings
ในตัวอย่างนี้ ให้แทนที่ your_embedding_logic
ด้วยตรรกะเฉพาะสำหรับโมเดลการฝังของคุณ
ด้วยการกำหนดค่าการฝังแบบกำหนดเอง คุณสามารถรวมโมเดลการฝังใดๆ เข้ากับ SemRoute ได้ ทำให้มีความยืดหยุ่นสูงและปรับให้เข้ากับกรณีการใช้งานต่างๆ ได้
routes
router . add_route (
name = "technology" ,
utterances = [
"what's the latest in tech news?" ,
"tell me about artificial intelligence" ,
"how does blockchain work?" ,
"what is the best programming language?" ,
"can you recommend a good laptop?" ,
"what's new with the iPhone?"
],
description = "A group of utterances for when the user discusses anything related to technology"
)
router . add_route (
name = "sports" ,
utterances = [
"who won the game last night?" ,
"what's the score of the basketball game?" ,
"tell me about the latest in football" ,
"who's your favorite athlete?" ,
"do you think they'll win the championship?" ,
"when is the next World Cup?"
],
description = "A group of utterances for when the user discusses anything related to sports"
)
router . add_route (
name = "food" ,
utterances = [
"what's your favorite food?" ,
"can you recommend a good restaurant?" ,
"how do you make spaghetti?" ,
"what's a good recipe for a healthy dinner?" ,
"tell me about the best dessert you've had" ,
"what's your favorite cuisine?"
],
description = "A group of utterances for when the user discusses anything related to food"
)
router . add_route (
name = "travel" ,
utterances = [
"where's the best place to travel?" ,
"can you recommend a vacation spot?" ,
"what's the best way to travel on a budget?" ,
"tell me about your favorite trip" ,
"where should I go for my next holiday?" ,
"what are the top tourist destinations?"
],
description = "A group of utterances for when the user discusses anything related to travel"
)
router . add_route (
name = "health" ,
utterances = [
"what's the best way to stay healthy?" ,
"can you recommend a good workout?" ,
"tell me about a healthy diet" ,
"how do I reduce stress?" ,
"what are the benefits of meditation?" ,
"how do I improve my mental health?"
],
description = "A group of utterances for when the user discusses anything related to health"
)
เพื่อการตัดสินใจเกี่ยวกับเส้นทางที่ดีขึ้น ตรวจสอบให้แน่ใจว่าได้รวมกรณีคำพูดให้มากที่สุดสำหรับแต่ละเส้นทาง สิ่งนี้จะช่วยให้เราเตอร์มั่นใจได้ว่าไม่มีเคส Edge เหลืออยู่ขณะทำการตัดสินใจเกี่ยวกับเส้นทาง นอกจากนี้ ขณะใช้โหมด
dynamic
โปรดตรวจสอบให้แน่ใจว่าได้ให้description
ที่สอดคล้องกับจุดประสงค์ของเส้นทางนั้นอย่างใกล้ชิด เนื่องจากใช้เพื่อสร้างคำพูดที่คล้ายกัน
router . route ( "How much does the health insurance costs?" )
[OUT]: health
router . route ( "Let's go to Italy!" )
[OUT]: travel
เครื่องมือนี้ช่วยให้คุณบันทึกเราเตอร์ที่กำหนดค่าไว้ในไฟล์ดองโดยใช้วิธี save_router
router . save_router ( "path/to/filename.pkl" )
คุณยังสามารถโหลดการกำหนดค่าที่บันทึกไว้และใช้เพื่อกำหนดค่าเราเตอร์ได้
from semroute import Router
router = Router ()
router . load_router ( "path/to/filename.pkl" )
router . route ( "Query to route" )
ยินดีต้อนรับการมีส่วนร่วมกับ SemRoute! โปรดตรวจสอบให้แน่ใจว่าคำขอดึงของคุณได้รับการจัดทำเป็นเอกสารและทดสอบอย่างดี
SemRoute ได้รับอนุญาตภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียดเพิ่มเติม
สำหรับปัญหาหรือการร้องขอคุณสมบัติใด ๆ โปรดเปิดปัญหาในพื้นที่เก็บข้อมูล GitHub