GPT
C

colbertv2.0

קוד פתוח

colbert-irmit2023-06-27

  • transformers
  • pytorch
  • onnx
  • safetensors
  • bert

במקום לדחוס מסמך שלם לווקטור בודד, המודל שומר וקטור לכל טוקן ומבצע התאמה עשירה בעשרות מילישניות. הוא מיועד למי שמחפש דיוק של cross-encoder במהירות של מודל אחזור רגיל.

  • 110Mפרמטרים
  • 512טוקנים בהקשר
  • 1.2 GBמשקל הקבצים
  • 2,533,627הורדות בחודש

מה זה

במקום לייצג משפט כמערך מספרים יחיד, המודל מייצר מטריצה שלמה של וקטורים לפי טוקנים עבור השאילתה ועבור כל קטע טקסט. בזמן חיפוש, הוא מפעיל מנגנון late interaction שמשווה בין הטוקנים של השאילתה לטוקנים של המסמך בעזרת פעולת MaxSim. זה נותן לו לתפוס התאמות מדויקות וניואנסים שהולכים לאיבוד במודלי bi-encoder רגילים, בלי לשלם את המחיר הכבד של הרצת מודל שפה מלא על כל זוג של מסמך ושאילתה.

המשקל שלו הוא 1.2 גיגהבייט עם 110 מיליון פרמטרים על בסיס 12 שכבות, מה שהופך אותו לקל משמעותית ביחס לביצועים שלו באחזור. הצ'קפוינט הזה אומן על משימת הדירוג של MS MARCO באנגלית, והוא מתוכנן לשלוף קטעים רלוונטיים מתוך מאגרים גדולים בעשרות מילישניות, במיוחד כשמשלבים אותו עם דחיסה ואינדוקס נכון.

מתאים ל

  • אחזור עבור RAG באנגלית

    שליפת פסקאות מדויקות מתוך מאגרי ידע באנגלית כדי להזין מודל שפה, עם פחות רעש מאשר וקטור יחיד.

  • מנוע חיפוש פנימי מהיר

    דירוג מסמכים בזמן תגובה של עשרות מילישניות לקבלת תוצאות מדויקות על טקסטים טכניים או קצרים.

  • שלב דירוג מחדש למאגרים

    סינון ודירוג של עשרות עד מאות תוצאות ראשוניות שהגיעו ממנוע מבוסס מילים כמו Elasticsearch.

איפה זה נופל

האימון נעשה כולו על קורפוס MS MARCO באנגלית, כך שהוא לא מתאים לחיפוש בעברית בלי אימון מחדש על דאטה מקומי. מגבלה נוספת היא חלון הקשר של 512 טוקנים בלבד, מה שמחייב אתכם לחתוך מסמכים ארוכים לפסקאות קטנות מראש. מעבר לזה, שמירת וקטור לכל טוקן מנפחת את גודל האינדקס על הדיסק פי כמה ביחס לווקטור בודד רגיל, ואי אפשר לייצר אינדקס חדש בלי כרטיס גרפי זמין.

שאלות
נפוצות

האם אפשר להשתמש במודל הזה לחיפוש מסמכים בעברית?

לא מומלץ ישר מהקופסה. המודל אומן על נתונים באנגלית בלבד והטוקנייזר שלו מותאם לשפה הזו. אם תריצו עליו טקסט בעברית תקבלו תוצאות חלשות מאוד, אלא אם תאמנו אותו מחדש על קורפוס עברי מתאים.

האם המודל שומר וקטור יחיד לכל מסמך כמו בחיפוש וקטורי רגיל?

לא, הוא שומר וקטור לכל טוקן בנפרד ומבצע את ההשוואה מול הטוקנים של השאילתה בזמן אמת. זה נותן דיוק גבוה בהרבה אבל דורש מקום אחסון גדול יותר לאינדקס.

האם חייבים GPU בשרת כדי להחזיר תוצאות למשתמשים?

לא. שלב החיפוש והשליפה יכול לרוץ על מעבד רגיל בלבד דרך סביבת ה־CPU שהמפתחים מספקים. עם זאת, כדי לבנות את האינדקס הראשוני של המסמכים עדיין תצטרכו GPU.

איך מריצים

להרצה מקומית צריך פייתון 3.7 ומעלה, PyTorch 1.9 וספריית transformers. החיפוש עצמו יכול לרוץ על מעבד רגיל ויש לזה סביבת conda ייעודית, אבל בניית האינדקס על המאגר ואימון של המודל דורשים GPU חובה. כרטיס בסיסי כמו T4 מספיק לגמרי, והוא מאנדקס עשרת אלפים קטעים בשש דקות.

המפתחים מספקים סקריפט לשרת עצמאי שמחזיר תשובות בפורמט JSON, או שילוב ישיר דרך ספריית קוד ייעודית של הפרויקט. אם אתם מחפשים קוד שמנצל פחות זיכרון דיסק וראם, ענף main משלב את מנוע PLAID שמאיץ את השליפה ומצמצם משמעותית את נפח האינדקס.

from transformers import pipeline

pipe = pipeline("text-generation", model="colbert-ir/colbertv2.0")
print(pipe("שלום"))

הרישיון

הקוד והמשקולות מפורסמים תחת רישיון MIT. מותר להשתמש בהם בפרויקטים מסחריים, לשנות את הקוד ולהפיץ אותו בתוך מוצר סגור, בלי תשלום תמלוגים. התנאי היחיד הוא שמירת הודעת זכויות היוצרים ונוסח הרישיון המקורי בקבצי המוצר שלכם.

  • שימוש מסחרי
  • שינוי הקוד
  • הפצה מחדש

הרישיון המלא בעמוד המודל ↗