وظائف Dice Tech - مستودع Dice.com لبناء "محرك بحث مفاهيمي"، بقلم سيمون هيوز (عالم بيانات Dice). يحتوي هذا المستودع على كود Python لتدريب نموذج Word2Vec لتوماس ميكولوف على مجموعة من المستندات. يمكن بعد ذلك تضمين مخرجات هذه العملية في solr (أو أي محرك بحث آخر) باستخدام ملفات مرادفة مدمجة مع بعض المكونات الإضافية لـ solr لتوفير وظيفة البحث المفاهيمي داخل محرك البحث. يمكن أيضًا استخدام المخرجات داخل محركات البحث الأخرى، بشرط أن تدعم الملفات المرادفة. يُعرف البحث المفاهيمي أيضًا باسم البحث الدلالي، ويتعلم كيفية مطابقة المفاهيم في المجال بدلاً من الكلمات الرئيسية لتحسين عملية التذكر.
يرجى أيضًا مراجعة مستودع "Vectors in Search" الخاص بي، والذي يوسع هذا العمل. ويحتوي على روابط للشرائح والفيديو من تلك المحادثة أيضًا.
تتضمن البرامج النصية تعليمات برمجية للمعالجة المسبقة للمستندات وترميزها، واستخراج المصطلحات والعبارات الشائعة بناءً على تكرار المستند، وتدريب نموذج word2vec باستخدام تطبيق gensim، وتجميع متجهات الكلمات الناتجة باستخدام مكتبات التجميع الخاصة بـ sci-kit learn. تقوم نصوص بايثون بإخراج عدد من ملفات مرادفات solr التي يمكن استخدامها لتمكين وظيفة البحث المفاهيمي داخل solr عند دمجها مع بعض المكونات الإضافية المخصصة لـ dice solr.
راجع https://github.com/DiceTechJobs/SolrPlugins للتعرف على المكونات الإضافية لـ solr لاستخدام المتجهات المكتسبة وملفات المرادفات داخل محرك بحث Apache Solr
راجع https://github.com/DiceTechJobs/SolrConfigExamples على سبيل المثال إدخالات تكوين solr لتكوين البحث المفاهيمي داخل solr، بما في ذلك إعداد المكونات الإضافية.
تكون البرامج النصية في شكل دفاتر ملاحظات Jupyter python، ليتم تشغيلها بالترتيب (1،2،3 وأي من الأربعة)، وكبرامج نصية منفصلة لسطر الأوامر (انظر أدناه) إذا كنت لا تريد استخدام Jupyter. تعد نصوص python أكثر نظافة، وتشترك في ملفات التكوين الشائعة مع جميع الإعدادات المطلوبة، وهي مصممة ليتم تشغيلها من Shell، لذلك ربما يكون من الأسهل البدء بها . ستقوم دفاتر الملاحظات والبرامج النصية هذه بمعالجة المستندات مسبقًا وتدريب نموذج Word2Vec. يحتوي المجلد ./Settings على أمثلة لملفات التكوين لكل برنامج نصي، مع وصف لكل إعداد في التعليقات. لاستدعاء البرامج النصية لسطر الأوامر، قم بتمرير ملف التكوين ذي الصلة باعتباره المعلمة الوحيدة، على سبيل المثال
python pre_process_documents.py ./Settings/pre_process_documents.cfg
يجب تشغيل البرامج النصية لسطر الأوامر بالترتيب:
pre_process_documents.py - يعد ذلك ضروريًا لإزالة بعض أحرف الترقيم (الفاصلات والواصلات وما إلى ذلك)، وتحليل html إذا لزم الأمر، وفصل الجمل في المستند. إذا كنت ترغب في تخطي هذه الخطوة والانتقال إلى 2 أو 3، فقدم مجموعة من الملفات للخطوتين 2 و3 مع إزالة أي علامات ترقيم تريد إزالتها، ومع كل جملة جديدة في سطر منفصل.
extract_keywords.py - (اختياري) إذا لم يكن لديك مجموعة جيدة وشاملة من العبارات الرئيسية من المجال الخاص بك (على سبيل المثال، أهم 5000 كلمة رئيسية وعبارة للبحث، حيث تمثل العبارات الجزء المهم) أو كنت ترغب في زيادة التغطية خارج هذه القائمة، فقم بتشغيل هذا البرنامج النصي لاستخراج جميع الكلمات الرئيسية والعبارات التي تتجاوز حد تكرار الوثيقة المحدد.
Train_word2vec_model.py - يقوم بتدريب نموذج Word2Vec وحفظه على المستندات التي تمت معالجتها مسبقًا من 1. ويستخدم مجموعة من الكلمات الرئيسية والعبارات، مثل تلك الناتجة من 2. يرجى ملاحظة - هذا النموذج سريع جدًا، ولكنه يتطلب وجود مترجم C. متاح ومثبت مسبقًا للاستفادة من الإصدار C تحت الأغطية، وإلا فسيتم استخدام تطبيق python الأبطأ بكثير. إذا لم يكن هذا متاحًا، فسوف تحصل على تحذير وقت التشغيل عند تدريب النموذج لأول مرة.
تحتوي هذه الخطوة على ملفات متعددة حسب الحل المطلوب (راجع حديثي):
إخراج المتجهات - قريبًا! راجع Jupyter Notebook 4.a
generator_topn_synonyms_file.py - يُنشئ أفضل المرادفات لكل كلمة رئيسية أو عبارة مستهدفة. يؤدي هذا إلى إنشاء ملفين، ملف به حمولات وملف بدونه. إن أبسط حالة استخدام هي استخدام الملف بدون حمولات. يمكن الحصول على أداء أفضل باستخدام ملف الحمولات لوزن المرادفات حسب التشابه. يمكن القيام بذلك في وقت الاستعلام باستخدام المحلل اللغوي queryboost. لاحظ أنه للقيام بذلك، تحتاج إلى ترميز الفواصل والمسافات البيضاء في وقت الاستعلام حيث نستبدل المسافات البيضاء بفواصل للتغلب على مشكلة المرادفات المتعددة الكلمات. بدلاً من ذلك (والموصى به) استخدم توسيع المرادفات في وقت الفهرس، جنبًا إلى جنب مع محلل استعلام PayloadEdismax، وفئة PayloadAwareDefaultSimilarity (استخدم كتشابه افتراضي أو استخدم تشابه المخطط لتكوين كل حقل)، وتأكد من أن fieldType لهذه الحقول يحتوي على المصطلح "الحمولة النافعة". أو "ناقلات".
generator_cluster_synonyms_file.py - يُنشئ مجموعات k من متجهات الكلمات التي تم إنشاؤها في الخطوات السابقة. يمكن تضمينها مباشرة في solr عبر ملف مرادف - لا حاجة إلى مكونات إضافية خاصة. أوصي بإنشاء عدد من المجموعات المختلفة من المرادفات ذات الأحجام المختلفة، وتكوينها كحقول منفصلة ذات أوزان حقل أعلى مطبقة على المجموعات الصغيرة (أي تم إنشاؤها بقيمة k أكبر).
بنيت باستخدام بيثون 2.7.10. لم يتم اختباره مع بيثون 3
تطبيق Word2Vec هو تطبيق حزمة gensim الممتازة. يحتوي على تطبيقات سريعة لـ LSA وLDA وWord2Vec وبعض خوارزميات التعلم الآلي الأخرى.
https://radimrehurek.com/gensim/models/word2vec.html
هذه حزمة رائعة لنمذجة المواضيع وتعلم التمثيل الدلالي للمستندات والكلمات.
أصدرت Google مجموعة من ناقلات الكلمات المدربة مسبقًا، والتي تم تدريبها على 100 مليار كلمة من مجموعة أخبار Google. بالنسبة لأولئك منكم الذين لا يركزون على مجال متخصص ولكن على مجموعة واسعة جدًا من المستندات، مثل الشركات التي تنشئ محرك بحث إخباري (مثل رويترز وبلومبرج والوكالات الحكومية وما إلى ذلك)، يمكنك فقط استخدام هذا النموذج المُدرب مسبقًا بدلاً من. بعد ذلك، يمكنك تخطي الخطوات الثلاث الأولى، والانتقال مباشرةً إلى استخدام أحد البرامج النصية للخطوة 4 المذكورة أعلاه والتي تأخذ نموذجًا مُدربًا مسبقًا وتحسب ملفات المرادفات الناتجة، وهذا كل ما تحتاج إليه. يصف هذا المنشور مكان الحصول على المتجهات المدربة مسبقًا: https://groups.google.com/forum/#!topic/gensim/_XLEbmoqVCg. يمكنك بعد ذلك استخدام وظيفة model.load الخاصة بـ Word2Vec الخاصة بـ gensim:
model = Word2Vec . load ( MODEL_FILE )
إذا كنت تستخدم Solr cloud، فإن Zookeeper لا يحب أن يزيد حجم أي ملفات تكوين عن 1 مليون. لذا، إذا كانت ملفات المرادفات الناتجة أكبر من ذلك، فسيتعين عليك إما 1) تغيير إعدادات Zookeeper الافتراضية، 2) تقسيم ملف المرادفات إلى ملفات متعددة وتطبيق مرشحات المرادفات بالتسلسل، أو 3) تحميل المرادفات من قاعدة بيانات باستخدام مكون إضافي (على سبيل المثال https://github.com/shopping24/solr-jdbc-synonyms)
طور خبراء البرمجة اللغوية العصبية في جامعة ستانفورد خوارزمية تعلم ناقلات الكلمات المنافسة لـ Word2Vec بدقة مماثلة. إذا كنت ترغب في تجربة ذلك، فستسمح لك حزمة python هذه بالقيام بذلك: https://github.com/hans/glove.py ومع ذلك، لم أحاول ذلك لذا لا يمكنني ضمان ذلك في الوقت الحالي.
تتوقع البرامج النصية الأولية مجلدًا يحتوي على ملفات *.txt أو html أولية. إذا كان لديك محتوى html، فهناك منطق داخل البرامج النصية لتحليل html، ولكن الحساء الجميل يمكن أن يكون غير مستقر بعض الشيء، لذلك قد يكون من الأفضل أن تقوم بتحليله مسبقًا أولاً قبل دفعه عبر المسار. لاحظ أنه لا يوجد تنسيق ملف خاص، ويبدو أن هذه هي المشكلة التي يواجهها معظم الأشخاص عند محاولة تشغيل هذا البرنامج النصي. إذا كان هناك خطأ في تحميل الملفات، فأنا أقترح استخدام نص بايثون وليس دفتر الملاحظات وفتح مصحح الأخطاء لمعرفة ما يحدث. تأكد أيضًا من تعيين config.file_mask ليطابق الملفات التي تريد تحميلها، في https://github.com/DiceTechJobs/ConceptualSearch/blob/master/Settings/pre_process_documents.cfg. هذا الإعداد الافتراضي هو .*.txt (وهو عبارة عن regex وليس ملف blob)، لذا ستحتاج إلى تغيير هذا إذا كانت ملفاتك ليست ملفات .txt.
الرجاء نشر أية أسئلة أو أخطاء أو طلبات ميزات في قائمة المشكلات، وتضمين إشارة @ - @simonhughes22 حتى أتلقى بريدًا إلكترونيًا في الوقت المناسب يتضمن أسئلتك. لقد تلقيت بريدًا إلكترونيًا من عدد قليل من الأشخاص مباشرة لطرح أسئلة حول هذا الريبو. على الرغم من أنني لا أمانع في الرد على رسائل البريد الإلكتروني، يرجى بدلاً من ذلك إرسال مشكلة GitHub والإشارة إليّ باستخدام @. وبهذه الطريقة، يمكن لأي شخص آخر رؤية السؤال وإجابتي للرجوع إليهما في المستقبل.
لقد ألقيت مؤخرًا محاضرة حول Vector Search، الكود أدناه. وهذا امتداد طبيعي لعمل البحث المفاهيمي الذي قمت به
يرجى التحقق من ملحقات Solr الخاصة بنا: