در یادگیری ماشین چیزی که برای دستیابی به عملکرد قوی مدل بسیار مهم است، داشتن مقدار زیادی داده است. با استفاده از روشی به نام داده افزایی ( data augmentation )، میتوانید دادههای بیشتری را برای پروژه یادگیری ماشین خود ایجاد کنید. Data Augmentation مجموعهای از تکنیکها است که فرآیند تولید خودکار دادههای با کیفیت را بر روی دادههای موجود مدیریت میکند.
در برنامههای computer vision ، رویکردهای تقویتی رایج هستند. برای مثال، اگر روی یک پروژه computer vision کار میکنید (مثلاً Image classification )، میتوانید دهها نوع تکنیک را برای هر تصویر اعمال کنید. از جمله shift ، modify ، color intensities ، scale ، rotate ، crop و غیره.
اگر مجموعه داده کوچکی برای پروژه ML خود دارید یا میخواهید overfitting را در مدلهای یادگیری ماشین خود کاهش دهید، توصیه میشود از روشهای داده افزایی استفاده کنید.
ما الگوریتمهای بهتری نداریم. ما فقط دادههای بیشتری داریم. پیتر نورویگ (نقل قول)
در زمینه پردازش زبان طبیعی ( NLP )، سطح پیچیدگی فوقالعادهای که زبان دارد، تقویت متن را دشوار میکند. فرآیند افزایش دادههای متنی چالشبرانگیز است و آنطور که برخی انتظار دارند، ساده نیست.
در این مقاله، نحوه استفاده از کتابخانهای به نام TextAttack به منظور بهبود دادهها برای پردازش زبان طبیعی را خواهید آموخت.
TextAttack چیست؟
TextAttack یک فریمورک پایتون است که با هدف انجام حملات conducting adversarial ، آموزش adversarial و داده افزایی در پردازش زبان طبیعی ساخته شده است. TextAttack دارای مؤلفههایی است که میتوانند به طور مستقل برای انواع وظایف اصلی پردازش زبان طبیعی، از جمله رمزنگاری جملات، بررسی دستور زبان و جایگزینی کلمه مورد استفاده قرار بگیرند.
TextAttack در انجام سه عملکرد زیر برتری دارد:
- حملات Adversarial (Python: textattack.Attack, Bash: textattack attack )
- داده افزایی (Python: textattack.augmentation.Augmenter, Bash: textattack augment )
- آموزش مدل (Python: textattack.Trainer, Bash: textattack train )
نکته: در این مقاله، ما بر نحوه استفاده از کتابخانه TextAttack برای داده افزایی تمرکز خواهیم کرد.
نحوه نصب TextAttack
برای استفاده از این کتابخانه، مطمئن شوید که پایتون 3.6 یا بالاتر را در محیط خود نصب دارید.
برای نصب TextAttack دستور زیر را اجرا کنید:
pip install textattack
نکته: پس از نصب TextAttack ، میتوانید آن را از طریق ماژول پایتون یا از طریق command-line اجرا کنید.
تکنیکهای داده افزایی برای دادههای متنی
کتابخانه TextAttack دارای تکنیکهای تقویتی مختلفی است که میتوانید برای اضافه کردن دادههای متنی بیشتر در NLP خود از آنها استفاده کنید. در اینجا برخی از این تکنیکهای قابل اعمال را میبینید:
تکنیک CharSwapAugmenter
با تعویض کاراکترها با کاراکترهای دیگر، کلمات را تقویت میکند.
from textattack.augmentation import CharSwapAugmenter
text = "I have enjoyed watching that movie, it was amazing."
charswap_aug = CharSwapAugmenter()
charswap_aug.augment(text)
[‘I have enjoyed watching that omvie, it was amazing.’]
Augmenter کلمه “movie” را با “omvie” عوض کرده است.
تکنیک DeletionAugmenter
این تکنیک متن را با حذف برخی قسمتهای آن، برای ایجاد متن جدید تقویت میکند.
from textattack.augmentation import DeletionAugmenter
text = "I have enjoyed watching that movie, it was amazing."
deletion_aug = DeletionAugmenter()
deletion_aug.augment(text)
[‘I have watching that, it was amazing.’]
این تکنیک برای ایجاد یک متن Augmente شده جدید، کلمه “enjoyed” را حذف کرده است.
تکنیک EasyDataAugmenter
این تکنیک متن را با ترکیبی از روشهای مختلف تقویت میکند. مانند:
به طور رندوم موقعیت کلمات در جمله را عوض میکند.
به طور رندوم کلمات را از جمله حذف میکند.
به طور رندوم مترادف یک کلمه رندوم را در یک مکان رندوم درج میکند.
به طور رندوم کلمات را با مترادف آنها جایگزین میکند.
from textattack.augmentation import EasyDataAugmenter
text = "I was billed twice for the service and this is the second time it has happened"
eda_aug = EasyDataAugmenter()
eda_aug.augment(text)
[‘I was billed twice for the service and this is the second time it has happen’,
‘I was billed twice for the one service and this is the second time it has happened’,
‘I billed twice for the service and this is the second time it has happened’,
‘I was billed twice for the this and service is the second time it has happened’]
همانطور که از متون افزوده شده مشاهده میکنید، نتایج متفاوتی بر اساس روشهای اعمال شده اتفاق افتاده است. به عنوان مثال در اولین متن تکمیل شده، کلمه آخر از “happened” به “happen” تغییر یافته است.
تکنیک WordNetAugmenter
این تکنیک میتواند متن را با جایگزین کردن آن با مترادفهای اصطلاحنامه WordNet تقویت کند.
from textattack.augmentation import WordNetAugmenter
text = "I was billed twice for the service and this is the second time it has happened"
wordnet_aug = WordNetAugmenter()
wordnet_aug.augment(text)
[‘I was billed twice for the service and this is the second time it has pass’]
این روش برای ایجاد یک متن augment شده جدید، کلمه “happened” را به “pass” تغییر داده است.
Augmenter برنده خود را بسازید
وارد کردن تغییرات و محدودیتها از textattack.transformations و textattack.constraints به شما این امکان را میدهد که augmenter خود را از پایه بسازید. کد زیر نمونهای از استفاده از الگوریتم WordSwapRandomCharacterDeletion برای ایجاد augmentation های یک رشته است:
from textattack.transformations import WordSwapRandomCharacterDeletion
from textattack.transformations import CompositeTransformation
from textattack.augmentation import Augmenter
my_transformation = CompositeTransformation([WordSwapRandomCharacterDeletion()])
augmenter = Augmenter(transformation=my_transformation, transformations_per_example=3)
text = 'Siri became confused when we reused to follow her directions.'
augmenter.augment(text)
[‘Siri became cnfused when we reused to follow her directions.’,
‘Siri became confused when e reused to follow her directions.’,
‘Siri became confused when we reused to follow hr directions.’]
خروجی بعد از اجرای متد WordSwapRandomCharacterDeletion ، متون augment شده مختلفی را نشان میدهد. برای مثال، در اولین متن augment شده، این متد به طور تصادفی یک کاراکتر “o” را در کلمه “confused” حذف میکند.

نتیجهگیری
در این مقاله، اهمیت داده افزایی را برای پروژه یادگیری ماشین خود آموختید. علاوه بر این، شما یاد گرفتید که چگونه با استفاده از کتابخانه TextAttack ، داده افزایی را برای دادههای متنی اجرا کنید.
تا جایی که من میدانم، این تکنیکها مؤثرترین روشهای موجود برای داده افزایی پروژه NLP شما هستند. امیدوارم که در کار نیز برای شما مفید واقع شوند.
همچنین میتوانید از سایر تکنیکهای augmentation موجود در کتابخانه TextAttack ، مانند موارد زیر، استفاده کنید:
EmbeddingAugmenter
CheckListAugmenter
CLAREAugmenter
اگر چیز جدیدی یاد گرفتید یا از خواندن این مقاله لذت بردید، لطفاً آن را به اشتراک بگذارید تا دیگران هم بخوانند. تا بعد!
منبع: HackerNoon نویسنده: دیویس دیوید، دانشمند داده، توسعه دهنده نرمافزار و آموزشدهنده AI
Leave feedback about this