বিল্ডিং হোয়াটসঅ্যাপ / টেলিগ্রাম বট যা আলপস.ই ব্যবহার করে আপনার মত কথা বলে

আসুন এমন একটি বট তৈরি করুন যা চ্যাট অ্যাপ্লিকেশনগুলিতে আপনার আগত বার্তাগুলির জন্য উত্তর পিক্সাবয়ের মাধ্যমে ফটোটিকে স্বয়ংক্রিয়ভাবে প্রস্তাব দেয়)

পটভূমি

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

উচ্চ স্তরের পদ্ধতির

সমস্যার বিবৃতিটি হ'ল একটি বার্তা দেওয়া আমাদের আমাদের পূর্ববর্তী জবাবগুলি থেকে প্রাপ্ত শিক্ষার উপর ভিত্তি করে একটি উত্তর দেওয়ার পরামর্শ দিতে হবে

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

পাইপলাইন

ডেটা সেটটি

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

আমি 3 এর নীচে পেয়েছি এমন ডেটাসেটগুলি অনুসন্ধান করার সময় যা আমি মনে করি দরকারী হতে পারে যদি আমরা কিছু সাফাই করি এবং সেগুলি বার্তা-> উত্তর ফর্ম্যাটে রূপান্তর করি।

  • কর্নেল মুভি - ডায়ালগস কর্পস
  • কথোপকথন গোয়েন্দা প্রতিদ্বন্দ্বিতা 2 (কনভ্যাআই 2)
  • rdany-কথোপকথন

কিছুটা ভাল সময় ব্যয় করার পরে এবং ম্যানুয়ালি এই বার্তাগুলির বেশিরভাগটি পরিষ্কার করার পরে আমরা যেখানে এই ডেটাসেটগুলি থেকে প্রায় 25,000 বার্তা এবং উত্তর সংগ্রহ করতে পেরেছিলাম।

পিডি চ্যাট_মেসেজগুলি_ডিএফ = পিডি.ড্রেড_সিএসভি ('ডেটা / সম্পূর্ণ-চ্যাট-ডেটা সিএসভি') চ্যাট_মেসেজ_ডেফ.সাম্পল (10) হিসাবে পান্ডাস আমদানি করুন
চ্যাট ডেটাसेट থেকে নমুনা ডেটা।

পাঠ্য প্রাক প্রক্রিয়াজাতকরণ

পাঠ্য প্রাক-প্রক্রিয়াকরণ ইউনিটে, আমরা যে বিরামচিহ্নগুলি টোকনাইজেশন সম্পাদন করে তা মুছে ফেলাতে চাই তারপরে লেম্যাটাইজেশন যা আমরা ব্যবহার করছি সে শব্দগুলি সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করতে (লেম্যাটাইজেশন একটি শব্দের মূল রূপ পেতে কৌশল to) স্পেসিটি পাঠ্য করার জন্য একটি ভাল গ্রন্থাগার প্রক্রিয়াকরণ।

spacy.lang.en থেকে স্পেসিটি আমদানি করুন ইংলিশ পার্সার = ইংরেজি () আমদানি স্ট্রিং বিরামচিহ্নগুলি = স্ট্রিং.পুন্টিকেশন এনএলপি = স্পেসিওলোড ('এন')
ডিফ ম্যাসেজ_প্রিয়_প্রসেস (বার্তা): মাইটোকেনস = পার্সার (বার্তা) মাইটোকেনস = [ওয়ার্ড.লেম্মা_লোয়ার ()। স্ট্রিপ () যদি ওয়ার্ড.লেম্মা_! "" -পিআরপিওন "" মাইটোকেন্সে শব্দের জন্য ওয়ার্ড.লোয়ার_ মাইটোকেন্স = [শব্দ মাইটোকেন্সে শব্দের জন্য শব্দটি যতিচিহ্নে না থাকলে] মুদ্রণ (মাইটোকেন্স) মাইটোকেনগুলি ফেরত দেয়

Vectorizer

আমাদের পাঠ্যটিকে একটি অ্যালগরিদমে খাওয়ানোর জন্য একটি ভেক্টরে রূপান্তর করতে হবে আমাদের বার্তাগুলিকে ভেক্টরের রূপান্তর করতে একটি সাধারণ টিএফ-আইডিএফ ভেক্টরাইজার ব্যবহার করতে দিন

sklearn.feature_extration.text আমদানি TfidfVectorizer kwargs = {'টোকেনাইজার': বার্তা_প্রিয়_প্রসেস, 'সর্বাধিক_মুখে': 1500 # এটিই আমি সর্বাধিক ভোকাব্যালারি বেছে নিয়েছি work f tfvectorizer = TfidfVectorizer (** kwargs) train_vec = tfvectorizer.fit_transfor (chat_messages_df ['প্রশ্ন']। মানস.স্টাইপ (স্ট্র))

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

এনপি ট্রেন-লেবেলস = এনপি.আররে (চ্যাট_মেসেজ_ডেফ.ইন্ডেক্স.মূল্যস [:, এনপি.নেক্সেক্স]) ট্রেন_ডেটা = এনপি.কোনাটেনেট ((ট্রেন_লাবেলস, ট্রেন_ভেক.টোয়ারে ()), অক্ষ = 1) এনপি.সভেটেক্সট ('ডেটা / চ্যাট-ট্রেন-ভেক্টর-ডেটা.সিএসভি ', ট্রেন_ডেটা, ডিলিমিটার =', ')! জিপ ডেটা / চ্যাট-ট্রেন- সেক্টর- ডেটা সিএসভি.জিপ ডেটা / চ্যাট-ট্রেন-ভেক্টর-ডেটা.সিএসভি

মডেল প্রশিক্ষণ

আমাদের ট্রেনের ডেটা সিএসভি হিসাবে রয়েছে (চ্যাট-ট্রেন-ভেক্টর-ডেটা। সিএসভি) আমরা প্রশিক্ষণের জন্য ALPES API ব্যবহার করতে পারি। দ্রুত আপলোডের জন্য ট্রেনের ডেটা ফাইলটি জিপ করুন এবং তারপরে একটি আপলোড করুন, ট্রেন করুন এবং স্থিতি API কল পান get আপনি এপিআই ডকুমেন্টেশন উল্লেখ করতে পারেন

মডেলটি প্রশিক্ষিত হয়ে গেলে আপনি নীচের মত সার্ভারের কাছ থেকে প্রতিক্রিয়া পাবেন

প্রশিক্ষণের স্থিতি: {u'status ': u'SUCCESS', u'result ': u "train' ট্রেনটাইম ':' [শুক্র, 21 ডিসেম্বর 2018 19:49:20 ইউটিসি] অতিবাহিত সময়: 00: 00: 39.606144 ', 'মডেল': u'model_1412115 '} "}

দয়া করে মডেল নামটি (মডেল_1412115) নোট করুন যা আমাদের যখন পরীক্ষার বার্তার জন্য ভবিষ্যদ্বাণীটি পায় তখন আমাদের ব্যবহার করা উচিত

জবাব প্রস্তাবের জন্য পূর্বাভাস

আমরা যখন পরীক্ষার প্রশ্নে মডেলটিকে জিজ্ঞাসা করি তখন এটি পরীক্ষার প্রশ্নের নিকটতম প্রতিক্রিয়া হিসাবে একটি সংখ্যার লেবেল আইডি প্রেরণ করে। আসুন একটি ফাংশন তৈরি করুন যা লেবেল আইডির একটি অ্যারে গ্রহণ করে এবং পাঠ্য জবাব দেয়।

Def get_replies (জবাবদিহি): জবাবদিহি করার জন্য s1 = তালিকা (): s1.append (''। join (str (chat_messages_df.loc [উত্তর] ['উত্তর দিন']। মানগুলি))) ফেরত এস 1

"আপনি কখন ফিরে আসছেন" এর মতো একটি পরীক্ষার বার্তা দেওয়ার জন্য আমাদের এটিকে ভেক্টরে রূপান্তর করতে হবে তারপরে মডেলটিকে জিজ্ঞাসা করতে হবে

নমুনা আউটপুট:

ইনপুট বার্তা: আপনি কখন ফিরে আসছেন? প্রস্তাবিত জবাবগুলি: ["['আমি জানি না।']", "['এখনই']" "," ['খুব বেশি দেরি হয়নি'] "]

এই অ্যাপ্লিকেশনটির লাইভ ডেমোটি http://api.alpes.ai/sm.html এ উপলব্ধ

আমরা কীভাবে এটি আরও উন্নত করতে পারি

এই বেসিক মডেলটির উন্নতির অনেক সুযোগ রয়েছে

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

আরো দেখুন

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