MyTarget تجديد النشاط التسويقي الديناميكي: توصيات المنتج غير الشخصية



تجديد النشاط التسويقي الديناميكي (dynrem) في myTarget عبارة عن تقنية إعلانية مستهدفة تستخدم معلومات حول إجراءات المستخدم على مواقع الويب وفي تطبيقات الجوال للمعلنين. على سبيل المثال ، في أحد المتاجر عبر الإنترنت ، نظر المستخدم إلى صفحات البضائع أو أضافها إلى السلة ، ويستخدم myTarget هذه الأحداث لعرض إعلانات عن تلك السلع والخدمات التي أبدى شخص اهتمامًا بها من قبل. سأتحدث اليوم بمزيد من التفصيل عن آلية إنشاء توصيات غير شخصية ، وهي item2item ، والتي تتيح لنا تنويع وإكمال ناتج الإعلان.

العملاء في dynrem myTarget هم بشكل رئيسي متاجر عبر الإنترنت ، والتي يمكن أن تحتوي على قائمة أو أكثر من المنتجات. عند إنشاء توصيات ، يجب اعتبار الزوج "قائمة تخزين البضائع" كوحدة منفصلة. ولكن من أجل البساطة ، سنستخدم ببساطة "المتجر" التالي. إذا تحدثنا عن بُعد مهمة الإدخال ، فيجب بناء التوصيات لنحو ألف متجر ، ويمكن أن يختلف عدد البضائع من عدة آلاف إلى ملايين.

يجب أن يفي نظام التوصية لـ dynrem بالمتطلبات التالية:

  1. تحتوي اللافتة على منتجات تزيد من نسبة النقر إلى الظهور الخاصة بها.
  2. يتم إنشاء التوصيات في وضع عدم الاتصال لفترة محددة.
  3. يجب أن تكون بنية النظام مرنة وقابلة للتطوير ومستقرة وتعمل في بيئة بداية باردة.

لاحظ أنه من متطلبات إنشاء توصيات لفترة محددة والشروط الأولية الموصوفة (سنفترض بتفاؤل أن عدد المتاجر يتزايد) ، ينشأ متطلب طبيعي للاستخدام الاقتصادي لموارد الماكينة.

يحتوي القسم 2 على الأسس النظرية لبناء أنظمة التوصية ، ويناقش القسمان 3 و 4 الجانب العملي للقضية ، ويلخص القسم 5 النتيجة الإجمالية.

المفاهيم الأساسية


النظر في مهمة بناء نظام التوصية لمتجر واحد وسرد النهج الرياضية الأساسية.

تحليل القيمة الفردية (SVD)


نهج شعبية لبناء أنظمة التوصية هو نهج التحلل المفرد (SVD). مصفوفة التقييم R=(rui) تمثل كمنتج اثنين من المصفوفات P و فدولا لذلك R approxPQT ثم تقييم تصنيف المستخدم u للبضائع i ممثلة  hatrui=<pu،qi> [1] ، حيث تكون عناصر المنتج القياسي عبارة عن متجهات الأبعاد ك (المعلمة الرئيسية للنموذج). هذه الصيغة بمثابة أساس لنماذج SVD الأخرى. مهمة الاكتشاف P و فدولا يتعلق الأمر بتحسين الوظائف:

(2.1)

J(P،Q)= sum(u،i) mathcalL(rui، hatrui)+ Lambda(P،Q) rightarrow minP،Q،


حيث L - وظيفة الخطأ (على سبيل المثال ، RMSE كما هو الحال في مسابقة Netflix ) ، Λ - التنظيم ، والجمع هو أكثر من أزواج التي يعرف التقييم. نعيد كتابة التعبير (2.1) بشكل واضح:

(2.2)

J(P،Q)= sum(u،i)(rui<pu،qi>)2+ lambda1||pu||2+ lambda2||qi||2 rightarrow minP،Q،


هنا λ1دولا . λ2دولا - معاملات التنظيم L2 لتمثيل المستخدم pu والسلع qi على التوالي. كان النموذج الأساسي لمسابقة Netflix:

(2.3)

 hatrui= mu+bu+bi+<pu،qi>،


(2.4)

J(P،Q)= sum(u،i)(rui mububi<pu،qi>)2+ lambda1||pu||2+ lambda2||qi||2+ lambda3b2u+ lambda4b2i rightarrow minP،Q،


حيث µ . bu و bi - التحيزات لتصنيف المستخدم والمنتج ، على التوالي. يمكن تحسين النموذج (2.3) - (2.4) عن طريق إضافة تفضيل ضمني للمستخدم إليه. في مثال مسابقة Netflix ، تتمثل الاستجابة الصريحة في النتيجة التي حددها المستخدم للفيلم "بناءً على طلبنا" ، وغيرها من المعلومات حول "تفاعل المستخدم مع المنتج" (عرض الفيلم ووصفه وتعليقاته عليه ؛ أي أن الاستجابة الضمنية لا تقدم استجابة ضمنية) معلومات مباشرة عن تصنيف الفيلم ، ولكن في الوقت نفسه يشير إلى الاهتمام). يتم تطبيق محاسبة الاستجابة الضمنية في نموذج SVD ++:

(2.5)

 hatrui= mu+bu+bi+<pu+ frac1 sqrt sigmau sumj inS(u)yj، ،qi>،


حيث S(ش) - مجموعة من الأشياء التي تفاعل معها المستخدم ضمنيًا ، σu=|S(u)|،yj - تمثيل البعد ك لكائن من S(ش) .

آلات التخصيم (FM)


كما يتبين من الأمثلة ذات نماذج SVD المختلفة ، يختلف أحد النماذج عن الآخر في مجموعة المصطلحات المتضمنة في صيغة التقييم. علاوة على ذلك ، فإن توسيع النموذج في كل مرة يمثل مهمة جديدة. نريد تنفيذ مثل هذه التغييرات (على سبيل المثال ، إضافة نوع جديد من الاستجابة الضمنية ، مع مراعاة معلمات الوقت) بسهولة دون تغيير رمز تنفيذ النموذج. يمكن تمثيل النماذج (2.1) - (2.5) في شكل عالمي مناسب باستخدام المعلمة التالية. نحن نمثل المستخدم والمنتج كمجموعة من الميزات:

(2.6)

 overlinexU=(xU1،xU2، dots،xUl) in mathbbRl،



(2.7)

 overlinexI=(xI1،xI2، dots،xIm) in mathbbRm.




التين. 1: مثال لمصفوفة المعالم في حالة CF.

على سبيل المثال ، في حالة التصفية التعاونية (CF) ، عند استخدام البيانات المتعلقة بتفاعل المستخدمين والمنتجات فقط ، تبدو متجهات الميزات ككود واحد ساخن (الشكل 1). إدخال ناقلات  overlinex=( overlinexU، overlinexI) ، ثم يتم تقليل مهمة التوصية إلى مشاكل الانحدار مع المتغير الهدف rui :

  1. نموذج خطي:
    (2.8)

    hlin( overlinex)=w0+ suml+mj=1wjxj

  2. poly2:
    (2.9)

    hpoly2( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1wijxixj

  3. وزير الخارجية:
    (2.10)

    hFM( overlinex)=w0+ suml+mj=1wjxj+ suml+mi=1 suml+mj=i+1xixj< overlinevi، overlinevj>


حيث wj - معلمات النموذج ، vi هي ناقلات البعد ك يمثل علامة i في الفضاء الكامن ل و مدولا - عدد علامات المستخدم والمنتج ، على التوالي. بالإضافة إلى رموز التشغيل السريع ، يمكن أن تكون الميزات المستندة إلى المحتوى (القائمة على المحتوى ، CB) بمثابة علامات (الشكل 2) ، على سبيل المثال ، الأوصاف الموجهة للمنتجات وتوصيفات المستخدم.


التين. 2: مثال لمصفوفة المعالم الموسعة.

نموذج FM المقدم في [2] هو تعميم لـ (2.1) - (2.5) ، (2.8) ، (2.10). جوهر FM هو أنه يأخذ في الاعتبار التفاعل المزدوج للميزات باستخدام منتج العددية < overlinevi، overlinevj> ، لا تستخدم المعلمة wij . ميزة FM عبر Poly2 هي انخفاض كبير في عدد المعلمات: للمتجهات vi سنحتاج (ل+م)·كدولا المعلمات ، ول wij سوف تكون مطلوبة ممدولا المعلمات. في ل و مدولا من الطلبات الكبيرة ، يستخدم النهج الأول معلمات أقل بكثير.

يرجى ملاحظة: إذا لم يكن هناك زوج محدد في مجموعة التدريب (i،j) ، ثم المصطلح المقابل مع wij في Poly2 لا يؤثر على تدريب النموذج ، ويتم تشكيل درجة التصنيف فقط على الجزء الخطي. ومع ذلك ، فإن النهج (2.10) يتيح لنا إقامة علاقات من خلال ميزات أخرى. بمعنى آخر ، تساعد البيانات الموجودة على تفاعل واحد في تقييم معلمات السمات غير المضمنة في هذا المثال.

على أساس FM ، يتم تنفيذ ما يسمى بالنموذج المختلط الذي تتم فيه إضافة سمات CB إلى سمات CF. إنها تتيح لك حل مشكلة البداية الباردة ، وتراعي أيضًا تفضيلات المستخدم وتتيح لك تقديم توصيات مخصصة.

LightFM


في التنفيذ الشعبي لـ FM ، يتم التركيز على الفصل بين خصائص المستخدم والمنتج. المصفوفات بمثابة معلمات النموذج EU و EI تقديم ميزات مخصصة و المنتج:

(2.11)

EU= startpmatrix overlineeU1 vdots overlineeUl endpmatrix،EI= تبدأpmatrix overlineeI1 vdots overlineeIm endpmatrix، overlineeUi in mathbbRk، overlineeIi in mathbbRk


وكذلك تعويضات  overlinebU، overlinebI in mathbbRk . باستخدام طرق عرض المستخدم والمنتج:

(2.12)

 overlinepU= overlinexU cdotEU= sumlj=1xUj cdot overlineeUj،


(2.13)

 overlineqI= overlinexI cdotEI= summj=1xIj cdot overlineeIj،


الحصول على تصنيف الزوج (ش،ط) :

(2.14)

 hatrui=< overlinepU، overlineqI>+< overlinexU، overlinebU>+< overlinexI، overlinebI>.


وظائف الخسارة


في حالتنا ، من الضروري تصنيف المنتجات لمستخدم معين بحيث يكون للمنتج الأكثر صلة تصنيفًا أعلى من منتج أقل صلة. LightFM لديه العديد من وظائف الخسارة:

  1. اللوجيستية هي تطبيق يتطلب سلبيًا لم يتم تقديمه بشكل صريح في معظم المهام.
  2. BPR [3] هو زيادة الفرق في التصنيفات بين الأمثلة الإيجابية والسلبية لمستخدم معين. يتم الحصول على السلبي باستخدام أخذ عينات bootstrap. يشبه الجودة الوظيفية المستخدمة في الخوارزمية ROC-AUC.
  3. يختلف WARP [4] عن BPR في طريقة أخذ العينات من الأمثلة السلبية ووظيفة الخسارة ، والتي يتم ترتيبها أيضًا ، ولكن في نفس الوقت تعمل على تحسين أفضل التوصيات للمستخدم.

التنفيذ العملي


لإنشاء توصيات لفترة محددة ، يتم استخدام تطبيق مواز على Spark. يتم إطلاق مهمة مستقلة لكل متجر يتم التحكم في تنفيذه بواسطة لويجي.

معالجة البيانات مسبقا


يتم تنفيذ معالجة البيانات المسبقة بواسطة أدوات Spark SQL القابلة للتحجيم تلقائيًا. الميزات المحددة في النموذج النهائي هي الأوصاف النصية للسلع والكتالوجات مع التحويلات القياسية.

ما الذي ساعدنا عند التفاعل مع Spark:

  1. تقسيم البيانات المعدة (مصفوفة تفاعلات المستخدم والمنتج ، علامات لهم) من قبل المتاجر. يتيح لك ذلك توفير الوقت أثناء مرحلة التدريب على قراءة البيانات من HDFS. خلاف ذلك ، يتعين على كل مهمة قراءة البيانات في ذاكرة Spark وتصفيتها بمعرف المتجر.
  2. يتم حفظ / تلقي البيانات من / إلى Spark في أجزاء. هذا يرجع إلى حقيقة أنه خلال أي من هذه الإجراءات يتم تحميل البيانات في ذاكرة JVM. لماذا لا تزيد فقط من ذاكرة JVM؟ أولاً ، تنخفض الذاكرة المتاحة للتدريب على النموذج ، وثانياً ، ليست هناك حاجة لتخزين أي شيء في JVM ، فهي تعمل في هذه الحالة كمخزن مؤقت.

التدريب النموذجي


يتم تدريب طراز كل متجر في حاوية Spark الخاصة به ، بحيث يمكنك في نفس الوقت تشغيل عدد عشوائي من المهام للمتاجر ، ويقتصر ذلك على موارد المجموعة فقط.

تفتقر LightFM إلى آليات التوقف المبكر ، وبالتالي ، فإننا ننفق موارد إضافية على التكرار الإضافي للتدريب عند عدم وجود زيادة في القياس المستهدف. لقد اخترنا AUC كمقياس ، يتم تأكيد العلاقة مع CTR بشكل تجريبي.

دلالة:

S - جميع التفاعلات المعروفة بين المستخدمين والمنتجات ، أي الأزواج (ش،ط) .
I - الكثير من جميع السلع i .
يو - الكثير من جميع المستخدمين u .
لمستخدم معين u أعرض أيضا Iu=iI:(u،i)S - الكثير من المنتجات التي تفاعل المستخدم معها. يمكن حساب AUC على النحو التالي [المرجع]:

(3.1)

AUC(u)= frac1| mathcalIu|| mathcalI setminus mathcalIu| sumi in mathcalIu sumj in mathcalI setminus mathcalIu delta( hatrui> hatruj)،


(3.2)

AUC= frac1| mathcalU| sumu in mathcalUAUC(u).


في الصيغة (3.1) نحتاج إلى حساب التصنيف لجميع الأزواج الممكنة (ش،ط) ( u ثابت) ، وكذلك مقارنة التقييمات للعناصر من  mathcalIu مع تقييمات من  mathcalI setminus mathcalIu . بالنظر إلى أن المستخدم يتفاعل مع الجزء الضئيل من التشكيلة ، فإن تعقيد الحساب هو O(| mathcalU|| mathcalI|) . في الوقت نفسه ، فإن عصر تدريب FM يكلفنا O(| mathcalU|) .

لذلك ، قمنا بتعديل حساب AUC. أولاً ، يجب تقسيم العينة إلى تدريب  mathcalStrain subset mathcalS والتحقق من الصحة  mathcalSval subset mathcalS و  mathcalSval= mathcalS setminus mathcalStrain . بعد ذلك ، نستخدم أخذ العينات لإنشاء العديد من المستخدمين للتحقق من الصحة . للمستخدم من سيتم اعتبار عناصر الطبقة الإيجابية كثيرة لمماثلة . كعناصر لفئة سلبية ، نأخذ عينة فرعية بحيث لا عناصر من . يمكن أخذ حجم العينة الفرعي بما يتناسب مع الحجم. هذا هو . ثم الصيغ (3.1) ، (3.2) لحساب AUC سوف تتغير:

(3.3)


(3.4)


نتيجة لذلك ، نحصل على وقت ثابت لحساب AUC ، نظرًا لأننا نأخذ فقط جزءًا ثابتًا من المستخدمين والمجموعات و لديك حجم صغير. تتوقف عملية التعلم الخاصة بالمخزن بعد توقف AUC (3.4) عن التحسن.

البحث عن كائنات مماثلة


كجزء من مهمة item2item ، يجب عليك تحديد لكل عنصر (أو منتجات مماثلة قدر الإمكان) لتلك التي تزيد من قابلية النقر فوق الشعار. افتراضنا: يجب اعتبار المرشحين للراية من أعلى الأقرب في حفلات الزفاف الفضاء. اختبرنا الطرق التالية لحساب "أقرب الجيران": Scala + Spark ، ANNOY ، SCANNs ، HNSW.


بالنسبة إلى Scala + Spark لمتجر يحتوي على 500 ألف كائن ، استغرق حساب مقياس جيب التمام الصادق 15 دقيقة وكمية كبيرة من موارد المجموعة ، فيما يتعلق باختبارنا الطرق التقريبية للعثور على أقرب الجيران. عند البحث عن طريقة SCANNs ، تباينت المعلمات التالية: bucketLimit و shouldSampleBuckets و NumHashes و setSignatureLength ، لكن النتائج اتضح أنها غير مرضية مقارنة بالطرق الأخرى (تقع كائنات مختلفة جدًا في المجموعة). أظهرت خوارزميات ANNOY و HNSW نتائج مماثلة لجيب التمام الصادق ، ولكنها عملت بشكل أسرع بكثير.

200k المنتجات500 كيلو البضائع2.2m المنتجات
خوارزميةغضبHNSWغضبHNSWغضبHNSW
بناء الوقت
مؤشر (ثانية)
59.458.64258.0225.441190.8190.45
الوقت الإجمالي (ثانية)141.2314.01527.7643.382081.57150.92


نظرًا لحقيقة أن HNSW عملت بشكل أسرع من جميع الخوارزميات ، فقد قررنا التوقف عن ذلك.
نحن نبحث أيضًا عن أقرب الجيران في حاوية Spark ونكتب النتيجة في Hive مع التقسيم المناسب.

استنتاج


أذكر: نحن نستخدم WARP لتدريب النموذج ، AUC للتوقف المبكر ، ويتم إجراء تقييم الجودة النهائي باستخدام اختبار A / B على حركة المرور المباشرة.

نحن نعتقد أنه في هذا المكان - في تنظيم التجربة واختيار التكوين الأمثل للراية - تنتهي البيانات وتبدأ العلوم. هنا نتعلم تحديد ما إذا كان من المنطقي عرض توصيات للمنتجات التي نجحت عملية إعادة الاستهداف بها ؛ بالضبط عدد التوصيات لإظهارها ؛ كم عدد المنتجات التي تم عرضها ، وما إلى ذلك سنتحدث عن هذا في المقالات التالية.

يتم إجراء مزيد من التحسينات على الخوارزمية - البحث عن حفلات زفاف عالمية من شأنها أن تسمح بوضع جميع المنتجات في مكان واحد - في إطار النموذج الموصوف في بداية المقال.

شكرا لاهتمامكم!

أدب


[1] Ricci F.، Rokach L.، Shapira B. Introduction to recommender systems manual
// كتيب نظم التوصية. - سبرينغر ، بوسطن ، ماجستير ، 2011. - S. 147160.

[2] آلات Rendle S. Factorization // 2010 IEEE International Conference on Mining Mining. - IEEE ، 2010. - S. 995-1000.

[3] Rendle S. et al. BPR: تصنيف بايزي شخصية من ردود الفعل الضمنية
// وقائع المؤتمر الخامس والعشرين حول عدم اليقين في الذكاء الاصطناعي.
- AUAI Press ، 2009. - S. 452-461.

[4] Weston J.، Bengio S.، Usunier N. Wsabi: - 2011.

Source: https://habr.com/ru/post/ar445392/


All Articles