يبدو التفسير الكلاسيكي لـ word2vec باعتباره بنية تخطي عياري سلبي في المقالة العلمية الأصلية وعدد لا يحصى من منشورات المدونة كما يلي:
while(1) { 1. vf = vector of focus word 2. vc = vector of focus word 3. train such that (vc . vf = 1) 4. for(0 <= i <= negative samples): vneg = vector of word *not* in context train such that (vf . vneg = 0) }
في الواقع ، إذا كنت google [word2vec skipgram] ، فما نراه:
لكن كل هذه التطبيقات خاطئة .
يعمل التطبيق الأصلي لـ word2vec في C بشكل مختلف ويختلف بشكل
أساسي عن هذا. أولئك الذين يطبقون الأنظمة باحترافية مع زخارف الكلمات من word2vec يقومون بأحد الإجراءات التالية:
- دعوة مباشرة التنفيذ الأصلي لل C.
- استخدم تطبيق
gensim
، والذي يتم ترجمته من المصدر C إلى الحد الذي تتطابق فيه الأسماء المتغيرة.
في الواقع ،
gensim
هو
تطبيق C الحقيقي الوحيد الذي أعرفه .
ج التنفيذ
تطبيق C في الواقع يدعم
متجهين لكل كلمة . متجه واحد للكلمة قيد التركيز ، والثاني للكلمة في السياق. (يبدو مألوفًا؟ صحيح ، لقد استعار مطورو GloVe فكرة من word2vec دون ذكر هذه الحقيقة!)
التنفيذ في كود C مختص بشكل استثنائي:
لماذا التهيئة العشوائية والصفر؟
مرة أخرى ، نظرًا لأن هذا لم يتم شرحه على الإطلاق في المقالات الأصلية
وفي أي مكان على الإنترنت ، يمكنني التكهن فقط.
الفرضية هي أنه عندما تأتي العينات السلبية من النص بالكامل ولا يتم ترجيحها حسب التردد ، فيمكنك اختيار
أي كلمة ، وغالبًا ما تكون الكلمة التي
لم يتم تدريب ناقلها على الإطلاق . إذا كان لهذا المتجه معنى ، فسوف ينقل بشكل عشوائي الكلمة المهمة حقًا في التركيز.
خلاصة القول هي تعيين جميع الأمثلة السلبية على الصفر ، بحيث تؤثر
فقط المتجهات التي تحدث أكثر أو أقل في عرض متجه آخر.
هذا أمر صعب للغاية في الواقع ، ولم أفكر أبدًا في مدى أهمية استراتيجيات التهيئة.
لماذا أكتب هذا
قضيت شهرين من حياتي أحاول إعادة إنتاج word2vec كما هو موضح في المنشور العلمي الأصلي ومقالات لا حصر لها على الإنترنت ، لكنني فشلت. لم أستطع تحقيق نفس النتائج مثل word2vec ، على الرغم من أنني بذلت قصارى جهدي.
لم أستطع أن أتخيل أن مؤلفي المنشور قاموا بتلفيق خوارزمية لا تعمل ، بينما التنفيذ يقوم بشيء مختلف تمامًا.
في النهاية ، قررت دراسة المصدر. لثلاثة أيام كنت واثقا من أنني أسيء فهم الكود ، لأن كل شخص على الإنترنت تحدث حرفيا عن تطبيق مختلف.
ليس لدي أي فكرة عن سبب عدم نشر المنشور والمقالات الأصلية على الإنترنت أي شيء عن الآلية
الحقيقية لـ word2vec ، لذلك قررت نشر هذه المعلومات بنفسي.
وهذا ما يفسر أيضًا اختيار GloV الراديكالي لتعيين متجهات منفصلة للسياق السلبي - لقد فعلوا ما يفعله word2vec فقط ، لكنهم أخبروا الناس عنه :).
هل هذه خدعة علمية؟ لا أعرف ، سؤال صعب. ولكن أن نكون صادقين ، أنا غاضب بشكل لا يصدق. ربما ، لن أكون قادرًا مرة أخرى على أخذ شرح الخوارزميات في التعلم الآلي على محمل الجد: في المرة القادمة ، سأذهب
فورًا إلى المصادر.