حزمة Python معبأة الميزات وتنسيق ملف تخزين المتجهات لاستخدام تضمينات المتجهات في نماذج التعلم الآلي بطريقة سريعة وفعالة وبسيطة تم تطويرها بواسطة اللدونة. يهدف في المقام الأول إلى أن يكون بديلاً أبسط / أسرع لـ Gensim ، ولكن يمكن استخدامه كمتجر للمخزن الرئيسي العام للمجالات خارج NLP. إنه يوفر ميزات فريدة مثل عمليات البحث خارج البراغي وتدفق النماذج الكبيرة عبر HTTP. نشرت في ورقتنا في EMNLP 2018 ومتاحة على Arxiv.
يمكنك تثبيت هذه الحزمة مع pip :
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3لدى Google Colaboratory بعض مشكلات التبعية مع تثبيت الحجم بسبب التبعيات المتضاربة. يمكنك استخدام المقتطف التالي لتثبيت حجم على Google Colaboratory:
# Install Magnitude on Google Colab
! echo " Installing Magnitude.... (please wait, can take a while) "
! (curl https://raw.githubusercontent.com/plasticityai/magnitude/master/install-colab.sh | /bin/bash 1> /dev/null 2> /dev/null)
! echo " Done installing Magnitude. " أصبحت نماذج تضمين مساحة المتجهات شائعة بشكل متزايد في التعلم الآلي ، وكان تقليديًا شائعًا لتطبيقات معالجة اللغة الطبيعية. هناك أداة سريعة وخفيفة الوزن لاستهلاك نماذج تضمين مساحة المتجهات الكبيرة هذه.
يهدف تنسيق ملف حجم الحجم ( .magnitude ) لتضمينات المتجه إلى أن يكون تنسيقًا أكثر كفاءة في دمج المتجهات العالمي يسمح بتحميل كسول للبدء البارد بشكل أسرع في التطوير ، وتخزين ذاكرة LRU ، وذاكرة التخزين المؤقتة ، والتعليقات المتعددة المثيرة للتوجيه المزعوم للسيارات المثيرة للتوجيه. أو مفاتيح أخطاء إملائية وتسلسل نماذج متجه متعددة معًا. كما أنه يهدف إلى العمل مع نماذج متجه كبيرة قد لا تتناسب مع الذاكرة.
يستخدم SQLite ، قاعدة بيانات مضمنة سريعة وشائعة ، كمتجر بيانات أساسي. يستخدم فهارس لبحث المفاتيح السريعة وكذلك يستخدم تعيين الذاكرة ، وتعليمات SIMD ، وفهرسة مكانية للبحث سريع التشابه في مساحة المتجه خارج القرص مع أداء ذاكرة جيد حتى بين عمليات متعددة. علاوة على ذلك ، يتم تخزين خرائط الذاكرة مؤقتًا بين الركض ، لذا حتى بعد إغلاق العملية ، يتم جني تحسينات السرعة.
| متري | ضوء الحجم | متوسط حجم | حجم ثقيل | تيار الحجم |
|---|---|---|---|---|
| وقت التحميل الأولي | 0.7210s | ━ 1 | ━ 1 | 7.7550s |
| استعلام مفتاح واحد بارد | 0.0001s | ━ 1 | ━ 1 | 1.6437s |
| استعلام مفتاح واحد دافئ (نفس مفتاح الاستعلام البارد) | 0.00004S | ━ 1 | ━ 1 | 0.0004S |
| الاستعلام الرئيسي المتعدد البارد (ن = 25) | 0.0442S | ━ 1 | ━ 1 | 1.7753S |
| استعلام مفتاح متعددة دافئ (ن = 25) (نفس مفاتيح الاستعلام البارد) | 0.00004S | ━ 1 | ━ 1 | 0.0001s |
أول استعلام بحث most_similar(ن = 10) (أسوأ حالة) | 247.05S | ━ 1 | ━ 1 | - |
أول استعلام بحث most_similar(ن = 10) (الحالة المتوسطة) (ث/ قرص ذاكرة التخزين المؤقت المستمرة) | 1.8217s | ━ 1 | ━ 1 | - |
البحث اللاحق most_similar(ن = 10) (مفتاح مختلف عن الاستعلام الأول) | 0.2434S | ━ 1 | ━ 1 | - |
بحث دافئ most_similar(ن = 10) (نفس المفتاح مثل الاستعلام الأول) | 0.00004S | 0.00004S | 0.00004S | - |
أول استعلام بحث most_similar_approx(ن = 10 ، جهد = 1.0) (أسوأ حالة) | ن/أ | ن/أ | 29.610s | - |
أول استعلام بحث most_similar_approx(ن = 10 ، جهد = 1.0) (حالة متوسط) (ث/ قرص ذاكرة التخزين المؤقت المستمرة) | ن/أ | ن/أ | 0.9155S | - |
بحث most_similar_approx(ن = 10 ، جهد = 1.0) (مفتاح مختلف عن الاستعلام الأول) | ن/أ | ن/أ | 0.1873S | - |
بحث most_similar_approx(ن = 10 ، جهد = 0.1) (مفتاح مختلف عن الاستعلام الأول) | ن/أ | ن/أ | 0.0199S | - |
بحث دافئ most_similar_approx(ن = 10 ، الجهد = 1.0) (نفس المفتاح مثل الاستعلام الأول) | ن/أ | ن/أ | 0.00004S | - |
| حجم الملف | 4.21GB | 5.29 جيجابايت | 10.74 جيجابايت | 0.00 جيجابايت |
| معالجة استخدام الذاكرة (RAM) | 18 كيلو بايت | ━ 1 | ━ 1 | 1.71 ميغابايت |
| استخدام ذاكرة (RAM) بعد 100 استعلامات مفتاح | 168 كيلو بايت | ━ 1 | ━ 1 | 1.91 ميغابايت |
| استخدام ذاكرة (RAM) بعد 100 استعلامات مفتاح + بحث تشابه | 342 كيلو بايت 2 | ━ 1 | ━ 1 | |
| اختبارات النزاهة والاختبارات | ✅ | ✅ | ✅ | ✅ |
التنسيق العالمي بين Word2Vec ( .txt ، .bin ) ، القفاز ( .txt ) ، fasttext ( .vec ) ، و Elmo ( .hdf5 ) مع أداة المحول | ✅ | ✅ | ✅ | ✅ |
| واجهة بيثون بسيطة | ✅ | ✅ | ✅ | ✅ |
| بعض التبعيات | ✅ | ✅ | ✅ | ✅ |
| دعم لنماذج الذاكرة أكبر | ✅ | ✅ | ✅ | ✅ |
| التحميل كسول كلما كان ذلك ممكنًا للسرعة والأداء | ✅ | ✅ | ✅ | ✅ |
محسّن threading والمعالجة multiprocessing | ✅ | ✅ | ✅ | ✅ |
| بحث كبير ومتعدد المفاتيح مع الحشوة والاقتطاع ودعم العامل المميز ودعم التمييز | ✅ | ✅ | ✅ | ✅ |
| تلاعيد نماذج متجه متعددة معًا | ✅ | ✅ | ✅ | ✅ |
| البحث الأساسي عن مفتاح المفتاح (شخصية ميزة n-gram هازف) | ✅ | ✅ | ✅ | ✅ |
| البحث المتقدم مفتاح مفتاح خارج البرد بدعم من الأخطاء الإملائية (ميزة الحرف n-gram تجزئة مفاتيح متشابهة في الفتحة) | ✅ | ✅ | ✅ | |
| تقريبي الأكثر تفتيشا مماثلة مع فهرس إزعاج | ✅ | ✅ | ||
| تدريب مدمج لنماذج جديدة |
1: نفس القيمة مثل العمود السابق
2: يستخدم mmap للقراءة من القرص ، لذلك سيظل نظام التشغيل يخصص صفحات الذاكرة عند توفر الذاكرة ، ولكن يمكن مشاركتها بين العمليات ولا تتم إدارتها في كل عملية للملفات الكبيرة للغاية وهي فوز في الأداء
*: تم تنفيذ جميع المعايير على متجهات Word News التي تم تدريبها قبل تدريبات Google ( GoogleNews-vectors-negative300.bin ) مع MacBook Pro (Retina ، 15 بوصة ، منتصف عام 2014) 2.2 جيجا هرتز مروّت intel core i7 @ 16gb على SSD على متوسط التجارب حيث يكون ذلك ممكنًا.
تم تحويل نماذج التضمين الشائعة مسبقًا لتنسيق .magnitude للتنزيل والاستخدام المنفصلين:
| مساهم | بيانات | ضوء (الدعم الأساسي لمفاتيح خارجية) | واسطة (مُستَحسَن) (الدعم المتقدم لمفاتيح خارجية) | ثقيل (الدعم المتقدم لمفاتيح خارج البضائع وأسرع most_similar_approx ) |
|---|---|---|---|---|
| Google - Word2Vec | Google News 100b | 300D | 300D | 300D |
| ستانفورد - قفاز | ويكيبيديا 2014 + Gigaword 5 6B | 50d ، 100d ، 200d ، 300d | 50d ، 100d ، 200d ، 300d | 50d ، 100d ، 200d ، 300d |
| ستانفورد - قفاز | ويكيبيديا 2014 + Gigaword 5 6B (تم تصنيفها باللدونة) | 50d ، 100d ، 200d ، 300d | 50d ، 100d ، 200d ، 300d | 50d ، 100d ، 200d ، 300d |
| ستانفورد - قفاز | الزحف الشائع 840B | 300D | 300D | 300D |
| ستانفورد - قفاز | تويتر 27 ب | 25d ، 50d ، 100d ، 200d | 25d ، 50d ، 100d ، 200d | 25d ، 50d ، 100d ، 200d |
| Facebook - fasttext | الإنجليزية ويكيبيديا 2017 16 ب | 300D | 300D | 300D |
| Facebook - fasttext | الإنجليزية ويكيبيديا 2017 + الكلمة الفرعية 16B | 300D | 300D | 300D |
| Facebook - fasttext | الزحف الشائع 600 ب | 300D | 300D | 300D |
| AI2 - Allennlp Elmo | نماذج إلمو | نماذج إلمو | نماذج إلمو | نماذج إلمو |
| جوجل - بيرت | قريباً... | قريباً... | قريباً... | قريباً... |
هناك تعليمات أدناه لتحويل أي .bin ، .txt ، .vec ، .hdf5 ملف إلى ملف .magnitude .
يمكنك إنشاء كائن حجم مثل ذلك:
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" ) إذا لزم الأمر ، وتضمينها للراحة ، يمكنك أيضًا فتح ملف .bin و .txt و .vec و .hdf5 مباشرة مع الحجم. هذا ، مع ذلك ، أقل كفاءة وبطيئة للغاية بالنسبة للموديلات الكبيرة حيث سيتم تحويل الملف إلى ملف .magnitude في أول دليل مؤقت. الدليل المؤقت ليس مضمونًا للاستمرار ولا يستمر عند إعادة تشغيل الكمبيوتر. يجب أن تكون مسبقًا .bin ، .txt ، .vec ، .hdf5 ملفات مع python -m pymagnitude.converter عادة لسرعات أسرع ، ولكن هذه الميزة مفيدة لحالات الاستخدام لمرة واحدة. سيتم إنشاء تحذير عند إنشاء كائن حجم مباشرة مع .bin ، .txt ، .vec ، .hdf5 . يمكنك وضع تحذيرات من خلال تعيين وسيطة supress_warnings في المُنشئ إلى True .
lazy_loading اختيارية إلى المُنشئ ذات القيمة -1 لتعطيل التحميل الكسول وتحميل جميع المتجهات المسبقة إلى الذاكرة (la gensim) ، 0 (افتراضي X لتمكين التحميل الكسول غير المحدود الذي يتم استخدامه في المخططات X غير المحدودة.most_similar بفارغ الصبر على التهيئة ، فقم eager على True .lazy_loading على -1 أو يتم تعيين eager على البيانات True ، سيتم تحميلها مسبقًا في الذاكرة في مؤشر ترابط الخلفية لمنع الحظر لبضع دقائق للنماذج الكبيرة. إذا كنت تريد حقًا حظر السلوك ، فيمكنك True حجة blocking .normalized إلى False إذا كنت ترغب في استلام المتجهات غير الطبيعية الخام بدلاً من ذلك.use_numpy على False إذا كنت ترغب في استلام قوائم Python بدلاً من ذلك.case_insensitive إلى True إذا كنت ترغب في إجراء عمليات تفتيش غير حساسة للحالة.pad_to_length التي ستحدد طول جميع الأمثلة يجب أن تكون مبطنة إذا تم تمرير أمثلة متعددة. سيتم اقتطاع أي أمثلة أطول من طول الوسادة.truncate_left إلى True إذا كنت تريد بداية قائمة المفاتيح في كل مثال يتم اقتطاعها بدلاً من النهاية في حالة أطول من pad_to_length عند تحديدها.pad_left على True إذا كنت تريد أن تظهر الحشو في البداية مقابل النهاية (وهو الافتراضي).placeholders ، والتي ستزيد من أبعاد كل ناقل من خلال مبلغ placeholders ، غير ذلك من تلك الأبعاد الإضافية. هذا مفيد ، إذا كنت تخطط لإضافة قيم ومعلومات أخرى إلى المتجهات وتريد المساحة لتلك المسبقة المسبقة في المتجهات لتحقيق الكفاءة.language باستخدام رمز لغة ISO 639-1 ، والذي ، إذا كنت تستخدم حجمها في ناقلات الكلمات ، ستضمن احترام المكتبة والميزات الأخرى الخاصة باللغة لتلك اللغة. الافتراضي هو en للغة الإنجليزية. يمكنك أيضًا المرور في None إذا كنت لا تستخدم حجم ناقلات الكلمات.dtype والتي ستتيح لك التحكم في نوع البيانات من المصفوفات numpy التي يتم إرجاعها حسب الحجم.devices التي تتيح لك التحكم في استخدام وحدات معالجة الرسومات عندما تدعم النماذج الأساسية استخدام وحدة معالجة الرسومات. يجب أن تكون هذه الوسيطة قائمة بالأعداد الصحيحة ، حيث يمثل كل عدد صحيح رقم جهاز GPU ( 0 ، 1 ، إلخ).temp_dir والتي ستتيح لك التحكم في موقع حجم الدليل المؤقت.log التي سيكون لها تقدم حجم إلى خطأ قياسي عند إجراء العمليات البطيئة.يمكنك الاستعلام عن إجمالي عدد المتجهات في الملف مثل SO:
len ( vectors )يمكنك الاستعلام عن أبعاد المتجهات مثل SO:
vectors . dimيمكنك التحقق مما إذا كان المفتاح في المفردات مثل:
"cat" in vectorsيمكنك التكرار من خلال جميع المفاتيح والمتجهات مثل ذلك:
for key , vector in vectors :
...يمكنك الاستعلام عن متجه مفتاح مثل ذلك:
vectors . query ( "cat" )يمكنك الفهرسة للمفتاح والمتجه N-TH مثل ذلك:
vectors [ 42 ]يمكنك الاستعلام عن متجه مفاتيح متعددة مثل ذلك:
vectors . query ([ "I" , "read" , "a" , "book" ])سيتم إرجاع مجموعة ثنائية الأبعاد (مفاتيح المتجهات).
يمكنك الاستعلام عن متجه أمثلة متعددة مثل ذلك:
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) سيتم إرجاع مجموعة ثلاثية الأبعاد (أمثلة من قبل المتجهات). إذا لم يتم تحديد pad_to_length ، وكان حجم كل مثال غير متساوٍ ، فسيكون مبطنًا بطول أطول مثال.
يمكنك فهرسة للمفاتيح والمتجهات لمؤشرات متعددة مثل ذلك:
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notationيمكنك الاستعلام عن مسافة مفتاحين أو متعددة مثل ذلك:
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])يمكنك الاستعلام عن تشابه مفتاحين أو متعددة مثل ذلك:
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])يمكنك الاستعلام عن المفتاح الأكثر تشابهًا من قائمة المفاتيح إلى مفتاح معين مثل ذلك:
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dogيمكنك الاستعلام عن المفتاح الذي لا يتطابق مع قائمة المفاتيح بمفتاح معين مثل ذلك:
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cerealيمكنك الاستعلام عن مفاتيح أكثر تشابهًا (أقرب جيران) مثل ذلك:
vectors . most_similar ( "cat" , topn = 100 ) # Most similar by key
vectors . most_similar ( vectors . query ( "cat" ), topn = 100 ) # Most similar by vector اختياريا ، يمكنك تمرير وسيطة min_similarity إلى most_similar . القيم من [-1.0-1.0] صالحة.
يمكنك أيضًا الاستعلام عن المفاتيح الأكثر تشابهًا مع إعطاء أمثلة إيجابية وسلبية (والتي ، بالمناسبة ، يحل التشبيهات) مثل ذلك:
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen على غرار vectors.most_similar ، توجد وظيفة vectors.most_similar_cosmul . معظمها _similar_cosmul تستخدم وظيفة 3cosmul من ضريبة و Goldberg:
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queenيمكنك أيضًا الاستعلام عن المفاتيح الأكثر تشابهًا باستخدام فهرس أقرب جيران تقريبي وهو أسرع بكثير ، ولكنه لا يضمن الإجابة الدقيقة:
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ]) اختياريا ، يمكنك تمرير وسيطة effort مع القيم بين [0.0-1.0] إلى دالة most_similar_approx التي ستمنحك مفاضلة وقت التشغيل. القيمة الافتراضية effort هي 1.0 والتي ستستغرق الأطول ، ولكنها ستعطي النتيجة الأكثر دقة.
يمكنك الاستعلام عن جميع المفاتيح أقرب إلى المفتاح من مفتاح آخر مثل:
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...] يمكنك الوصول إلى جميع المتجهات الأساسية في النموذج في مجموعة كبيرة من الحجم (Len ( numpy.memmap len(vectors) x vectors.emb_dim ) مثل ذلك:
vectors . get_vectors_mmap ()يمكنك تنظيف جميع الموارد المرتبطة بها ، والملفات المفتوحة ، واتصالات قاعدة البيانات مثل ذلك:
vectors . close ()بالنسبة لتمثيلات ناقلات الكلمات ، يعد التعامل مع مفاتيح خارجية من المعالجة كلمات جديدة وليس في النموذج المدربين ، والتعامل مع الأخطاء المطبعية ، وجعل النماذج المدربة على تمثيلات ناقلات الكلمات بشكل عام.
تتم معالجة مفاتيح خارجية عن طريق تعيين قيمة متجه عشوائي لها. ومع ذلك ، فإن العشوائية حتمية. لذا ، إذا تم مواجهة نفس مفتاح المفتاح الخارجي مرتين ، فسيتم تعيينه نفس قيمة المتجه العشوائي من أجل القدرة على التدريب على مفاتيح خارجية. علاوة على ذلك ، إذا شارك مفتاحان خارج البخار في شباب N-Grams ("Uberx" ، "Uberxl") ، فسيتم وضعهما بالقرب من بعضهما البعض حتى لو لم يكن كلاهما في المفردات:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberxl" in vectors # False
vectors . query ( "uberx" ) # array([ 5.07109939e-02, -7.08248823e-02, -2.74812328e-02, ... ])
vectors . query ( "uberxl" ) # array([ 0.04734962, -0.08237578, -0.0333479, -0.00229564, ... ])
vectors . similarity ( "uberx" , "uberxl" ) # 0.955000000200815إذا كنت تستخدم ملفًا كبيرًا مع دعم متقدم خارج البراغي (متوسطة أو ثقيلة) ، فسيتم أيضًا تضمين مفاتيح خارج البخور بالقرب من المفاتيح المماثلة (التي تحددها تشابه السلسلة) الموجودة في المفردات:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberification" in vectors # False
"uber" in vectors # True
vectors . similarity ( "uberx" , "uber" ) # 0.7383483267618451
vectors . similarity ( "uberification" , "uber" ) # 0.745452837882727 هذا أيضًا يجعل الحجم قويًا لكثير من الأخطاء الإملائية:
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"missispi" in vectors # False
vectors . similarity ( "missispi" , "mississippi" ) # 0.35961736624824003
"discrimnatory" in vectors # False
vectors . similarity ( "discrimnatory" , "discriminatory" ) # 0.8309152561753461
"hiiiiiiiiii" in vectors # False
vectors . similarity ( "hiiiiiiiiii" , "hi" ) # 0.7069775034853861تُستخدم الحرف n-grams لإنشاء هذا التأثير لمفاتيح خارجية. تم أخذ مصدر إلهام لهذه الميزة من ناقلات Word Word المثيرة لـ Facebook AI Research بمعلومات عن الكلمات الفرعية ، ولكن بدلاً من استخدام أحرف N-Grams في وقت القطار ، يتم استخدام أحرف الأحرف N-Grams عند الاستدلال بحيث يمكن تكرار التأثير إلى حد ما (ولكن لم يتم تكرارها تمامًا) في النماذج القديمة التي لم يتم تدريبها مع أحرف N-grams مثل الكلمات 2vec.
اختياريا ، يمكنك الجمع بين المتجهات من نماذج متعددة لتغذية معلومات أقوى في نموذج التعلم الآلي مثل SO:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
glove = Magnitude ( "/path/to/glove.6B.50d.magnitude" )
vectors = Magnitude ( word2vec , glove ) # concatenate word2vec with glove
vectors . query ( "cat" ) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cat' from glove)
vectors . query (( "cat" , "cats" )) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cats' from glove)يمكنك تسلسل أكثر من نموذجين متجهين ، وذلك ببساطة عن طريق تمرير المزيد من الحجج إلى المنشئ.
يمكنك تلقائيًا إنشاء متجهات من ميزات إضافية قد يكون لديك مثل أجزاء من الكلام أو معلومات الاعتماد على بناء الجملة أو أي معلومات أخرى باستخدام فئة FeaturizerMagnitude :
from pymagnitude import *
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
pos_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192])
pos_vectors . query ( "JJ" ) # - array([-0.11681135, 0.10259253, 0.8841201 , -0.44063763])
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192]) (deterministic hashing so the same value is returned every time for the same key)
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
dependency_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
dependency_vectors . query ( "nsubj" ) # - array([-0.81043793, 0.55401352, -0.10838071, 0.15656626])
dependency_vectors . query ( "prep" ) # - array([-0.30862918, -0.44487267, -0.0054573 , -0.84071788])سيستخدم الحجم خدعة التجزئة داخليًا لاستخدام التجزئة لقيمة الميزة مباشرة لإنشاء متجه فريد لقيمة الميزة هذه.
يجب أن تكون الوسيطة الأولى لـ FeaturizerMagnitude محصورة تقريبية على عدد القيم للميزة. نظرًا لوجود <100 جزء من علامات الكلام و <100 تبعيات بناء الجملة ، نختار 100 لكليهما في المثال أعلاه. ستحدد القيمة المختارة عدد الأبعاد التي سيتم تعيين حجمها تلقائيًا إلى كائن FeaturizerMagnitude الخاص لتقليل فرصة تصادم التجزئة. يمكن أن تكون وسيطة namespace أي سلسلة تصف الميزة الإضافية الخاصة بك. إنه اختياري ، ولكن يوصى به بشدة.
يمكنك بعد ذلك تسلسل هذه الميزات لاستخدامها مع كائن قياسي الحجم:
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
vectors = Magnitude ( word2vec , pos_vectors , dependency_vectors ) # concatenate word2vec with pos and dependencies
vectors . query ([
( "I" , "PRP" , "nsubj" ),
( "saw" , "VBD" , "ROOT" ),
( "a" , "DT" , "det" ),
( "cat" , "NN" , "dobj" ),
( "." , "." , "punct" )
]) # array of size 5 x (300 + 4 + 4) or 5 x 308
# Or get a unique vector for every 'buffalo' in:
# "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"
# (https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo)
vectors . query ([
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "buffalo" , "VBP" , "rcmod" ),
( "buffalo" , "VB" , "ROOT" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "dobj" )
]) # array of size 8 x (300 + 4 + 4) or 8 x 308نموذج التعلم الآلي ، بالنظر إلى هذا المخرج ، لديه الآن إمكانية الوصول إلى أجزاء من معلومات الكلام ومعلومات تبعية بناء الجملة بدلاً من مجرد معلومات متجه الكلمات. في هذه الحالة ، يمكن لهذه المعلومات الإضافية أن تمنح الشبكات العصبية إشارة أقوى للمعلومات الدلالية وتقليل الحاجة إلى بيانات التدريب.
يجعل الحجم من السهل جدًا بناء وتكرار النماذج التي تحتاج إلى استخدام تمثيلات المتجهات من خلال الاهتمام بالكثير من رمز المعالجة المسبقة لتحويل مجموعة بيانات من النص (أو المفاتيح) إلى متجهات. علاوة على ذلك ، يمكن أن يجعل هذه النماذج أكثر قوة للكلمات غير المبتهانية والأخطاء الإملائية.
هناك مثال رمز متاح باستخدام حجم لإنشاء نموذج تصنيف نية لأنظمة معلومات ATIS (شركات الطيران السفر) (Train/Test) ، وتستخدم في chatbots أو واجهات المحادثة ، في عدد قليل من مكتبات التعلم الآلي الشهيرة أدناه.
يمكنك الوصول إلى دليل لاستخدام الحجم مع keras (الذي يدعم TensorFlow ، Theano ، CNTK) في دفتر جوجل كولابوريزور بيثون.
دليل Pytorch قريبا.
دليل tflearn قريبا.
يمكنك استخدام فئة MagnitudeUtils للوصول المريح إلى الوظائف التي قد تكون مفيدة عند إنشاء نماذج التعلم الآلي.
يمكنك استيراد حجم الحجم مثل:
from pymagnitude import MagnitudeUtilsيمكنك تنزيل نموذج حجم من مصدر بعيد مثل SO:
vecs = Magnitude ( MagnitudeUtils . download_model ( 'word2vec/heavy/GoogleNews-vectors-negative300' )) افتراضيًا ، ستقوم download_model بتنزيل الملفات من http://magnitude.plasticity.ai إلى مجلد ~/.magnitude الذي تم إنشاؤه تلقائيًا. إذا تم بالفعل تنزيل الملف ، فلن يتم تنزيله مرة أخرى. يمكنك تغيير دليل مجلد التنزيل المحلي باستخدام وسيطة download_dir الاختيارية. يمكنك تغيير المجال الذي سيتم من خلاله تنزيل النماذج باستخدام وسيطة remote_path الاختيارية.
يمكنك إنشاء مولد دفعة لبيانات X و y مع batchify ، مثل ذلك:
X = [ .3 , .2 , .7 , .8 , .1 ]
y = [ 0 , 0 , 1 , 1 , 0 ]
batch_gen = MagnitudeUtils . batchify ( X , y , 2 )
for X_batch , y_batch in batch_gen :
print ( X_batch , y_batch )
# Returns:
# 1st loop: X_batch = [.3, .2], y_batch = [0, 0]
# 2nd loop: X_batch = [.7, .8], y_batch = [1, 1]
# 3rd loop: X_batch = [.1], y_batch = [0]
# next loop: repeats infinitely... يمكنك تشفير ملصقات فئة إلى الأعداد الصحيحة والعودة مع class_encoding ، مثل ذلك:
add_class , class_to_int , int_to_class = MagnitudeUtils . class_encoding ()
add_class ( "cat" ) # Returns: 0
add_class ( "dog" ) # Returns: 1
add_class ( "cat" ) # Returns: 0
class_to_int ( "dog" ) # Returns: 1
class_to_int ( "cat" ) # Returns: 0
int_to_class ( 1 ) # Returns: "dog"
int_to_class ( 0 ) # Returns: "cat" يمكنك تحويل البيانات الفئوية مع الأعداد الصحيحة للفئة إلى صفائف numpy ذات الساخنة مع to_categorical ، مثل ذلك:
y = [ 1 , 5 , 2 ]
MagnitudeUtils . to_categorical ( y , num_classes = 6 ) # num_classes is optional
# Returns:
# array([[0., 1., 0., 0., 0., 0.]
# [0., 0., 0., 0., 0., 1.]
# [0., 0., 1., 0., 0., 0.]]) يمكنك التحويل من صفائف numpy واحدة إلى مجموعة من الأعداد الصحيحة من الفئة 1D من الأعداد الصحيحة من الفئة مع from_categorical ، مثل ذلك:
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) المكتبة آمنة لمكتبة (تستخدم اتصالًا مختلفًا مع المتجر الأساسي لكل مؤشر ترابط) ، وقراءة فقط ، ولا يكتب أبدًا إلى الملف. نظرًا لاستخدام الذاكرة الخفيفة ، يمكنك أيضًا تشغيله في عمليات متعددة (أو استخدام multiprocessing ) مع مسافات عناوين مختلفة دون الحاجة إلى تكرار البيانات في الذاكرة كما هو الحال مع المكتبات الأخرى ودون الاضطرار إلى إنشاء متغير مشترك متعدد العمليات نظرًا لأن البيانات تتم قراءتها خارج المخاطية وتظل كل عملية تحافظ على ذاكرة الذاكرة LRU. بالنسبة للوظائف الأثقل ، مثل most_similar يتم إنشاء ملف تم تعيين ذاكرة مشتركة لمشاركة الذاكرة بين العمليات.
تستخدم حزمة الحجم تنسيق ملف .magnitude بدلاً من .bin أو .txt أو .vec و .hdf5 كما هو الحال مع نماذج المتجهات الأخرى مثل Word2Vec و Glove و FastText و Elmo. هناك أداة سطر الأوامر المضمّنة لتحويل ملفات Word2Vec و Glove و FastText و Elmo إلى ملفات الحجم.
يمكنك تحويلها مثل:
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >سيتم تحديد تنسيق الإدخال تلقائيًا عن طريق الامتداد / محتويات ملف الإدخال. يجب أن تحتاج فقط إلى إجراء هذا التحويل مرة واحدة لنموذج ما. بعد التحويل ، يكون تنسيق ملف الحجم ثابتًا ولن يتم تعديله أو كتابته لجعل الوصول إلى القراءة المتزامنة آمنة.
تم تحديد أعلام pymagnitude.converter أدناه:
-h للمساعدة وسرد جميع الأعلام.-p <PRECISION> لتحديد الدقة العشرية للاحتفاظ بها (سيؤدي تحديد رقم أقل إلى إنشاء ملفات أصغر). يتم تخزين القيم الكامنة الفعلية كمعاداة للأعداد الصحيحة بدلاً من العوامات ، لذا فإن هذا هو القيم الكمية بشكل أساسي لآثار أقدام النموذج الأصغر.-a والتي ستمكن من استخدام وظيفة most_similar_approx . يتحكم العلم -t <TREES> في عدد الأشجار في مؤشر الجيران التقريبي (الأعلى أكثر دقة) عند استخدامه بالاقتران مع -a (إذا لم يتم توفيره ، يتم تحديد عدد الأشجار تلقائيًا).-s لتعطيل إضافة معلومات الكلمات الفرعية إلى الملف (والتي ستجعل الملف أصغر) ، ولكن تعطيل دعم مفتاح المتقدم المتقدم.-v جنبًا إلى جنب مع مسار إلى ملف حجم آخر تريد أن تأخذ منه المفردات. اختياريا ، يمكنك تحويل العديد من الملفات عن طريق تمرير مجلد الإدخال ومجلد الإخراج بدلاً من ملف الإدخال وملف الإخراج. سيتم تحويل جميع ملفات .txt ، .bin ، .vec ، .hdf5 في مجلد الإدخال إلى ملفات .magnitude في مجلد الإخراج. يجب أن يكون مجلد الإخراج موجودًا قبل عملية التحويل بالجملة.
يمكنك توجيه حجم الحجم وفتح نموذج من مستودع الحجم عن بُعد بدلاً من مسار الملف المحلي. سيتم تنزيل الملف تلقائيًا محليًا في التشغيل الأول إلى ~/.magnitude/ ثم تخطي التنزيل لاحقًا إذا كان الملف موجودًا محليًا بالفعل.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' ) # or, use the shorthand for the url لمزيد من التحكم في مجال التنزيل عن بُعد ودليل التنزيل المحلي ، راجع كيفية استخدام MagnitudeUtils.download_model .
نماذج الحجم هي ملفات كبيرة عمومًا (متعددة GB) التي تشغل مساحة كبيرة من القرص ، على الرغم من أن تنسيق .magnitude يجعله سريعًا في الاستفادة من المتجهات. يحتوي الحجم على خيار لدفق هذه الملفات الكبيرة عبر HTTP. هذا يختلف صراحة عن ميزة التحميل عن بُعد ، حيث لا يحتاج النموذج إلى تنزيله على الإطلاق. يمكنك البدء في الاستعلام عن النماذج فورًا مع عدم وجود مساحة قرص تستخدم على الإطلاق.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' , stream = True ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' , stream = True ) # or, use the shorthand for the url
vecs . query ( "king" ) # Returns: the vector for "king" quickly, even with no local model file downloadedيمكنك اللعب مع عرض توضيحي لهذا في دفتر بيثون colaboratory.
هذه الميزة مفيدة للغاية إذا كانت بيئة الحوسبة الخاصة بك مقيدة بالموارد (ذاكرة الوصول العشوائي المنخفضة ومساحة القرص المنخفضة) ، فأنت تريد تجربتها بسرعة مع المتجهات دون تنزيل ملفات طراز كبيرة وإعدادها ، أو تقوم بتدريب نموذج صغير. على الرغم من وجود بعض زمن انتقال الشبكة المضافة حيث يتم دفق البيانات ، فإن الحجم سيظل يستخدم ذاكرة التخزين المؤقت في الذاكرة كما هو محدد بواسطة معلمة مُنشئ lazy_loading . نظرًا لأن اللغات لديها عمومًا توزيع ZIPF-IIN ، يجب أن لا يكون زمن انتقال الشبكة مشكلة إلى حد كبير بعد تسخين ذاكرة التخزين المؤقت بعد الاستعلام عن عدد قليل من المرات.
سيتم الاستعلام عنها مباشرة من خادم الويب HTTP ثابت باستخدام رؤوس طلب HTTP. جميع طرق الحجم تدعم التدفق ، ومع ذلك ، قد يكون most_similar و most_similar_approx بطيئًا حيث لم يتم تحسينها للتدفق بعد. يمكنك أن ترى كيف يعمل وضع البث هذا حاليًا في المعايير ، ومع ذلك ، فإنه سيصبح أسرع مع تحسينه في المستقبل!
الوثائق الأخرى غير متوفرة في هذا الوقت. راجع الملف المصدر مباشرة (يتم التعليق جيدًا) إذا كنت بحاجة إلى مزيد من المعلومات حول وسيطات الطريقة أو ترغب في رؤية جميع الميزات المدعومة.
حاليًا ، نقدم فقط نماذج ناقلات الكلمات الإنجليزية في هذه الصفحة مسبقًا إلى تنسيق .magnitude . ومع ذلك ، يمكنك استخدام الحجم مع ناقلات الكلمات من اللغات الأخرى. قام Facebook بتدريب ناقلات النص السريع للعديد من اللغات المختلفة. يمكنك أسفل ملف .vec لأي لغة تريدها ثم تحويلها إلى .magnitude مع المحول.
حاليًا ، يتم دعم ملفات القراءة حجم فقط في Python ، لأنها أصبحت اللغة الفعالة للتعلم الآلي. هذا يكفي لمعظم حالات الاستخدام. لا ينبغي أن يكون توسيع تنسيق الملف إلى لغات أخرى أمرًا صعبًا لأن SQLite لديه تطبيق C الأصلي وله روابط في معظم اللغات. إن تنسيق الملف نفسه وبروتوكول القراءة والبحث هو أيضًا واضح إلى حد ما عند قراءة الكود المصدري لهذا المستودع.
حاليًا ، تعتبر معالجة اللغة الطبيعية هي المجال الأكثر شعبية الذي يستخدم نماذج تضمين المتجهات التي تم تدريبها مسبقًا لتمثيلات متجه الكلمات. ومع ذلك ، هناك مجالات أخرى مثل رؤية الكمبيوتر التي بدأت في استخدام نماذج تضمين المتجهات قبل المدربين مثل Deep1b لتمثيل الصور. تعتزم هذه المكتبة أن تظل لاأدري في مختلف المجالات وبدلاً من ذلك توفر متجرًا وواجهًا عامًا مفيدًا لجميع المجالات.
يمكن العثور على المستودع الرئيسي لهذا المشروع على Gitlab. مستودع github هو مجرد مرآة. يتم الترحيب بطلبات المزيد من الاختبارات لمزيد من الاختبارات أو فحص الأخطاء بشكل أفضل أو إصلاحات الأخطاء أو تحسينات الأداء أو الوثائق أو إضافة الإضافات / الوظائف الإضافية على GITLAB.
يمكنك الاتصال بنا على [email protected].
most_similar_approx محسّنًا للبثmost_similar في البداية..bin format most_similar_approx في الحجم باستخدام أشجار العشوائية العشوائية و 2-Means هرمية. بفضل المؤلف إريك بيرنهاردسون للمساعدة في بعض تفاصيل التكامل بين الحجم والإزعاج. إذا كنت ترغب في الاستشهاد بالورقة في EMNLP 2018 ، فيمكنك استخدام اقتباس bibtex التالي:
@inproceedings{patel2018magnitude,
title={Magnitude: A Fast, Efficient Universal Vector Embedding Utility Package},
author={Patel, Ajay and Sands, Alexander and Callison-Burch, Chris and Apidianaki, Marianna},
booktitle={Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations},
pages={120--126},
year={2018}
}أو اتبع رابط الباحث العلمي من Google للحصول على طرق أخرى للاستشهاد بالورقة.
إذا كنت ترغب في الاستشهاد بهذا المستودع ، فيمكنك استخدام شارة DOI التالية:
سيؤدي النقر على الشارة إلى صفحة من شأنها أن تساعدك على إنشاء استشهادات Bibtex المناسبة ، والاستشهادات JSON-LD ، وغيرها من الاستشهادات.
تم ترخيص هذا المستودع بموجب الترخيص الموجود هنا.
أيقونة "الزلزالية" لجونيزي من مشروع الاسم.