
7 نکته مهندسی ویژگی برای داده های متنی
تصویر توسط ناشر
مقدمه
تعداد فزایندهای از هوش مصنوعی و سیستمهای مبتنی بر یادگیری ماشینی به یکدیگر نیرو میدهند داده های متنی – امروزه مدلهای زبان نمونهای قابل توجه هستند. با این حال، توجه به این نکته ضروری است که ماشینها واقعاً زبان را درک نمیکنند، بلکه اعداد را درک میکنند. به عبارت دیگر: برخی مهندسی ویژگی معمولاً برای تبدیل دادههای متن خام به ویژگیهای دادههای عددی مفید که این سیستمها میتوانند هضم کرده و برای استنتاج از آن استفاده کنند، مراحلی لازم است.
این مقاله هفت نکته آسان برای اجرای مهندسی ویژگی بر روی داده های متنی را ارائه می دهد. بسته به پیچیدگی و الزامات مدل خاص برای تغذیه داده های خود، ممکن است به مجموعه ای کم و بیش جاه طلبانه از این نکات نیاز داشته باشید.
- اعداد 1 تا 5 معمولاً برای یادگیری ماشینی کلاسیک که با متن سروکار دارد، از جمله مدل های مبتنی بر درخت تصمیمبه عنوان مثال.
- شماره 6 و 7 برای مدلهای یادگیری عمیق مانند شبکههای عصبی بازگشتی و ترانسفورماتورها ضروری هستند، اگرچه شماره 2 (ساقه و ریشهبندی) ممکن است هنوز برای بهبود عملکرد این مدلها ضروری باشد.
1. کلمات توقف را حذف کنید
حذف کلمات توقف به کاهش ابعاد کمک می کند: چیزی ضروری برای برخی از مدل ها که ممکن است از به اصطلاح نفرین ابعاد رنج ببرند. کلمات رایجی که ممکن است در درجه اول به داده های شما نویز بیافزایند، مانند مقالات، حروف اضافه و افعال کمکی، حذف می شوند و فقط آنهایی که معنای ضروری متن مبدأ را منتقل می کنند، حفظ می شوند.
در اینجا نحوه انجام آن در چند خط کد آورده شده است (به سادگی می توانید جایگزین کنید words با فهرستی از متون که به کلمات انتخابی شما تقسیم شده است). استفاده خواهیم کرد NLTK برای لیست کلمات توقف در انگلیسی:
import nltk nltk.download(‘stopwords’) from nltk.corpus import stopwords = [“this”,”is”,”a”,”crane”, “with”, “black”, “feathers”, “on”, “its”, “head”]stop_set = set(stopwords.words(‘english’)) فیلتر شده = [w for w in words if w.lower() not in stop_set]چاپ (فیلتر شده)
واردات nltk nltk.دانلود کنید(“کلمات خالی”) از آنجایی که nltk.بدنه واردات کلمات خالی کلمات = [“this”,“is”,“a”,“crane”, “with”, “black”, “feathers”, “on”, “its”, “head”] stop_set = با هم(کلمات خالی.کلمات(‘انگلیسی’)) فیلتر شده = [w for w in words if w.lower() not in stop_set] چاپ کنید(فیلتر شده) |
2. ریشه یابی و ریشه یابی
کاهش کلمات به شکل ریشه آنها می تواند به ادغام تغییرات (به عنوان مثال، زمان های مختلف یک فعل) در یک ویژگی یکپارچه کمک کند. در مدلهای یادگیری عمیق مبتنی بر جاسازی متن، جنبههای مورفولوژیکی معمولاً ثبت میشوند، بنابراین این مرحله به ندرت ضروری است. با این حال، زمانی که دادههای موجود بسیار محدود است، همچنان میتواند مفید باشد، زیرا پراکندگی را کاهش میدهد و مدل را به تمرکز بر معنای اصلی کلمات به جای شبیهسازی بازنماییهای اضافی سوق میدهد.
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem(“running”))
از آنجایی که nltk.ساقه واردات پورتر استمر دستمر = پورتر استمر() چاپ کنید(دستمر.ساقه(“دویدن”)) |
3. بردارهای مبتنی بر اعداد: کیسه کلمات
یکی از سادهترین رویکردها برای تبدیل متن به ویژگیهای دیجیتال در یادگیری ماشینی کلاسیک، رویکرد کیسه کلمات است. بسادگی فرکانس کلمه را در بردارها رمزگذاری می کند. نتیجه یک آرایه دو بعدی از تعداد کلمات است که ویژگیهای اساسی ساده را توصیف میکند: چیزی مفید برای ثبت حضور و ارتباط کلی کلمات در اسناد، اما محدود است زیرا نمیتواند جنبههای مهم برای درک زبان مانند ترتیب کلمات، بافت یا روابط معنایی را به تصویر بکشد.
با این وجود، به عنوان مثال، این می تواند یک رویکرد ساده اما موثر برای مدل های طبقه بندی متن نه چندان پیچیده باشد. با استفاده از scikit-یادگیری:
از sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() print(cv.fit_transform([“dog bites man”, “man bites dog”, “crane astonishes man”]).toarray())
از آنجایی که یاد بگیرند.ویژگی_استخراج.متن واردات AccountVetorizer رزومه = AccountVetorizer() چاپ کنید(رزومه.تناسب_تغییر([“dog bites man”, “man bites dog”, “crane astonishes man”]).نقاشی()) |
4. استخراج ویژگی TF-IDF
فرکانس اصطلاح – فرکانس معکوس سند (TF-IDF) مدتهاست که یکی از رویکردهای اساسی برای پردازش زبان طبیعی بوده است. این فراتر از کیسه کلمات است و فراوانی کلمات و ارتباط کلی را نه تنها در سطح تک متن (سند)، بلکه در سطح مجموعه داده ها نیز در نظر می گیرد. به عنوان مثال، در یک مجموعه داده متنی که شامل 200 قطعه متن یا سند است، کلماتی که اغلب در یک زیرمجموعه خاص محدود از متون ظاهر می شوند، اما به طور کلی در تعداد کمی از 200 متن موجود ظاهر می شوند، بسیار مرتبط در نظر گرفته می شوند: این ایده پشت فرکانس معکوس است. در نتیجه به کلمات منحصر به فرد و مهم وزن بیشتری داده می شود.
با اعمال آن در مجموعه داده کوچک زیر که شامل سه متن است، به هر کلمه در هر متن وزن اهمیت TF-IDF بین 0 و 1 اختصاص داده می شود:
از sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer() print(tfidf.fit_transform([“dog bites man”, “man bites dog”, “crane astonishes man”]).toarray())
از آنجایی که یاد بگیرند.ویژگی_استخراج.متن واردات TfidfVetorizer tfidf = TfidfVetorizer() چاپ کنید(tfidf.تناسب_تغییر([“dog bites man”, “man bites dog”, “crane astonishes man”]).نقاشی()) |
5. N-گرام مبتنی بر عبارت
n-gram های مبتنی بر عبارت کمک می کنند تا تعامل بین کلمات، به عنوان مثال “new” و “york” به تصویر کشیده شود. با استفاده از CountVectorizer کلاس از scikit-یادگیریما میتوانیم با تعریف کردن، معناشناسی را در سطح جمله به دست آوریم ngram_range پارامتر برای جاسازی توالی چند کلمه به عنوان مثال، آن را تنظیم کنید (1,2) ویژگی های مرتبط با هر دو کلمه واحد (unigrams) و ترکیبی از دو کلمه متوالی (bigrams) ایجاد می کند.
از sklearn.feature_extraction.text import CountVetorizer cv = CountVetorizer(ngram_range=(1,2)) print(cv.fit_transform([“new york is big”, “tokyo is even bigger”]).toarray())
از آنجایی که یاد بگیرند.ویژگی_استخراج.متن واردات AccountVetorizer رزومه = AccountVetorizer(ngram_range=(1،2)) چاپ کنید(رزومه.تناسب_تغییر([“new york is big”, “tokyo is even bigger”]).نقاشی()) |
6. تمیز کردن و نشانه گذاری
اگرچه الگوریتم های توکن سازی تخصصی زیادی در کتابخانه های پایتون وجود دارد ترانسفورماتورهارویکرد اصلی آنها حذف علائم نگارشی، حروف بزرگ و سایر نمادهایی است که مدلهای پایین دستی ممکن است درک نکنند. یک خط لوله پاکسازی و نشانه گذاری ساده می تواند شامل تقسیم متن به کلمات، حروف کوچک و حذف علائم نگارشی یا سایر کاراکترهای خاص باشد. نتیجه لیستی از واحدهای کلمه یا نشانه های تمیز و نرمال شده است.
THE re از کتابخانه مدیریت عبارات منظم می توان برای ایجاد یک توکنایزر ساده مانند زیر استفاده کرد:
import re text = “سلام دنیا!!!” توکن ها = re.findall(r’\b\w+\b’, text.lower()) print(tokens)
واردات مربوط به متن = “سلام دنیا!!!” توکن ها = مربوط به.همه چیز را پیدا کن(r‘\b\w+\b’، متن.پایین تر()) چاپ کنید(توکن ها) |
7. ویژگی های متراکم: جاسازی کلمه
در نهایت، یکی از برجسته ترین و قدرتمندترین رویکردهای امروزی برای تبدیل متن به اطلاعات قابل خواندن توسط ماشین: جاسازی کلمه. آنها در گرفتن معناشناسی، مانند کلماتی با معانی مشابه، مانند “shogun” و “samurai”، یا “aikido” و “jiujitsu” که به عنوان بردارهای عددی مشابه (جاسازیها) کدگذاری میشوند، عالی هستند. اساساً، کلمات با استفاده از رویکردهای از پیش تعریف شده مانند Word2Vec یا در فضای برداری نگاشت می شوند SpaCy:
import space # از یک مدل spaCy با بردارها (به عنوان مثال “en_core_web_md”) استفاده کنید[:5]) # ما فقط چند بعد از وکتور جاسازی متراکم را چاپ می کنیم
واردات فضا # از یک الگوی spaCy با بردار استفاده کنید (به عنوان مثال “en_core_web_md”) NLP = فضا.بار(“en_core_web_md”) ith = NLP(“سگ”).بردار چاپ کنید(ith[:5]) # ما فقط چند بعد از وکتور جاسازی متراکم را چاپ می کنیم |
ابعاد خروجی بردار جاسازی که هر کلمه به آن تبدیل می شود توسط الگوریتم جاسازی خاص و مدل مورد استفاده تعیین می شود.
نتیجه گیری
این مقاله هفت نکته مفید برای درک دادههای متن خام هنگام استفاده از آن برای یادگیری ماشینی و مدلهای یادگیری عمیق که وظایف پردازش زبان طبیعی مانند طبقهبندی و خلاصهسازی متن را انجام میدهند، ارائه میکند.
