پردازش زبان طبیعی جذاب است! قسمت اول

این مقاله، بر اساس پیاده سازی NLP بر روی متون انگلیسی گرد آوری شده است، از همین رو به جهت این که ساختار جملات انگلیسی و فارسی متفاوت هستند، مثال ها تا حد لزوم به انگلیسی نوشته شده اند.

این مطلب قسمتی از مجموعه پردازش زبان طبیعی است : قسمت اول ، قسمت دوم ، قسمت سوم ، قسمت چهارم

.     .     .

کامپیوتر ها در کار با داده ساختار یافته مانند صفحات گسترده و جدول های پایگاه داده بسیار عالی عمل می کنند. ولی ما انسان ها معمولا با لغات ارتباط برقرار می کنیم، نه با جدول ها. ولی لغات و کلمات برای کامپیوتر ها قابل تشخیص نیستند.

شکسپیر داده های ساختار یافته
متاسفانه ما در دنیایی که همه داده ها در آن ساختار یافته هستند، زندگی نمی کنیم.

بخش زیادی از اطلاعات در این جهان ساختار یافته نیستند ؛ متن خام انگلیسی یا زبان بشری دیگری. چگونه ما می توانیم از یک کامپیوتر برای فهمیدن متن ساختار نیافته و استخراج داده از آن، استفاده کنیم؟

پردازش زبان طبیعی متن انگلیسی

پردازش زبان طبیعی ( Natural Language Processing ) یا NLP زیرمجموعه ای از هوش مصنوعی است که روی توانمند سازی کامپیوتر ها برای متوجه شدن و پردازش زبان بشر، تمرکز کرده است. بیایید بررسی کنیم که NLP چگونه کار می کند و یاد بگیریم چگونه برنامه هایی بنویسیم که بتوانند با استفاده از پایتون اطلاعات را از متن خام استخراج کنند!

توجه: اگر شما به اینکه NLP چگونه کار می کند، اهمیت نمی دهید و فقط بخواهید کدی را کپی پیست کنید، به بخش ” کد نویسی پایپ لاین NLP در پایتون ” بروید.

آیا کامپیوتر می تواند زبان را متوجه شود؟

از زمانی که کامپیوترها روی کار آمده اند، برنامه نویسان در تلاش بوده اند تا برنامه ای بنویسند که زبانی مانند انگلیسی را متوجه شود. دلیل آن بسیار واضح است. هزاران سال است که بشر در حال ثبت کردن اطلاعات است و این کار واقعا مفید و کمک کننده می شد اگر یک کامپیوتر می توانست همه ی آن داده ها را بخواند و متوجه شود.

کامپیوتر ها هنوز نمی توانند به خوبی انسان ها انگلیسی را متوجه شوند ؛ ولی آن ها کارهای زیادی را می توانند انجام دهند! در حوزه های محدود و مشخص، کار هایی که شما می توانید با  NLP انجام دهید، مانند جادو به نظر می رسد. شما می توانید زمان زیادی را اجرا تکنیک های NLP در پروژه هایتان، صرفه جویی کنید.

و حتی بهتر از این، پیشرفت های اخیر NLP به آسانی از طریق کتابخانه های منبع پایتون مانند spaCy و textacy و neuralcoref در  دسترس هستند. کار هایی که شما فقط با چند خط کدنویسی پایتون می توانید انجام دهید، شگفت انگیز است.

استخراج معنا از متن، دشوار است

روند خواندن و متوجه شدن زبان انگلیسی پیچیده است؛ و حتی بدون در نظر گرفتن این که که انگلیسی از قوانین منطقی و ثابت پیروی کند. برای مثال، تیتر این خبر به چه معنی است؟

“Environmental regulators grill business owner over illegal coal fires.”
” قانون گذاران محیط زیست، صاحب کار را با سوخت فسیلی غیرقانونی می سوزاند.”

آیا قانون گذاران از یک صاحب کار راجع به سوزاندن زغال سنگ به طور غیرقانونی بازخواست می کنند؟ یا به طور تحت اللفظی صاحب کار را می سوزانند؟ همان طور که می بینید، تجزیه کردن ( Parsing ) جملات انگلیسی با استفاده از کامپیوتر پیچیده و دشوار می شود.

انجام هر کار پیچیده ای در یادگیری ماشین معمولا به معنی ساخت یک پایپ لاین ( Pipeline ) است. ایده ی این کار این است که مشکل خود را به قسمت های خیلی کوچک تجزیه کنید و بعد، از یادگیری ماشین برای حل هر قسمت کوچک به صورت جداگانه، استفاده کنید. بعد با اتصال تعداد زیادی از مدل های یادگیری ماشین که در درون یکدیگر قرار می گیرند، شما می توانید کارهای بسیار پیچیده ای انجام دهید.

و این دقیقا همان استراتژی است که ما می خواهیم برایNLP  استفاده کنیم. ما روند درک انگلیسی را به تکه های کوچکی تجزیه خواهیم کرد تا ببینیم که هر کدام چگونه عمل می کند.

ساخت یک پایپ لاین NLP به صورت گام به گام

بیایید به قسمتی از یک متن از ویکی پدیا نگاه کنیم:

London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.
لندن پایتخت و پرجمعیت ترین شهر انگلیس و پادشاهی انگلستان می باشد. واقع در روی رود تامس که در جنوب شرقی سرزمین بریتانیا است. لندن یک اقامت گاه بزرگ و اصیل با قدمت دوهزار سال است که توسط رومی ها بنیان گذاری شده است و آن را   لندنیوم نامیده اند.

این پاراگراف شامل حقایق مفیدی است. بسیار عالی می شود اگر یک کامپیوتر بتواند این متن را بخواند و متوجه شود که لندن یک شهر است، لندن در انگلیس قرار گرفته است، لندن توسط رومی ها بنیان گذاری شده است و غیره. ولی برای رسیدن به آن، ما اول باید به کامپیوتر خود، مفاهیم اصلی و اساسی از زبان نوشته شده را بیاموزیم و بعد از آنجا کم کم پیش برویم.

گام ۱ : قطعه بندی جمله

اولین مرحله در پایپ لاین، تجزیه متن به جملات جداگانه است. این کار به ما این نتیجه را می دهد:

  • لندن پایتخت و پرجمعیت ترین شهر انگلیس و پادشاهی انگلستان می باشد.
  • واقع در روی رود تامس که در جنوب شرقی سرزمین بریتانیا است. لندن یک اقامت گاه بزرگ و اصیل با قدمت دوهزار سال است.
  • توسط رومی ها بنیان گذاری شده است و آن را لندنیوم نامیده اند.

می توانیم فرض کنیم که هر جمله در انگلیسی یک فکر یا نظریه جداگانه است. نوشتن یک برنامه برای متوجه شدن یک جمله بسیار آسان تر خواهد بود تا متوجه شدن یک پاراگراف کامل.

کدنویسی یک مدل جمله قطعه بندی شده می تواند به سادگی جداکردن جملات در جایی که شما یک نشانه نگارشی می بینید، باشد. ولی پایپ لاین های NLP مدرن، بیشتر اوقات تکنیک های پیچیده تری استفاده می کنند که حتی زمانی که یک سند به درستی قالب بندی نشده باشد، کار می کند.

گام ۲ : توکنیزاسیون لغت

حالا که ما سند خود را به جملاتی تجزیه کرده ایم، می توانیم هر یک از آن ها را در یک زمان پردازش کنیم، بیایید با اولین جمله از سند خود شروع کنیم :

“London is the capital and most populous city of England and the United Kingdom.”

مرحله بعدی در پایپ لاین ما، تجزیه جمله به کلمات یا نشانه های جداگانه می باشد. این کار توکنیزاسیون ( Tokenization ) نام دارد. نتیجه این است:

“London”, “is”, “ the”, “capital”, “and”, “most”, “populous”, “city”, “of”, “England”, “and”, “the”, “United”, “Kingdom”, “.”

توکنیزاسیون برای اجرا در زبان انگلیسی راحت است. ما فقط هر زمان که فضا و فاصله در بین کلمات باشد، آن ها را از هم جدا خواهیم کرد. و از آنجایی که علایم نگارشی هم دارای معنی هستند، با علائم نگارشی هم مانند توکن های جداگانه رفتار خواهیم کرد.

گام ۳ : پیش بینی نقش زبانی هر توکن

در مرحله بعد، ما به هر نشانه نگاه می کنیم و تلاش می کنیم تا نقش زبانی آن را حدس بزنیم، که یک اسم باشد، یک فعل باشد، یک صفت باشد و غیره. دانستن نقش هر کلمه در جمله به ما کمک خواهد کرد تا شروع کنیم به درک آن که جمله درباره چه صبحت می کند.

ما می توانیم این را با قرار دادن هر لغت (و تعدادی لغت اضافه حول  آن برای مشخص کردن مفهوم) در یک مدل کلاسه بندی از پیش آموزش دیده نقش های زبانی، انجام دهیم:

پردازش زبان طبیعی پیشبینی نقش زبانی

مدل نقش های زبانی در ابتدا با گرفتن میلیون ها جمله انگلیسی با نقش زبانی هر کلمه که از قبل علامت گذاری شده و با اجبار به تقلید این کار، آموزش دیده است.

به خاطر داشته باشید که مدل کاملا بر پایه آمار می باشد؛ این مدل واقعا مثل انسان متوجه معنای لغات نمی شود. فقط می داند که چگونه نقش های زبانی را با توجه به جملات مشابه و کلماتی که قبلا دیده است، حدس بزند.

بعد از پردازش کل جمله، ما یک نتیجه مانند این خواهیم داشت:

nlp نقش های زبانی جمله

با این اطلاعات، می توانیم شروع به جمع آوری تعدادی از معانی پایه ای کنیم. برای مثال، ما می توانیم ببینیم که اسم ها در جمله شامل “London” و “capital” است، خب پس جمله احتمالا در مورد لندن صحبت می کند.

گام ۴ : بن واژه سازی متن

در زبان زبان انگلیسی (و بسیاری از زبان ها) ، کلمات در فرم های گوناگونی ظاهر می شوند. به این دو جمله نگاه کنید:

I had a pony.

I had two ponies.

هر دوی جمله ها در مورد یک اسم یعنی pony صحبت می کنند، ولی آن ها به صورت متفاوتی صرف شده اند. وقتی در حال کار کردن روی یک متن در کامپیوتر هستید، دانستن شکل اولیه هر لغت کمک کننده خواهد بود، در نتیجه شما می دانید که هر دوی جملات در حال صحبت در مورد یک مفهوم یکسان هستند. وگرنه رشته های “pony” و “ponies” برای یک کامپیوتر، دو کلمه کاملا متفاوت به نظر می رسند.

در NLP ما به پیدا کردن این روند بن واژه سازی ( Lemmatization ) می گوییم؛ یعنی متوجه شدن پایه ای ترین مفهوم هر لغت در جمله.

دقیقا همین برای افعال نیز صدق می کند. ما همچنین می توانیم افعال را با پیدا کردن ریشه ای و مفرد آن ها ، بن واژه سازی کنیم. خب  “I had two ponies” می شود “I [have] two [pony].

بن واژه سازی معمولا با داشتن یک جدول مراجعه ای از شکل های اصلی لغات که بر پایه دستور زبان آنها می باشد، انجام می شود و با داشتن بعضی قوانین سنتی برای کنترل لغاتی که هرگز ندیده اید.

 اینجا می بینید که بعد از انجام بن واژه سازی به جمله ، به چه صورت در می آید:

Nlp بن واژه سازی جمله

تنها تغییری که ما ایجاد کردیم، تبدیل “is” به “be” بود.

گام ۵ : تشخیص کلمات توقف

در گام بعد، ما می خواهیم اهمیت هر لغت در جمله را در نظر بگیریم. زبان انگلیسی تعداد زیادی لغات پرکننده دارد که بارها تکرار می شوند مانند “and”و “the” و “a” . به هنگام آمارگیری از متن، این لغات اختلال زیادی ایجاد می کنند  زیرا آن ها به وفور و بار ها بیشتر از کلمات دیگر ظاهر می شوند. بعضی از پایپ لاین های NLP آن ها را به عنوان کلمات توقف نشانه گذاری می کنند ؛ آن ها لغاتی هستند که شما ممکن است بخواهید قبل ازآنکه هر گونه آنالیز آماری انجام دهید، آن ها را فیلتر کنید.

اینجا می بینید با کلمات توقف که بی رنگ شده اند، جمله چگونه به نظر می رسد:

nlp تشخیص کلمات توقف

کلمات توقف معمولا فقط به وسیله یک لیست اختصاصی از کلمات توقف معروف، شناسایی می شوند. ولی هیچ لیست استانداردی از کلمات توقف که برای همه ی کاربرد ها مناسب باشد، وجود ندارد. لیستی از کلمات که نادیده گرفته می شوند، می توانند به مقدار زیادی به برنامه شما بستگی داشته باشند.

به عنوان مثال اگر شما در حال ساخت یک موتور جستجو گروه های راک توسط ماشین هستید، باید مطمئن شوید که کلمه “The” را از قلم نیاندازید. زیرا نه تنها کلمه “The” در اسامی تعداد زیادی از گروه ها ظاهر می‌شود، بلکه یک گروه معروف در سال ۱۹۸۰ وجود داشت که The The نام داشت!

گام ۶ : تجزیه وابستگی

گام بعدی این است که متوجه شویم چگونه همه کلمات در جمله ما به هم بستگی دارند. این کار تجزیه وابستگی نامیده می شوند.

هدف این است که یک درخت درست کنیم که یک کلمه مادر را به هر کلمه ای در جمله نسبت دهد. ریشه این درخت، فعل اصلی جمله خواهد بود.اینجا می بینید که شروع این درخت تجزیه در جمله ما چگونه است:

NLP درخت وابستگی

ولی ما می توانیم یک گام فراتر رویم. علاوه بر شناسایی کلمه مادر هر لغت، ما همچنین می توانیم نوع رابطه که بین آن دو کلمه وجود دارد را پیش بینی کنیم:

NLP درخت وابستگی کامل

این درخت تجزیه به ما نشان می دهد که موضوع جمله اسم “London” است و آن کلمه رابطه ی “be” با “capital” دارد. ما نهایتا چیزهای جالبی خواهیم دانست ؛ لندن یک پایتخت است! و اگر ما درخت تجزیه کامل را برای جمله دنبال می کردیم، ( کامل تر از آنچه که نشان داده شده است)، حتی می توانستیم به این هم پی ببریم که لندن پایتخت پادشاهی انگلستان است.

شبیه به همان حالت که نقش های زبانی را قبل از استفاده از مدل یادگیری ماشین پیش بینی کردیم، تجزیه وابستگی هم با قرار دادن لغات در یک مدل یادگیری ماشین و دریافت نتیجه آن، کار می کند. ولی تجزیه وابستگی لغت، یک امر بسیار پیچیده است و به یک مقاله کامل برای توضیح جزئیات نیاز دارد. اگر شما کنجکاو هستید که چگونه کار می کند، نقطه ی بسیار عالی برای شروع به خواندن، مقاله بسیار خوب ” تجزیه زبان انگلیسی در ۵۰۰ خط کد نویسی پایتون ” از  Matthew Honnibal است.

ولی برخلاف نوشته ای از این نویسنده در سال ۲۰۱۵ که بیان می کند این یک رویکرد استاندارد است، این رویکرد در واقع قدیمی شده است و حتی دیگر توسط همان نویسنده هم استفاده نمی شود. در سال ۲۰۱۶، گوگل یک تجزیه وابستگی جدید منتشر کرد که  Parsey  McParseface نام داشت که با استفاده از یک رویکرد جدید یادگیری عمیق که به سرعت در صنعت نشر پیدا کرد، از معیار های قبلی پیشی گرفت. یک سال بعد، آن ها یک مدل جدید تر که ParseySaurus نام داشت را منتشر کردند که همه چیز را بهبود بخشید. به عبارت دیگر، تکنیک های تجزیه هنوز هم یک بخش فعال از تحقیقات هستند و به طور دائم در حال تغییر و بهتر شدن می باشند.

همچنین مهم است در نظر داشته باشیم که تعداد زیادی از جملات انگلیسی دو پهلو هستند و تجزیه ی آن ها مشکل است. در آن موارد، مدل یک حدس خواهد زد که بر پایه ی این است که نسخه ی تجزیه شده جمله، بیشتر شبیه چه چیزی به نظر می رسد ولی حدس دقیقی نیست و بعضی اوقات مدل به طرز بدی اشتباه خواهد کرد. ولی با گذشت زمان مدل های  NLP ما به راه خود ادامه خواهند داد تا در ترجمه متن به طور محسوسی بهتر شوند.

آیا می خواهید تجزیه وابستگی را در جملات خودتان امتحان کنید؟ اینجا دمو تعاملی فوق العاده ای از تیم spaCy است که می توانید استفاده کنید.

مرحله ۶ ب : پیدا کردن عبارات اسمی

تا کنون، ما با هر لغت در جمله خود مانند یک موجودیت جدا برخورد کردیم. ولی بعضی اوقات منطقی تر به نظر می رسد که کلماتی که نشان دهنده یک نظر یا چیز واحد هستند را گروه بندی کنیم. ما می توانیم از اطلاعات موجود در درخت تجزیه وابستگی برای گروه بندی اتوماتیک کلمات که همگی در مورد یک چیز یکسان صحبت می کنند، استفاده کنیم.

برای مثال، به جای این:

Nlp یافتن عبارات اسمی

ما می توانیم عبارات اسمی را گروه بندی کنیم تا به این صورت در بیاوریم:

nlp جایگزینی عبارات اسمی

انجام دادن یا ندادن این مرحله، به هدف نهایی ما بستگی دارد. ولی بیشتر اوقات یک راه سریع و آسان برای ساده تر کردن جمله است به شرطی که ما نیازی به جزئیات بیشتر در مورد اینکه کدام کلمات صفت هستند، نداشته باشیم و در عوض توجه دقیق تری به نظریات کامل استخراج شده داشته باشیم.

گام ۷ : بازشناسی موجودیت اسمی

حالا که ما قسمت سخت کار را انجام دادیم، نهایتا می توانیم از گرامر کلاس های ابتدایی عبور کنیم و واقعا شروع کنیم به استخراج مفاهیم .

در جمله مان، ما این اسم ها را داریم:

nlp شناسایی موجودیت های اسمی

بعضی از این اسم ها، نشان دهنده چیزهای واقعی در جهان هستند. برای مثال، “London”و “England” و “United Kingdom” نشان دهنده مکان های فیزیکی روی نقشه هستند. خوب می شود که توانایی کشف آن را داشته باشیم! با این اطلاعات، ما می توانیم به صورت خودکار، با استفاده از NLP لیستی از مکان های واقعی جهان که در یک سند مورد اشاره قرار گرفته اند را استخراج کنیم.

هدف بازشناسی موجودیت اسمی ( Named Entity Recognition ) یا  NER کشف و بر چسب گذاری اسامی ای با مفاهیم واقعی در جهان ، می باشد. اینجا می بینید که جمله ما بعد از پردازش هر توکن در مدل برچسب گذاری NER ، به چه شکل در می آید:

nlp تشخیص موجودیت های اسمی

ولی سیستم های NER فقط یک جستجوی ساده در دیکشنری انجام نمی دهند. در عوض، آن ها از این مفهوم که چگونه یک لغت در جمله ظاهر می شود و از یک مدل آماری استفاده می کنند تا مدل نوع اسمی که کلمه نمایش می دهد را حدس بزند. یک سیستم NER خوب، می تواند فرق بین “Brooklyn Decker” که یک فرد است و  “Brooklyn” که یک مکان است را با استفاده سرنخ های مفهومی بگوید.

اینجا تنها بخشی از موضوعاتی که یک سیستم NER معمولی می تواند برچسب گذاری کند را می بینید:

  • اسامی اشخاص
  • اسامی کارخانه ها
  • مکان های جغرافیایی ( هم فیزیکی و هم سیاسی )
  • اسامی محصولات
  • تاریخ ها و زمان ها
  • مقادیرمالی
  • اسامی رویداد ها

 از آنجایی که NER استخراج داده ساختار یافته از متن را بسیار آسان می کند، کاربرد های بی شماری دارد. NER یکی از آسان ترین راه هاست که می توانیم به سرعت یک پایپ لاین  NLPبا ارزش به دست آوریم.

آیا می خواهید بازشناسی موجودیت اسمی را خودتان امتحان کنید؟ یک دمو تعاملی بسیار عالی دیگر از spaCy اینجا وجود دارد.

گام ۸ : تفکیک هم مرجع

در این نقطه، ما از قبل یک بازنمایی مفید از جمله خود داریم. ما نقش زبانی هر کلمه را می دانیم،  اینکه چگونه کلمات به یکدیگر مربوط می شوند و کدام کلمات در مورد موجودیت اسمی حبت می کنند.

اگرچه، ما هنوز یک مشکل بزرگ داریم. زبان انگلیسی پر از ضمیر می باشد؛ کلماتی مانند he و she و it. این ها میانبرهایی هستند که ما به جای نوشتن اسامی، بارها و بارها در هر جمله، از آن ها استفاده می کنیم. بشر می تواند در نظر داشته باشد که این لغات بر اساس متن، نشان دهنده ی چه چیزی هستند. ولی مدل NLP ما نمی داند ضمیر به چه معناست زیرا آن فقط یک جمله را در هر مرتبه بررسی می کند.

بیایید به سومین جمله متن خود نگاه کنیم:

“It was founded by the Romans, who named it Londinium.”

اگر ما این را با پایپ لاین NLP خود تجزیه کنیم، متوجه خواهیم شد که “it” توسط رومی ها بنیان گذاری شده است. ولی اگر بدانیم که “London” توسط رومی ها بنیان گذاری شده است، بسیار مفید تر خواهد بود.

به عنوان یک انسان که این جمله را می خواند، شما به آسانی می توانید متوجه شوید که “it” به معنای “London” است. هدف تفکیک هم مرجع، این است که این نقشه یکسان را با بررسی ضمیرها در طول جمله متوجه شویم. ما می خواهیم متوجه تمامی کلماتی شویم که به یک موجودیت یکسان ارجاع داده می شوند.

اینجا نتیجه ی اجرای تفکیک هم مرجع را روی سند برای کلمه “London” می بینید:

Nlp شناسایی هم مرجع

با اطلاعات هم مرجع که با درخت تجزیه و اطلاعات موجودیت اسمی ترکیب شده باشد، ما باید بتوانیم اطلاعات زیادی از این سند استخراج کنیم!

تفکیک هم مرجع یکی از سخت ترین مراحل برای پیاده سازی در پایپ لاین ها می باشد.

این مرحله حتی از تجزیه جمله هم سخت تر است. پیشرفت های اخیر در یادگیری عمیق، باعث دستیابی به رویکرد های جدید که دقیق تر و صحیح تر هستند، شده است، ولی آن هنوز هم بی نقص نیست. اگر شما می خواهید بدانید که تفکیک هم مرجع چگونه کار می کند، از اینجا شروع کنید.

آیا می خواهید از تفکیک هم مرجع استفاده کنید؟ این دمو فوق العاده تفکیک هم مرجع را در Hugging Face بررسی کنید.

کد نویسی پایپ لاین NLP در پایتون

اینجا یک نمای کلی از پایپ لاین کامل ما می بینید:

نمای کلی پایپ لاین nlp در پایتون
مراحل بسیار زیادی وجود دارد!

توجه: قبل از ادامه، لازم به ذکر است که اشاره کنیم این ها مراحل یک پایپ لاین NLP معمولی هستند، ولی شما می توانید بعضی مراحل را بستگه به اینکه چه کاری می خواهید انجام دهید و کتابخانه NLP شما چگونه پیاده سازی شده است، حذف کنید. برای مثال، بعضی از کتابخانه ها مانند spaCy قطعه بندی جمله را در پایپ لاین جلو تر و با استفاده از نتایج تجزیه وابستگی انجام می دهند.

خب ما چگونه این پایپ لاین را کد نویسی کنیم؟ با تشکر از کتابخانه های شگفت انگیز پایتون مانند spaCy ، این کار قبلا انجام شده است! همه ی مراحل کدنویسی شده اند و آماده ی استفاده می باشند.

اول با فرض این که پایتون ۳ از قبل روی دستگاهتان نصب شده باشد، شما می توانید spaCy را به این صورت نصب کنید:

پس کد اجرای یک پایپ لاین  NLP بر روی قسمتی از متن ، به این صورت است:

اگر شما این کد را اجرا کنید، لیستی از موجودیت های اسمی و انواع موجودیت های کشف شده از متنمان را دریافت خواهید کرد:

London (GPE)
England (GPE)
the United Kingdom (GPE)
the River Thames (FAC)
Great Britain (GPE)
London (GPE)
two millennia (DATE)
Romans (NORP)
Londinium (PERSON)

شما می توانید هر یک از کد های هویتی را اینجا جستجو کنید.

توجه کنید که مدل در مورد کلمه “Londinium” اشتباه می کند و فکر می کند آن اسم یک شخص است نه اسم یک مکان. احتمالا به این خاطر است که هیچ چیز شبیه به آن  در داده آموزشی وجود ندارد و مدل بهترین حدس را زده است. اگر شما در حال تجزیه متنی هستید که اصطلاحات بی مانند یا تخصصی مانند این دارد، بازشناسی موجودیت اسمی اغلب نیاز کمی تنظیم دقیق ( Fine Tune ) مدل دارد.

بیایید با استفاده از نظریه تشخیص هویت ها و بسط دادن آن، یک پالایش کننده داده بسازیم. بگذارید بگویم که شما می خواهید با قوانین امنیتی جدید GDPR موافقت کنید و می فهمید که هزاران سند دارای اطلاعات شخصی قابل شناسایی مانند اسامی افراد در آن ها، دارید. شما وظیفه دارید که همه ی نام ها را از اسناد خود پاک کنید.

مواجه شدن با هزاران سند و تلاش برای حذف کردن دستی اسامی، می تواند سال ها طول بکشد. ولی با NLP  به سرعت باد انجام می شود. اینجا یک پالایش کننده ساده را می بینید که همه ی اسامی که کشف کرده را حذف می کند:

و اگر شما آن را اجرا کنید، خواهید دید که آن همانطور که انتظار داشتید، کار می کند:

In 1950, [REDACTED] published his famous article "Computing Machinery and Intelligence". In 1957, [REDACTED] 
Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.

استخراج حقایق

کاری که شما می توانید با spaCy به تنهایی انجام دهید، شگفت انگیز است. ولی شما همچنین می توانید ازخروجی تجزیه شده spaCy به عنوان ورودی برای الگوریتم های استخراجی داده بسیار پیچیده تر، استفاده کنید. یک کتابخانه پایتون به نام textacy وجود دارد که تعدادی از الگوریتم های استخراج داده رایج را روی spaCy پیاده سازی می کند. این یک نقطه شروع بسیار عالی است.  

یکی از الگوریتم هایی که پیاده سازی می کند، استخراج بیانیه نیمه ساختار یافته نام دارد. ما می توانیم از آن به منظور جستجوی درخت تجزیه برای عبارات ساده در جایی که موضوع “London” و فعل به شکل “be” است، استفاده کنیم. این کار به ما در پیدا کردن حقایقی در مورد لندن کمک می کند.

اینجا می بینید که کد نویسی آن چگونه است:

و اینجا آنچه که چاپ کرده است را مشاهده می کنید:

Here are the things I know about London:
 - the capital and most populous city of England and the United Kingdom.
- a major settlement for two millennia.

شاید آن آنچنان هم تاثیرگذار نباشد. ولی اگر شما همان کد را به جای اجرا در سه مرحله، در کل متن های نوشته شده ویکی پدیا در مورد لندن اجرا کنید، نتیجه بسیار تاثیرگذاری را دریافت خواهید کرد:

Here are the things I know about London:
 - the capital and most populous city of England and the United Kingdom
 - a major settlement for two millennia
 - the world's most populous city from around 1831 to 1925
 - beyond all comparison the largest town in England
 - still very compact
 - the world's largest city from about 1831 to 1925
 - the seat of the Government of the United Kingdom
 - vulnerable to flooding
 - "one of the World's Greenest Cities" with more than 40 percent green space or open water
 - the most populous city and metropolitan area of the European Union and the second most populous in Europe
 - the 19th largest city and the 18th largest metropolitan region in the world
 - Christian, and has a large number of churches, particularly in the City of London
 - also home to sizeable Muslim, Hindu, Sikh, and Jewish communities
 - also home to 42 Hindu temples
 - the world's most expensive office market for the last three years according to world property journal (2015) report
 - one of the pre-eminent financial centres of the world as the most important location for international finance
 - the world top city destination as ranked by TripAdvisor users
 - a major international air transport hub with the busiest city airspace in the world
 - the centre of the National Rail network, with 70 percent of rail journeys starting or ending in London
 - a major global centre of higher education teaching and research and has the largest concentration of higher education institutes in Europe
 - home to designers Vivienne Westwood, Galliano, Stella McCartney, Manolo Blahnik, and Jimmy Choo, among others
 - the setting for many works of literature
 - a major centre for television production, with studios including BBC Television Centre, The Fountain Studios and The London Studios
 - also a centre for urban music
 - the "greenest city" in Europe with 35,000 acres of public parks, woodlands and gardens
 - not the capital of England, as England does not have its own government

حالا همه چیز جذاب می شود! این ها اطلاعات بسیار تاثیرگذاری هستند که ما به صورت خودکار جمع آوری کرده ایم.

برای مزیت بیشتر، نصب کتابخانه neuralcoref را امتحان کنید و نتیجه هم مرجع را به پایپ لاین خود اضافه کنید. از آنجایی که جملاتی که راجع به “it” صحبت می کند را فرا خواهد گرفت نه فقط جملاتی که به طور مستقیم به “London” اشاره کرده اند، استفاده از این کتابخانه به شما حقایق بیشتری را خواهد داد،.

چه کار های دیگری می توانیم انجام دهیم؟

با نگاه به مستندات spaCy و مستندات textacy شما مثال های زیادی را خواهید دید که شامل داده هایی هستند که می توانید با متن تجزیه شده کار کنید. چیزهایی که تا کنون دیده ایم، فقط یک نمونه ساده است.

اینجا یک مثال مفید دیگر را می بینید: تصور کنید که شما در حال ساخت یک وب سایت بودید که به کاربران اجازه می داد تا اطلاعات هر شهر در جهان را با استفاده از اطلاعاتی که ما در مثال قبلی استخراج کردیم، بررسی کند.

اگر شما یک گزینه جستجو در وب سایت داشتید، خوب می شد زیرا مانند گوگل به صورت تمام خودکار جستجوهای رایج را در اختیار شما قرار می داد:

پیشنهادات گوگل برای کلمه london
پیشنهادات گوگل برای کلمه “london”

ولی برای انجام این، ما نیاز به لیستی از نتایج ممکن برای پیشنهاد به کاربر داریم. ما می توانیم از NLP برای تولید سریع این داده ها استفاده کنیم.

اینجا یک راه برای استخراج تکه های اسمی از یک سند که بیشترین اشاره به آن ها شده، وجود دارد:

اگر شما آن را روی متن لندن ویکی پدیا اجرا کنید، یک خروجی مانند این به دست می آورید:

westminster abbey
natural history museum
west end
east end
st paul's cathedral
royal albert hall
london underground
great fire
british museum
london eye
.... etc ....

عمیق تر شدن

این فقط یک نمونه کوچک از آنچه شما می توانید با NLP انجام دهید، بود. در پست های آتی، ما در مورد دیگر کاربرد های NLP مانند کلاسه بندی متن صحبت خواهیم کرد و توضیح خواهیم داد که سیستم هایی مانند Amazon Alexa چگونه سوالات را تجزیه تحلیل می کنند.

ولی تا آنموقع، spaCy را نصب کنید و با آن بازی کنید! و یا اگر شما کاربر پایتون نیستید، و با یک کتابخانه  NLP متفاوت مواجه هستید، همه کار ها به همین شکل پیش می رود.

این مقاله قسمت اول از سری NLP است. برای مشاهده ادامه ی مطلب مقالات ما را دنبال کنید.

در صورت علاقه به این موضوع می توانید پیشنهادات و انتقادات خود را از بخش نظرات با ما به اشتراک بگذارید.

بیشتر بخوانید : 

منبع Medium

درباره‌ی احمدرضا جعفری

همچنین ببینید

انقلاب صنعتی چهارم اقتصاد خودمختار

انقلاب چهارم صنعتی : ظهور اقتصاد خودمختار – قسمت سوم

در قسمت قبل ، به بررسی سه شاخه اصلی انقلاب صنعتی چهارم یعنی اینترنت اشیاء …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *