كيف تبدأ مع Word2Vec - ثم كيف تجعله يعمل

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

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

باستخدام هذا الافتراض الأساسي ، يمكنك استخدام Word2Vec لإظهار مفاهيم متشابهة ، والعثور على مفاهيم غير ذات صلة ، وحساب التشابه بين كلمتين ، والمزيد!

وصولا إلى العمل

في هذا البرنامج التعليمي ، ستتعلم كيفية استخدام تطبيق Gensim لبرنامج Word2Vec وتشغيله بالفعل. لقد سمعت منذ فترة طويلة شكاوى حول الأداء الضعيف بشكل عام ، لكنها في الحقيقة مزيج من شيئين: (1) بيانات الإدخال و (2) إعدادات المعلمات الخاصة بك .

لاحظ أن خوارزميات التدريب في حزمة Gensim تم نقلها بالفعل من تطبيق Word2Vec الأصلي بواسطة Google وتم توسيعها بوظائف إضافية.

الواردات والتسجيل

أولاً ، نبدأ بوارداتنا ونبدأ في إنشاء التسجيل:

# imports needed and loggingimport gzipimport gensim import logging
logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

مجموعة البيانات

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

في هذا البرنامج التعليمي ، سأستخدم البيانات من مجموعة بيانات OpinRank من بعض أعمالي للحصول على درجة الدكتوراه. تحتوي مجموعة البيانات هذه على تقييمات المستخدمين الكاملة للسيارات والفنادق. لقد جمعت على وجه التحديد جميع تقييمات الفندق في ملف كبير واحد يبلغ حوالي 97 ميجا بايت مضغوط و 229 ميجا بايت غير مضغوط. سنستخدم الملف المضغوط لهذا البرنامج التعليمي. يمثل كل سطر في هذا الملف أحد تقييمات الفنادق.

الآن ، دعنا نلقي نظرة فاحصة على هذه البيانات أدناه عن طريق طباعة السطر الأول.

يجب أن ترى ما يلي:

b"Oct 12 2009 \tNice trendy hotel location not too bad.\tI stayed in this hotel for one night. As this is a fairly new place some of the taxi drivers did not know where it was and/or did not want to drive there. Once I have eventually arrived at the hotel, I was very pleasantly surprised with the decor of the lobby/ground floor area. It was very stylish and modern. I found the reception's staff geeting me with 'Aloha' a bit out of place, but I guess they are briefed to say that to keep up the coroporate image.As I have a Starwood Preferred Guest member, I was given a small gift upon-check in. It was only a couple of fridge magnets in a gift box, but nevertheless a nice gesture.My room was nice and roomy, there are tea and coffee facilities in each room and you get two complimentary bottles of water plus some toiletries by 'bliss'.The location is not great. It is at the last metro stop and you then need to take a taxi, but if you are not planning on going to see the historic sites in Beijing, then you will be ok.I chose to have some breakfast in the hotel, which was really tasty and there was a good selection of dishes. There are a couple of computers to use in the communal area, as well as a pool table. There is also a small swimming pool and a gym area.I would definitely stay in this hotel again, but only if I did not plan to travel to central Beijing, as it can take a long time. The location is ok if you plan to do a lot of shopping, as there is a big shopping centre just few minutes away from the hotel and there are plenty of eating options around, including restaurants that serve a dog meat!\t\r\n"

يمكنك أن ترى أن هذه مراجعة جيدة وكاملة مع الكثير من الكلمات وهذا ما نريده. لدينا ما يقرب من 255000 من هذه المراجعات في مجموعة البيانات هذه.

لتجنب الالتباس ، يقول البرنامج التعليمي Word2Vec الخاص بـ Gensim أنك بحاجة إلى تمرير سلسلة من الجمل كمدخل إلى Word2Vec. ومع ذلك ، يمكنك بالفعل تمرير مراجعة كاملة كجملة (أي حجم نص أكبر بكثير) إذا كان لديك الكثير من البيانات ولا ينبغي أن تحدث فرقًا كبيرًا. في النهاية ، كل ما نستخدمه لمجموعة البيانات هو الحصول على جميع الكلمات المجاورة لكلمة مستهدفة معينة.

اقرأ الملفات في قائمة

الآن بعد أن حصلنا على ذروة سريعة لمجموعة البيانات الخاصة بنا ، يمكننا قراءتها في قائمة حتى نتمكن من تمريرها إلى نموذج Word2Vec. لاحظ في الكود أدناه أنني أقرأ الملف المضغوط مباشرة. أنا أيضًا أقوم بمعالجة ما قبل معتدلة للمراجعات باستخدام gensim.utils.simple_preprocess (line). يقوم هذا ببعض عمليات المعالجة المسبقة الأساسية مثل الترميز ، والحروف الصغيرة ، وما إلى ذلك ويعيد قائمة الرموز (الكلمات). يمكن العثور على توثيق طريقة المعالجة المسبقة هذه على موقع توثيق Gensim الرسمي.

تدريب نموذج Word2Vec

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

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

يستغرق التدريب على مجموعة بيانات Word2Vec OpinRank حوالي 10-15 دقيقة. لذا يرجى التحلي بالصبر أثناء تشغيل الكود الخاص بك على مجموعة البيانات هذه

الجزء الممتع - بعض النتائج!

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

أوه ، هذا يبدو جيدًا جدًا. دعونا نلقي نظرة على المزيد.

مشابه لـ polite:

على غرار فرنسا:

على غرار صدمة:

بشكل عام ، النتائج منطقية بالفعل. تميل جميع الكلمات ذات الصلة إلى استخدامها في نفس السياق لكلمة الاستعلام المحددة.

يمكنك الآن استخدام Word2Vec لحساب التشابه بين كلمتين في المفردات عن طريق استدعاء similarity(...)الوظيفة وتمرير الكلمات ذات الصلة.

تحت الغطاء ، تحسب المقتطفات الثلاثة المذكورة أعلاه تشابه جيب التمام بين الكلمتين المحددتين باستخدام متجهات الكلمات لكل منهما. من الدرجات أعلاه ، من المنطقي أن dirtyيكون مشابهًا جدًا لـ smellyولكنه dirtyيختلف عنه clean. إذا قمت بإجراء تشابه بين كلمتين متطابقتين ، فستكون النتيجة 1.0 لأن نطاق درجة تشابه جيب التمام سيكون دائمًا بين [0.0-1.0]. يمكنك قراءة المزيد عن نقاط تشابه جيب التمام هنا.

ستجد المزيد من الأمثلة حول كيفية استخدام Word2Vec في دفتر Jupyter Notebook الخاص بي.

نظرة فاحصة على إعدادات المعلمة

To train the model earlier, we had to set some parameters. Now, let’s try to understand what some of them mean. For reference, this is the command that we used to train the model.

model = gensim.models.Word2Vec (documents, size=150, window=10, min_count=2, workers=10)

size

The size of the dense vector that is to represent each token or word. If you have very limited data, then size should be a much smaller value. If you have lots of data, its good to experiment with various sizes. A value of 100–150 has worked well for me for similarity lookups.

window

The maximum distance between the target word and its neighboring word. If your neighbor’s position is greater than the maximum window width to the left or the right, then some neighbors are not considered as being related to the target word. In theory, a smaller window should give you terms that are more related. If you have lots of data, then the window size should not matter too much, as long as its not overly narrow or overly broad. If you are not too sure about this, just use the default value.

min_count

Minimium frequency count of words. The model would ignore words that do not statisfy the min_count. Extremely infrequent words are usually unimportant, so its best to get rid of those. Unless your dataset is really tiny, this does not really affect the model.

workers

How many threads to use behind the scenes?

When should you use Word2Vec?

There are many application scenarios for Word2Vec. Imagine if you need to build a sentiment lexicon. Training a Word2Vec model on large amounts of user reviews helps you achieve that. You have a lexicon for not just sentiment, but for most words in the vocabulary.

Beyond raw unstructured text data, you could also use Word2Vec for more structured data. For example, if you had tags for a million StackOverflow questions and answers, you could find related tags and recommend those for exploration. You can do this by treating each set of co-occuring tags as a “sentence” and train a Word2Vec model on this data. Granted, you still need a large number of examples to make it work.

Source code

لاستخدام دفتر Jupyter Notebook الخاص بهذا البرنامج التعليمي ، يمكنك الانتقال إلى GitHub repo واتباع الإرشادات الخاصة بكيفية تشغيل دفتر الملاحظات محليًا. أخطط لتحميل المتجهات المدربة مسبقًا والتي يمكن استخدامها لعملك الخاص.

لمتابعة مقال كافيتا عبر البريد الإلكتروني ، يرجى الاشتراك في مدونتها.

تم نشر هذه المقالة في الأصل على kavita-ganesan.com