فهرست مطالب
آموزش train کردن مدل زبانی با استفاده از الگوریتم Word2vec و GloVe
در مقاله قبل با مدل زبانی آشنا شدیم. در این مقاله به سراغ پیادهسازی الگوریتم Word2vec و الگوریتم GloVe میرویم.
آمادهسازی محیط کدنویسی و دیتاست
برای آموزش و پیادهسازی مدلها با الگوریتم Word2vec و الگوریتم GloVe، از پیکرۀ متنی شکسپیر (Shakespeare corpus) استفاده میکنیم. این corpus شامل متن همه نمایشنامههای شکسپیر میشود که میتوانیم آن را از سایت Kaggle دریافت کنیم.
دلیل اصلی ما برای انتخاب این دیتاست، صرفاً ایجاد تنوع بوده تا بتوانیم با دیتایی متفاوت از آنچه که الگوریتم word2vec و الگوریتم GloVe با آنها آموزشدیدهاند، کار کنیم (زیرا این دیتاست، شامل ادبیات کلاسیک است؛ اما مدلهای word2vec و GloVe، با دادههای Google US News و ویکیپدیا آموزشدیدهاند).
بنابراین، انتظار داریم، با استفاده از دیتاست شکسپیر که واژگان متفاوتی دارد، نگرش و نتایج متفاوتتری نیز دریافت کنیم. این دیتاست نیز بزرگ است و بهصورت (short-sequence format) آماده شده (شامل جملات کوتاه است) که باعث سریعتر شدن آموزش مدل میشود.
در کانال تلگرام پرشین دیتا، به دیتاست رایگان برای پروژههای پردازش زبان طبیعی دسترسی داشته باشید.
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 | scimitar | wife | cousin |
همانطور که مشخص است، همه کلمات مشابه، مربوط به نمایشنامهها و دوران شکسپیر هستند. البته توجه داشته باشید که اگر مدل را با پارامترهای مختلف 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 | head | father | Angelo |
به این دقت کردید که نتایج کلمات مشابه 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 را به شما نشان داده باشد و انگیزۀ لازم برای ادامۀ یادگیری هر چه بیشتر آن را برایتان فراهم کرده باشد! بله، قطعاً همیشه موارد بیشتری برای یادگیری وجود دارد، بنابراین سعی کنید که کنجکاو باشید و به تمرین و یادگیری بیشتر ادامه دهید!
با تشکر از تیم دیتاهاب بابت تمامی ایدهها و حمایتهایی که داشت. در پایان، از طرف خودم و تیم دیتاهاب از شما مخاطبان عزیز سپاسگزاریم که تا اینجا همراه ما بودید. به امید دیدار مجدد در دورهها و مقالات بعدی …
در پایان یک مقاله هدیه هم در نظر گرفتیم که در آن موضوع بسیار کاربردی تشخیص موجودیت های اسمی را یاد میگیریم.