ব্যাগ অফ ওয়ার্ডসের একটি ভূমিকা এবং কীভাবে এটি এনএলপির জন্য পাইথনে প্রোগ্রাম করা যায়

পিক্সবে থেকে কালো পৃষ্ঠের সাদা এবং কালো স্ক্র্যাবল টাইলস

ব্যাগ অফ ওয়ার্ডস (BOW) হ'ল পাঠ্য নথি থেকে বৈশিষ্ট্য আহরণের একটি পদ্ধতি। এই ফাংশনগুলি মেশিন লার্নিং অ্যালগরিদমগুলি প্রশিক্ষণের জন্য ব্যবহার করা যেতে পারে। সমস্ত অনন্য শব্দের একটি শব্দভাণ্ডার তৈরি করা হয় যা প্রশিক্ষণ সংস্থার সমস্ত নথিতে উপস্থিত হয়।

সহজ কথায়, এটি এমন শব্দের সংকলন যা বিভিন্ন শব্দের সাথে একটি বাক্য উপস্থাপন করে এবং সাধারণত যে ক্রমে প্রদর্শিত হয় সেটিকে উপেক্ষা করে।

BOW এর জন্য একটি বহুল ব্যবহৃত পদ্ধতি:

  1. প্রাকৃতিক ভাষা প্রক্রিয়াজাতকরণ
  2. নথি থেকে তথ্য প্রাপ্তি
  3. নথি শ্রেণিবিন্যাস

উচ্চ স্তরে, এর মধ্যে নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত রয়েছে।

জেনারেটেড ভেক্টরগুলি আপনার মেশিন লার্নিং অ্যালগরিদমে প্রবেশ করতে পারে।

আসুন আমরা কয়েকটি বাক্য গ্রহণ করে এবং তাদের জন্য ভেক্টর তৈরি করে বোঝার উদাহরণ দিয়ে শুরু করি।

নিম্নলিখিত দুটি বাক্য বিবেচনা করুন।

১. "জন চলচ্চিত্র দেখতে পছন্দ করেন। মেরিও চলচ্চিত্র পছন্দ করেন।"
২. "জনও ফুটবলের খেলা দেখতে পছন্দ করে।"

এই দুটি বাক্যও শব্দের সংকলনের সাথে উপস্থাপিত হতে পারে।

1. ["জন", "পছন্দ", "দেখুন", "ছায়াছবি"।, "মেরি", "পছন্দ", "ছায়াছবি", "এছাড়াও"।]
২. ['জন', 'এছাড়াও', 'পছন্দ', 'থেকে', 'দেখুন', 'ফুটবল', 'গেমস']

প্রতিটি বাক্যটির শব্দের একাধিক উপস্থিতিও সরিয়ে দিন এবং প্রতিনিধিত্ব করতে শব্দ গণনাটি ব্যবহার করুন।

1. {"জন": 1, "পছন্দ": 2, "থেকে": 1, "দেখুন": 1, "চলচ্চিত্র": 2, "মেরি": 1, "খুব": 1
2. {"জন": 1, "এছাড়াও": 1, "পছন্দ": 1, "থেকে": 1, "ঘড়ি": 1, "ফুটবল": 1, "গেমস": 1}

এই বাক্যগুলি কোনও নথির অংশ বলে ধরে নেওয়া, আমাদের সম্পূর্ণ নথির জন্য সম্মিলিত শব্দ ফ্রিকোয়েন্সি নীচে দেওয়া হয়েছে। দুটি বাক্যই বিবেচনায় নেওয়া হয়।

John "জন": 2, "পছন্দ": 3, "থেকে": 2, "দেখুন": 2, "চলচ্চিত্র": 2, "মেরি": 1, "খুব": 1, "এছাড়াও": 1, " ফুটবল ": 1," গেমস ": 1}

নথিতে সমস্ত শব্দের উপরের শব্দভান্ডারটি প্রতিটি বাক্যটির জন্য ভেক্টর তৈরি করতে ব্যবহৃত হয় words

ভেক্টরের দৈর্ঘ্য সর্বদা শব্দভান্ডার আকারের সাথে মিলে যায়। এই ক্ষেত্রে, ভেক্টরের দৈর্ঘ্য 11।

কোনও ভেক্টরে আমাদের মূল বাক্য উপস্থাপন করতে, প্রতিটি ভেক্টরকে সমস্ত শূন্য দিয়ে শুরু করা হয় - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

এটি আমাদের শব্দভাণ্ডারের প্রতিটি শব্দের সাথে পুনরাবৃত্তি এবং তুলনা এবং বাক্যটিতে যদি শব্দটি থাকে তবে ভেক্টরের মান বাড়িয়ে তোলে।

জন চলচ্চিত্র দেখতে পছন্দ করেন। মেরিও ফিল্ম পছন্দ করেন। [1, 2, 1, 1, 2, 1, 1, 0, 0, 0]
জনও সকারের খেলা পছন্দ করে। [1, 1, 1, 1, 0, 0, 0, 1, 1, 1]

উদাহরণ: বাক্য 1-এ, "পছন্দগুলি" শব্দটি দ্বিতীয় স্থানে রয়েছে এবং দু'বার প্রদর্শিত হবে। সুতরাং 1 বাক্যটির জন্য আমাদের ভেক্টরের দ্বিতীয় উপাদানটি 2 হবে: [1, 2, 1, 1, 2, 1, 1, 0, 0, 0]

ভেক্টর সর্বদা আমাদের শব্দভাণ্ডারের আকারের সাথে সমানুপাতিক।

একটি বৃহত নথি যাতে উত্পন্ন শব্দভাণ্ডার খুব বড় হয় তার ফলস্বরূপ অনেকগুলি 0 মান সহ ভেক্টর আসতে পারে। একে স্পার্স ভেক্টর বলা হয়। মডেলিংয়ের সময় স্পার্স ভেক্টরগুলিকে আরও মেমরি এবং কম্পিউটিং সংস্থান প্রয়োজন। প্রচুর সংখ্যা বা মাত্রা মডেলিং প্রক্রিয়াটি প্রচলিত অ্যালগরিদমের জন্য অত্যন্ত চ্যালেঞ্জযুক্ত করে তুলতে পারে।

আমাদের BOW অ্যালগরিদম কোডিং

আমাদের কোডের ইনপুটটিতে বেশ কয়েকটি বাক্য এবং ভেক্টরগুলির আউটপুট থাকে।

ইনপুট অ্যারেটি নিম্নরূপ:

["জো ট্রেনের জন্য অপেক্ষা করছিল," "ট্রেনটি দেরী হয়েছিল," "মেরি এবং সামান্থা বাসে উঠলেন,"
"আমি বাস স্টেশনে মেরি এবং সামান্থার সন্ধান করছিলাম",
"মেরি এবং সামান্থা বাস স্টেশনে তাড়াতাড়ি পৌঁছেছিল, তবে দুপুর পর্যন্ত বাসের জন্য অপেক্ষা করেছিল"]

পদক্ষেপ 1: একটি বাক্য টোকেন

প্রথমে আমরা বাক্যগুলি থেকে স্টপ শব্দগুলি সরিয়ে ফেলি।

স্টপ শব্দগুলি এমন শব্দ যা যার অর্থ আমাদের অ্যালগরিদম ব্যতীত অপর্যাপ্ত। আমরা চাই না যে এই শব্দগুলি আমাদের ডাটাবেসে স্থান নেবে বা মূল্যবান প্রসেসিং সময় নেয়। এই কারণে, আপনি স্টপ শব্দের বিবেচনা করে এমন শব্দের একটি তালিকা সংরক্ষণ করে আমরা এগুলি সহজেই সরাতে পারি।

টোকেনাইজেশন হ'ল শব্দ, কীওয়ার্ড, বাক্যাংশ, চিহ্ন এবং টোকেন নামক অন্যান্য উপাদানগুলির মতো অংশগুলিতে স্ট্রিংয়ের ক্রমকে ভেঙে ফেলা। টোকেনগুলি একক শব্দ, বাক্যাংশ বা সম্পূর্ণ বাক্য হতে পারে। বিরাম চিহ্ন হিসাবে কিছু অক্ষর টোকেনাইজেশন সময় বাতিল করা হয়।

Def word_extration (বাক্য): উপেক্ষা = ['a', "the", "হয়"] শব্দ = পুনরায় ("[^ \ ডাব্লু]]", "", বাক্য) .স্প্লিট () ধোয়া_পাঠ্য = [w.lower () for W কথায় যদি w উপেক্ষা করা হয় না] পরিষ্কার করা পাঠ্য ফেরত দেয়

স্টপ শব্দের আরও দৃ implementation় প্রয়োগের জন্য আপনি পাইথন এনল্টক গ্রন্থাগারটি ব্যবহার করতে পারেন। ভাষা প্রতি বহু সংখ্যক পূর্বনির্ধারিত শব্দ রয়েছে। এখানে একটি উদাহরণ:

Nltk.corpus সেট (স্টপওয়ার্ডস.ওয়ার্ডস ('ইংরাজী')) থেকে এনল্টিকে আমদানি থামানোর শব্দগুলি আমদানি করুন

পদক্ষেপ 2: সমস্ত সেটে টোকনাইজেশন প্রয়োগ করুন

ডিফ টোকেনাইজ (বাক্য): শব্দসমূহ = [] বাক্য বাক্যটির জন্য: ডাব্লু = উদ্ধৃতাংশ (বাক্য) শব্দ। এক্সটেন্ড (ডাব্লু) শব্দগুলি = সাজানো (তালিকা (সেট (শব্দ))) ফেরতের শব্দ

পদ্ধতিটি সমস্ত বাক্যে পুনরাবৃত্তি করে এবং নিষ্কাশিত শব্দটিকে একটি অ্যারেতে সন্নিবেশ করায়।

এই পদ্ধতির ফলাফল:

['এবং', 'এসেছিল', 'তে', 'বাস', 'তবে', 'তাড়াতাড়ি', 'জন্য', 'আমি', 'জো', 'দেরি', 'দেখেছি', 'মেরি', ' দুপুর "," সামন্ত "," স্টেশন "," দ "," নিয়েছিল "," ট্রেন "," অবধি "," অপেক্ষা "," ছিল "]

পদক্ষেপ 3: শব্দভাণ্ডার তৈরি করুন এবং ভেক্টর তৈরি করুন

ডকুমেন্ট ভোকাবুলারি তৈরি করতে এবং বাক্যগুলি থেকে শব্দগুলি বের করতে 1 এবং 2 পদক্ষেপে বর্ণিত পদ্ধতিগুলি ব্যবহার করুন।

Def জেনারেট_বো (allsentences): ভোকাব = টোকেনাইজ (allsentences) মুদ্রণ ("নথির জন্য শব্দ তালিকা \ n {0} \ n"। ফর্ম্যাট (ভোকাব));
সকল বাক্যে বাক্যটির জন্য: শব্দসমূহ = উদ্ধৃতি (বাক্য) ব্যাগ_ভেক্টর = numpy.zeros (লেন (ভোকাব)) এর জন্য ডাব্লু শব্দ: যেমন আমি, শব্দে গণনা (শব্দভাণ্ডার): যদি শব্দ == ডাব্লু: ব্যাগ_ভেক্টর [i] + = 1 মুদ্রণ ("{0} \ n {1} \ n"। ফর্ম্যাট (রেকর্ড, numpy.array (ব্যাগ_ভেক্টর))

আমাদের কোডটির নির্ধারিত এন্ট্রি এবং কার্যকরকরণ এখানে দেওয়া হয়েছে:

allsentences = ["জো ট্রেনের জন্য অপেক্ষা করছিল", "ট্রেনটি অনেক দেরিতে হয়েছিল", "মেরি এবং সামান্থা বাসটি নিয়েছিল",
"আমি বাস স্টেশনে মেরি এবং সামান্থার সন্ধান করছিলাম",
"মেরি এবং সামান্থা বাস স্টেশনে তাড়াতাড়ি পৌঁছেছিল, তবে দুপুর পর্যন্ত বাসের জন্য অপেক্ষা করেছিল"]
জেনারেট_বো (allsentences)

প্রতিটি সেটের আউটপুট ভেক্টরগুলি হ'ল:

সংস্করণ:
জো ট্রেনের জন্য অপেক্ষা করছিল [0। 0. 0. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 0. 2. 2. 0. 0. 0.]
ট্রেনটি দেরিতে ছিল [0। 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1]
মেরি এবং সামান্থা বাসে উঠলেন [1। 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.
আমি বাস স্টেশনে মেরি এবং সামান্থার সন্ধান করছিলাম [১। 0. 1. 1. 0. 0. 1. 1. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. 0.]]
মেরি এবং সামান্থা বাস স্টেশনে তাড়াতাড়ি পৌঁছেছিল, তবে দুপুর পর্যন্ত বাসের জন্য অপেক্ষা করেছিল [1। 1. ১. ২. ১. ১. 0. ০. 0. ০. ১. ১. ১. 0. ০. ১. ১. 0.]

আপনি দেখতে পাচ্ছেন, প্রতিটি বাক্যটি আমাদের পদক্ষেপ 1-এ তৈরি করা শব্দের সাথে তুলনা করা হয়েছিল। তুলনার ভিত্তিতে, ভেক্টর উপাদানটির মান বাড়ানো যেতে পারে। এই ভেক্টরগুলি ডকুমেন্টের শ্রেণিবদ্ধকরণ এবং পূর্বাভাসের জন্য এমএল অ্যালগরিদমে ব্যবহার করা যেতে পারে।

আমরা আমাদের কোড লিখেছি এবং ভেক্টর তৈরি করেছি, তবে এখন আমরা ভোকাবুলারিটি আরও ভালভাবে বুঝতে চাই।

শব্দ সংগ্রহের অন্তর্দৃষ্টি

BOW মডেলটি কেবলমাত্র ডকুমেন্টে কোনও পরিচিত শব্দটি উপস্থিত হয় কিনা তা বিবেচনায় নেয়। এটি যে অর্থ, প্রসঙ্গ এবং ক্রম হিসাবে উপস্থিত হয় সেগুলি সম্পর্কে নয়।

এটি অন্তর্দৃষ্টি দেয় যে অনুরূপ নথিতে একে অপরের সাথে সাদৃশ্যযুক্ত শব্দ সংখ্যা রয়েছে। অন্য কথায়, দুটি ডকুমেন্টের শব্দের সাথে যত বেশি মিল রয়েছে, তত বেশি নথির অনুরূপ হতে পারে।

BOW সীমাবদ্ধতা

  1. শব্দার্থ অর্থ: মৌলিক BOW পদ্ধতির নথিতে শব্দের অর্থ বিবেচনা করে না। এটি যে প্রসঙ্গে ব্যবহৃত হয় তা সম্পূর্ণ উপেক্ষা করা হয়। প্রসঙ্গ বা কাছের শব্দের উপর ভিত্তি করে একই শব্দটি একাধিক জায়গায় ব্যবহার করা যেতে পারে।
  2. ভেক্টর আকার: একটি বড় নথির জন্য, ভেক্টরের আকার খুব বড় হতে পারে, যা প্রচুর পরিমাণে কম্পিউটিং সময় এবং প্রচেষ্টা গ্রহণ করে। আপনার ব্যবহারের ক্ষেত্রে প্রাসঙ্গিক শব্দগুলি উপেক্ষা করার দরকার হতে পারে।

এটি BOW পদ্ধতিটির একটি সামান্য ভূমিকা ছিল। কোডটি দেখায় যে এটি কীভাবে নিম্ন স্তরে কাজ করে। BOW সম্পর্কে আরও অনেক কিছু বোঝার আছে। উদাহরণস্বরূপ, আমাদের বাক্যটিকে একক শব্দের (1 গ্রাম) বিভক্ত করার পরিবর্তে আপনি দুটি শব্দ (2 গ্রাম বা 2 গ্রাম) বিভক্ত করতে পারেন। কখনও কখনও দুটি গ্রামের উপস্থাপনা এক গ্রামের তুলনায় অনেক ভাল বলে মনে হয়। এগুলি প্রায়শই এন-গ্রাম স্বরলিপিতে প্রতিনিধিত্ব করা যেতে পারে। জ্ঞান আরও গভীর করতে আমি রিসোর্স বিভাগে কিছু গবেষণা করেছি done

আপনার যখন প্রয়োজন হয় তখন আপনাকে সর্বদা BOW কোড করতে হবে না। এটি ইতিমধ্যে শিখুন বিজ্ঞান-কিটটিতে কাউন্টভেক্টরাইজারের মতো অনেক উপলভ্য ফ্রেমওয়ার্কের অংশ।

আমাদের আগের কোড দ্বারা প্রতিস্থাপন করা যেতে পারে:

sklearn.feature_extration.text ভেক্টরাইজার = কাউন্টভেেক্টরাইজার () এক্স = ভেক্টরাইজার.ফিট_ট্রান্সফর্ম (allsentences) মুদ্রণ (X.toarray ()) থেকে কাউন্টভেক্টরাইজার আমদানি করুন

ফ্রেমওয়ার্কগুলিতে লাইব্রেরিগুলি কীভাবে কাজ করে এবং এর পিছনে কী পদ্ধতি রয়েছে তা বোঝা সর্বদা ভাল। আপনি ধারণাগুলি যত ভাল বুঝতে পারবেন তত ভাল আপনি ফ্রেমওয়ার্ক ব্যবহার করতে পারবেন।

নিবন্ধটি পড়ার জন্য আপনাকে ধন্যবাদ। প্রদর্শিত কোডটি আমার গিটহাবটিতে উপলভ্য।

আপনি মিডিয়াম, টুইটার এবং লিংকডইনে আমাকে অনুসরণ করতে পারেন। আপনার যদি কোনও প্রশ্ন থাকে তবে আপনি আমার সাথে ইমেলের মাধ্যমে যোগাযোগ করতে পারেন (praveend806 [at] gmail [dot] com)।

শব্দভান্ডার সম্পর্কে আরও পড়ার সংস্থানগুলি

  1. উইকিপিডিয়া-ধনুক
  2. ব্যাগ-অফ-শব্দের মডেল বোঝা: একটি পরিসংখ্যান কাঠামো
  3. অর্থপূর্ণ ওয়ার্ডব্যাগ মডেল এবং অ্যাপ্লিকেশন

আরো দেখুন

বিমানের ক্যারিয়ারটি তার সমস্ত যোদ্ধাকে বাতাসে আনতে কতক্ষণ সময় নেয়? একটি ডোমেইন সন্ধান এবং এক বছরের জন্য একটি ওয়ার্ডপ্রেস সাইট রাখতে কত খরচ হয়? কীভাবে গণ্য করতে হবেপ্রগ্রেসিভ ওয়েব অ্যাপ্লিকেশন বিকাশ করা কতটা ভাল? ট্যাবলেট মোড উইন্ডোজ 8 বন্ধ কিভাবেবিপণন সংস্থাগুলি নিজেকে বিক্রি এবং আরও ক্লায়েন্ট পেতে ভাল বলে মনে হচ্ছে। তবে আমার ব্যবসা (টেনিকল) কীভাবে এমন একটি সংস্থা খুঁজে পাবে যা সুসংগত, শুরু করার জন্য সাশ্রয়ী এবং স্কেল করতে পারে?আমি কীভাবে নিজের ডিজিটাল মেনু বোর্ড তৈরি করব? আমি একজন ওয়েব বিকাশকারী। আমি কীভাবে ক্লায়েন্টদের জন্য কাজ না করে অর্থ উপার্জন করতে পারি?