اذهب إلى المحتوى

السؤال

نشر

أعمل على نظام استراجاع معلومات Information Retrieval، وأحتاج  إلى طريقة لتحديد نسبة التشابه بين الكلمات، وأعتقد أن أفضل طريقة للقيام بذلك ستكون من خلال استخدام نماذج Word2Vec لميلكوف (نموذج Skip Gram أو CBOW ).
أعتقد أن NLTK تعرّف هذين النموذجين، لذا هل يمكن لأحد ما أن يقدم مثال لكيفية القيام بذلك؟
علماً أنه لدي مستند نصي يحوي البيانات النصية التي أريد تدريب النموذج عليها.

Recommended Posts

  • 1
نشر

في الواقع هذا النموذج معرّف ضمن gensim لذا ستحتاجها، جمباً إلى جمب مع word_tokenize و sent_tokenize في nltk. المثال التالي سيوضح لك كيفية القيام بذلك:

# استيراد الوحدات اللازمة
from nltk.tokenize import sent_tokenize, word_tokenize
import gensim
# Word2Vec استيراد نموذج 
from gensim.models import Word2Vec
# الآن ينبغي عليك تحديد مسار المستند النصي الذي تريد تدريب النموذج عليه
text_data = open("d:\\data.txt", "r")
file = text_data.read()
# استبدال الأسطر الجديدة ب فراغ
f = file.replace("\n", " ")
# الإعلان عن قائمة فارغة لنضع بها البيانات المستخرجة من الملف النصي
data = []
# الآن سنقوم بالمرور على كل جملة في النص
for i in sent_tokenize(f):
    # الإعلان عن قائمة لوضع الكلمات المكونة للجملة ضمنها
    temp = []
    # تقسيم الجملة إلى كلمات
    for j in word_tokenize(i):
        # إضافتها
        temp.append(j.lower())
    # نضيف الجملة كعينة إلى البيانات
    data.append(temp)

# وتدريبه CBOW سنقوم الآن بتعريف نموذج 
model1 = gensim.models.Word2Vec(sentences=data, min_count = 1,vector_size = 100, window = 5)
# يمكنك حفظ النموذج لاستخدامه لاحقاً بالشكل التالي
# model.save("CBOW.model")
# Word2Vec.load("word2vec.model") لتحميله لاحقاً يمكنك استخدام 
# الآن يمكنك استخدامه لقياس التشابه بين أي كلمتين
# wonderland و  alice على سبيل المثال 
print("Cosine similarity between 'alice' " +
        "and 'wonderland' - CBOW : ",
model1.similarity('alice', 'wonderland'))
"""
Cosine similarity between 'alice' and 'wonderland' - CBOW :  0.90824929840
"""

وبشكل مشابه يمكنك استخدام نموذج SkipG:

# وتدريبه Skip Gram بنفس الطريقة سنقوم ببناء نموذج 
model2 = gensim.models.Word2Vec(data, min_count = 1, vector_size = 100,
                                        window = 5, sg = 1)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...