التضاؤل الأسيCompatible with Milvus 2.6.x

يؤدي التضاؤل الأسي إلى انخفاض أولي حاد يتبعه ذيل طويل في نتائج بحثك. مثل دورة الأخبار العاجلة حيث تتضاءل الأهمية بسرعة في البداية ولكن بعض القصص تحتفظ بأهميتها مع مرور الوقت، يطبق التضاؤل الأسي عقوبة حادة على العناصر التي تقع خارج النطاق المثالي مع الحفاظ على العناصر البعيدة قابلة للاكتشاف. هذا النهج مثالي عندما ترغب في إعطاء الأولوية للقرب أو الحداثة بشكل كبير ولكنك لا تريد التخلص تمامًا من الخيارات البعيدة.

على عكس دوال الاضمحلال الأخرى:

  • يخلق التضاؤل الغاوسي انخفاضًا تدريجيًا على شكل جرس

  • يتناقص التضاؤل الخطي بمعدل ثابت حتى يصل إلى الصفر تمامًا

يعمل التضاؤل الأسي بشكل فريد على "تحميل العقوبة أماميًا"، مما يؤدي إلى تطبيق معظم تخفيض الصلة في وقت مبكر مع الحفاظ على ذيل طويل من الصلة الدنيا ولكن غير الصفرية.

متى تستخدم التضاؤل الأسي

التضاؤل الأسي فعال بشكل خاص في:

حالة الاستخدام

مثال

لماذا يعمل التضاؤل الأسي بشكل جيد

موجز الأخبار

بوابات الأخبار العاجلة

يقلل بسرعة من أهمية الأخبار القديمة مع الاستمرار في عرض الأخبار المهمة من أيام مضت

الجداول الزمنية لوسائل التواصل الاجتماعي

موجزات النشاط وتحديثات الحالة

يركز على المحتوى الجديد ولكنه يسمح بظهور المحتوى الأقدم سريع الانتشار

أنظمة التنبيهات

تحديد أولويات التنبيهات

إنشاء تنبيهات عاجلة للتنبيهات الحديثة مع الحفاظ على وضوح التنبيهات المهمة

التنزيلات السريعة

العروض محدودة الوقت

يقلل من الظهور بسرعة مع اقتراب الموعد النهائي

اختر التضاؤل الأسي عندما:

  • يتوقع المستخدمون أن تهيمن العناصر الحديثة جدًا أو القريبة جدًا على النتائج بقوة

  • يجب أن تظل العناصر الأقدم أو البعيدة قابلة للاكتشاف إذا كانت ذات صلة بالموضوع بشكل استثنائي

  • يجب أن يكون الانخفاض في الصلة بالموضوع في المقدمة (أكثر حدة في البداية، وأكثر تدرجًا في وقت لاحق)

مبدأ الانخفاض الحاد

ينشئ التضاؤل الأسي منحنى ينخفض بسرعة في البداية، ثم يتسطح تدريجياً إلى ذيل طويل يقترب من الصفر ولكنه لا يصل إلى الصفر أبداً. يظهر هذا النمط الرياضي بشكل متكرر في الظواهر الطبيعية مثل الاضمحلال الإشعاعي، وانخفاض عدد السكان، وأهمية المعلومات بمرور الوقت.

يجب أن تستخدم جميع معلمات الوقت (origin ، offset ، scale) نفس وحدة بيانات المجموعة. إذا كانت المجموعة الخاصة بك تخزن الطوابع الزمنية بوحدة مختلفة (ميلي ثانية، ميكروثانية)، فاضبط جميع المعلمات وفقًا لذلك.

Exp Decay التضاؤل الأسي

يوضح الرسم البياني أعلاه كيف سيؤثر الاضمحلال الأسي على تصنيفات المقالات الإخبارية في منصة إخبارية رقمية:

  • origin (الوقت الحالي): اللحظة الحالية، حيث تكون الأهمية في حدها الأقصى (1.0).

  • offset (3 ساعات): "نافذة "الأخبار العاجلة" - جميع الأخبار المنشورة خلال الساعات الثلاث الأخيرة تحافظ على درجات الملاءمة الكاملة (1.0)، مما يضمن عدم معاقبة الأخبار الحديثة جدًا دون داعٍ بسبب الاختلافات الزمنية الطفيفة.

  • decay (0.5): الدرجة في مسافة المقياس - يتحكم هذا المتغير في مدى انخفاض الدرجات بشكل كبير مع مرور الوقت.

  • scale (24 ساعة): الفترة الزمنية التي تنخفض عندها الأهمية إلى قيمة الاضمحلال-المقالات الإخبارية التي مضى عليها 24 ساعة بالضبط تنخفض درجاتها إلى النصف (0.5).

كما ترون من المنحنى، تستمر المقالات الإخبارية التي مضى عليها أكثر من 24 ساعة في الانخفاض في الأهمية ولكنها لا تصل إلى الصفر تمامًا. حتى القصص التي تعود إلى عدة أيام مضت تحتفظ بالحد الأدنى من الملاءمة، مما يسمح للأخبار المهمة ولكن الأقدم لا تزال تظهر في خلاصتك (وإن كان ترتيبها أقل).

يحاكي هذا السلوك كيفية عمل ملاءمة الأخبار عادةً - تهيمن القصص الحديثة جدًا بقوة، ولكن لا يزال بإمكان القصص الأقدم المهمة أن تبرز إذا كانت ذات صلة استثنائية باهتمامات المستخدم.

المعادلة

المعادلة الرياضية لحساب درجة الاضمحلال الأسي هي:

S(doc)=exp(λmax(0,fieldvaluedocoriginoffset))S(doc) = \exp\left( \lambda \cdot \max\left(0, \left|fieldvalue_{doc} - origin\right| - offset \right) \right)

أين:

λ=ln(decay)scale\lambda = \frac{\ln(decay)}{scale}

شرح ذلك بلغة بسيطة

  1. Calculate how far the field value is from the origin: ∣fieldvaluedoc−origin∣|fieldvalue_{doc} - origin| .

  2. اطرح الإزاحة (إن وجدت) ولكن لا تنزل أبدًا إلى ما دون الصفر: الحد الأقصى(المسافة -الإزاحة)\الحد الأقصى (0، المسافة - الإزاحة) .

  3. اضرب في λ\lambda والذي يتم حسابه من معلمات المقياس والتضاؤل.

  4. خذ الأس، والذي يمنحك قيمة بين 0 و1: exp(λ ⋅⋅⋅value)\ exp (\lambda \cdot value) .

يحوّل حساب λ \lambda حساب معامِلات المقياس والتضاؤل إلى معامِل المعدل للدالة الأسية. تؤدي قيمة λ \lambda الأكثر سالبة إلى انخفاض أولي أكثر حدة.

استخدام التضاؤل الأسي

يمكن تطبيق الاضمحلال الأسي على كل من عمليات البحث المتجه القياسية وعمليات البحث الهجين في ميلفوس. فيما يلي مقتطفات التعليمات البرمجية الرئيسية لتطبيق هذه الميزة.

قبل استخدام دوال التضاؤل، يجب عليك أولاً إنشاء مجموعة تحتوي على حقول رقمية مناسبة (مثل الطوابع الزمنية والمسافات وغيرها) والتي سيتم استخدامها لحسابات التضاؤل. للحصول على أمثلة عملية كاملة بما في ذلك إعداد المجموعة، وتعريف المخطط، وإدراج البيانات، راجع البرنامج التعليمي لمصنف التضاؤل.

إنشاء مصنف اضمحلال

بعد إعداد مجموعتك بحقل رقمي (في هذا المثال، publish_time)، قم بإنشاء مصنف تضاؤل أسي:

تناسق الوحدة الزمنية: عند استخدام الاضمحلال المستند إلى الوقت، تأكد من أن المعلمات origin و scale و offset تستخدم نفس الوحدة الزمنية التي تستخدمها بيانات مجموعتك. إذا كانت مجموعتك تخزن الطوابع الزمنية بالثواني، فاستخدم الثواني لجميع المعلمات. إذا كانت تستخدم المللي ثانية، فاستخدم المللي ثانية لجميع المعلمات.

from pymilvus import Function, FunctionType
import datetime

# Create an exponential decay ranker for news recency
# Note: All time parameters must use the same unit as your collection data
ranker = Function(
    name="news_recency",                  # Function identifier
    input_field_names=["publish_time"],   # Numeric field to use
    function_type=FunctionType.RERANK,    # Function type. Must be RERANK
    params={
        "reranker": "decay",              # Specify decay reranker
        "function": "exp",                # Choose exponential decay
        "origin": int(datetime.datetime.now().timestamp()),  # Current time (seconds, matching collection data)
        "offset": 3 * 60 * 60,            # 3 hour breaking news window (seconds)
        "decay": 0.5,                     # Half score at scale distance
        "scale": 24 * 60 * 60             # 24 hours (in seconds, matching collection data)
    }
)
import io.milvus.v2.service.vector.request.ranker.DecayRanker;

DecayRanker ranker = DecayRanker.builder()
        .name("news_recency")
        .inputFieldNames(Collections.singletonList("publish_time"))
        .function("exp")
        .origin(System.currentTimeMillis())
        .offset(3 * 60 * 60)
        .decay(0.5)
        .scale(24 * 60 * 60)
        .build();


import { FunctionType } from "@zilliz/milvus2-sdk-node";

const ranker = {
  name: "news_recency",
  input_field_names: ["publish_time"],
  type: FunctionType.RERANK,
  params: {
    reranker: "decay",
    function: "exp",
    origin: new Date(2025, 1, 15).getTime(),
    offset: 3 * 60 * 60,
    decay: 0.5,
    scale: 24 * 60 * 60,
  },
};

// go
# restful

بعد تحديد مصنف الاضمحلال الخاص بك، يمكنك تطبيقه أثناء عمليات البحث عن طريق تمريره إلى المعلمة ranker:

# Apply decay ranker to vector search
result = milvus_client.search(
    collection_name,
    data=[your_query_vector],             # Replace with your query vector
    anns_field="dense",                   # Vector field to search
    limit=10,                             # Number of results
    output_fields=["title", "publish_time"], # Fields to return
    ranker=ranker,                        # Apply the decay ranker
    consistency_level="Strong"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;

SearchReq searchReq = SearchReq.builder()
        .collectionName(COLLECTION_NAME)
        .data(Collections.singletonList(new EmbeddedText("market analysis")))
        .annsField("vector_field")
        .limit(10)
        .outputFields(Arrays.asList("title", "publish_time"))
        .functionScore(FunctionScore.builder()
                .addFunction(ranker)
                .build())
        .consistencyLevel(ConsistencyLevel.STRONG)
        .build();
SearchResp searchResp = client.search(searchReq);
import { FunctionType MilvusClient } from "@zilliz/milvus2-sdk-node";

const milvusClient = new MilvusClient("http://localhost:19530");

const result = await milvusClient.search({
  collection_name: "collection_name",
  data: [your_query_vector], // Replace with your query vector
  anns_field: "dense",
  limit: 10,
  output_fields: ["title", "publish_time"],
  rerank: ranker,
  consistency_level: "Strong",
});

// go
# restful

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟