Сунуштарды тандоонун сапаты жана ылдамдыгы боюнча кантип иштейбиз

Менин атым Павел Пархоменко, мен ML иштеп чыгуучумун. Бул макалада мен Yandex.Zen сервисинин түзүмү жөнүндө айтып, техникалык өркүндөтүүлөр менен бөлүшкүм келет, аларды ишке ашыруу сунуштардын сапатын жогорулатууга мүмкүндүк берди. Бул посттон сиз миллиондогон документтердин ичинен колдонуучу үчүн эң керектүүсүн бир нече миллисекундда кантип табууга үйрөнөсүз; чоң матрицаны (миллиондогон тилкелерден жана он миллиондогон саптардан турган) үзгүлтүксүз декомпозицияны кантип жасоо керек, ошентип жаңы документтер өз векторлорун ондогон мүнөттө кабыл алат; видео үчүн жакшы вектордук көрсөтүүнү алуу үчүн колдонуучу-макала матрицанын декомпозициясын кантип кайра колдонуу керек.

Сунуштарды тандоонун сапаты жана ылдамдыгы боюнча кантип иштейбиз

Биздин сунуштар базасында ар кандай форматтагы миллиондогон документтер бар: биздин платформада түзүлгөн жана тышкы сайттардан алынган тексттик макалалар, видеолор, баяндар жана кыска посттор. Мындай кызматтын өнүгүшү көптөгөн техникалык кыйынчылыктар менен байланышкан. Бул жерде алардын айрымдары:

  • Эсептөө тапшырмаларын бөлүңүз: бардык оор операцияларды оффлайн режиминде аткарыңыз жана реалдуу убакытта 100-200 мс үчүн жооптуу болуу үчүн моделдерди тез колдонууну гана аткарыңыз.
  • Колдонуучунун аракеттерин тез эске алыңыз. Бул үчүн, бардык окуялар дароо сунуштоочуга жеткирилип, моделдердин натыйжаларына таасир этиши керек.
  • Түрмөктү жаңы колдонуучулар үчүн алардын жүрүм-турумуна тез ыңгайлашкыдай кылып жасаңыз. Системага жаңыдан кошулган адамдар алардын пикири сунуштарга таасир этээрин сезиши керек.
  • Жаңы макаланы кимге сунуштоо керектигин тез түшүнүңүз.
  • Жаңы мазмундун тынымсыз пайда болушуна тез жооп бериңиз. Күн сайын он миңдеген макалалар чыгат, алардын көбүнүн өмүрү чектелүү (айталы, кабар). Бул аларды фильмдерден, музыкадан жана башка узак жана кымбат баалуу мазмундан айырмалап турат.
  • Билимди бир домен аймагынан экинчисине өткөрүп берүү. Эгерде рекомендация системасында тексттик макалалар үчүн үйрөтүлгөн моделдер болсо жана биз ага видеону кошсок, мазмундун жаңы түрү жакшыраак орун алуу үчүн учурдагы моделдерди кайра колдоно алабыз.

Мен бул көйгөйлөрдү кантип чечкенибизди айтып берем.

Талапкерлерди тандоо

Рейтингдин сапаты дээрлик начарлабастан, каралып жаткан документтердин санын кантип бир нече миллисекундда миң эсеге кыскартууга болот?

Биз көптөгөн ML моделдерин үйрөттүк, алардын негизинде функцияларды түздүк жана колдонуучу үчүн документтердин рейтингин түзгөн башка моделди үйрөттүк дейли. Баары жакшы болмок, бирок бул документтердин миллиондогон бар болсо, жана сунуштарды 100-200 мс куруу керек болсо, реалдуу убакыт режиминде бардык документтер үчүн бардык белгилерин алып, эсептеп мүмкүн эмес. Милдет - миллиондогон адамдардын ичинен белгилүү бир топтомду тандоо, ал колдонуучу үчүн рейтингге ээ болот. Бул этап адатта талапкер тандоо деп аталат. Ал үчүн бир нече талаптар бар. Биринчиден, тандоо абдан тез болушу керек, ошондуктан рейтингдин өзүнө мүмкүн болушунча көп убакыт калды. Экинчиден, рейтинг үчүн документтердин санын бир топ кыскартуу менен, биз колдонуучуга тиешелүү документтерди мүмкүн болушунча толук сактап калышыбыз керек.

Биздин талапкерлерди тандоо принцибибиз өнүгүп, учурда биз көп баскычтуу схемага келдик:

Сунуштарды тандоонун сапаты жана ылдамдыгы боюнча кантип иштейбиз

Биринчиден, бардык документтер топторго бөлүнүп, ар бир топтон эң популярдуу документтер алынат. Топтор сайттар, темалар, кластерлер болушу мүмкүн. Ар бир колдонуучу үчүн анын тарыхынын негизинде ага эң жакын топтор тандалып алынат жана алардан эң жакшы документтер алынат. Биз ошондой эле реалдуу убакытта колдонуучуга эң жакын документтерди тандоо үчүн kNN индексин колдонобуз. kNN индексин түзүү үчүн бир нече ыкмалар бар; биздики эң жакшы иштеген HNSW (Иерархиялык Navigaable Small World графиктери). Бул бир нече миллисекундда миллиондогон маалыматтар базасынан колдонуучу үчүн эң жакын N векторду табууга мүмкүндүк берген иерархиялык модель. Биринчиден, биз бүт документ базабызды оффлайн режиминде индекстейбиз. Индексте издөө абдан тез иштегендиктен, бир нече күчтүү кыстаруулар болсо, сиз бир нече индекстерди түзө аласыз (ар бир кыстаруу үчүн бир индекс) жана алардын ар бирине реалдуу убакыт режиминде кире аласыз.

Бизде дагы эле ар бир колдонуучу үчүн он миңдеген документтер бар. Бул дагы эле бардык функцияларды санап чыгуу үчүн көп нерсе, ошондуктан бул этапта биз жеңил рейтингди колдонобуз - азыраак өзгөчөлүктөрү бар жеңил салмактагы оор рейтинг модели. Милдет - оор моделдин жогору жагында кайсы документтери болорун алдын ала билүү. Эң жогорку божомолдоочу документтер оор моделде, башкача айтканда рейтингдин акыркы этабында колдонулат. Бул ыкма колдонуучу үчүн каралып жаткан документтердин маалымат базасын ондогон миллисекундда миллиондогондон миңдегенге чейин кыскартууга мүмкүндүк берет.

ALS иштөө убактысында кадам

Бир чыкылдатуудан кийин колдонуучунун пикирлерин кантип эске алуу керек?

Сунуштарда маанилүү фактор бул колдонуучунун пикирлерине жооп берүү убактысы. Бул жаңы колдонуучулар үчүн өзгөчө маанилүү: адам сунуш системасын колдоно баштаганда, ал ар кандай темадагы документтердин жекелештирилбеген лентасын алат. Ал биринчи чыкылдаткандан кийин дароо муну эске алып, анын кызыкчылыктарына ылайыкташыңыз керек. Эгерде сиз бардык факторлорду оффлайн режиминде эсептесеңиз, системанын тез жооп берүүсү кечигүүдөн улам мүмкүн болбой калат. Демек, реалдуу убакытта колдонуучунун аракеттерин иштеп чыгуу зарыл. Бул максаттар үчүн биз колдонуучунун вектордук өкүлчүлүгүн түзүү үчүн аткаруу убагында ALS кадамын колдонобуз.

Келгиле, бизде бардык документтер үчүн вектордук өкүлчүлүк бар дейли. Мисалы, ELMo, BERT же башка машина үйрөнүү моделдерин колдонуп, макаланын текстинин негизинде офлайн режиминде кыстарууларды кура алабыз. Бир эле мейкиндиктеги колдонуучулардын системадагы өз ара аракетинин негизинде вектордук көрүнүштү кантип алсак болот?

Колдонуучу-документ матрицасын түзүүнүн жана декомпозициясынын жалпы принцибиm колдонуучу жана n документ болсун. Кээ бир колдонуучулар үчүн, алардын белгилүү бир документтерге болгон мамилеси белгилүү. Анда бул маалымат 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 колдонуучунун вектору.

Анда орточо квадраттык катанын көз карашынан оптималдуу колдонуучунун вектору (туруктуу документ векторлору үчүн) тиешелүү сызыктуу регрессияны чечүү жолу менен аналитикалык жол менен табылат.

Бул "ALS кадамы" деп аталат. Ал эми ALS алгоритминин өзү биз матрицалардын бирин (колдонуучулар жана макалалар) кезектешип оңдоп, экинчисин жаңыртып, оптималдуу чечимди табабыз.

Бактыга жараша, колдонуучунун вектордук өкүлчүлүгүн табуу өтө тез операция, аны вектордук көрсөтмөлөрдү колдонуу менен аткаруу учурунда жасоого болот. Бул трюк сизге рейтингде колдонуучунун пикирлерин дароо эске алууга мүмкүндүк берет. Ошол эле кыстаруу талапкер тандоону жакшыртуу үчүн kNN индексинде колдонулушу мүмкүн.

Бөлүштүрүлгөн биргелешкен чыпкалоо

Кантип кошумча бөлүштүрүлгөн матрицаны факторизациялоону жана жаңы макалалардын вектордук көрүнүштөрүн тез табууга болот?

Мазмун сунуш сигналдарынын жалгыз булагы эмес. Дагы бир маанилүү булак биргелешкен маалымат болуп саналат. Жакшы рейтингдик мүмкүнчүлүктөрдү салттуу түрдө колдонуучу-документ матрицасын ажыратуудан алууга болот. Бирок мындай ажыратууга аракет кылып жатканда, биз көйгөйлөргө туш болдук:

1. Бизде миллиондогон документтер жана он миллиондогон колдонуучулар бар. Матрица бир машинага толугу менен туура келбейт жана ажыроо өтө көп убакытты талап кылат.
2. Тутумдагы мазмундун көбү кыска мөөнөткө ээ: документтер бир нече саатка гана актуалдуу бойдон калууда. Ошондуктан, алардын вектордук көрүнүшүн мүмкүн болушунча тезирээк куруу керек.
3. Документ жарыялангандан кийин дароо декомпозицияны түзсөңүз, колдонуучулардын жетиштүү саны аны баалоого үлгүрбөй калат. Ошондуктан, анын вектордук чагылдырылышы, кыязы, анча жакшы болбойт.
4. Эгерде колдонуучу жактырса же жакпаса, биз муну бөлүштүрүүдө дароо эске ала албайбыз.

Бул көйгөйлөрдү чечүү үчүн биз колдонуучу-документ матрицасын тез-тез жаңыртуулар менен бөлүштүрүлгөн декомпозицияны ишке ашырдык. Бул так кантип иштейт?

Бизде N машинанын кластери бар дейли (N саны жүздөгөн) жана биз аларга бир машинага туура келбеген матрицанын бөлүштүрүлгөн декомпозициясын жасагыбыз келет. Маселе, бир жагынан ар бир машинада жетиштүү маалымат болушу үчүн, экинчи жагынан, эсептөөлөр көз карандысыз болушу үчүн, бул ажыроону кантип аткаруу керек?

Сунуштарды тандоонун сапаты жана ылдамдыгы боюнча кантип иштейбиз

Биз жогоруда сүрөттөлгөн ALS ажыратуу алгоритмин колдонобуз. Келгиле, бир ALS кадамын бөлүштүрүлгөн түрдө кантип аткарууну карап көрөлү - калган кадамдар окшош болот. Келгиле, бизде документтердин туруктуу матрицасы бар жана биз колдонуучулардын матрицасын түзгүбүз келет дейли. Бул үчүн биз аны N бөлүккө саптар боюнча бөлөбүз, ар бир бөлүктө болжол менен бирдей сандагы саптар болот. Биз ар бир машинага тиешелүү саптардын бош эмес уячаларын, ошондой эле документтердин кыстаруу матрицасын (толугу менен) жөнөтөбүз. Анын көлөмү өтө чоң эмес жана колдонуучу-документ матрицасы, адатта, өтө сейрек болгондуктан, бул маалыматтар кадимки машинага туура келет.

Бул трюк бир нече доорлор боюнча кайталанса болот, мында модель конверсацияланганга чейин, туруктуу матрицаны бир-бирден алмаштырат. Бирок, ошондо да, матрицанын ажыроо бир нече саатка созулушу мүмкүн. Жана бул жаңы документтердин кыстарууларын тез кабыл алуу жана моделди курууда аз маалымат болгондордун кыстарууларын жаңыртуу керек деген маселени чечпейт.

Моделди тез жаңыртууларды киргизүү бизге жардам берди. Бизде азыр даярдалган модель бар дейли. Анын тренингинен бери биздин колдонуучулар өз ара аракеттенген жаңы макалалар, ошондой эле тренинг учурунда өз ара аракеттешпеген макалалар пайда болду. Мындай макалалардын кыстарууларын тез алуу үчүн, биз моделдин биринчи чоң тренингинде алынган колдонуучунун кыстармаларын колдонобуз жана туруктуу колдонуучу матрицасы берилген документ матрицасын эсептөө үчүн ALS бир кадамын жасайбыз. Бул документ жарыялангандан кийин бир нече мүнөттүн ичинде кыстарууларды тез кабыл алууга мүмкүндүк берет жана көбүнчө акыркы документтердин кыстарууларын жаңыртып турат.

Сунуштарды дароо адамдын иш-аракеттерин эске алуу үчүн, иштөө убагында биз оффлайн режиминде алынган колдонуучунун кыстарууларын колдонбойбуз. Анын ордуна, биз ALS кадамын жасап, чыныгы колдонуучу векторун алабыз.

Башка домен аймагына которуу

Видеонун вектордук көрүнүшүн түзүү үчүн тексттик макалалар боюнча колдонуучунун пикирлерин кантип колдонсо болот?

Башында биз тексттик макалаларды гана сунуштаганбыз, ошондуктан биздин алгоритмдерибиздин көбү мазмундун ушул түрүнө ылайыкташтырылган. Бирок мазмундун башка түрлөрүн кошуп жатканда, биз моделдерди ылайыкташтыруу зарылдыгына туш болдук. Бул көйгөйдү видео мисал аркылуу кантип чечтик? Бир вариант - бардык моделдерди нөлдөн баштап кайра даярдоо. Бирок бул көп убакытты талап кылат, ал эми кээ бир алгоритмдер окуу үлгүсүнүн көлөмүн талап кылышат, ал жаңы типтеги мазмун үчүн талап кылынган санда али кызматта жашоосунун алгачкы учурларында жеткиликтүү эмес.

Биз башка жол менен барып, видео үчүн текст үлгүлөрүн кайра колдондук. Ошол эле ALS трюки бизге видеолордун вектордук көрүнүштөрүн түзүүгө жардам берди. Биз тексттик макалалардын негизинде колдонуучулардын вектордук өкүлчүлүгүн алдык жана видеону көрүү маалыматын колдонуу менен ALS кадамын жасадык. Ошентип, биз видеонун вектордук көрүнүшүн оңой эле алдык. Ал эми аткаруу убагында биз жөн гана тексттик макалалардан алынган колдонуучу вектор менен видео вектордун ортосундагы жакындыкты эсептейбиз.

жыйынтыктоо

Реалдуу убакыт режиминде сунуштоо системасынын өзөгүн иштеп чыгуу көптөгөн кыйынчылыктарды камтыйт. Бул маалыматтарды эффективдүү пайдалануу үчүн маалыматтарды тез иштеп чыгуу жана ML ыкмаларын колдонуу керек; минималдуу убакытта колдонуучунун сигналдарын жана жаңы мазмун бирдиктерин иштетүүгө жөндөмдүү татаал бөлүштүрүлгөн системаларды куруу; жана башка көптөгөн милдеттерди аткарат.

Мен сүрөттөгөн азыркы системада колдонуучуга сунуштардын сапаты анын активдүүлүгүнө жана кызматта болуу узактыгына жараша өсөт. Бирок, албетте, бул жерде негизги кыйынчылык жатат: бул системанын мазмуну менен аз өз ара болгон адамдын кызыкчылыктарын дароо түшүнүү үчүн кыйын. Жаңы колдонуучулар үчүн сунуштарды жакшыртуу - биздин негизги максатыбыз. Биз алгоритмдерди оптималдаштырууну улантабыз, ошондуктан адамга тиешелүү мазмун анын каналына тезирээк кирип, тиешеси жок мазмун көрсөтүлбөйт.

Source: www.habr.com

Комментарий кошуу