পাঠ্য শ্রেণিবদ্ধকরণের কার্যগুলিতে আর স্কেল কতটা ভাল হয়? [বন্ধ]


30

আমি আর এর সাথে গতি অর্জনের চেষ্টা করছি eventually আমি শেষ পর্যন্ত পাঠ্য শ্রেণিবদ্ধকরণের জন্য আর লাইব্রেরিটি ব্যবহার করতে চাই। আমি যখন কেবল পাঠ্য শ্রেণিবদ্ধকরণ করার কথা বলি তখন আর এর স্কেল্যাবিলিটি সম্পর্কিত লোকদের অভিজ্ঞতাগুলি কী তা আমি ভাবছিলাম।

আমি উচ্চ মাত্রিক ডেটা (k 300k মাত্রা) চালানোর সম্ভবত। আমি বিশেষত শ্রেণিবদ্ধকরণ অ্যালগরিদম হিসাবে এসভিএম এবং র‌্যান্ডম ফরেস্ট ব্যবহার করে দেখছি।

আমার গ্রন্থাগারগুলি কি আমার সমস্যার আকারে স্কেল করবে?

ধন্যবাদ।

সম্পাদনা 1: কেবলমাত্র স্পষ্ট করার জন্য, আমার ডেটা সেটে 1000-3000 সারি (সম্ভবত কিছুটা আরও) এবং 10 ক্লাসের সম্ভাবনা রয়েছে।

সম্পাদনা 2: যেহেতু আমি আরে খুব নতুন, আমি পোস্টারগুলিকে যেখানে সম্ভব সেখানে আরও সুনির্দিষ্ট হওয়ার জন্য অনুরোধ করব। উদাহরণস্বরূপ, আপনি যদি কোনও ওয়ার্কফ্লো / পাইপলাইনের পরামর্শ দিচ্ছেন, দয়া করে যদি সম্ভব হয় তবে প্রতিটি পদক্ষেপের সাথে জড়িত আর গ্রন্থাগারগুলি উল্লেখ করার বিষয়ে নিশ্চিত হন। কিছু অতিরিক্ত পয়েন্টার (উদাহরণস্বরূপ, নমুনা কোড ইত্যাদি) কেকের সাথে আইসিং দিবে।

সম্পাদনা 3: প্রথমে, আপনার মন্তব্যের জন্য সবাইকে ধন্যবাদ। এবং দ্বিতীয়ত, আমি ক্ষমাপ্রার্থী, সম্ভবত আমার সমস্যার আরও প্রসঙ্গ দেওয়া উচিত ছিল। আমি আর এ নতুন কিন্তু পাঠ্য শ্রেণিবিন্যাসে তেমন কিছু নই। আমি ইতিমধ্যে টিএম ব্যবহার করে আমার ডেটার কিছু অংশে প্রাক-প্রসেসিং (স্টেমিং, স্টপওয়ার্ড অপসারণ, টিএফ-আইডিএফ রূপান্তর ইত্যাদি) করেছি প্যাকেজপ্রায় 200 ডক্সে টি এম এমনকি এত ধীর ছিল যে আমি স্কেলেবিলিটি সম্পর্কে উদ্বিগ্ন হয়েছি। তারপরে আমি এফ-সিলেক্টরের সাথে খেলতে শুরু করেছি এবং এটি আসলেই ধীর ছিল। এবং এটাই যে আমি আমার ওপি তৈরি করেছি।

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


1
কত সারি দিয়ে 300k মাত্রা? দুর্ভাগ্যক্রমে, আর অবজেক্টগুলি অবশ্যই মেমরির মধ্যে থাকতে হবে (কমপক্ষে আপনি যদি প্রধান টুইটগুলি বিবেচনা না করেন তবে মূলত আপনাকে এই অ্যালগোরিদমগুলি নিজেরাই আবার লিখতে হবে)। এর মানে এই যে, 8 গিগ র্যাম সহ, আমি মনে করি না আপনি 300k কলাম সহ কয়েক শতাধিক সারি সঞ্চয় করতে পারবেন।
ক্রাইওলা

@ ক্রায়োলা: সারিগুলির সংখ্যা 1000-3000 থেকে পৃথক হতে পারে।
অ্যান্ডি

2
আর বস্তু না মেমরি হতে হবে। মেমরি ম্যাপিং খুব সহজ। 300k মাত্রা কোনও সমস্যা নয়। আমি ধারণা করি যে আপনার ডেটা অপ্রয়োজনীয়, প্রায় সমস্ত পাঠ্য সমস্যার ক্ষেত্রে এটিই।
ইট্রেটর

আমি কেবল উপরের মন্তব্যটি লক্ষ্য করেছি: কেবল 1000-3000 সারি? এটা খুব ছোট। আপনার কর্পাস কি তা আপনি ব্যাখ্যা করতে পারেন? একটি ব্যাচ ইমেল? সিআরএএন-এ প্যাকেজের বর্ণনা? কোনও স্টোরেজ সমস্যার তুলনায় আপনার কাছে পি >> এন এর সাথে আরও পরিসংখ্যানগত সমস্যা থাকতে পারে।
ইট্রেটর

1
@ ইটারেটর: আমাদের কয়েকটি শিক্ষামূলক সংস্থান রয়েছে (টার্ম পেপারস, প্রবন্ধ ইত্যাদি) যা আমরা শ্রেণিবদ্ধ করতে চাই।
অ্যান্ডি

উত্তর:


17

একটি মন্তব্যে অনুরোধ হিসাবে, প্রক্রিয়াজাতকরণ পদক্ষেপের জন্য এখানে কিছু পয়েন্টার রয়েছে। প্রাকৃতিক ভাষা প্রক্রিয়াকরণের জন্য CRAN টাস্ক ভিউতে বেশ কয়েকটি সরঞ্জাম পাওয়া যেতে পারে । আপনি আর এর জন্য (পাঠ্য খনির) প্যাকেজে এই কাগজটিওtm দেখতে চাইতে পারেন ।

  1. প্রক্রিয়াকরণের আগে, টোকেন শব্দের সাধারণকরণ বিবেচনা করুন। openNLP(যার জন্য একটি আর প্যাকেজ রয়েছে) হ'ল একটি রুট।
  2. পাঠ্য প্রক্রিয়াজাতকরণের জন্য, একটি সাধারণ প্রাক প্রসেসিং পদক্ষেপটি হ'ল tf.idf- টার্ম ফ্রিকোয়েন্সি * ইনভার্স ডকুমেন্ট ফ্রিকোয়েন্সি - আরও তথ্যের জন্য উইকিপিডিয়া এন্ট্রি দেখুন via আরও অন্যান্য সাম্প্রতিক স্বাভাবিককরণ রয়েছে, তবে এটি একটি রুটি এবং মাখন পদ্ধতি, তাই এটি জানা গুরুত্বপূর্ণ। আপনি এটিকে সহজেই আর এ প্রয়োগ করতে পারেন: কেবল স্টোর (ডকআইডি, ওয়ার্ডআইডি, ফ্রিক 1, ফ্রিক 2) যেখানে ফ্রেইক 1 প্রদত্ত নথিতে ওয়ার্ডআইডি দ্বারা সূচিত শব্দের সময় গণনা হয় এবং ফ্রেইক 2 হ'ল নথিগুলির মধ্যে # হয় documents কোনও শব্দের জন্য এই ভেক্টর সংরক্ষণ করার দরকার নেই যা প্রদত্ত নথিতে উপস্থিত হয় না। তারপরে, কেবল freq1 / freq2 নিন এবং আপনার আপনার tf.idf মান হবে।
  3. Tf.idf মান গণনা করার পরে, আপনি আপনার ডেটার পূর্ণ মাত্রিকতার সাথে কাজ করতে পারেন বা সেই শব্দগুলিকে ফিল্টার করে ফেলতে পারেন যা মূলত অপ্রয়োজনীয়। উদাহরণস্বরূপ, কেবলমাত্র 1 টি ডকুমেন্টে উপস্থিত কোনও শব্দ খুব বেশি অন্তর্দৃষ্টি দিতে পারে না। এটি আপনার মাত্রিকতা যথেষ্ট পরিমাণে হ্রাস করতে পারে। ছোট ছোট # নথি যাচাই করা হচ্ছে, আপনি দেখতে পাচ্ছেন যে মাত্র 1 কে মাত্রায় হ্রাস করা উপযুক্ত।
  4. আমি উভয়ই ডেটা পুনর্বিবেচনা করতাম না (যেমন পিসিএর জন্য), তবে আপনি Matrixপ্যাকেজ সমর্থন করে স্পার্স ম্যাট্রিক্স ব্যবহার করে স্বাচ্ছন্দ্যে একটি টার্ম ম্যাট্রিক্সে (যেখানে এন্ট্রিগুলি এখন tf.idf মান হয়) সহজেই ডেটা সংরক্ষণ করতে পারেন ।

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

অন্য একটি জিনিস: আপনি পিসিএ (*) এর লাইনের সাথে মাত্রিকতা হ্রাস বিভিন্ন শ্রেণিবদ্ধকরণ পদ্ধতি ব্যবহার করার ক্ষেত্রে সহায়ক হতে পারে, কারণ আপনি মূলত সম্পর্কিত শব্দগুলিকে একত্রিত করছেন। প্রথম 10-50 মূল উপাদানগুলি আপনার নমুনার আকারের দ্বারা ডকুমেন্টের শ্রেণিবিন্যাসের জন্য যা প্রয়োজন তা হতে পারে।

(*) দ্রষ্টব্য: পিসিএ একটি প্রথম পদক্ষেপ। এটি কেবল পাঠ্য খনন এবং পিসিএ দিয়ে শুরু করার জন্য কারও পক্ষে খুব আকর্ষণীয় হতে পারে তবে অবশেষে আপনি দেখতে পাচ্ছেন যে এটি অল্প ডেটার সেটগুলির জন্য কিছুটা উপদ্রব। প্রথম পদক্ষেপ হিসাবে, যদিও এটি একবার দেখুন, বিশেষত কর্ম prcompএবং princompক্রিয়াকলাপের মাধ্যমে ।

আপডেট: আমি এই উত্তরে কোনও অগ্রাধিকার উল্লেখ করি নি - আমি prcompবরং এর চেয়ে প্রস্তাব দিই princomp


+1 সুন্দর উত্তর; আমি কেবল কৌতুহলী কেন আপনি কেন বলেন যে সংখ্যক ডকগুলি গুরুত্বপূর্ণ ভেরিয়েবলের সংখ্যাকে কম সংখ্যায় বোঝায় - এটি কি কিছুটা অত্যধিক ফিট বলে মনে হচ্ছে না?

আমি নিশ্চিত না যে আপনি কী বলতে চাইছেন তা আমি বুঝতে পেরেছি। এগুলি রাখার জন্য অবশ্যই অত্যধিক উপযোগী, যাতে এই পরিবর্তনকগুলি কোনও যুক্তিসঙ্গত নিয়ন্ত্রণের মধ্যে মুছে ফেলা হয়। তদুপরি, ভোকাবুলারি (পি) # টি নথি বা নমুনা (এন) নিয়ে বৃদ্ধি পায়, সুতরাং প্রথমবার কোনও শব্দটি উপস্থিত হওয়ার সাথে এটি খুব বেশি ইঙ্গিত দেয় না। দস্তাবেজগুলি যুক্ত করে রাখুন এবং তারপরে ডক্স জুড়ে একটি পদ পুনরাবৃত্তি তথ্যবহুল হয়ে উঠবে।
ইট্রেটর

@ ইটারেটর: আপনার উত্তরের জন্য ধন্যবাদ সুতরাং prcompএবং / অথবা princompআপনি এই জাতীয় ডেটা গণনা করবেন? এছাড়াও আমি কেবল আমার প্রশ্নটি সম্পাদনা করেছি এবং কিছু অতিরিক্ত তথ্য যুক্ত করেছি।
অ্যান্ডি

না, আপনি যখন 300K কলামগুলিতে আঘাত করবেন তখন এগুলি সম্ভবত স্কেল হবে না। :) (কেবল উল্লেখ করার জন্য: এক্স'এক্স ক্ষেত্রে 90 বি এন্ট্রি থাকবে - একটি স্টোরেজ সমস্যা problem) পরিবর্তে, প্রথমে tf.idf দ্বারা ফিল্টার করুন। যদি কেবল 10 টি পৃথক ক্লাস থাকে তবে ক্লাসগুলি পৃথক করার জন্য 10 এর একটি ছোট একাধিক পরিমাণ অবশ্যই যথেষ্ট। সুতরাং, 1000 টি মাত্রা পর্যাপ্ত চেয়ে বেশি হওয়া উচিত। উভয় পিসিএ পদ্ধতি (বিটিডব্লিউ, আমি প্রস্তাব দিই prcomp) ভাল থাকবে।
Iterator

একবার আপনি 1000 টি মাত্রা বা সম্ভবত আরও কয়েকটি (যেমন 2 কে) সীমাবদ্ধ করে ফেলেন এবং পিসিএ করেন, আপনি 100 টি মাত্রা (যা ওভারকিল হতে পারে তবে এতে কিছুটা ক্ষতি হতে পারে) বলে অনুমানগুলি নিতে পারেন এবং তারপরে শ্রেণিবদ্ধকরণ করুন। এই মুহূর্তে, খুব উত্তেজনাপূর্ণ কিছুই নেই।
Iterator

5

প্রথমে স্বাগতম! পাঠ্য প্রক্রিয়াজাতকরণ প্রচুর মজাদার এবং আর-এ এটি করা সবসময় সহজ হয়ে যায়।

সংক্ষিপ্ত উত্তর: হ্যাঁ - আর এর সরঞ্জামগুলি এই ধরণের ডেটা নিয়ে কাজ করার জন্য এখন বেশ ভাল। প্রকৃতপক্ষে, র‍্যামে ডেটা স্টোরেজ করার সময় আর, সি ++, গ্রোভি, স্কালা বা অন্য কোনও ভাষা সম্পর্কে বিশেষ কিছুই নেই: প্রতিটি ভাষা একটি 8 বাইট ডাবল ভাসিয়ে রাখে ... এটির জন্য অপেক্ষা করুন ... এটির জন্য অপেক্ষা করুন। .. 8 বাইট!

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

আর এর জন্য আপনাকে বিবেচনা করতে হবে:

  1. আপনার ডেটা উপস্থাপনা (স্প্রেস ম্যাট্রিক্সগুলি দেখুন, বিশেষত Matrixপ্যাকেজে)
  2. ডেটা স্টোরেজ (সম্ভবত মেমরির ম্যাপ ব্যবহার করে bigmemoryবা ffঅথবা বিতরণ, Hadoop এর ব্যবহার করে)
  3. আপনার ডেটা বিভাজন (আপনি কতটা র‌্যামে ফিট করতে পারেন তা আপনার কতটা র‌্যামের উপর নির্ভর করে)

শেষ পয়েন্টটি সত্যই আপনার নিয়ন্ত্রণে রয়েছে।

যখন এই মাত্রাটি আসে তখন এটি আর বিশেষ করে বড় হয় না। # টি পর্যবেক্ষণের প্রভাব আরও বেশি হবে তবে আপনি র্যামের ব্যবহারের জন্য সামঞ্জস্য করতে আপনার ডেটা ভাগ করে নিতে পারেন, তাই খুব বেশি চিন্তিত হওয়ার মতো খুব বেশি কিছু নেই।


3

আমি ক্রেওলার সাথে একমত যে সারিগুলির সংখ্যা এখানে গুরুত্বপূর্ণ। আরএফের জন্য আপনার আপনার ডেটাसेट ওজনের চেয়ে কমপক্ষে 3x আরও বেশি র‌্যামের প্রয়োজন হবে এবং সম্ভবত অনেক সময় (এ জাতীয় গুণাবলীর সংখ্যায় সাধারণত বনের অনেক গাছ প্রয়োজন হয় - এবং লক্ষ করুন যে আরএফটিতে আরএফের কোনও সমান্তরাল বাস্তবায়ন নেই)।

এসভিএম সম্পর্কে, আমি সন্দেহ করি যে 300k মাত্রা নিয়ে লড়াই করা ভাল ধারণা যখন আপনি সম্ভবত কোনও কার্নেল ফাংশন বিকাশ করতে পারেন যা আপনার পাঠ্যের বর্ণনাকারীর সমতুল্য হবে।

সম্পাদনা: 3 কে এক্স 30 কে (বাস্তব) ম্যাট্রিক্স 7 জিবি জাতীয় কিছু দখল করবে, সুতরাং আপনার এই ডেটাতে আরএফ (র্যান্ডমফোরস্ট ব্যবহার) করা দরকার কেবল একটি 16 জিবি র‌্যামযুক্ত কম্পিউটার, কিছুটা ভাগ্য এবং বেশ কিছুটা সময় বা 24 জিবি সহ কেবল একটি কম্পিউটার র‌্যাম এবং বেশ কিছুটা সময়।


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

1
"দ্রষ্টব্য যে আর-তে আরএফের সমান্তরাল বাস্তবায়ন নেই"। এটি কেবলমাত্র আংশিকভাবে সঠিক, কারণ foreachপ্যাকেজটি প্যাকেজটির সাথে সুন্দরভাবে অভিনয় করে randomForest। আমি মনে করি এর জন্য উইগনেটে এমন একটি উদাহরণ রয়েছে foreach। (অথবা হতে পারে doMC))
ক্রাইওলা

@ অ্যান্ডি জিনিসটি হ'ল, নিম্ন স্তরের প্রোগ্রামিং ভাষায় অ্যালগরিদমগুলি পুনরায় লেখার অভাব, আমি নিশ্চিত নই যে কোন সফ্টওয়্যার আপনার ডেটাতে এই অ্যালগরিদমগুলি প্রয়োগ করতে সক্ষম হবে। আমি যদি আপনার পরিস্থিতিতে থাকতাম তবে আমি অনুমান করি যে আমি আরকে আঁকড়ে ধরে randomForestএমন কিছু অংশগুলি আবার লিখব যাতে এটি এলোমেলোভাবে নির্বাচিত কলামগুলি থেকে প্রশ্ন করবে, উদাহরণস্বরূপ, প্রতিটি পুনরাবৃত্তিতে একটি এসকিউএল ডাটাবেস (যেমন সম্পূর্ণ 300k মাত্রা কখনও না থাকে) to be ram)। তবে এটি সম্ভবত প্রধান কারণ কারণ আমি অন্যান্য সম্ভাব্য বিকল্পগুলির চেয়ে আর সম্পর্কে আরও বেশি জানি।
ক্রাইওলা

আপনি এমন কোনও লাইব্রেরি খুঁজে পেলেন না যে দাবি করার অর্থ দিয়ে আপনি কী বোঝাতে চেয়েছেন এটির জন্য? এর মতো ফিল্টারগুলি মৌলিক বীজগণিত হয় তাদের সমস্যা ছাড়াই কাজ করা উচিত (আপনার পর্যাপ্ত র‌্যাম থাকে তবে শর্ত থাকে)।

@ ক্রেওলা সত্য, তবে মার্জ করা অংশটি ভয়াবহ। তবুও এটি ভাগ করা-মেমের সমান্তরালতা নয়, তাই সম্ভবত এই সেটিংটিতে এটি বেদনাদায়ক (যদি অসম্ভব না হয়) হয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.