Tribuo เป็นไลบรารีการเรียนรู้ของเครื่องใน Java ที่ให้การจำแนกประเภทหลายคลาส การถดถอย การจัดกลุ่ม การตรวจจับความผิดปกติ และการจำแนกประเภทหลายป้ายกำกับ Tribuo นำเสนอการใช้งานอัลกอริธึม ML ยอดนิยม และยังรวมไลบรารีอื่นๆ เข้าด้วยกันเพื่อสร้างอินเทอร์เฟซแบบรวม Tribuo มีโค้ดทั้งหมดที่จำเป็นในการโหลด นำเสนอ และแปลงข้อมูล นอกจากนี้ยังรวมคลาสการประเมินสำหรับประเภทการทำนายที่รองรับทั้งหมด การพัฒนานำโดยกลุ่มวิจัยการเรียนรู้ของเครื่องของ Oracle Labs; เรายินดีรับการสนับสนุนจากชุมชน
ผู้ฝึกสอนทั้งหมดสามารถกำหนดค่าได้โดยใช้ระบบการกำหนดค่า OLCUT ซึ่งช่วยให้ผู้ใช้สามารถกำหนดเทรนเนอร์ในไฟล์ xml หรือ json และสร้างโมเดลซ้ำได้ ตัวอย่างการกำหนดค่าสำหรับเทรนเนอร์แต่ละตัวที่ให้มาสามารถดูได้ในโฟลเดอร์กำหนดค่าของแต่ละแพ็คเกจ ไฟล์การกำหนดค่าเหล่านี้สามารถเขียนเป็น json หรือ edn ได้โดยใช้การพึ่งพาการกำหนดค่า OLCUT ที่เหมาะสม โมเดลและชุดข้อมูลสามารถทำให้เป็นอนุกรมได้โดยใช้การทำให้เป็นอนุกรม Java
โมเดลและการประเมินทั้งหมดมีออบเจ็กต์แหล่งที่มาที่สามารถซีเรียลไลซ์ได้ ซึ่งจะบันทึกเวลาในการสร้างโมเดลหรือการประเมิน ข้อมูลประจำตัวของข้อมูล และการเปลี่ยนแปลงใดๆ ที่นำไปใช้กับโมเดลดังกล่าว รวมถึงไฮเปอร์พารามิเตอร์ของเทรนเนอร์ ในกรณีของการประเมิน ข้อมูลแหล่งที่มานี้ยังรวมถึงแบบจำลองเฉพาะที่ใช้ด้วย ข้อมูลแหล่งที่มาสามารถแยกออกมาเป็น JSON หรือทำให้เป็นอนุกรมได้โดยตรงโดยใช้การทำให้เป็นอนุกรมของ Java สำหรับการปรับใช้การผลิต ข้อมูลแหล่งที่มาสามารถแก้ไขและแทนที่ด้วยแฮชเพื่อให้การติดตามแบบจำลองผ่านระบบภายนอก โมเดล Tribuo หลายรุ่นสามารถส่งออกในรูปแบบ ONNX เพื่อปรับใช้ในภาษา แพลตฟอร์ม หรือบริการคลาวด์อื่นๆ ได้
Tribuo ทำงานบน Java 8+ และเราทดสอบบน Java เวอร์ชัน LTS พร้อมกับรุ่นล่าสุด Tribuo นั้นเป็นไลบรารี Java ล้วนๆ และได้รับการสนับสนุนบนแพลตฟอร์ม Java ทั้งหมด อย่างไรก็ตาม อินเทอร์เฟซบางส่วนของเราจำเป็นต้องใช้โค้ดแบบเนทิฟ ดังนั้นจึงได้รับการสนับสนุนเฉพาะในกรณีที่มีการรองรับไลบรารีแบบเนทิฟเท่านั้น เราทดสอบสถาปัตยกรรม x86_64 บน Windows 10, macOS และ Linux (RHEL/OL/CentOS 7+) เนื่องจากสิ่งเหล่านี้เป็นแพลตฟอร์มที่รองรับสำหรับไลบรารีดั้งเดิมที่เราเชื่อมต่อ หากคุณสนใจแพลตฟอร์มอื่นและต้องการใช้อินเทอร์เฟซไลบรารีดั้งเดิมอันใดอันหนึ่ง (ONNX Runtime, TensorFlow และ XGBoost) เราขอแนะนำให้ติดต่อนักพัฒนาของไลบรารีเหล่านั้น โปรดทราบว่าการ์ดโมเดลและแพ็คเกจความสามารถในการทำซ้ำต้องใช้ Java 17 และด้วยเหตุนี้จึงไม่เป็นส่วนหนึ่งของการปรับใช้ Maven Central tribuo-all
สมุดบันทึกบทช่วยสอน รวมถึงตัวอย่างของการจำแนกประเภท การทำคลัสเตอร์ การถดถอย การตรวจจับความผิดปกติ TensorFlow การจำแนกเอกสาร การโหลดข้อมูลแบบเรียงเป็นแนว การทำงานกับโมเดลที่ได้รับการฝึกอบรมจากภายนอก และระบบการกำหนดค่า สามารถพบได้ในบทช่วยสอน สิ่งเหล่านี้ใช้เคอร์เนลสมุดบันทึก IJava Jupyter และทำงานร่วมกับ Java 10+ ยกเว้นการ์ดโมเดลและโปรแกรมช่วยสอนความสามารถในการทำซ้ำซึ่งต้องใช้ Java 17 หากต้องการแปลงโค้ดของโปรแกรมช่วยสอนกลับเป็น Java 8 ในกรณีส่วนใหญ่ เพียงแทนที่คีย์เวิร์ด var
ด้วยประเภทที่เหมาะสม .
Tribuo มีการใช้งานอัลกอริธึมหลายอย่างที่เหมาะกับงานการทำนายที่หลากหลาย:
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
การบรรจุถุง | ทริบูโอ | สามารถใช้เทรนเนอร์ Tribuo เป็นผู้เรียนพื้นฐานได้ |
ป่าสุ่ม | ทริบูโอ | สำหรับทั้งการจำแนกและการถดถอย |
ต้นไม้เสริม | ทริบูโอ | สำหรับทั้งการจำแนกและการถดถอย |
เค-เอ็น | ทริบูโอ | รวมตัวเลือกสำหรับแบ็กเอนด์แบบขนานหลายรายการ รวมถึงแบ็กเอนด์แบบเธรดเดี่ยว |
โครงข่ายประสาทเทียม | เทนเซอร์โฟลว์ | ฝึกฝนโครงข่ายประสาทเทียมใน TensorFlow ผ่าน Wrapper Tribuo โมเดลสามารถใช้งานได้โดยใช้อินเทอร์เฟซ ONNX หรืออินเทอร์เฟซ TF |
วงดนตรีและ K-NN ใช้ฟังก์ชันผสมผสานเพื่อสร้างเอาต์พุต ตัวรวมเหล่านี้เป็นงานการทำนายเฉพาะ แต่การใช้งานทั้งชุดและ K-NN นั้นไม่เชื่อเรื่องพระเจ้า เราจัดให้มีตัวรวมการลงคะแนนและการหาค่าเฉลี่ยสำหรับการจำแนกประเภทหลายคลาส การจำแนกประเภทหลายป้ายกำกับ และงานการถดถอย
Tribuo มีการใช้งานหรืออินเทอร์เฟซสำหรับ:
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
โมเดลเชิงเส้น | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
เครื่องแยกตัวประกอบ | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
รถเข็น | ทริบูโอ | |
SVM-SGD | ทริบูโอ | การนำอัลกอริทึม Pegasos ไปใช้ |
Adaboost.SAMME | ทริบูโอ | สามารถใช้ผู้ฝึกสอนประเภท Tribuo เป็นผู้เรียนพื้นฐานได้ |
พหุนาม Naive Bayes | ทริบูโอ | |
โมเดลเชิงเส้นที่ทำให้เป็นมาตรฐาน | LibLinear | |
สวีเอ็ม | LibSVM หรือ LibLinear | LibLinear รองรับเฉพาะ SVM เชิงเส้นเท่านั้น |
ต้นไม้การตัดสินใจที่เพิ่มการไล่ระดับสี | XGBoost |
Tribuo ยังจัดหา CRF แบบลูกโซ่เชิงเส้นสำหรับงานจำแนกลำดับอีกด้วย CRF นี้ได้รับการฝึกฝนโดยใช้ SGD โดยใช้เครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสีของ Tribuo
Tribuo มีชุดอัลกอริธึมการเลือกคุณสมบัติทางทฤษฎีข้อมูลซึ่งสามารถนำไปใช้กับงานการจำแนกประเภทได้ อินพุตคุณสมบัติจะถูกแยกออกเป็นช่องที่มีความกว้างเท่ากันโดยอัตโนมัติ ในขณะนี้ รวมถึงการดำเนินการของการเพิ่มข้อมูลร่วมกันให้สูงสุด (MIM), การเพิ่มข้อมูลร่วมกันแบบมีเงื่อนไข (CMIM), ความซ้ำซ้อนสูงสุดขั้นต่ำ (mRMR) และข้อมูลร่วมกันร่วมกัน (JMI)
เพื่ออธิบายการทำนายลักษณนาม มีการนำอัลกอริทึม LIME ไปใช้ การใช้งานของ Tribuo ช่วยให้สามารถผสมผสานข้อความและข้อมูลแบบตาราง ควบคู่ไปกับการใช้แบบจำลองแบบกระจัดกระจายเป็นตัวอธิบาย (เช่น แผนผังการถดถอย เชือก ฯลฯ) อย่างไรก็ตาม มันไม่รองรับรูปภาพ
อัลกอริธึมการถดถอยของ Tribuo มีหลายมิติตามค่าเริ่มต้น การใช้งานมิติเดียวถูกห่อเพื่อสร้างเอาต์พุตหลายมิติ
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
โมเดลเชิงเส้น | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
เครื่องแยกตัวประกอบ | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
รถเข็น | ทริบูโอ | |
ลาสโซ | ทริบูโอ | การใช้อัลกอริธึม LARS |
ยางยืดสุทธิ | ทริบูโอ | การใช้อัลกอริธึมการโคออร์ดิเนตโคตร |
โมเดลเชิงเส้นที่ทำให้เป็นมาตรฐาน | LibLinear | |
สวีเอ็ม | LibSVM หรือ LibLinear | LibLinear รองรับเฉพาะ SVM เชิงเส้นเท่านั้น |
ต้นไม้การตัดสินใจที่เพิ่มการไล่ระดับสี | XGBoost |
Tribuo มีโครงสร้างพื้นฐานสำหรับการทำคลัสเตอร์และยังมีการใช้งานอัลกอริธึมการทำคลัสเตอร์สองแบบ เราคาดว่าจะใช้อัลกอริธึมเพิ่มเติมเมื่อเวลาผ่านไป
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
HDBSCAN* | ทริบูโอ | อัลกอริธึมตามความหนาแน่นซึ่งค้นหาคลัสเตอร์และค่าผิดปกติ |
K-หมายถึง | ทริบูโอ | รวมถึงแบ็กเอนด์ทั้งแบบต่อเนื่องและแบบขนาน และอัลกอริธึมการเริ่มต้น K-Means++ |
Tribuo นำเสนอโครงสร้างพื้นฐานสำหรับงานการตรวจจับความผิดปกติ เราคาดว่าจะเพิ่มการใช้งานใหม่ๆ เมื่อเวลาผ่านไป
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
SVM ระดับหนึ่ง | LibSVM | |
SVM เชิงเส้นระดับหนึ่ง | LibLinear |
Tribuo นำเสนอโครงสร้างพื้นฐานสำหรับการจำแนกประเภทแบบหลายป้ายกำกับ พร้อมด้วย Wrapper ซึ่งจะแปลงอัลกอริทึมการจำแนกประเภทแบบหลายคลาสของ Tribuo ให้เป็นอัลกอริทึมการจำแนกประเภทแบบหลายป้ายกำกับ เราคาดว่าจะเพิ่มการใช้งานเฉพาะหลายป้ายกำกับเพิ่มเติมเมื่อเวลาผ่านไป
อัลกอริทึม | การนำไปปฏิบัติ | หมายเหตุ |
---|---|---|
กระดาษห่ออิสระ | ทริบูโอ | แปลงอัลกอริธึมการจำแนกประเภทหลายคลาสให้เป็นหลายป้ายกำกับโดยสร้างตัวแยกประเภทแยกสำหรับแต่ละป้ายกำกับ |
โซ่ลักษณนาม | ทริบูโอ | จัดเตรียมกลุ่มโซ่ลักษณนามและชุดโซ่ลักษณนามแบบสุ่มโดยใช้อัลกอริธึมการจำแนกประเภทหลายคลาสของ Tribuo |
โมเดลเชิงเส้น | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
เครื่องแยกตัวประกอบ | ทริบูโอ | ใช้ SGD และอนุญาตเครื่องมือเพิ่มประสิทธิภาพการไล่ระดับสี |
นอกเหนือจากการนำอัลกอริทึม Machine Learning ไปใช้แล้ว Tribuo ยังมีอินเทอร์เฟซทั่วไปสำหรับเครื่องมือ ML ยอดนิยมบน JVM อีกด้วย หากคุณสนใจที่จะสนับสนุนอินเทอร์เฟซใหม่ ให้เปิด GitHub Issue แล้วเราจะพูดคุยกันว่าอินเทอร์เฟซดังกล่าวจะเข้ากับ Tribuo ได้อย่างไร
ขณะนี้เรามีอินเทอร์เฟซสำหรับ:
ไบนารีมีอยู่ใน Maven Central โดยใช้ groupId org.tribuo
หากต้องการดึงส่วนประกอบที่เข้ากันได้กับ Java 8 ทั้งหมดของ Tribuo รวมถึงการโยงสำหรับ TensorFlow, ONNX Runtime และ XGBoost (ซึ่งเป็นไลบรารีดั้งเดิม) ให้ใช้:
มาเวน:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
หรือจาก Gradle:
implementation ( " org.tribuo:tribuo-all:4.3.1@pom " ) {
transitive = true // for build.gradle (i.e., Groovy)
// isTransitive = true // for build.gradle.kts (i.e., Kotlin)
}
การพึ่งพา tribuo-all
คือ pom ซึ่งขึ้นอยู่กับโปรเจ็กต์ย่อย Tribuo ทั้งหมด ยกเว้นการ์ดโมเดลและโปรเจ็กต์ความสามารถในการทำซ้ำซึ่งต้องใช้ Java 17
Tribuo ส่วนใหญ่เป็น Java ล้วนๆ และข้ามแพลตฟอร์มได้ อย่างไรก็ตาม อินเทอร์เฟซบางส่วนเชื่อมโยงกับไลบรารีที่ใช้โค้ดเนทีฟ อินเทอร์เฟซเหล่านั้น (TensorFlow, ONNX Runtime และ XGBoost) ทำงานบนแพลตฟอร์มที่รองรับสำหรับไบนารีที่เผยแพร่ที่เกี่ยวข้องเท่านั้น และ Tribuo ไม่สามารถควบคุมได้ว่าจะให้ไบนารีใดมาบ้าง หากคุณต้องการการสนับสนุนสำหรับแพลตฟอร์มเฉพาะ โปรดติดต่อผู้ดูแลโครงการเหล่านั้น ในการเปิดตัวเวอร์ชัน 4.1 แพ็คเกจดั้งเดิมเหล่านี้ทั้งหมดมีไบนารี x86_64 สำหรับ Windows, macOS และ Linux นอกจากนี้ยังสามารถคอมไพล์แต่ละแพ็คเกจสำหรับ macOS ARM64 (เช่น Apple Silicon) ได้ แม้ว่า Maven Central จะไม่มีไบนารีสำหรับแพลตฟอร์มนั้นสำหรับ TensorFlow หรือ XGBoost ก็ตาม ในรีลีส 4.3 Tribuo ตอนนี้ขึ้นอยู่กับเวอร์ชันของ ONNX Runtime ซึ่งรวมถึงการสนับสนุนแพลตฟอร์ม macOS ARM64 และ Linux aarch64 เมื่อพัฒนาบนแพลตฟอร์ม ARM คุณสามารถเลือกโปรไฟล์ arm
ใน pom.xml
ของ Tribuo เพื่อปิดใช้งานการทดสอบไลบรารีดั้งเดิม
แต่ละขวดจะได้รับการเผยแพร่สำหรับแต่ละโมดูล Tribuo ควรพึ่งพาเฉพาะโมดูลที่จำเป็นสำหรับโครงการเฉพาะเท่านั้น วิธีนี้จะป้องกันไม่ให้โค้ดของคุณดึงการขึ้นต่อกันจำนวนมาก เช่น TensorFlow โดยไม่จำเป็น
Tribuo ใช้ Apache Maven v3.5 หรือสูงกว่าในการสร้าง Tribuo เข้ากันได้กับ Java 8+ และเราทดสอบบน Java เวอร์ชัน LTS พร้อมกับรุ่นล่าสุด หากต้องการสร้าง เพียงรัน mvn clean package
การขึ้นต่อกันของ Tribuo ทั้งหมดควรมีอยู่บน Maven Central โปรดแจ้งปัญหาเกี่ยวกับบิลด์หากคุณประสบปัญหา (แต่ควรตรวจสอบก่อนว่าคุณไม่มีการตั้งค่าพร็อกซีสำหรับ Maven หรือไม่ เนื่องจากนั่นเป็นสาเหตุทั่วไปของบิลด์ล้มเหลว และอยู่นอกเหนือการควบคุมของเรา) โปรดทราบว่าหากคุณสร้างโดยใช้ Java 16 หรือเก่ากว่า การ์ดโมเดลและแพ็คเกจความสามารถในการทำซ้ำจะถูกปิดใช้งาน
การพัฒนาเกิดขึ้นในสาขา main
ซึ่งมีหมายเลขเวอร์ชันของ Tribuo รุ่นถัดไป โดยมี "-SNAPSHOT" ต่อท้าย Tribuo รุ่นหลักและรุ่นรองจะถูกแท็กบนสาขา main
จากนั้นจะมีสาขาชื่อ vA.BX-release-branch
(สำหรับรุ่น vA.B.0
) ซึ่งแยกสาขาจากการคอมมิต release ที่ติดแท็กสำหรับรุ่นจุดใด ๆ (เช่น vA.B.1
, vA.B.2
ฯลฯ) ต่อจากรีลีสหลัก/รองนั้น การเผยแพร่จุดเหล่านั้นจะถูกแท็กในสาขาการเผยแพร่เฉพาะ เช่น v4.0.2
ถูกแท็กบน v4.0.X-release-branch
เรายินดีต้อนรับการมีส่วนร่วม! ดูแนวทางการสนับสนุนของเรา
เรามีรายชื่อผู้รับจดหมายการสนทนา [email protected] ซึ่งเก็บถาวรไว้ที่นี่ เรากำลังตรวจสอบตัวเลือกต่างๆ สำหรับการแชทแบบเรียลไทม์ โปรดกลับมาตรวจสอบอีกครั้งในอนาคต สำหรับรายงานข้อผิดพลาด คำขอคุณสมบัติ หรือปัญหาอื่น ๆ โปรดยื่นปัญหา Github
โปรดอ่านคำแนะนำด้านความปลอดภัยสำหรับกระบวนการเปิดเผยช่องโหว่ด้านความปลอดภัยที่มีความรับผิดชอบของเรา
Tribuo ได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0