GPT
B

bge-m3

קוד פתוח

BAAImit2024-01-27

  • sentence-transformers
  • pytorch
  • onnx
  • xlm-roberta
  • feature-extraction

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

  • 8,194טוקנים בהקשר
  • 4.3 GBמשקל הקבצים
  • 37,985,566הורדות בחודש
  • 3,487לייקים

מה זה

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

בבדיקות השוואתיות של הקהילה מול מודלים רב-לשוניים אחרים כולל OpenAI, הוא הגיע למקומות הראשונים באנגלית ובשפות נוספות. המפתחים שלו בדקו אותו במדדי MIRACL, MKQA ו־MLDR, ורואים שם שהשילוב של אחזור היברידי עם רי-ראנקר נותן שיפור ממשי לעומת וקטורים דחוסים בלבד, בעיקר בטקסטים ארוכים שבהם חיפוש מבוסס מילות מפתח עדיין מחזיק ביתרון.

מתאים ל

  • חיפוש היברידי מנוהל

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

  • אחזור במסמכים ארוכים

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

  • חיפוש רב-לשוני חוצה שפות

    הוא אומן על יותר ממאה שפות ונבדק על שאילתות בשפה אחת שמחזירות תוצאות בשפה אחרת.

איפה זה נופל

במסמכים ארוכים מאוד, המפתחים עצמם מודים ש־BM25 רגיל נשאר תחרותי מאוד, ואפילו יצרו מערך נתונים ייעודי בשם MLDR כדי לשפר את החולשה הזו. בנוסף, אם תרצו לנצל את כל שלושת מצבי השליפה במקביל, כולל ColBERT והמשקלים הדלילים, תצטרכו מסד נתונים וקטורי שיודע לעכל את זה, כמו Milvus או Vespa, מה שמסבך את כל הארכיטקטורה. מעבר לזה, מודל של 24 שכבות על טקסטים של 8,000 טוקנים מייצר תקורה חישובית כבדה שלא מתאימה למערכות שדורשות זמני תגובה של מילישניות בודדות.

שאלות
נפוצות

האם צריך להוסיף הוראות לשאילתות כמו בגרסאות הקודמות של BGE?

לא. בניגוד לגרסאות bge-large-en-v1.5, בגרסת M3 הסירו את הצורך בהוספת prefix או instruction לשאילתה לפני הקידוד.

אפשר להשתמש בו רק עם sentence-transformers?

כן, אבל רק עבור הוקטורים הדחוסים הרגילים. אם אתם רוצים את המשקלים הדלילים או את וקטורי ה־ColBERT, צריך להשתמש בחבילה FlagEmbedding.

כמה זיכרון דורשת הרצה שלו על מסמכים מלאים?

המודל תופס קצת מעל 4 גיגה-בייט של זיכרון בסיסי, אבל טקסט של 8,192 טוקנים מגדיל מאוד את צריכת ה־RAM וה־VRAM בזמן החישוב. מומלץ להפעיל מצב fp16 כדי למנוע קריסות של חוסר זיכרון.

איך מריצים

כדי להריץ אותו משתמשים בספרייה FlagEmbedding או ישירות ב־sentence-transformers, אם צריכים רק את הוקטור הדחוס. הקבצים שוקלים 4.3 גיגה-בייט בדיוק של float32, אבל אפשר להריץ אותו עם use_fp16 כדי לחסוך זיכרון. כרטיס מסך מודרני עם 8 עד 12 גיגה-בייט VRAM יספיק לרוב המשימות, אלא אם דוחפים אצווה גדולה של טקסטים באורך המרבי של 8,192 טוקנים, מה שידרוש כרטיס חזק יותר כמו A10 או מעבד גרפי של 24 גיגה-בייט.

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

from sentence_transformers import SentenceTransformer

m = SentenceTransformer("BAAI/bge-m3")
v = m.encode(["שלום עולם"])

הרישיון

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

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

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