فهرست مطالب
ساختن ابر کلمات (Word Cloud)
پردازش زبان طبیعی (Natural Language Processing) چیست؟
زبان همهجا هست و همهجا استفاده میشود. حتی همین حالا! من و شما با استفاده از همین جملات و پاراگرافهای نوشته شده (من با نوشتن و شما با خواندن آنها)، یک ارتباط و تعاملی را برقرار کردیم.
حتی یکرشته تحصیلی مجزا به نام زبانشناسی (linguistics) وجود دارد که به مطالعه زبان انسان از جنبههای مختلف مانند آوا، صرف و نحو میپردازد و هدف آن کشف کارکرد و مکانیسم روانی و اجتماعی زبان است.
بسیار خب ... این موضوع چه ارتباطی میتواند با علوم کامپیوتر داشته باشد و چگونه به ما در پردازش زبان طبیعی کمک میکند؟
در اواخر دهه 1950 میلادی، زبانشناسی کلاسیک با علمهای دیگر مانند آمار، مهندسی کامپیوتر و علوم کامپیوتر ترکیب شد و زبانشناسی رایانشی یا محاسباتی (computational linguistics) را به وجود آورد که هدف آن ساختن فرایندهای خودکاری بود که میتوانست متن را تفسیر کرده و به شکلهای مختلف دیگر (مانند بردارهای عددی) تبدیل کند.
امروزه، پردازش زبان طبیعی (NLP) یک سیر تکاملی از زبانشناسی محاسباتی را طی کرده است که از هوش مصنوعی و یادگیری ماشین استفاده میکند.
هدف NLP تفسیر و تبدیل زبان انسانی یا زبان طبیعی به زبانی است که رایانهها و ماشینها بتوانند آنها را درک کرده و از آن استفاده کنند.
میتوانیم برای درک بهتر مطالب گفته شده، چند کاربرد مهم از پردازش زبان طبیعی که در زندگی روزمره خود استفاده میکنیم را بررسی کنیم. قطعاً پیش از خواندن ادامه مطالب، خودتان چند مورد از آنها را میشناسید!
برای آشنایی با مفاهیم پردازش زبان طبیعی دوره آموزش پردازش زبان طبیعی مقدماتی را ببینید.
کاربردهای روزمره پردازش زبان طبیعی یا NLP
استخراج اطلاعات (Information Extraction)
استخراج اطلاعات شامل شناسایی و بهدستآوردن اطلاعات خاصی از یک متن مانند نام، مکان یا هشتگ میشود.
بهعنوانمثال، در حوزه منابع انسانی، پردازش زبان طبیعی میتواند با تطبیق مشخصات کارجوها بهعنوانهای شغلی، به پیداکردن نیروی مناسب کمک کند. فرض کنید که برای یک آگهی شغلی، هزاران رزومه دریافت شده، بنابراین هزاران و حتی میلیونها کلمه میتوانیم داشته باشیم؛ بنابراین با استفاده از پردازش زبان طبیعی، امکان استخراج یک عنوان شغلی خاص از بین آنهمه کلمه و ایجاد مطابقت شغلی، آسانتر میشود.
تبدیل گفتار به نوشتار (Speech-to-Text Conversion)
آیا تابهحال از ابزارهای Voice Dictation یا تایپ صوتی استفاده کردهاید؟ یا با دستیارهای صوتی هوشمند، مانند Siri یا Alexa صحبت کردهاید؟ با استفاده از NLP، گفتار ما به بردارهای عددی تبدیل شده و رایانهها میتوانند آنها را درک و پردازش کنند.
دستهبندی متن (Text Classification)
این نوع کاربرد از NLP عموماً بهعنوان “برچسبگذاری متن” (Text Tagging) نیز شناخته شده که یک جمله یا کلمه خاص را به یک دستهبندی مناسب مانند مثبت یا منفی، اسپم یا غیر اسپم اختصاص میدهد. این کاربرد میتواند به جداکردن ایمیلهای اسپم از سایر ایمیلها (Spam Filtering)، تحلیل عواطف (Sentiment Analysis)، شناسایی و استنتاج موضوعات (Topic Inference) و تشخیص نفرتپراکنی (Hate Speech Detection) کمک کند!
بهعنوانمثال، در حوزه دیجیتال مارکتینگ، یک برند میتواند در شبکههای اجتماعی مختلفی حساب کاربری داشته باشد که هر روز صدها نظر و بازخورد دریافت کند. این نظرات بینشهای ارزشمندی را برای آن برند یا شرکت به ارمغان میآورند، اما بررسی آنها میتواند زمانبر و خستهکننده باشد که در این صورت NLP میتواند به شناسایی خودکار جنبههای مثبت یا منفی نظرات و بازخورد مشتریان در کمترین زمان ممکن کمک کند!
تولید متن (Text Generation)
برای این کاربرد، ابزار Google’s Smart Compose که به نوشتن ایمیل کمک میکند، مثال خوبی است. به این صورت که همزمان با تایپ یک متن، گوگل به کاربران کلماتی را پیشنهاد میدهد که برای استفاده از آنها فقط کافی است انگشت خود را به سمت راست بکشند. البته که تولید متن، چیزی فراتر از نوشتن ایمیل است. اخیراً مدلهای جدیدی مانند GTP-3 توسعه داده شده که میتوانند همانند یک نویسنده، داستانهای منسجمی را در چند پاراگراف بنویسند و با این کار، راه را برای تولید خودکار سایر محتوای خبری هموار کنند! حتی در آینده شاعران معروفی خواهیم داشت که از اشعار آنها لذت خواهیم برد ولی انسان نبوده و صرفاً یک هوش مصنوعی خواهند بود.
در مقاله کاربردهای پردازش زبان طبیعی با کاربردهای NLP بیشتر آشنا شوید.
NLP با سرعتی خیرهکننده در حال تکامل است (انقلاب هوش مصنوعی دور از تصور نیست) بهگونهای که مدلهای جدید میتوانند متنی بنویسند که از سایر متنهای انسانی قابل تشخیص نیست. همچنین ترجمه خودکار رایج شده و تعامل با چتباتها نیز کارآمدتر شدهاند و جای نیروی متخصص انسانی را در شرکتها گرفته است. این دوره آموزشی، شما را با مبانی پردازش زبان طبیعی آشنا کرده و برای ایجاد یک مدل NLP راهنمایی میکند.
قرار است که این آموزشها را با تمرینهای مختلف و بهصورت عملی جلو ببریم. هدف این است که نشان دهیم ساختن یک مدل پردازش زبان طبیعی چگونه است. شما همچنین با ایستواژهها (Stop Words) آشنا خواهید شد که در فصلهای آینده به کارتان میآید!
مصورسازی متون با استفاده از ابر کلمات (Word Cloud)
بیایید آموزشمان را با ساختن ابر کلمات شروع کنیم. احتمالاً پیشازاین نمونهای از آن را دیده باشید، یک نمونه جذاب آن را در ادامه مشاهده خواهید کرد.
منبع: https://olliconnects.org/what-are-word-clouds
اما بهطورکلی ابر کلمات را به این شکل تعریف میکنیم:
ابر کلمات، یک تصویر فوری (Snapshot) از یک متن است که به شما کمک میکند آن را با یک نگاه مختصر بررسی و درک کنید. در این تصویر، اندازه هر کلمه متناسب با اهمیت آن است (کلمات بزرگتر، کلمات پرتکرار متن هستند). این تصویر میتواند کاربردهای مختلفی داشته باشد و بهخصوص برای یک ارائه حرفهای مفید باشد، زیرا با استفاده از آن میتوان با مخاطبان ارتباط گرفت و توجه آنها را جلب کرد!
حال سؤال این است که ابر کلمات چگونه ساخته میشود؟
آمادهسازی محیط برنامهنویسی
در این دوره برای پیادهسازی مفاهیم ارائه شده، از پایتون 3.8 و محیط Anaconda استفاده شده است (هنگام نگارش این مقاله، آخرین ورژن ارائه شده، پایتون 3.8 بوده). میتوانید به سایت Anaconda مراجعه کرده و با نحوه نصب پایتون به کمک Conda، باتوجهبه سیستمعامل خود آشنا شوید.
همچنین میتوانید در Cloud کار کنید. Google Colaboratory که به آن Colab نیز گفته میشود، یک محیط محاسباتی مبتنی بر مرورگر است که در آن میتوان بهصورت رایگان، نوتبوکهای Jupyter را اجرا کرد. این محیط، مستقیماً با Google Drive شما ارتباط دارد. برای آشنایی با این پلتفرم، میتوانید این ویدئوی یوتیوب به نام Get Started With Google Colaboratory را مشاهده کنید.
تمامی کدهای دوره، بهصورت نوتبوکهای Jupyter در این repository GitHub موجود است.
تمامی کدها به زبان پایتون هستند. اگر هنوز با این زبان برنامه نویسی آشنا نیستید و به دنبال آموزش پایتون برای علم داده هستید، آموزش رایگان پایتون را در کانال یوتیوب دیتاهاب مشاهده کنید.
نصب کتابخانه Word Cloud
برای ساختن ابر کلمات در پایتون، میتوانیم از کتابخانهای که برای این کار توسعه داده شده (کتابخانهWord Cloud)، استفاده کنیم. جزئیات بیشتر آن در صفحه رسمی پکیجها و پروژههای پایتون یعنی Python Package Index (PyPI) ذکر شده است. برای نصب آن، از این دستورها استفاده کنید:
- اگر با سیستم شخصی کار میکنید (در cmd یا terminal اجرا کنید):
pip install wordcloudor
or
conda install -c conda-forge wordcloud
اگر در محیط Google Colab کار میکنید (در سلول ابتدایی نوتبوک اجرا کنید):
!pip install wordcloud
تهیه و آمادهسازی دادههای متنی
برای ساختن ابر کلمات، میخواهیم از محتوای یک صفحه ویکیپدیا استفاده کنیم که میتوانیم متن خام آن را با چند خط کد دانلود کنیم. برای این کار، تابع wikipedia_page() را بهصورت زیر تعریف میکنیم و هر موضوع یا عبارتی را که محتوای آن را نیاز داریم، بهعنوان آرگومان ورودی به تابع پاس داده و محتوای ویکیپدیا در خصوص آن را موضوع را بهصورت متن خام دریافت میکنیم (از این تابع در بخشهای بعدی دوره نیز استفاده خواهیم کرد).
از آنجایی که همه ما روی زمین زندگی میکنیم، از محتوای متنی Earth یعنی “زمین” استفاده خواهیم کرد. یعنی تابع را با آرگومان ورودی ‘Earth’، به این صورت wikipedia_page(‘Earth’) فراخوانی میکنیم اما توصیه میشود که حتما برای تمرین بیشتر، موضوعات متنوع دیگری مانند هری پاتر (Harry Potter)، سگ (dogs)، استارترک (Star Trek) یا قهوه (coffee) را امتحان کنید.
import requests
def wikipedia_page(title):
'''
This function returns the raw text of a wikipedia page
given a wikipedia page title
'''
params = {
'action': 'query',
'format': 'json', # request json formatted content
'titles': title, # title of the wikipedia page
'prop': 'extracts',
'explaintext': True
}
# send a request to the wikipedia api
response = requests.get(
'https://en.wikipedia.org/w/api.php',
params= params
).json()
# Parse the result
page = next(iter(response['query']['pages'].values()))
# return the page content
if 'extract' in page.keys():
return page['extract']
else:
return "Page not found"
# We lowercase the text to avoid having to deal with uppercase and capitalized words
text = wikipedia_page('Earth').lower()
print(text)
علاوه بر ویکیپدیا، میتوانیم از پروژه گوتنبرگ نیز استفاده کنیم که از قدیمیترین کتابخانههای دیجیتالی بوده و هدف آن تشویق، برای تولید و پخش کتابهای دیجیتالی است. این کتابخانه حاوی هزاران متن عمومی رایگان است که میتوانید آنها را با سه خط کد دانلود کنید:
import requests
# this is the url for Alice in Wonderland
result = requests.get('http://www.gutenberg.org/files/11/11-0.txt')
print(result.text)
ساختن ابر کلمات
حال باید ابر کلمات خود را بسازیم. همانطور که پیشازاین اشاره شد، هدف این است که مخاطب، بدون خواندن صفحه ویکیپدیا در مورد زمین یا Earth، تنها با مشاهده تصویر ابر کلمات، اطلاعاتی را به دست آورد:
# import the wordcloud library
from wordcloud import WordCloud
# Instantiate a new wordcloud.
wordcloud = WordCloud(random_state = 8,
normalize_plurals = False,
width = 600, height= 300,
max_words = 300,
stopwords = [])
# Apply the wordcloud to the text.
wordcloud.generate(text)
برای نمایش دادن تصویر ابر کلمات، از کتابخانه matplotlib استفاده میکنیم:
import matplotlib.pyplot as plt
# create a figure
fig, ax = plt.subplots(1,1, figsize = (9,6))
# add interpolation = bilinear to smooth things out
plt.imshow(wordcloud, interpolation='bilinear')
# and remove the axis
plt.axis("off")
کتابخانه Word Cloud، پارامترهای پیشفرض بسیار خوبی دارد. اگر پارامترهای آن را تغییر ندهیم و آن را بهصورت wordcloud = WordCloud() استفاده کنیم، نتیجه متفاوتتر و بهتری در مقایسه با آنچه که تا الان اجرا کردیم میگیریم.
زیرا کتابخانه Word Cloud به طور خودکار، متن ما را پیشپردازش و تمیز میکند اما بهتر است بدانید که ما برای آموزش مفیدتر و آشنایی با چگونگی پیشپردازش متن، از پارامترهای پیشفرض استفاده نکردهایم.
این شما و این هم اولین تصویر ابر کلمات!
این تصویر ابر کلمات را چگونه میتوان تفسیر کرد؟ چه اطلاعاتی به ما منتقل میکند؟
مطابق تصویر، مقاله در مورد زمین (earth) ، آب (water) و خورشید (sun) صحبت کرده است. هرچند این موارد را پیش از مشاهده تصویر ابر کلمات و باتوجهبه اینکه موضوع مقاله را در مورد زمین انتخاب کرده بودیم، میدانستیم.
اگر کمی به تصویر دقت کنیم، میبینیم که اکثر کلمات هیچ اطلاعات خاصی در مورد محتوای متن به ما نمیدهند. کلماتی با تکرار بالای زیادی وجود دارد که خیلی معنای خاص و دقیقی ندارند. کلماتی مانند the، of، is، are، and، that، from ازاینقبیل کلمات هستند.
به این کلمات، ایست واژه (Stop Words) میگویند که به موضوع مقاله ربط ندارند و تصویر ابر کلمات با حذف آنها، اطلاعات بهتر و دقیقتری را منتقل میکند. اینطور نیست؟
به طور دقیقتر، ایستواژهها (Stop Words) کلماتی هستند که هیچ اطلاعات مفیدی در مورد محتوای یک متن یا ماهیت آن ارائه نمیدهند. این کلمات ممکن است به دو صورت باشند. حالت اول کلماتی هستند که معنادار نیستند؛ مانند حروف اضافه و حروف ربط (from، of و …). حالت دوم کلماتی هستند که در متن بسیار تکرار شدهاند و عموماً اطلاعات خاصی را به ما منتقل نمیکنند؛ مانند افعال they، you، are و … .
حذف ایستواژهها، اولین گام پیشپردازش دادههای متنی است که در قسمت بعدی مقاله آن را جلو میبریم و مجدداً ابر کلمات خود را میسازیم!
اگر با NLP آشنایی کافی دارید، دوره آموزش متن کاوی فارسی با شبکههای عصبی را تهیه کنید. در این دوره، با تمرکز روی زبان فارسی، جدیدترین تکنیکهای پردازش زبان طبیعی با کدنویسی فراوان آموزش داده میشود.
- پردازش زبان طبیعی (NLP)، ترکیبی از دو رشتۀ زبانشناسی و علوم کامپیوتر است که هدف آن تفسیر و تبدیل زبان انسانی یا زبان طبیعی به زبانی است که رایانهها و ماشینها بتوانند آنها را درک کرده و سپس از آن استفاده کنند.
- برخی از کاربردهای مهم NLP عبارتاند از: استخراج اطلاعات (Information Extraction)، تبدیل گفتار به نوشتار (Speech-to-Text Conversion)، دستهبندی متن (Text Classification) و تولید متن (Text Generation).
- ابر کلمات، یک تصویر فوری (Snapshot) از یک متن است که به شما کمک میکند با یک نگاه مختصر، درک کلی از متن به دست آورید.
- برای ساختن ابر کلمات در پایتون، میتوانیم از کتابخانهای که برای این کار توسعه داده شده (کتابخانه Word Cloud)، استفاده کنیم. جزئیات بیشتر آن در صفحه رسمی پکیجها و پروژههای پایتون یعنی Python Package Index (PyPI) ذکر شده است.
- ایستواژهها (Stop Words) کلماتی هستند که هیچ اطلاعات مفیدی در مورد محتوای یک متن یا ماهیت آن ارائه نمیدهند. این کلمات ممکن است به دو صورت باشند. حالت اول کلماتی هستند که معنادار نیستند؛ مانند حروف اضافه و حروف ربط (from، of و …). حالت دوم کلماتی هستند که در متن بسیار تکرار شدهاند و عموماً اطلاعات خاصی را به ما منتقل نمیکنند؛ مانند افعال you، they، are و … .
- تمامی کدهای دوره، بهصورت نوتبوکهای Jupyter در این repository GitHub موجود است.
در قسمت بعدی مقاله، درمورد اولین گام پیشپردازش دادههای متنی یعنی حذف ایستواژه (Stop Word) صحبت میکنیم (این گام را باید برای همه پروژههای حوزه NLP طی کنیم).