Ես Պավել Փարխոմենկոն եմ, ML-զարգացվող: Այս հոդվածում ես կցանկանայի պատմել Յանդեքս.Դզեն ծառայության құрылվածքի մասին և կիսվել տեխնիկական բարելավումներով, որոնք թույլ տվեցին բարձրացնել առաջարկությունների որակը: Այս գրառման ընթացքում դուք կիմանաք, թե ինչպես կարելի է մի քանի միլիոներ փաստաթղթերի միջև գտնել օգտվողին առավելագույնս համապատասխանողը ընդամենը մի քանի միլիսեկundyում; ինչպես անել մեծ մատրիցայի անընդմեջ անկումը (որը բաղկացած է միլիոնավոր սյուներից և տասնյակ միլիոնավոր տողերից), որպեսզի նոր փաստաթղթերը իրենց վեկտորը ստանան տասնյակ րոպեների ընթացքում; ինչպես վերամասին օգտվել կոնտեքստից օգտվող-գրելուց, որպեսզի ստանալ լավ վեկտորային ներկայացում տեսանյութերի համար.

Մեր առաջարկների հիմքը ներառում է միլիոնավոր տարբեր ձևաչափով փաստաթղթեր ՝ տեքստային հոդվածներ, որոնք ստեղծվել են մեր հարթակում և վերցվել են արտաքին կայքերից, տեսանյութեր, վեպեր և կարճ գրառումներ: Ապահովելու նման ծառայությունը կապված է մեծ թվով տեխնիկական մարտահրավերների հետ: Այստեղ որոշներն են.
- Բաժանել հաշվարկային խնդիրները. բոլոր ծանր գործողությունները կատարել իրականում, իսկ իրական շրջանում կատարել միայն մոդելների արագ կիրառումը, որպեսզի պատասխանենք 100-200 միլիսեկundyում.
- Արագ հաշվեկշռել օգտվողի գործողությունները: Այս նպատակով անհրաժեշտ է, որպեսզի բոլոր իրադարձությունները անմիջապես տեղափոխվեն առաջարկողին և ազդեն մոդելների աշխատանքի վրա.
- Միացնել այնպիսի վիրտուալ հոսք, որպեսզի նոր օգտվողների համար այն արագ հարմարվի իրենց վարքին: Համակարգ նոր եկողները պետք է զգան, որ իրենց արձագանքը ազդում է առաջարկությունների վրա.
- Արագ հասկանալ, кому առաջարկել նոր հոդված:
- Անընդմիշտ արձագանքել նոր բովանդակության մշտական երևույթին: Ամեն օր տասնյակ հազարավոր հոդվածներ են հրատարակվում, և դրանցից շատերը ունեն սահմանափակ կյանք (ասենք, նորություններ): Նրանք տարբերվում են ֆիլմերից, երաժշտությունից և այլ երկարատև ու թանկարժեք բովանդակությունից.
- Տեղափոխել գիտելիքը մեկ դոմենի ոլորտից մյուս`: Եթե առաջարկների համակարգում կան ուսուցված մոդելներ տեքստային հոդվածների համար և մենք ավելացնում ենք տեսանյութեր, կարող ենք կրկին օգտագործել առկա մոդելները, որպեսզի նոր տեսակի բովանդակությունն ավելի լավ դասակարգվի.
Ես ձեզ կպատմեմ, թե ինչպես մենք լուծեցինք այս խնդիրները.
Անձանց ընտրություն
Ինչպես ընդամենը մի քանի միլիսեկundyում կրճատել դիտվող փաստաթղթերի քանակը հազարներով ՝ ոչ գրեթե վատթարացնելով դասակարգումը?
Допустим, մենք մշակել ենք բազմաթիվ ML-մոդելներ, ստեղծել ենք հատկանիշներ դրանց հիման վրա և պատրաստել այլ մոդել, որը դասակարգում է փաստաթղթերը օգտվողի համար: ամեն ինչ լավ կլիներ, սակայն պարզապես չես կարող վերցնել և հաշվել բոլոր հատկանիշները բոլոր փաստաթղթերի համար իրական ժամանակում, եթե այդ փաստաթղթերը միլիոններ են, և առաջարկություններ պետք է պատրաստվեն 100-200 միլի-seկundyում: հիմնախնդիրը - միլիոններից ընտրել որոշակի ենթախումբ, որը պետք է դասակարգվի օգտվողի համար: Այս փուլը սովորաբար կոչվում է թեկնածուների ընտրություն: Նրան ներկայացվում են մի քանի պահանջներ: Նախ, ընտրությունը պետք է տեղի ունենա շատ արագ, որպեսզի դասակարգմանը մնա հնարավորինս շատ ժամանակ: Երկրորդ, փաստաթղթերի քանակը կրկնակի կրճատելով, մենք պետք է հնարավոր ամենայնությամբ պահպանենք օգտվողի համար համապատասխան փաստաթղթերը.
Մենք թեկնածուների ընտրության մեր սկզբունքը էվոլյուցիոն կերպով զարգացել է, և այս պահին անցել ենք մուլտիստիճան սխեմայի:

Սկզբում բոլոր փաստաթղթերը բաժանվում են խմբերի, և յուրաքանչյուր խմբից վերցվում են ամենատարածված փաստաթղթերը: Խմբերը կարող են լինել կայքեր, թեմաներ, կլաստերներ: Յուրաքանչյուր օգտվողի համար ուսումնասիրության հիման վրա ընտրելու են առավել մոտիկ խմբերը, և դրանցից վերցվում են լավագույն փաստաթղթերը: Մենք նաև օգտագործում ենք kNN-գիծը օգտվողին առավել մոտիկ փաստաթղթերը իրական ժամանակում ընտրելու համար: Կան մի քանի մեթոդներ kNN-գծի կառուցման համար, մեզնից լավագույնը հաջողել է (Hierarchical Navigable Small World graphs): Սա հիերարխիկ մոդել է, որը թույլ է տալիս մի քանի միլիցիվան միջազգային շուկայից օգտվողին մոտ է գտնվել: Դրա համար մենք նախապես անընդհատ ուսումնասիրում ենք մեր փաստաթղթերի ամբողջ բազան: քանի որ որոնումը աղյուսակում աշխատում է շատ արագ, ապա մի քանի ուժեղ էնբեդինգների առկայության դեպքում կարելի է ստեղծել մի քանի աղյուսակ (մեկ աղյուսակ յուրաքանչյուր էնբեդինգի համար) և դիմել յուրաքանչյուրից πραγματικό χρόνοում.
Մեր մոտ մնում են տասնյակ հազարավոր փաստաթղթեր յուրաքանչյուր օգտվողի համար: Սա դեռ շատ է բոլոր հատկանիշների հաշվարկման համար, այնպես որ այս փուլում մենք կիրառում ենք մեղմ դասակարգում — ծանր դասակարգման թեթևացված մոդել ավելի քիչ հատկանիշներով: Արմաստակը՝ կանխատեսել, որոնք փաստաթղթերը ծանր մոդելում կհայտնվեն: Բարձրագույն կանխատեսում ունեցող փաստաթղթերը կիրառում են ծանր մոդելում, այսինքն՝ դասակարգման վերջին փուլում: Այս մոտեցումը թույլ է տալիս տասնյակ միլիցիվաների ընթացքում օգտվողի փաստաթղթերի քննարկվող բազան կրճատել միլիոններից հազարների:
ALS-ի քայլը իրական ժամանակում
Ինչպես հաշվի առնել օգտվողի հետադարձ կապը անմիջապես կտտոցից հետո?
Ամենակարևոր գործոններից մեկն է օգտագործողի արձագանքի ժամանակը: Սա հատկապես կարևոր է նոր օգտագործողների համար. երբ մարդը միայն սկսում է օգտագործել առաջարկվող համակարգը, նա ստանում է անհատականացված բազմաթիվ թեմատիկ փաստաթղթերի հոսք: Երբ նա կատարում է առաջին կլիկը, անհրաժեշտ է այսպիսի դեպքը հաշվի առնել և ենթարկվել նրա հետաքրքրություններին: Եթե՞ բոլոր գործոնները հաշվի առվեն օֆլայն, համակարգի արագ արձագանքը չի կարող լինել տարբերակի պատճառով: Ուստի, անհրաժեշտ է իրական ժամանակում մշակել օգտագործողի գործողությունները: Այս նպատակներով մենք օգտագործում ենք ALS քայլը ժամանակի ընթացքում օգտագործողի վեկտորային ներկայացման կառուցման համար:
Ներկայացնենք, որ բոլոր փաստաթղթերի համար ունենք վեկտորային ներկայացում: Օրինակ, մենք կարող ենք օֆլայն հիմք էլեկտրոնային հոդվածի տեքստի վրա ստեղծել էմբեդինգներ ELMo, BERT կամ այլ մեքենայական ուսուցման մոդելների միջոցով: Ինչպես կարող ենք ստանալ օգտագործողների վեկտորային ներկայացումները նույն տարածքում հաշվի առնելով նրանց փոխազդեցությունը համակարգի մեջ:
Գլխավոր սկզբունքը օգտվող-փաստաթուղթ մատրիցայի ձևավորումը և նրա վարման գործընթացըԲարկ հմտեք, որ ունենք m օգտագործողներ և n փաստաթղթեր: Կ algunas օգտվողների համար հայտնի է, թե ինչ հարաբերություն ունեն որոշ փաստաթղթերի նկատմամբ: Այս տեղեկությունները կարող ենք ներկայացնել m x n մատրիցով. տողերը համապատասխանում են օգտագործողներին, իսկ սյուները — փաստաթղթերին: Քանի որ ավելի շատ փաստաթղթեր մարդը չի տեսել, այդ դեպքում մատրիցայի մեծ մասը կմնա դատարկ, իսկ մյուսները կլցվեն: Յուրաքանչյուր իրադարձության (սիրվածության, անհավանության, կլիկի) համար մատրիցայից նախատեսվում է որոշակի արժեք — սակայն рассмотрим պարզեցված մոդել, որտեղ սիրելիի արժեքը 1 է, իսկ հակառակը –1:
Մատրիցան մշակենք երկու մասի՝ P (m x d) և Q (d x n), որտեղ d — վեկտորային ներկայացման չափը (օրինակ՝ փոքր թիվ): Այսպիսով, յուրաքանչյուր օբյեկտը կունենա d-միթռային վեկտոր (օգտվողը՝ P մատրիցայում, փաստաթուղթը՝ Q մատրիցայում): Այս վեկտորները կլինեն համապատասխան օբյեկտների էմբեդինգներ: Որպեսզի կանխագուշակել, կպատահի թե ոչ, որ օգտվողը կսիրի փաստաթուղթը, կարելի է պարզապես բազմապատկել նրանց էմբեդինգները:

Մատրիցայի հնարավոր ձևավորման եղանակներից մեկը՝ ALS (Alternating Least Squares). Մենք կատարել ենք հետևյալ կորուստների ֆունկցիայի օպտիմիզացիան:

Այստեղ rui — օգտվող u-ի փոխազդեցությունը փաստաթղթի i-ի հետ, qi — փաստաթղթի i-ի վեկտորը, pu — օգտվողի u-ի վեկտորը.
Ուստի, չափազանց շատ միջինի սխալի առումով իդեալական օգտվողի վեկտորը (ապարտակված փաստաթղթերի վեկտորների առկայությամբ) կարող է գտնվել վերլուծորեն համապատասխան.Linear regression-ի լուծման միջոցով:
Սա կոչվում է «ALS քայլ»: Իսկ ALS ալգորիթմն այն է, որ մենք ծեփում ենք մեկ մատրիցը (օգտվողների և հոդվածների) և թարմացնում մյուսը, գտնելով լավագույն լուծումը:
Արժեքավոր է, որ օգտվողի վեկտորային ներկայացման գտնվելը բավական արագ գործողություն է, որը կարելի է կատարել արտոնակարգում՝ օգտագործելով վեկտորային հրամաններ: Այս հնարամտությունը թույլ է տալիս անմիջապես հաշվի առնել օգտվողի հետադարձ կապը դասակարգման մեջ: Ինչպես Չափանիշի, այնպես էլ kNN ինդեքսում կարելի է օգտագործել նույն էմբեդինգը՝ թեկնածուների ընտրությունը բարելավելու համար:
Ընդհանուր համագործակցային ֆիլտրացում
Ինչպե՞ս անել ինկրեմենտալ ընդհանուր մատրիցային գործառույթ և արագ գտնել նոր հոդվածների վեկտորային ներկայացում:
Բովանդակությունը սիգնալների միակ աղբյուրը չէ առաջարկությունների համար: Այլ կարևոր աղբյուր է համագործակցային տեղեկատվությունը: Մատրիցային բաժանումից կարող են ստացվել լավ նշաններ դասակարգման համար: Սակայն՝ այդպիսի բաժանում փորձելուց հանդիպեցինք խնդիրների:
1. Մեր մոտ միլիոնավոր փաստաթղթեր և տասնյակ միլիոնավոր օգտվողներ կան: Մատրիցան չի տեղավորվում մեկ մեքենայի վրա ամբողջությամբ, և բաժանումը շատ երկար կտևի:
2. Միանգամայն բովանդակության մեծ մասը համակարգում ունի կարճ կյանքի տարի: Թղթերի արդիականությունն ընկնում է ընդամենը մի քանի ժամվա ընթացքում: Այսպիսով, անհրաժեշտ է որքան հնարավոր է արագ կառուցել դրանց վեկտորային ներկայացումը:
3. Եթե փաստաթուղթը հրապարակվելուց հետո անմիջապես բաժանումը կատարվի, այն չի հասցնի բավարար թվով օգտվողներ գնահատել: Այսպիսով, դրա վեկտորային ներկայացումը մեծ հավանականությամբ չի լինի լավ:
4. Եթե օգտվողը հավանում կամ չհավանում է, ապա մենք չենք կարող անմիջապես հաշվի առնել դա բաժանումում:
Այս խնդիրները լուծելու համար մենք իրականացրել ենք ընդհանուր բաժանում օգտող-փաստաթուղթ մատրիցայի հետ հաճախակի ինկրեմենտալ թարմացմամբ: Ինչպե՞ս է դա աշխատում:
Ե hypothesis, մեզ պետք է N մեքենաներից բաղկացած կլաստեր (N հաշվում է հարյուրներով) և մեզ պետք է անել ընդհանուր բաժանում այնպիսի մատրիցայի, որը չի տեղավորվում մեկ մեքենայի վրա: Հարցը շուրջն է, թե ինչպես իրականացնել այս բաժանումը, որպեսզի, մի կողմից, յուրաքանչյուր մեքենայում բավարար տվյալներ լինեն և, մյուս կողմից, հաշվարկները լինեն անկախ:

Օգտագործենք վերը նկարագրված ALS բաժանման ալգորիթմը: Հետաքրքիր է, թե ինչպես ընդհանուր կատարվի մեկ ALS քայլ՝ մնացած քայլերը կլինեն նման: Ե hypotheses, հասկացրել ենք փաստաթղթերի մատրիցան և ցանկանում ենք կառուցել օգտվողների մատրիցան: Դրա համար, մենք կկոտորենք այն N մասերի ըստ շարքերով, յուրաքանչյուր մասը կունենա մոտավորապես հավասար թվով շարքեր: Ծախսենք յուրաքանչյուր մեքենայի վրա այդ թվերի չորս պարունակությունը, ինչպես նաև ողջ փաստաթղթերի էմբեդինգի մատրիցան: Քանի որ այն մեծ չի, իսկ օգտողների-փաստաթուղթ մատրիցան խիստ բացասական է, այս տվյալները տեղավորվեն սովորական մեքենայի վրա:
Այս հնարքը կարելի է կրկնել մի քանի դար հետո մոդելի կոնվերգենտության համար՝ հերթով փոխելով ֆիքսված մատրիցան: Բայց նույնիսկ այդ դեպքում մատրիցայի լուծումը կարող է տևել մի քանի ժամ: Եվ դա չի լուծում այն проблему, որ անհրաժեշտ է արագ ստանալ նոր փաստաթղթերի ներդրումները և թարմացնել նրանք, որոնք քիչ տեղեկություն են ունեցել մոդելն ստեղծելիս:
Մեզ օգնեց մոդելի արագ ինկրեմենտալ թարմացման իրականացումը: فرضենք, որ մեզ մոտ կա ընթացիկ ուսուցված մոդել: Նրա ուսուցման պահից հրապարակվել են նոր հոդվածներ, որոնց հետ մեր օգտատերերը աշխատել են, ինչպես նաև հոդվածներ, որոնք ընդմիջվել են ուսուցման ժամանակ: Այդ հոդվածների արագ ներդրումը ստանալու համար մենք օգտագործում ենք օգտատերերի ներդրումները, որոնք ստացվել են առաջին մեծ ուսուցման ժամանակ, և կատարում ենք մեկ ALS քայլ՝ հաշվելու համար փաստաթղթերի մատրիցան՝ ֆիքսված օգտատերերի մատրիցայի հիման վրա: Սա թույլ է տալիս ստանալ ներդրումներ բավական արագ՝ փաստաթղթը հրապարակելուց մի քանի րոպե անց՝և հաճախ թարմացնել նոր փաստաթղթերի ներդրումները:
Այսպիսով, որպեսզի առաջարկություններում անմիջապես հաշվի առնվեն մարդու գործողությունները, մենք ռանտայմի ժամանակ չգօտագործենք օգտատերերի ներդրումները, որոնք ստացվել են օֆլայն: Դրա փոխարեն մենք կատարում ենք ALS քայլ՝ ստանալով актуալ օգտատերի վեկտորը:
Շարժումը այլ տարածքային դաշտ
Ինչպես օգտագործել օգտատերերի հետադարձ կապը տեքստային հոդվածների համար՝ vídeo վեկտորային ներկայացում ստեղծելու համար?
Սկզբում մենք առաջարկում էինք միայն տեքստային հոդվածներ, այնպես որ շատ մեր ալգորիթմներ զվարճամիտ են այս տիպի պարունակության համար: Բայց այլ տիպի պարունակություն ավելացնելիս մենք հանդիպեցինք մոդելները ադապտացնելու անհրաժեշտությանը: Ինչպես մենք լուծեցինք այս խնդիրը vídeo օրինակով? Մեկ տարբերակն է՝ բոլոր մոդելները վերացնելը ոչնչից: Բայց դա երկար է, բացի այդ, որոշ ալգորիթմներ պահանջում են ուսուցման հավաքածուի մեծ ծավալ, որն էլ դեռ չկա պահանջված քանակությամբ նոր տեսակի պարունակություն ստեղծելու առաջին պահերին:
Մենք գնացինք այլ ճանապարհով և վերօգտագործեցինք տեքստային մոդելները vídeo համար: Видео վեկտորային ներկայացումներ ստեղծելու գործում մեզ օգնեց ALS-ի նույն հնարքը: Մենք վերցրեցինք օգտատերերի վեկտորային ներկայացումը՝ հիմնված տեքստային հոդվածներում, և կատարեցինք ALS քայլ՝ օգտվելով vídeo դիտումների մասին տեղեկություններից: Таким образом, մենք հեշտությամբ ստացանք vídeo վեկտորային ներկայացումը: Իսկ ռանտայմում մենք պարզապես հաշվարկում ենք օգտատերի վեկտորի մտերմությունը, որը ստացվել է տեքստային հոդվածների հիման վրա, և vídeo վեկտորի միջև:
Ավարտ
Անկախ ռեալ-ժամանակի առաջարկների համակարգի մշակումը լայն շրջանակով խնդիրների հետ է կապված։ Պետք է արագ մշակել տվյալները և կիրառել ML մեթոդները՝ այդ տվյալների արդյունավետ օգտագործման համար։ Շարունակել сложные распределенные системы, որոնք կարող են արագ մշակել օգտվողի ազդակները և նոր բովանդակության միավորները, և շատ այլ խնդիրներ։
Այս համակարգի դեպքում, որը ես նկարագրել եմ, առաջարկների որակը աճում է օգտվողի ակտիվության և ծառայությունում մնալու տևողության հետ։ Բայց, իհարկե, այստեղ դրվում է հիմնական դժվարությունը. համակարգը դժվարանում է անմիջապես հասկանալ մարդու հետաքրքրությունները, որը հազվադեպ է համագործակցել բովանդակության հետ։ Նոր օգտվողների համար առաջարկների բարելավումը մեր հիմնական խնդիրն է։ Մենք շարունակելու ենք օպտիմիզացնել ալգորիթմները, որպեսզի մարդու համար համապատասխան բովանդակությունը ավելի արագ հասնի նրա նորությունը, իսկ ոչ համապատասխանները չես ցուցադրվի։
Ընտանիք: habr.com
