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

تشمل بعض حالات الاستخدام المحتملة للتشابهات exchesearchkit :
محركات بحث المستندات التي تركز على الخصوصية: قم بإنشاء محرك بحث يعالج المستندات الحساسة محليًا ، دون تعريض بيانات المستخدم للخدمات الخارجية. (انظر مثال مشروع "chatwithfilesexample" في دليل الأمثلة.)
أنظمة إجابة الأسئلة غير المتصلة بالإنترنت: قم بتنفيذ نظام إجابة أسئلة يجد الإجابات الأكثر صلة باستعلام المستخدم داخل مجموعة بيانات محلية.
محركات التجميع والتوصيات المستندات: تجمع تلقائيًا وتنظيم المستندات بناءً على محتواها النصية على الحافة.
من خلال الاستفادة من التشابهات ، يمكن للمطورين بسهولة إنشاء تطبيقات قوية تبقي البيانات قريبة من المنزل دون مفاضلات كبيرة في الوظائف أو الأداء.
لتثبيت ThipitySearchKit ، ما عليك سوى إضافته كاعتماد على مشروع Swift الخاص بك باستخدام Swift Package Manager. أوصي باستخدام طريقة Xcode شخصيًا عبر:
File ← Add Packages... → Search or Enter Package Url → https://github.com/ZachNagengast/similarity-search-kit.git
يجب أن يمنحك Xcode الخيارات التالية لاختيار النموذج الذي ترغب في إضافته (انظر النماذج المتاحة أدناه للمساعدة في اختيار):

إذا كنت ترغب في إضافتها عبر Package.swift ، أضف السطر التالي إلى صفيف التبعيات الخاص بك:
. package ( url : " https://github.com/ZachNagengast/similarity-search-kit.git " , from : " 0.0.1 " )ثم ، أضف التبعية المستهدفة المناسبة إلى الهدف المطلوب:
. target ( name : " YourTarget " , dependencies : [
" SimilaritySearchKit " ,
" SimilaritySearchKitDistilbert " ,
" SimilaritySearchKitMiniLMMultiQA " ,
" SimilaritySearchKitMiniLMAll "
] )إذا كنت تريد فقط استخدام مجموعة فرعية من النماذج المتاحة ، فيمكنك حذف التبعية المقابلة. هذا سيقلل من حجم الثنائي النهائي.
لاستخدام التشابهات في مشروعك ، استيراد الإطار أولاً:
import SimilaritySearchKitبعد ذلك ، قم بإنشاء مثيل من التشابه مع مقياس المسافة المطلوب ونموذج التضمين (انظر أدناه للحصول على الخيارات):
let similarityIndex = await SimilarityIndex (
model : NativeEmbeddings ( ) ,
metric : CosineSimilarity ( )
)ثم ، أضف النص الذي تريد أن تجعله قابلاً للبحث في الفهرس:
await similarityIndex . addItem (
id : " id1 " ,
text : " Metal was released in June 2014. " ,
metadata : [ " source " : " example.pdf " ]
)أخيرًا ، استفسر عن الفهرس لأكثر العناصر متشابهة مع استعلام معين:
let results = await similarityIndex . search ( " When was metal released? " )
print ( results ) الذي يخرج مجموعة SearchResult : [SearchResult(id: "id1", score: 0.86216, metadata: ["source": "example.pdf"])]
يحتوي دليل Examples على تطبيقات IOS و MacOS متعددة العينة التي توضح كيفية استخدام التشابهات البحث إلى أقصى حد.
| مثال | وصف | متطلبات |
|---|---|---|
BasicExample | تطبيق متعدد المنافذ أساسي يقوم بفهرسة ويقارن تشابه مجموعة صغيرة من السلاسل المتشددين. | iOS 16.0+ ، Macos 13.0+ |
PDFExample | تطبيق Mac-Catalyst يتيح البحث الدلالي على محتويات ملفات PDF الفردية. | iOS 16.0+ |
ChatWithFilesExample | تطبيق MacOS متقدم يفهرس أي/جميع الملفات النصية على جهاز الكمبيوتر الخاص بك. | ماكوس 13.0+ |
| نموذج | استخدام الحالة | مقاس | مصدر |
|---|---|---|---|
NaturalLanguage | تشابه النص ، استنتاج أسرع | مدمج | تفاحة |
MiniLMAll | تشابه النص ، أسرع استنتاج | 46 ميغابايت | luggingface |
Distilbert | البحث عن الأسئلة والأجوبة ، أعلى دقة | 86 ميغابايت (كمية) | luggingface |
MiniLMMultiQA | سؤال وجواب ، أسرع استدلال | 46 ميغابايت | luggingface |
تتوافق النماذج مع EmbeddingProtocol ويمكن استخدامها بالتبادل مع فئة SimilarityIndex .
يمكن العثور على قائمة صغيرة ولكن متزايدة من النماذج المحدودة مسبقًا في هذا الريبو على Luggingface. إذا كان لديك نموذج ترغب في رؤيته إلى القائمة ، فيرجى فتح مشكلة أو إرسال طلب سحب.
| متري | وصف |
|---|---|
DotProduct | يقيس التشابه بين متجهين كمنتج لأحجامهم |
CosineSimilarity | يحسب التشابه من خلال قياس جيب التمام للزاوية بين متجهين |
EuclideanDistance | يحسب المسافة المستقيمة بين نقطتين في الفضاء الإقليدي |
تتوافق المقاييس مع DistanceMetricProtocol ويمكن استخدامها بالتبادل مع فئة SimilarityIndex .
يمكن تجاوز جميع الأجزاء الرئيسية من SimilarityIndex مع التطبيقات المخصصة التي تتوافق مع البروتوكولات التالية:
يقبل سلسلة وإرجاع مجموعة من العوامات التي تمثل تضمين نص الإدخال.
func encode ( sentence : String ) async -> [ Float ] ?يقبل ناقل تضمين الاستعلام وقائمة من متجهات التضمينات ويعيد تناقض من درجة مقياس المسافة وفهرس أقرب جار.
func findNearest ( for queryEmbedding : [ Float ] , in neighborEmbeddings : [ [ Float ] ] , resultsCount : Int ) -> [ ( Float , Int ) ]يقسم سلسلة إلى أجزاء من حجم معين ، مع تداخل معين. هذا مفيد لتقسيم المستندات الطويلة إلى أجزاء أصغر للتضمين. يعيد قائمة القطع وقائمة اختيارية من الرموز المتصلة لكل قطعة.
func split ( text : String , chunkSize : Int , overlapSize : Int ) -> ( [ String ] , [ [ String ] ] ? )رمز النص والكشف عن النص. استخدم هذا للنماذج المخصصة التي تستخدم المميزات المختلفة مما هي متوفرة في القائمة الحالية.
func tokenize ( text : String ) -> [ String ]
func detokenize ( tokens : [ String ] ) -> Stringحفظ وتحميل عناصر الفهرس. يستخدم التطبيق الافتراضي ملفات JSON ، ولكن يمكن تجاوز هذا لاستخدام أي آلية تخزين.
func saveIndex ( items : [ IndexItem ] , to url : URL , as name : String ) throws -> URL
func loadIndex ( from url : URL ) throws -> [ IndexItem ]
func listIndexes ( at url : URL ) -> [ URL ] تم اشتقاق أجزاء كثيرة من هذا المشروع من الكود الحالي ، إما بالفعل في Swift ، أو ترجم إلى Swift بفضل ChatGPT. هذه بعض المشاريع الرئيسية التي تمت الإشارة إليها:
استلهم هذا المشروع من التطورات المذهلة في خدمات اللغات الطبيعية والتطبيقات التي ظهرت مع ظهور ChatGPT. في حين أن هذه الخدمات قد فتحت عالمًا جديدًا بالكامل من التطبيقات القائمة على النصوص ، إلا أنها تعتمد غالبًا على الخدمات السحابية. على وجه التحديد ، تتطلب العديد من خدمات "الدردشة مع البيانات" المستخدمين لتحميل بياناتهم إلى الخوادم البعيدة للمعالجة والتخزين. على الرغم من أن هذا يعمل بالنسبة للبعض ، إلا أنه قد لا يكون الأنسب لأولئك في بيئات الاتصال المنخفضة ، أو التعامل مع المعلومات السرية أو الحساسة. في حين أن Apple لديها Library NaturalLanguage لمهام مماثلة ، فإن عملية تحويل نموذج COREML تفتح مجموعة واسعة من النماذج وحالات الاستخدام. مع وضع ذلك في الاعتبار ، يهدف ThipSearchKit إلى توفير حل قوي على الجهاز يمكّن المطورين من إنشاء تطبيقات NLP الحديثة داخل النظام البيئي Apple.
فيما يلي قائمة قصيرة ببعض الميزات المخطط لها للإصدارات المستقبلية:
أشعر بالفضول لمعرفة كيف يستخدم الناس هذه المكتبة وما هي الميزات الأخرى التي ستكون مفيدة ، لذا يرجى عدم التردد في التواصل مع TwitterZachNagengast أو البريد الإلكتروني Znagengast (AT) Gmail (DOT) COM.