تکنیک های پردازش زبان طبیعی برای شناسایی موضوع – با مثال توضیح داده شده است
این روزها اطلاعات متنی زیادی در دسترس است. از مقاله گرفته تا پست های رسانه های اجتماعی و مقالات تحقیقاتی را شامل می شود. پس توانایی ما برای تقطیر بینش های معنادار کلیدی است. این به ما کمک می کند تا در زمینه های مختلف تصمیمات آگاهانه بگیریم.
به عنوان مثال، می توانید حجم زیادی از محتوای متنی را برای استخراج یک موضوع مشترک تجزیه و تحلیل کنید. شرکت ها و مشاغل از این تکنیک برای درک افکار عمومی در مورد برند خود استفاده می کنند. این به آنها امکان می دهد تصمیمات آگاهانه بگیرند و خدمات خود را بهبود بخشند.
توانایی استخراج مضامین از حجم زیادی از داده های متنی به عنوان شناسایی موضوع نامیده می شود.
در این مقاله، نحوه استفاده از تکنیکهای NLP را برای شناسایی موضوع، تقویت مهارتهای خود به عنوان یک دانشمند داده، خواهید آموخت. پس بنشینید، زیرا سفر جالبی خواهد بود.
شناسایی موضوع چیست؟
شناسایی موضوع، به زبان ساده، یک رشته فرعی تحت پردازش زبان طبیعی است. این شامل فرآیند کشف و سازماندهی خودکار مضامین یا موضوعات اصلی موجود در مجموعه ای از داده های متنی است.
چندین تکنیک پردازش زبان طبیعی (NLP) وجود دارد که میتوانید از آنها برای شناسایی مضامین در متن استفاده کنید، از تکنیکهای ساده تا تکنیکهای مبتنی بر الگوریتم. در این مقاله به تکنیکهای رایج NLP که برای شناسایی موضوع استفاده میشوند نگاهی خواهیم انداخت. در ادامه با جزئیات بیشتری به این موارد خواهیم پرداخت.
من اخیراً در مورد ماهیت NLP توییت کردم. این واقعاً صرفاً آمار است، زیرا دستکاری های مختلفی وجود دارد که می توانید انجام دهید تا اطمینان حاصل کنید که اعداد به عنوان نمایشی برای متن عمل می کنند (زیرا رایانه ها متن را نمی فهمند).
الزامات این پروژه
برای اینکه بتوانید آن را دنبال کنید و در حین یادگیری تجربه عملی داشته باشید، باید پایتون 3.x را روی دستگاه خود نصب کنید.
ما همچنین از کتابخانه های زیر استفاده خواهیم کرد: Gensim، Scikit-Learn و NLTK. شما می توانید آنها را با استفاده از نصب کننده بسته Pip با دستور زیر نصب کنید:
pip install gensim nltk scikit-learn
تکنیک های مورد استفاده در NLP برای شناسایی موضوع
تکنیک های مختلفی وجود دارد که می توانید برای شناسایی موضوع استفاده کنید. در این مقاله، با برخی از تکنیکهای رایج NLP آشنا میشوید که بسیار خوب عمل میکنند، از روشهای ساده و مؤثر تا روشهای پیشرفتهتر.
کیسه کلمات
Bag of Words (BoW) یک نمایش رایج در NLP برای داده های متنی است. می توانید از آن برای شمارش فراوانی هر کلمه در یک سند استفاده کنید.
BoW، در زمینه شناسایی موضوع، بر این فرض استوار است که هر چه یک کلمه بیشتر در یک سند رخ دهد، اهمیت آن بیشتر است. سپس میتوانید از آن کلمات رایجتر برای استنباط اینکه سند در مورد چیست استفاده کنید.
کیسه کلمات ساده ترین تکنیکی است که برای شناسایی موضوعات در NLP استفاده می شود. در حالی که Bag of Words ساده و کارآمد است، اما به شدت تحت تأثیر کلمات توقف قرار می گیرد، که کلمات رایج در داده های متنی هستند (مانند "the"، "and"، "is" و غیره).
اما هنگامی که مسئله توقف کلمات را از متن حذف کردید و به شما امکان میدهد پردازش متن مؤثری را انجام دهید (با استفاده از تکنیکهایی مانند عادی سازی)، BoW همچنان میتواند در شناسایی برخی موضوعات اصلی مؤثر باشد.
بیایید ببینیم چگونه می توانید از BoW برای شناسایی موضوع زیر استفاده کنید.
نحوه پیاده سازی Bag of Words در پایتون
کمی پیشینه در مورد مقاله نمونه ای که در اینجا استفاده خواهیم کرد: من آن را از بی بی سی دریافت کردم، و عنوان آن "آمریکا ممنوعیت واردات آخرین ساعت اپل را لغو کرد. " در این مقاله ممنوعیت لغو شده جدیدترین ساعت های اپل، Ultra 2 و Series 9 مورد بحث قرار می گیرد.
حالا بیایید به نحوه پیاده سازی کیسه کلمات در پایتون بپردازیم. من این بلوک کد را به بخشهایی تقسیم میکنم و هر قسمت را در حین رفتن توضیح میدهم تا هضم آن را کمی آسانتر کنم.
#import necessary libraries from collections import Counter from nltk.tokenize import word_tokenize from nltk.corpus import stopwords article = "Apple's latest smart watches can resume being sold in the US after the tech company filed an emergency appeal with authorities.\ Sales of the Series 9 and Ultra 2 watches had been halted in the US over a patent row.\ The US's trade body had barred imports and sales of Apple watches with technology for reading blood-oxygen level.\ Device maker Masimo had accused Apple of poaching its staff and technology. \ It comes after the White House declined to overturn a ban on sales and imports of the Series 9 and Ultra 2 watches which came into effect this week.\ Apple had said it strongly disagrees with the ruling.\ The iPhone maker made an emergency request to the US Court of Appeals, which proved successful in getting the ban lifted."
در کد بالا، کتابخانههای لازم را وارد میکنیم که از آنها برای پیادهسازی BoW استفاده میکنیم.
ما از کتابخانه Counter برای شمارش فراوانی هر کلمه و از کتابخانه word_tokenize برای توکن کردن سند به نشانه های کلمه جداگانه استفاده می کنیم تا بتوان آنها را شمارش کرد. در نهایت، کتابخانه stopwords کلمات توقف را از سند حذف می کند.
# Initialize english stopwords english_stopwords = stopwords.words("english") #convert article to tokens tokens = word_tokenize(article) #extract alpha words and convert to lowercase alpha_lower_tokens = [word.lower() for word in tokens if word.isalpha()] #remove stopwords alpha_no_stopwords = [word for word in alpha_lower_tokens if word not in english_stopwords] #Count word BoW = Counter(alpha_no_stopwords) #3 Most common words BoW.most_common(3)
در کد بالا از خط اول کد برای استخراج تمام کلمات توقف در زبان انگلیسی استفاده می کنیم. سپس، خط دوم رشته مقاله را به کلمات مجزا تبدیل می کند. خط سوم کد هر کلمه را به حروف کوچک عادی می کند و فقط کلمات الفبایی را از مقاله استخراج می کند. دو خط آخر کد برای شمارش فراوانی هر کلمه و انتخاب رایج ترین سه کلمه استفاده می شود.
خروجی مدل BoW در زیر آمده است:
[('watches', 4), ('us', 4), ('apple', 3), ('emergency', 2)]
از اینجا می توان نتیجه گرفت که مقاله تماماً در مورد "ساعت های اپل در ایالات متحده" است. همانطور که می بینید، با سادگی استدلال در پشت کیسه کلمات، هنوز هم می توان اندکی دانش را در مورد مقاله استنباط کرد.
تخصیص دیریکله نهفته
تخصیص نهفته دیریکله یا به اختصار LDA، یک مدل احتمالی محبوب است که در NLP و یادگیری ماشین برای مدلسازی موضوعات (با استفاده از الگوریتمها برای شناسایی موضوعات) استفاده میشود. این بر این فرض استوار است که اسناد مخلوطی از موضوعات هستند و موضوعات مخلوطی از کلمات هستند.
به زبان ساده، LDA یک تکنیک NLP است که برای شناسایی موضوعی که یک سند به آن تعلق دارد بر اساس کلمات موجود در سند استفاده می شود.
LDA بر روی بازنمایی کیسه ای از کلمات اسناد عمل می کند، جایی که هر سند به عنوان بردار بسامدهای کلمه نمایش داده می شود. شما می توانید LDA را با استفاده از کتابخانه Gensim در پایتون (که یک کتابخانه منبع باز است که برای مدل سازی موضوع و تجزیه و تحلیل تشابه اسناد استفاده می شود) پیاده سازی کنید.
مراحل اجرای LDA عبارتند از:
وارد کردن کتابخانهها: اولین قدم این است که کتابخانههای لازمی را که استفاده میکنید وارد کنید.
آمادهسازی دادهها: دادههای خام را به قالب سند تبدیل کنید، سپس نشانهگذاری کنید، کلمات توقف را حذف کنید، و بهصورت اختیاری، ریشهسازی یا واژهسازی را انجام دهید.
ایجاد فرهنگ لغت و مجموعه : یک فرهنگ لغت با شناسه های کلمه منحصر به فرد بسازید. سپس یک کیسه از مجموعه کلمات را تشکیل دهید که نشان دهنده فراوانی سند-کلمه است.
Train LDA Model : از فرکانس سند-کلمه و فرهنگ لغت برای آموزش مدل LDA استفاده کنید و تعداد موضوعات مورد نظر را تنظیم کنید.
چاپ موضوعات : موضوعات کشف شده را کاوش و چاپ کنید.
# Import the necessary libraries from gensim.corpora.dictionary import Dictionary from gensim.models import LdaModel from nltk import sent_tokenize, word_tokenize from nltk.corpus import stopwords article = "Apple's latest smart watches can resume being sold in the US after the tech company filed an emergency appeal with authorities. \ Sales of the Series 9 and Ultra 2 watches had been halted in the US over a patent row. \ The US's trade body had barred imports and sales of Apple watches with technology for reading blood-oxygen level. \ Device maker Masimo had accused Apple of poaching its staff and technology. \ It comes after the White House declined to overturn a ban on sales and imports of the Series 9 and Ultra 2 watches which came into effect this week. \ Apple had said it strongly disagrees with the ruling. \ The iPhone maker made an emergency request to the US Court of Appeals, which proved successful in getting the ban lifted."
خطوط کد بالا شامل کتابخانه های لازم است که برای پیاده سازی LDA از آنها استفاده خواهیم کرد.
خط اول کد شامل شی Dictionary است. سپس، خط دوم مدل LDA را وارد میکند و خط سوم کد حاوی sent_tokenize
است که از آن برای تبدیل مقاله به سند استفاده میکنیم. پس از آن، word_tokenize
سند را به کلمات جداگانه تبدیل می کند. در نهایت، ما کتابخانه stop_words
را داریم.
# convert article to documents documents = sent_tokenize(article) #toeknize and normalize the document tokenized_words = [word_tokenize(doc.lower()) for doc in documents] # remove stops words and onl extract alphabets cleaned_token = [[word for word in sentence if word not in english_stopwords and word.isalpha()] for sentence in tokenize_words] # create a dictionary dictionary = Dictionary(cleaned_token) # Create a corpus from the document corpus = [dictionary.doc2bow(text) for text in cleaned_token]
خطوط کد بالا شامل مراحل پیش پردازشی است که روی مقاله انجام می شود، از جمله تبدیل مقاله به سند، عادی سازی و توکن کردن سند به کلمات جداگانه.
قسمت بعدی کلمات توقف را از متن حذف می کند و سپس کلمات و اعداد را از سند استخراج می کند. پس از آن یک دیکشنری ایجاد می کنیم که یک نقشه بین هر کلمه و شناسه عددی آن است. آخرین خط کد سپس مجموعه ای از سند را ایجاد می کند.
# Build the LDA model model = LdaModel(corpus=corpus, id2word=dictionary, num_topics=3) # Print the topics print("Identified Topics:") for idx, topic in lda_model.print_topics(): print(f"Topic {idx + 1}: {topic}")
کد بالا برای آموزش مدل بر روی پیکره استفاده می شود و سپس 3 موضوع برتر مقاله را چاپ می کند.
در زیر خروجی مدل LDA آمده است:
Identified Topics: Topic 1: 0.045*"9" + 0.045*"ultra" + 0.044*"sales" + 0.044*"2" + 0.043*"series" + 0.043*"watches" + 0.029*"apple" + 0.028*"ruling" + 0.028*"disagrees" + 0.028*"said" Topic 2: 0.051*"maker" + 0.035*"ban" + 0.035*"us" + 0.031*"emergency" + 0.031*"made" + 0.031*"successful" + 0.031*"court" + 0.031*"lifted" + 0.031*"request" + 0.031*"proved" Topic 3: 0.055*"apple" + 0.054*"us" + 0.054*"watches" + 0.031*"sales" + 0.031*"technology" + 0.031*"imports" + 0.031*"authorities" + 0.031*"barred" + 0.031*"appeal" + 0.031*"filed"
تکنیک LDA در مقایسه با روش BoW پیشرفت هایی را نشان می دهد. هنوز هم میتوانیم اطلاعات بیشتری کسب کنیم مبنی بر اینکه این مقاله درباره ممنوعیت ساعتهای سری اولترا اپل در ایالات متحده است.
فاکتورسازی ماتریس غیر منفی
فاکتورسازی ماتریس غیر منفی (NMF)، درست مانند LDA، یکی دیگر از تکنیک های مدل سازی موضوع است که موضوعات پنهان را در مجموعه ای از اسناد آشکار می کند.
اما به جای تکیه بر BoW، به نمایش فرکانس معکوس سند (TF-IDF) برای ضبط و بازیابی مضامین یا موضوعات پنهان از اسناد متکی است.
با ترکیب اطلاعات TF-IDF، NMF میتواند اهمیت اصطلاحات را بسنجد و در نتیجه الگوهای پنهان بیشتری را شناسایی کند. شما می توانید NMF را با استفاده از کتابخانه Scikit-learn انجام دهید.
مراحل انجام NMF
کتابخانه های لازم را وارد کنید
آماده سازی داده: متن را به سند تبدیل کنید، سپس آماده سازی داده های لازم مانند حذف کلمات توقف را انجام دهید. تابع TF-IDF در Scikit-Learn یک آرگومان دارد که این کار را انجام می دهد.
تبدیل سند به ماتریس TF-IDF با استفاده از بردار TF-IDF در Scikit-learn
تابع NMF را روی ماتریس TF-IDF اعمال کنید و تعداد موضوع مورد نظر و تعداد کلمات هر مبحث را مشخص کنید.
در نهایت، نتیجه خود را تفسیر کنید.
# import the necessary libraries from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import NMF article = "Apple's latest smart watches can resume being sold in the US after the tech company filed an emergency appeal with authorities. \ Sales of the Series 9 and Ultra 2 watches had been halted in the US over a patent row. \ The US's trade body had barred imports and sales of Apple watches with technology for reading blood-oxygen level. \ Device maker Masimo had accused Apple of poaching its staff and technology. \ It comes after the White House declined to overturn a ban on sales and imports of the Series 9 and Ultra 2 watches which came into effect this week. \ Apple had said it strongly disagrees with the ruling. \ The iPhone maker made an emergency request to the US Court of Appeals, which proved successful in getting the ban lifted."
کد بالا حاوی لیبارهایی است که برای پیاده سازی NMF و خود مقاله از آنها استفاده خواهیم کرد.
# convert article to documents documents = sent_tokenize(article) # Create a TF-IDF vectorizer tfidf_vectorizer = TfidfVectorizer(stop_words='english').fit_transform(document) # Apply NMF num_topics = 5 # Set the number of topics you want to identify nmf_model = NMF(n_components=num_topics, init='random', random_state=42) nmf_matrix = nmf_model.fit_transform(tfidf)
کد بالا مقاله را به سند تبدیل می کند. سپس ماتریس فرکانس سند معکوس Term-Frequency از سند مقاله ایجاد می کند. سپس سه خط آخر کد تعداد موضوعات را مشخص می کند و موضوعات را از ماتریس سند با استفاده از NMF ایجاد می کند.
خروجی مدل NMF در زیر آمده است:
Topic #1: ultra, series, sales, watches, row, halted, patent, white, house, effect Topic #2: lifted, court, iphone, getting, request, successful, proved, appeals, ban, maker Topic #3: disagrees, strongly, ruling, said, apple, body, blood, level, trade, oxygen Topic #4: filed, resume, appeal, latest, tech, authorities, sold, smart, company, emergency Topic #5: technology, apple, accused, masimo, device, staff, poaching, maker, trade, level
می توانید ببینید که NMF بینش های بیشتری را در مورد موضوعات سند نشان می دهد. به عنوان مثال، می توانید بگویید که شرکت دیگری به نام Masimo اپل را به نقض حق ثبت اختراع در ساعت های سری Ultra خود متهم می کند.
چگونه می توان از کدام تکنیک استفاده کرد؟
توصیه میکنم تمام رویکردها را آزمایش کنید تا دیدگاههای متفاوتی در مورد محتوای سند خود به دست آورید.
بسته کلمات و LDA بر اساس تعداد دفعات تکرار کلمات هستند و این تکنیکها را برای استنباط بزرگترین/کلیترین موضوعات در مورد سند مفید میسازد.
از سوی دیگر، هنگام استفاده از NMF که مبتنی بر TF-IDF است، می توان از کلمات کمتری برای استنباط موضوعات اضافی و ارائه دیدگاه متفاوت در مورد سند استفاده کرد.
به عنوان مثال، NMF قادر به شناسایی عبارات کلیدی مانند "Masimo" و "متهم" بود، در حالی که LDA قادر به انجام این کار نبود. پس بسته به نیازتان، ادامه دهید و همه روشها را آزمایش کنید تا ببینید کدام یک میتواند نتایج بهتری داشته باشد.
نتیجه
در این مقاله، با شناسایی موضوع و نحوه استفاده از آن برای استخراج مضامین یا موضوعات از یک سند بزرگ آشنا شدید.
ما چند تکنیک مختلف را پوشش دادیم که می توانید از آنها برای شناسایی موضوع استفاده کنید، از جمله تکنیک های ساده مانند BoW و تکنیک های پیشرفته تر مانند LDA و NMF.
یادگیری مبارک، و شما را در دوره بعدی می بینم.
ارسال نظر