স্ট্রিট-শপ সমস্যায় দূরত্বের শিক্ষার প্রয়োগ

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

রেকর্ড

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

স্ক্র্যাপিংয়ের জন্য আমি ব্যবহৃত বিভাগগুলির তালিকা নীচে:

  • বস্ত্র
  • ব্লাউজগুলি
  • হুডি এবং সোয়েটশার্ট
  • পুলওভার
  • জ্যাকেট

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

নিবন্ধের পাশে

আমি যে কোডটি কোনও আইটেম সম্পর্কিত সমস্ত তথ্য পেতে ব্যবহার করি (এটি আসলে আমাদের কাজের প্রয়োজনের চেয়ে বেশি স্ক্র্যাপ করে) লিঙ্কটি https://github.com/movchan74/street_to_shop_experiments/blob/master/get_item_info লিঙ্কে পাওয়া যাবে। পাই

আমাদের যা করতে হবে তা বিভাগ অনুসারে অনুসন্ধান পৃষ্ঠাগুলি দিয়ে যেতে হবে, সমস্ত নিবন্ধের ইউআরএল পেতে এবং প্রতিটি নিবন্ধ সম্পর্কে তথ্য পেতে উপরের বৈশিষ্ট্যটি ব্যবহার করতে হবে।

পরিশেষে, আমাদের কাছে প্রতিটি আইটেমের জন্য দুটি সেট চিত্র রয়েছে: একজন বিক্রেতার চিত্র (প্রতিটি আইটেমের জন্য ফিল্ড ইউআরএল ['রঙ']]) এবং ব্যবহারকারীদের চিত্র (প্রতিটি আইটেমের জন্য ফিল্ড চিত্রগুলি ['প্রতিক্রিয়া'])।

প্রতিটি রঙের জন্য আমাদের কেবল একজন বিক্রেতার কাছ থেকে একটি ছবি থাকে তবে ব্যবহারকারীদের কাছ থেকে প্রতিটি রঙের জন্য একাধিক ছবি থাকতে পারে (কখনও কখনও রঙের জন্য কোনও চিত্রই নেই)।

দুর্দান্ত! আমাদের কাছে ডেটা আছে। তবে সংগৃহীত ডেটা সেট গোলমাল:

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

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

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

দূর শিক্ষন

দূরত্বের মেট্রিকগুলি শেখার সর্বাধিক জনপ্রিয় একটি উপায় হ'ল ট্রিপলেট হ্রাস:

যেখানে সর্বাধিক (x, 0) হিঞ্জ ফাংশন, ডি (x, y) হ'ল x এবং y এর মধ্যে দূরত্ব ফাংশন, এফ (এক্স) একটি গভীর নিউরাল নেটওয়ার্ক, এম প্রান্ত, একটি অ্যাঙ্কর, পি ধনাত্মক বিন্দু , n হল নেতিবাচক পয়েন্ট।

এফ (ক), এফ (পি), এফ (এন) উচ্চ মাত্রিক স্থান (এম্বেডিংস) এর পয়েন্ট যা গভীর নিউরাল নেটওয়ার্ক দ্বারা উত্পাদিত হয়। এটি লক্ষণীয় যে এম্বেডগুলি প্রায়শই একক দৈর্ঘ্যের জন্য স্বাভাবিক করা প্রয়োজন; এইচ। || x || = 1 আলো এবং বৈপরীত্যের পরিবর্তনের বিরুদ্ধে এবং প্রশিক্ষণের স্থিতিশীলতার জন্য শক্তিশালী হওয়ার জন্য। অ্যাঙ্কর এবং ধনাত্মক নমুনাগুলি একই শ্রেণীর অন্তর্গত, নেতিবাচক নমুনা একটি ভিন্ন শ্রেণীর উদাহরণ।

ট্রিপলেট ক্ষতির মূল ধারণাটি হ'ল ধনাত্মক জোড় (নোঙ্গর এবং ধনাত্মক) এর এমবেডিংগুলি নেতিবাচক জোড় (অ্যাঙ্কর এবং নেতিবাচক) এর এম্বেডিং থেকে আলাদা করে নেওয়া।

তবে আপনি কীভাবে ট্রিপলেটটি বেছে নেবেন (ক, পি, এন)? আমরা কেবল এলোমেলোভাবে নমুনাগুলি তিনটি হিসাবে বেছে নিতে পারি, তবে এটি নিম্নলিখিত সমস্যাগুলি তৈরি করে। প্রথমত, N³ সম্ভাব্য ট্রিপল্ট রয়েছে। এর অর্থ সম্ভাব্য তিনটি ট্রিপলটি কাটিয়ে আমাদের প্রচুর সময় প্রয়োজন। প্রকৃতপক্ষে, আমাদের এটি করার দরকার নেই যেহেতু প্রশিক্ষণের কয়েকটি পুনরাবৃত্তির পরে অনেকগুলি ট্রিপল্ট থাকবে যা ট্রিপলটি সীমাবদ্ধতা লঙ্ঘন করে না (শূন্য ক্ষতি দিন)। এর অর্থ এই তিনটি প্রশিক্ষণের জন্য অকেজো।

ট্রিপলেট নির্বাচনের অন্যতম সাধারণ পদ্ধতি হ'ল হার্ড নেতিবাচক খনন:

কঠোর নেতিবাচকগুলির নির্বাচন অনুশীলনে প্রাথমিক পর্যায়ে দরিদ্র স্থানীয় মিনিমাতে পরিচালিত করতে পারে। বিশেষত, এটি ধসে পড়া মডেল (অর্থাত্ এফ (এক্স) = 0) এর দিকে নিয়ে যেতে পারে। এটি প্রশমিত করতে, আমরা আধা-শক্ত নেতিবাচক খনন ব্যবহার করতে পারি।

আধা-শক্ত নেতিবাচক নমুনাগুলি ইতিবাচক নমুনার চেয়ে অ্যাঙ্কর থেকে আরও বেশি, তবে তারা এখনও শক্ত (ট্রিপল শর্ত লঙ্ঘন) কারণ এগুলি মার্জিন এম এর মধ্যে রয়েছে M.

একটি আধা-শক্ত নেতিবাচক নমুনা সহ একটি ট্রিপলেট জন্য শর্তাদি

আধা-শক্ত (এবং শক্ত) নেতিবাচক নমুনা উত্পন্ন করার দুটি উপায় রয়েছে: অনলাইন এবং অফলাইন।

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

ভাল! আমরা ইতিমধ্যে ট্রিপলেট ক্ষতি এবং আধা-হার্ড অফলাইন খনির সাহায্যে মডেলটিকে প্রশিক্ষণ দিতে পারি। কিন্তু! এই অসম্পূর্ণ বিশ্বে সর্বদা একটি "তবে" থাকে। দোকানের সমস্যার রাস্তা সফলভাবে সমাধান করতে আমাদের আরও একটি কৌশল প্রয়োজন। আমাদের কাজটি হ'ল বিক্রেতার চিত্রটি যা ব্যবহারকারীর চিত্রের সাথে সর্বাধিক সাদৃশ্যপূর্ণ find একটি নিয়ম হিসাবে, তবে, বিক্রেতার চিত্রগুলি ব্যবহারকারীর চিত্রগুলির তুলনায় অনেক ভাল মানের (আলোক, ক্যামেরা, অবস্থানের দিক দিয়ে), সুতরাং আমাদের দুটি ক্ষেত্র রয়েছে: বিক্রেতার চিত্র এবং ব্যবহারকারীর চিত্র। একটি দক্ষ মডেল পেতে, আমাদের এই দুটি ডোমেনের মধ্যে ব্যবধান পূরণ করতে হবে। এই সমস্যাটি ডোমেন কাস্টমাইজেশন হিসাবে পরিচিত।

বাম: ব্যবহারকারীর ছবি, ডান: বিক্রেতার ছবি

আমি ডোমেনের ব্যবধান সংকীর্ণ করার জন্য একটি খুব সহজ কৌশল প্রস্তাব করছি: আসুন বিক্রেতার ছবি থেকে অ্যাঙ্কর এবং ব্যবহারকারীর ছবি থেকে ইতিবাচক এবং নেতিবাচক নমুনা বেছে নেওয়া যাক। এখানেই শেষ! সহজ এখনও কার্যকর।

বাস্তবায়ন

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

আমি আমার মডেলের বেস সিএনএন হিসাবে ইনসেপশন ভি 3 মডেলটি বেছে নিয়েছি। যথারীতি, আমি সিএনএনটি ইমেজনেট ওজন দিয়ে শুরু করেছি। নেটওয়ার্ক শেষে এল 2 সাধারণকরণের সাথে গ্লোবাল পুলিংয়ের পরে, আমি দুটি সম্পূর্ণ সংযুক্ত স্তর যুক্ত করেছি added এম্বেডের আকার 128।

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

এবং মডেলটি সংকলন করুন:

পরীক্ষামূলক ফলাফল

ফলাফল পান। প্রথম কলাম - ক্যোয়ারী (ব্যবহারকারীর চিত্র), পরের 5 - সর্বাধিক অনুরূপ বিক্রেতার ছবি।

পারফরম্যান্স কে (আর @ কে) এর পুনর্বিবেচনা হিসাবে পরিমাপ করা হয়।

আসুন আর @ কে এর গণনাটি একবার দেখে নিই valid বৈধতা সেট থেকে প্রতিটি ব্যবহারকারীর চিত্র একটি কোয়েরি হিসাবে ব্যবহৃত হয়েছিল এবং আমাদের বিক্রেতার সাথে সম্পর্কিত চিত্রটি খুঁজে বের করতে হবে। আমরা একটি ক্যোয়ারী চিত্র নিই, এম্বেডিং ভেক্টরটি গণনা করি এবং সমস্ত বিক্রেতার চিত্রের ভেক্টরগুলির মধ্যে এই ভেক্টরের নিকটতম প্রতিবেশীগুলি পাই। বৈধতা সেট থেকে আমরা কেবল বিক্রেতার ছবিই ব্যবহার করি না, তবে ট্রেনের সেট থেকেও আমরা ছবিগুলি ব্যবহার করি কারণ এটি বিভ্রান্তকারীদের সংখ্যা বৃদ্ধি করে এবং আমাদের কাজকে আরও কঠিন করে তোলে।

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

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

বৈধতা ডেটা জন্য আর কে

ফলাফলগুলি আদর্শ থেকে অনেক দূরে, অনেক কিছুই করার আছে:

  • ব্যবহারকারীর ছবি শব্দের চিত্রগুলি পরিষ্কার করুন আমি ইতিমধ্যে একটি ছোট সেট পরিষ্কার করে এই দিকের প্রথম পদক্ষেপ নিয়েছি।
  • উপাদানগুলি একত্রে আরও কাছাকাছি আনুন (কমপক্ষে বৈধতার সেটটিতে)।
  • ডোমেনের ব্যবধান হ্রাস করুন। আমি ধরে নিয়েছি যে এটি ডোমেন নির্দিষ্ট এক্সটেনশন (উদাঃ আলোক প্রসারণ) এবং বিশেষ পদ্ধতিগুলি (যেমন https://arxiv.org/abs/1409.7495) ব্যবহার করে করা যেতে পারে।
  • একটি পৃথক দূরত্বের মেট্রিক শেখার কৌশল ব্যবহার করুন। আমি এই https://arxiv.org/abs/1703.07464 চেষ্টা করেছিলাম তবে এটি আমার ক্ষেত্রে আরও খারাপ কাজ করে।
  • অবশ্যই আরও তথ্য সংগ্রহ করুন।

ডেমো, কোড এবং প্রশিক্ষিত মডেল

আমি মডেলের একটি ডেমো তৈরি করেছি। আপনি এটি এখানে দেখতে পারেন: http://vps389544.ovh.net:5555/। পর্যালোচনা সেট থেকে এলোমেলো চিত্র অনুসন্ধান করতে বা ব্যবহার করতে আপনি নিজের ছবি আপলোড করতে পারেন।

কোড এবং প্রশিক্ষিত মডেল: https://github.com/movchan74/street_to_shop_experiments

পড়ার জন্য আপনাকে ধন্যবাদ. আপনি যদি নিবন্ধটি পছন্দ করেন তবে দয়া করে তালি দিয়ে আমাকে জানান। আপনি যদি আরও তথ্য চান, আপনি আমার সাথে লিংকডইনে সংযোগ করতে পারেন।