آموزش train کردن مدل‌ زبانی با استفاده از الگوریتم Word2vec و GloVe

الگوریتم word2vec

فهرست مطالب

آموزش train کردن مدل‌ زبانی با استفاده از الگوریتم Word2vec و GloVe

در مقاله قبل با مدل زبانی آشنا شدیم. در این مقاله به سراغ پیاده‌سازی الگوریتم Word2vec و الگوریتم GloVe می‌رویم.

آماده‌سازی محیط کدنویسی و دیتاست

برای آموزش و پیاده‌سازی مدل‌ها با الگوریتم Word2vec و الگوریتم GloVe، از پیکرۀ متنی شکسپیر (Shakespeare corpus) استفاده می‌کنیم. این corpus شامل متن همه نمایشنامه‌های شکسپیر می‌شود که می‌توانیم آن را از سایت Kaggle دریافت کنیم.

دلیل اصلی ما برای انتخاب این دیتاست، صرفاً ایجاد تنوع بوده تا بتوانیم با دیتایی متفاوت از آنچه که الگوریتم word2vec و الگوریتم GloVe با آن‌ها آموزش‌دیده‌اند، کار کنیم (زیرا این دیتاست، شامل ادبیات کلاسیک است؛ اما مدل‌های word2vec و GloVe، با داده‌های Google US News و ویکی‌پدیا آموزش‌دیده‌اند).

بنابراین، انتظار داریم، با استفاده از دیتاست شکسپیر که واژگان متفاوتی دارد، نگرش و نتایج متفاوت‌تری نیز دریافت کنیم. این دیتاست نیز بزرگ است و به‌صورت (short-sequence format) آماده شده (شامل جملات کوتاه است) که باعث سریع‌تر شدن آموزش مدل می‌شود.

در کانال تلگرام پرشین دیتا، به دیتاست رایگان برای پروژه‌های پردازش زبان طبیعی دسترسی داشته باشید.

پس از آنکه فایل alllines.txt را از سایت Kaggle دانلود کردیم، می‌توانیم که آن را با استفاده از کد زیر load کنیم:
				
					lines = []
file = open('alllines.txt', 'r')
for line in file:
    l = file.readline()
    lines.append(l)

				
			

 علائم نگارشی متن را حذف کرده و آن را tokenize می‌کنیم:

				
					import re
sentences = []
for line in lines:
    # remove punctuation
    line = re.sub(r'[\!"#$%&\*+,-./:;<=>?@^_`()|~=]','',line).strip()
    # tokenizer
    tokens = re.findall(r'\b\w+\b', line)
    if len(tokens) > 1:
        sentences.append(tokens)

				
			

الان که با مفاهیم پردازش زبان طبیعی آشنا شدید، می‌خواهید تخصصی‌تر وارد این حوزه شوید؟ پس دوره آموزش پردازش زبان طبیعی مقدماتی را از دست ندهید. تمامی مفاهیم را با پروژه‌های کاربردی یاد بگیرید.

آموزش مدل با الگوریتم Word2vec

برای شروع، یک مدل word2vec را با کمک کتابخانه Gensim آموزش می‌دهیم. برای این کار باید پارامترهای آموزش خود را با مقادیر مناسبی مقداردهی کنیم:

  • min_count: حداقل تعداد تکرار کلمات، یعنی کلماتی که تعداد تکرارشان در متن، کمتر از این عدد باشد، نادیده گرفته می‌شوند.
  • Size: ابعاد embeddings را مشخص می‌کند. برای این پارامتر عدد 50 را انتخاب می‌کنیم. (به عبارتی، هر کلمه توسط 50 بعد نمایش داده می‌شود).
  • Window: اندازه پنجرۀ پیرامون هر کلمه موردنظر
  • Sg: یکی دیگر از پارامترهای مهم است که استراتژی آموزش و training را مشخص می‌کند. اینکه آموزش بر اساس CBOW باشد یا Skip-Grams ؟ از آنجایی‌ که ما استراتژی Skip-Grams را انتخاب می‌کنیم، این پارامتر را برابر 1 قرار می‌دهیم.

انتظار می‌رود که استراتژی Skip-Grams برای پیکره‌های متنی کوچک‌تر، دقیق‌تر باشد.

نام مدل ساخته شده با الگوریتم word2vec را bard2vec می‌گذاریم. زیرا به شکسپیر bard نیز گفته می‌شود و او را با عنوان ” The Bard of Avon ” نیز می‌شناسند.

				
					from gensim.models import Word2Vec
bard2vec = Word2Vec(
            sentences,
            min_count=3,   # Ignore words that appear less than this
            size=50,       # Dimensionality of word embeddings
            sg = 1,        # skipgrams
            window=7,      # Context window for words during training
            iter=40)       # Number of epochs training over corpus

				
			

فرایند training با الگوریتم Word2vec خیلی سریع به پایان می‌رسد. برای بررسی خروجی مدل، بعضی از کلمات مشابه را به‌عنوان نمونه به مدل می‌دهیم. به‌عنوان‌مثال از کلماتی مانند King، sword، husband و Hamlet استفاده کرده و کلمات مشابه آن‌ها را پیدا می‌کنیم تا بینش و دیدگاه شکسپیر نسبت به جهان را نیز ببینیم.

لازم به ذکر است که در این قسمت می‌توانید، پارامترهای الگوریتم word2vec را با هر عدد دلخواه خودتان تغییر دهید و یا اینکه کلمات دیگری را بررسی کنید.

 از دستور bard2vec.wv.most_similar(word) استفاده می‌کنیم تا لیست کلمات مشابه King، sword، husband و Hamlet را دریافت کنیم:

most_similar(‘King’)

most_similar(‘sword’)

most_similar(‘husband’)

most_similar(‘Hamlet’)

Henry
Pepin
Richard
Edward
England
Pericles
Leontes
whereas
Fifth
hearse

scimitar
head
knife
dagger
rapier
hand
sleeve
scabbard
burgonet
Bringing

wife
mistress
son
mother
daughter
master
father
brother
Katharina
puppy

cousin
chuck
gaoler
Gertrude
Mercutio
sentence
Fenton
Escalus
Stanley
Advancing

همان‌طور که مشخص است، همه کلمات مشابه، مربوط به نمایشنامه‌ها و دوران شکسپیر هستند. البته توجه داشته باشید که اگر مدل را با پارامترهای مختلف train کنید، نتایج متفاوتی خواهید داشت.

برای آشنایی با کتابخانه‌های یادگیری عمیق و انجام پروژه‌های کاربردی دوره آموزش متن کاوی فارسی با شبکه‌های عصبی را ببینید.

آموزش مدل با الگوریتم GloVe

برای train کردن یک مدل GloVe، نمی‌توانیم از Gensim یا کتابخانه spaCy استفاده کنیم. زیرا قابلیت ساختن مدل GloVe را ندارند. اما پیاده‌سازی‌های دیگری به زبان پایتون وجود دارد که می‌توانیم از آن‌ها استفاده کنیم. برای ادامۀ کار از glove-python-binary استفاده می‌کنیم. گرچه این کتابخانه کمی قدیمی است اما برای برای هدف ما یعنی پیاده‌سازی مدل زبانی با استفاده از الگوریتم GloVe، مناسب است. برای نصب کتابخانۀ glove-python-binary از این دستور استفاده می‌کنیم:
				
					pip install glove-python-binary
				
			

train کردن مدل با الگوریتم GloVe:

				
					from glove import Corpus, Glove # creating a corpus object

# instantiate the corpus
corpus = Corpus() 

# this will create the word co occurence matrix 
corpus.fit(sentences, window=10)

# instantiate the model
glove = Glove(no_components=50, learning_rate=0.05)

# and fit over the corpus matrix
glove.fit(corpus.matrix, epochs=30, no_threads=2)

# finally we add the vocabulary to the model
glove.add_dictionary(corpus.dictionary)

				
			

در کد بالا، برای vector size، عدد 50 و window ، 10 تعیین شده است. پارامتر learning rate ، همان مقدار پیش‌فرض خودش یعنی 0.5 را دارد که نشان‌دهنده سرعت همگرایی (convergence speed) و accuracy الگوریتم Stochastic Gradient Descent است.

همان‌طور که در مدل word2vec، شباهت بین کلمات را دیدیم، اینجا هم می‌توانیم با دستور glove.most_similar(word, number=10) لیست کلمات مشابه King، sword، husband و Hamlet را دریافت کنیم:

most_similar(‘King’)

most_similar(‘sword’)

most_similar(‘husband’)

most_similar(‘Hamlet’)

Duke
kings
image
front
instruments
York
Earl
Prince
senators

head
face
grave
soul
tongue
mind
daughter
horse
body

father
wife
daughter
mother
brother
tongue
master
mistress
mind

Angelo
coast
Lord
Antony
woful
AEneas
monstrous
Timon
where’s

به این دقت کردید که نتایج کلمات مشابه King، sword، husband و Hamlet در دو مدل ساخته شده با الگوریتم word2vec و GloVe با هم تفاوت دارند؟ از کجا بفهمیم که کدام مدل بهترین خروجی را دارد؟

نحوه ارزیابی Word Embeddings

دو روش برای ارزیابی Word Embeddings وجود دارد:

  • Intrinsic evaluation
  • Extrinsic evaluation

Intrinsic evaluation شامل مقایسه مدل embedding با یک مدل مرجع می‌شود. به‌عنوان‌مثال، مقایسه شباهت کلمات با یک پایگاه‌داده واژگانی (lexical database)، مانند دیکشنری WordNet. همچنین می‌توانیم به‌صورت دستی یک دیتاست نمونه همراه با برچسب طراحی کنیم، اما این کار به زمان و نیروی انسانی نیاز دارد.

Extrinsic evaluation شامل به‌کاربردن Word Embeddings در یک تسک یا پروژه است. به‌عنوان‌مثال، از Word Embeddings برای پروژه‌هایی مانند text classification، machine translation و summarization استفاده کنیم. هرکدام از این تسک‌ها، استراتژی ارزیابی خاص خود را دارند. به‌ این‌ ترتیب، معیار ارزیابی هر تسک، یک دیدگاه کلی برای سنجش کیفیت embeddings، به ما می‌دهد. برای مثال یک‌بار بدون Word Embeddings یک تسک text classification انجام می‌دهیم و یک‌بار با Word Embeddings. سپس بر اساس پارامترهایی مثل accuracy نتایج را مقایسه می‌کنیم.

در این مقاله از دیتاست آماده استفاده شد. اگر می‌خواهید داده‌هایتان را خودتان جمع‌آوری کنید و یک دیتاست برای خودتان بسازید، دوره آموزش پروژه محور وب اسکرپینگ را در کانال یوتیوب دیتاهاب ببینید.

  • ابتدا با الگوریتم word2vec یک مدل را از پایه و به‌صورت گام‌به‌گام، با استفاده از کتابخانه Gensim بر روی دیتاست Shakespeare corpus آموزش دادیم.
  • همچنین مدل GloVe را بر روی همان دیتاست آموزش دادیم و دیدیم که لیست کلمات مشابه King، sword، husband و Hamlet، توسط هر دو مدل word2vec و GloVe بازگردانده می‌شود؛ اما نتایج آن‌ها با یکدیگر تفاوت دارند.
  • در پایان، دیدیم که مدل‌های زبانی را می‌توان به دو صورت Intrinsic یاExtrinsic ارزیابی کرد.
    • Intrinsic: شامل مقایسه مدل Word Embeddings با یک مدل مرجع (مانند lexical database) می‌شود.
    • Extrinsic: برای ارزیابی مدل، نتایج آن را در یک تسک یا پروژه‌ای مانند text classification، machine translation و summarization استفاده می‌کنیم.

خداحافظی خودمانی!

هر شروعی، پایانی دارد و در این بخش نیز به پایان مجموعه مقالات آموزشی رسیدیم!

در این مدت، یاد گرفتیم که به چه شکل یک متن را پیش‌پردازش کنیم، با استفاده از bag-of-words و word embeddings آن را به بردارهای عددی تبدیل کنیم و نتایج text vectorization را در تسک‌هایی مانند text classification، sentiment analysis و unsupervised exploration به کار ببریم!

ترجمه و نگارش این مجموعه مقالات برای ما بسیار باارزش و البته پرزحمت بوده، امیدواریم که شما هم به‌اندازه ما آن را دوست داشته و از خواندن آن لذت برده باشید!

حوزه پردازش زبان طبیعی، با سرعتی عجیب و غیر قابل‌باوری در حال پیشرفت است و کاربردهای آن تأثیر بسیار مهمی روی زندگی ما دارد. با استفاده از NLP، ما به تنوع، ظرافت، قدرت بی‌نهایت و فوق‌العاده زبان طبیعی و انسانی پی می‌بریم. امیدواریم این دوره ابعاد مختلف NLP را به شما نشان داده باشد و انگیزۀ لازم برای ادامۀ یادگیری هر چه بیشتر آن را برایتان فراهم کرده باشد! بله، قطعاً همیشه موارد بیشتری برای یادگیری وجود دارد، بنابراین سعی کنید که کنجکاو باشید و به تمرین و یادگیری بیشتر ادامه دهید!

با تشکر از تیم دیتاهاب بابت تمامی ایده‌ها و حمایت‌هایی که داشت. در پایان، از طرف خودم و تیم دیتاهاب از شما مخاطبان عزیز سپاسگزاریم که تا اینجا همراه ما بودید. به امید دیدار مجدد در دوره‌ها و مقالات بعدی …

در پایان یک مقاله هدیه هم در نظر گرفتیم که در آن موضوع بسیار کاربردی تشخیص موجودیت های اسمی را یاد می‌گیریم.

مطالب بیشتر

دیدگاهتان را بنویسید