Jeshi la Giza linaloendeshwa na AI Ni usiku wa mchezo, marafiki zako wameketi karibu na jedwali la michezo, wakisubiri kuona wahusika wa Dungeons & Dragons (D&D) na watajaribu kuanza. Usiku wa leo, wewe ni Mwalimu wa Dungeon (msimulizi wa hadithi na mwongozaji), mbunifu wa matukio ya kusisimua ili kuwapa changamoto na kuwasisimua wachezaji wako. Mwongozo wako wa kuaminika wa D&D Monster una ya viumbe. Kupata monster kamili kwa kila hali kati ya chaguzi nyingi inaweza kuwa kubwa. Adui anayefaa anahitaji kuendana na mpangilio, ugumu, na simulizi la wakati huo. maelfu Je, ikiwa tunaweza kuunda zana ambayo mara moja hupata mnyama anayefaa zaidi kwa kila hali? , kuhakikisha kila mkutano ni wa kuzama na wa kusisimua iwezekanavyo? Zana inayozingatia vipengele vingi kwa wakati mmoja Wacha tuanze harakati yetu wenyewe: tujenge mfumo wa mwisho wa kutafuta monster, kwa kutumia nguvu ya utafutaji wa vekta wa sifa nyingi! Kujenga viumbe na utafutaji wa vector, kwa nini kufanya hivyo? unawakilisha mapinduzi katika urejeshaji habari. Upachikaji wa Vekta - kwa kuzingatia muktadha na maana ya kisemantiki - huwezesha utafutaji wa vekta ili kurudisha matokeo muhimu na sahihi zaidi, kushughulikia sio tu data iliyopangwa lakini pia isiyo na muundo na lugha nyingi, na kiwango. Lakini ili kutoa majibu ya ubora wa juu katika programu za ulimwengu halisi, mara nyingi tunahitaji kupeana uzani tofauti kwa sifa mahususi za vipengee vyetu vya data. Utafutaji wa Vekta Kuna njia mbili za kawaida za utaftaji wa vekta wa sifa nyingi. Zote huanza kwa kupachika kando kila sifa ya kitu cha data. Tofauti kuu kati ya mbinu hizi mbili ni jinsi upachikaji wetu na . unavyohifadhiwa kutafutwa mbinu - kuhifadhi kila kivekta cha sifa katika maduka tofauti ya vekta (moja kwa kila sifa), tafuta tofauti kwa kila sifa, changanya matokeo ya utafutaji, na baada ya mchakato (kwa mfano, uzito) inavyohitajika. ya ujinga mbinu - kuunganisha na kuhifadhi vekta zote za sifa katika duka moja la vekta (kwa kutumia utendaji uliojengewa ndani wa Superlinked), ambayo huturuhusu , na mafanikio ya ufanisi wa mhudumu. za Superlinked huturuhusu kupima kila sifa kwa wakati wa hoja ili kutoa matokeo muhimu zaidi, bila uchakataji wa baada. ya Superlinked kutafuta mara moja tu spaces pia Hapo chini, tutatumia mbinu hizi mbili kutekeleza zana ya utafutaji ya vekta yenye sifa nyingi - kitafutaji cha Dungeons na Dragons! Utekelezaji wetu rahisi, hasa wa pili, utaonyesha jinsi ya kuunda mifumo ya utafutaji yenye nguvu zaidi na inayoweza kunyumbulika, ambayo inaweza kushughulikia maswali magumu, yenye vipengele vingi kwa urahisi, vyovyote vile utumiaji wako. Ikiwa wewe ni mgeni katika utafutaji wa kufanana kwa vekta, usijali! Tumekushughulikia - angalia . nakala zetu za ujenzi Sawa, wacha tuende kuwinda monster! Seti ya data Kwanza, tutatoa mkusanyiko mdogo wa data wa viumbe wa ajabu, kwa kuuliza Mfano Kubwa wa Lugha (LLM): Generate two JSON lists: 'monsters' and 'queries'. 1. 'monsters' list: Create 20 unique monsters with the following properties: - name: A distinctive name - look: Brief description of appearance (2-3 sentences) - habitat: Where the monster lives (2-3 sentences) - behavior: How the monster acts (2-3 sentences) Ensure some monsters share similar features while remaining distinct. 2. 'queries' list: Create 5 queries to search for monsters: - Each query should be in the format: {look: "...", habitat: "...", behavior: "..."} - Use simple, brief descriptions (1-3 words per field) - Make queries somewhat general to match multiple monsters Output format: { "monsters": [ {"name": "...", "look": "...", "habitat": "...", "behavior": "..."}, ... ], "queries": [ {"look": "...", "habitat": "...", "behavior": "..."}, ... ] } Wacha tuangalie sampuli ya hifadhidata iliyotengenezwa na LLM yetu. Kumbuka: Uzalishaji wa LLM sio wa kuamua, kwa hivyo matokeo yako yanaweza kutofautiana. Hapa kuna viumbe wetu watano wa kwanza: # jina tazama makazi tabia 0 Mwangaza Kiumbe anayefanana na nondo mwenye mbawa zinazong'aa na antena Misitu minene na misitu yenye mimea ya bioluminescent Hutoa mifumo nyepesi ya kutuliza ili kuwasiliana na kuvutia mawindo 1 Aqua Wraith Kielelezo cha humanoid cha uwazi kilichoundwa na maji yanayotiririka Mito, maziwa na maeneo ya pwani Mabadiliko ya umbo ili kuchanganyika na vyanzo vya maji na kudhibiti mikondo 2 Stoneheart Golem Humanoid kubwa inayojumuisha miamba iliyounganishwa Milima ya mawe na magofu ya kale Hibernates kwa karne nyingi, huamsha kulinda eneo lake 3 Kivuli kinachonong'ona Kivuli, kiumbe cha amofasi na macho ya kung'aa Misitu ya giza na majengo yaliyoachwa Hulisha woga na kunong'ona ukweli usiotulia 4 Mchezaji wa Zephyr Kiumbe wa ndege mwenye kupendeza na mwenye manyoya yenye rangi isiyo na rangi Vilele vya milima mirefu na nyanda zinazopeperushwa na upepo Huunda maonyesho ya angani ya kuvutia ili kuvutia wenzi ... na maswali yetu yanayotokana: Tazama Makazi Tabia 0 Inang'aa Maeneo ya giza Udanganyifu wa mwanga 1 Elemental Mazingira yaliyokithiri Udhibiti wa mazingira 2 Ubadilishaji umbo Mandhari mbalimbali Ubunifu wa udanganyifu 3 Fuwele Maeneo yenye madini mengi Unyonyaji wa nishati 4 Ethereal Anga Ushawishi wa akili Tazama seti halisi ya data na mifano ya hoja . hapa Urejeshaji Wacha tuweke vigezo tutakavyotumia katika mbinu zetu zote mbili - zisizo na maana na Zilizounganishwa - hapa chini. Tunatengeneza upachikaji wetu wa vekta na: sentence-transformers/all-mpnet-base-v2. Kwa ajili ya kurahisisha matokeo, tutaweka kikomo cha matokeo yetu kwa mechi 3 bora. (Kwa nambari kamili, pamoja na uagizaji muhimu na vitendaji vya msaidizi, angalia .) daftari LIMIT = 3 MODEL_NAME = "sentence-transformers/all-mpnet-base-v2" Sasa, wacha tuanze utafutaji wetu wa monster wenye sifa nyingi! Kwanza, tutajaribu mbinu . ya ujinga Mbinu ya ujinga Katika mbinu yetu ya ujinga, tunapachika sifa kwa kujitegemea na kuzihifadhi katika fahirisi tofauti. Wakati wa kuuliza, tunaendesha utafutaji mwingi wa kNN kwenye fahirisi zote, na kisha kuchanganya matokeo yetu yote kwa sehemu moja. Tunaanza kwa kufafanua darasa NaiveRetriever kufanya utafutaji unaotegemea kufanana kwenye mkusanyiko wetu wa data, kwa kutumia upachikaji wetu -uliozalishwa. all-mpnet-base-v2 class NaiveRetriever: def __init__(self, data: pd.DataFrame): self.model = SentenceTransformer(MODEL_NAME) self.data = data.copy() self.ids = self.data.index.to_list() self.knns = {} for key in self.data: embeddings = self.model.encode(self.data[key].values) knn = NearestNeighbors(metric="cosine").fit(embeddings) self.knns[key] = knn def search_key(self, key: str, value: str, limit: int = LIMIT) -> pd.DataFrame: embedding = self.model.encode(value) knn = self.knns[key] distances, indices = knn.kneighbors( [embedding], n_neighbors=limit, return_distance=True ) ids = [self.ids[i] for i in indices[0]] similarities = (1 - distances).flatten() # by definition: # cosine distance = 1 - cosine similarity result = pd.DataFrame( {"id": ids, f"score_{key}": similarities, key: self.data[key][ids]} ) result.set_index("id", inplace=True) return result def search(self, query: dict, limit: int = LIMIT) -> pd.DataFrame: results = [] for key, value in query.items(): if key not in self.knns: continue result_key = self.search_key(key, value, limit=limit) result_key.drop(columns=[key], inplace=True) results.append(result_key) merged_results = pd.concat(results, axis=1) merged_results["score"] = merged_results.mean(axis=1, skipna=False) merged_results.sort_values("score", ascending=False, inplace=True) return merged_results naive_retriever = NaiveRetriever(df.set_index("name")) Wacha tutumie swali la kwanza kutoka kwa orodha yetu iliyotengenezwa hapo juu, na tutafute wanyama wakubwa kwa kutumia : naive_retriever query = { 'look': 'glowing', 'habitat': 'dark places', 'behavior': 'light manipulation' } naive_retriever.search(query) Yetu naive_retriever hurejesha matokeo ya utafutaji yafuatayo kwa kila sifa: kitambulisho alama_angalia tazama Kivuli kinachonong'ona 0.503578 Kivuli, kiumbe cha amofasi na macho ya kung'aa Djinn Dhoruba ya mchanga 0.407344 Mchanga unaozunguka wenye alama zinazong'aa Mwangaza 0.378619 Kiumbe anayefanana na nondo mwenye mbawa zinazong'aa na antena Inashangaza! Matokeo yetu ya monster yaliyorejeshwa yanafaa - yote yana sifa "inayong'aa". Wacha tuone mbinu ya kutojua inarudi nini tunapotafuta sifa zingine mbili. kitambulisho alama_makazi makazi Kivuli kinachonong'ona 0.609567 Misitu ya giza na majengo yaliyoachwa Mtandao wa Kuvu 0.438856 Mapango ya chini ya ardhi na misitu yenye unyevunyevu Thornvine Elemental 0.423421 Magofu yaliyokua na misitu minene kitambulisho alama_tabia tabia Graffiti inayoishi 0.385741 Mibadiliko ya umbo ili kuchanganyika na mazingira na kunyonya rangi Crystalwing Drake 0.385211 Huhifadhi vito vya thamani na inaweza kugeuza mwanga kuwa miale yenye nguvu Mwangaza 0.345566 Hutoa mifumo nyepesi ya kutuliza ili kuwasiliana na kuvutia mawindo Wanyama wote waliorejeshwa wana sifa zinazohitajika. Kwa mtazamo wa kwanza, matokeo ya utafutaji wa ujinga yanaweza kuonekana kuwa ya kuahidi. Lakini tunahitaji kupata monsters ambao wana . Wacha tuunganishe matokeo yetu ili kuona jinsi wanyama wetu wakubwa wanavyofanya katika kufikia lengo hili: sifa zote tatu kwa wakati mmoja kitambulisho alama_angalia alama_makazi alama_tabia Kivuli kinachonong'ona 0.503578 0.609567 Dhoruba ya mchanga Djinn 0.407344 Mwangaza 0.378619 0.345566 Mtandao wa Kuvu 0.438856 Thornvine Elemental 0.423421 Graffiti inayoishi 0.385741 Crystalwing Drake 0.385211 Na hapa, mipaka ya mbinu ya ujinga inakuwa dhahiri. Hebu tufanye tathmini: Umuhimu kwa sifa: : Wanyama watatu walipatikana (Kivuli cha kunong'ona, Djinn ya Dhoruba ya Mchanga, na Mwangaza). look : Mnyama mmoja tu kutoka kwa matokeo ya ndiye aliyekuwa muhimu (Kivuli cha Kunong'ona). habitat look : Mnyama mmoja tu kutoka kwa matokeo ya ndiye aliyefaa (Luminoth), lakini ni tofauti na yule anayefaa kwa . behavior look habitat Umuhimu wa jumla: Hakuna monster mmoja aliyepatikana kwa sifa zote tatu kwa wakati mmoja. Matokeo yamegawanywa: monsters tofauti ni muhimu kwa sifa tofauti. Kwa kifupi, mbinu ya utaftaji wa ujinga inashindwa kupata monsters ambayo inakidhi vigezo vyote mara moja. Wacha tujaribu na monsters 6 kwa kila sifa, badala ya 3. Wacha tuangalie ni nini njia hii hutoa: Labda tunaweza kurekebisha suala hili kwa kurejesha wanyama wakubwa zaidi kwa kila sifa? kitambulisho alama_angalia alama_makazi alama_tabia Kivuli kinachonong'ona 0.503578 0.609567 Dhoruba ya mchanga Djinn 0.407344 0.365061 Mwangaza 0.378619 0.345566 Jellyfish ya Nebula 0.36627 0.259969 Dreamweaver Octopus 0.315679 Kimulimuli cha Quantum 0.288578 Mtandao wa Kuvu 0.438856 Thornvine Elemental 0.423421 Ukungu Phantom 0.366816 0.236649 Stoneheart Golem 0.342287 Graffiti inayoishi 0.385741 Crystalwing Drake 0.385211 Aqua Wraith 0.283581 Sasa tumerejesha wanyama wakubwa 13 (zaidi ya nusu ya mkusanyiko wetu mdogo wa data!), na tuna suala sawa: hakuna hata mmoja wa wanyama hawa waliopatikana kwa sifa zote tatu. bado Kuongeza idadi ya wanyama waliorejeshwa (zaidi ya 6) kutatua tatizo letu, lakini inazua masuala ya ziada: kunaweza Katika toleo la umma, kupata matokeo zaidi (utafutaji mwingi wa kNN) huongeza muda wa utafutaji kwa dhahiri. Kwa kila sifa mpya tunayoanzisha, nafasi zetu za kupata monster "kamili" - pamoja na sifa zote katika hoja yetu - hupungua kwa kasi. Ili kuzuia hili, tunapaswa kurejesha majirani wengi wa karibu zaidi (mamonsters), na kufanya jumla ya idadi ya wanyama waliorejeshwa kukua kwa kasi. Bado hatuna hakikisho kwamba tutapata wanyama wakubwa ambao wana sifa zetu zote tunazotaka. Iwapo tutafanikiwa kupata viumbe hai vinavyokidhi vigezo vyote kwa wakati mmoja, itatubidi kutumia matokeo ya ziada ya upatanisho. Kwa jumla, mbinu ya ujinga haina uhakika na haifai kwa utafutaji unaowezekana wa sifa nyingi, haswa katika uzalishaji. Mbinu iliyounganishwa Wacha tutekeleze njia yetu ya pili ili kuona ikiwa inafanya vizuri zaidi kuliko ile ya ujinga. Kwanza, tunafafanua schema, nafasi, faharisi, na hoja: @schema class Monster: id: IdField look: String habitat: String behavior: String monster = Monster() look_space = TextSimilaritySpace(text=monster.look, model=MODEL_NAME) habitat_space = TextSimilaritySpace(text=monster.habitat, model=MODEL_NAME) behavior_space = TextSimilaritySpace(text=monster.behavior, model=MODEL_NAME) monster_index = Index([look_space, habitat_space, behavior_space]) monster_query = ( Query( monster_index, weights={ look_space: Param("look_weight"), habitat_space: Param("habitat_weight"), behavior_space: Param("behavior_weight"), }, ) .find(monster) .similar(look_space.text, Param("look")) .similar(habitat_space.text, Param("habitat")) .similar(behavior_space.text, Param("behavior")) .limit(LIMIT) ) default_weights = { "look_weight": 1.0, "habitat_weight": 1.0, "behavior_weight": 1.0 } Sasa, tunaanza mtekelezaji na kupakia data: monster_parser = DataFrameParser(monster, mapping={monster.id: "name"}) source: InMemorySource = InMemorySource(monster, parser=monster_parser) executor = InMemoryExecutor(sources=[source], indices=[monster_index]) app = executor.run() source.put([df]) Wacha tuendeshe swali lile lile tuliloendesha katika utekelezaji wa mbinu yetu ya ujinga hapo juu: query = { 'look': 'glowing', 'habitat': 'dark places', 'behavior': 'light manipulation' } app.query( monster_query, limit=LIMIT, **query, **default_weights ) kitambulisho alama tazama makazi tabia Kivuli kinachonong'ona 0.376738 Kivuli, kiumbe cha amofasi na macho ya kung'aa Misitu ya giza na majengo yaliyoachwa Hulisha woga na kunong'ona ukweli usiotulia Mwangaza 0.340084 Kiumbe anayefanana na nondo mwenye mbawa zinazong'aa na antena Misitu minene na misitu yenye mimea ya bioluminescent Hutoa mifumo nyepesi ya kutuliza ili kuwasiliana na kuvutia mawindo Graffiti inayoishi 0.330587 Kiumbe chenye sura mbili, chenye rangi nyingi ambacho hukaa kwenye nyuso tambarare Maeneo ya mijini, haswa kuta na mabango Mibadiliko ya umbo ili kuchanganyika na mazingira na kunyonya rangi Et voila! Wakati huu, kila moja ya wanyama wetu wakuu waliorudishwa inashika nafasi ya juu katika alama inayowakilisha aina ya "maana" ya sifa zote tatu tunazotaka mnyama wetu awe nazo. Wacha tuchambue alama za kila monster kwa undani: kitambulisho tazama makazi tabia jumla Kivuli kinachonong'ona 0.167859 0.203189 0.005689 0.376738 Mwangaza 0.126206 0.098689 0.115189 0.340084 Graffiti inayoishi 0.091063 0.110944 0.12858 0.330587 Matokeo yetu ya pili na ya tatu, Luminoth na Living Graffiti, zote zina sifa tatu zinazohitajika. Matokeo ya juu, Kivuli cha Kunong'ona, ingawa haifai sana katika suala la udanganyifu wa mwanga - kama inavyoonyeshwa katika alama yake (0.006), ina sifa "inayong'aa" na mazingira ya giza ambayo hufanya wake (0.168) na (0.203) alama sana. juu, ikiipa alama ya juu zaidi (0.377), na kuifanya kuwa mnyama anayefaa zaidi kwa ujumla. Ni uboreshaji ulioje! behavior look habitat Je, tunaweza kuiga matokeo yetu? Hebu tujaribu swali lingine na tujue. query = { 'look': 'shapeshifting', 'habitat': 'varied landscapes', 'behavior': 'illusion creation' } kitambulisho alama tazama makazi tabia Ukungu Phantom 0.489574 Ethereal, humanoid inayofanana na ukungu na vipengele vinavyobadilika Mabwawa, moors, na ukanda wa pwani wenye ukungu Huwavutia wasafiri kwa udanganyifu na minong'ono Mchezaji wa Zephyr 0.342075 Kiumbe wa ndege mwenye kupendeza na mwenye manyoya yenye rangi isiyo na rangi Vilele vya milima mirefu na nyanda zinazopeperushwa na upepo Huunda maonyesho ya angani ya kuvutia ili kuvutia wenzi Kivuli kinachonong'ona 0.337434 Kivuli, kiumbe cha amofasi na macho ya kung'aa Misitu ya giza na majengo yaliyoachwa Hulisha woga na kunong'ona ukweli usiotulia Kubwa! Matokeo yetu ni bora tena. Je, ikiwa tunataka kupata wanyama wakubwa ambao ni sawa na mnyama mkubwa kutoka kwa mkusanyiko wetu wa data? Wacha tujaribu na monster ambayo hatujaona bado - Harmonic Coral. kutoa sifa za mnyama huyu na kuunda vigezo vya hoja sisi wenyewe. Lakini Superlinked ina njia ya tunaweza kutumia kwenye kitu cha kuuliza. Kwa sababu kitambulisho cha kila mnyama ni jina lake, tunaweza kueleza ombi letu kwa urahisi kama vile: Tunaweza with_vector app.query( monster_query.with_vector(monster, "Harmonic Coral"), **default_weights, limit=LIMIT ) kitambulisho alama tazama makazi tabia Matumbawe ya Harmonic 1 Muundo wa matawi, unaofanana na ala ya muziki na mielekeo inayotetemeka Bahari ya kina kifupi na mabwawa ya maji Huunda nyimbo changamano ili kuwasiliana na kuathiri hisia Dreamweaver Octopus 0.402288 Cephalopod yenye mikunjo inayometa kama aurora Mifereji ya kina kirefu ya bahari na mapango ya chini ya maji Inathiri ndoto za viumbe vya karibu Aqua Wraith 0.330869 Kielelezo cha humanoid cha uwazi kilichoundwa na maji yanayotiririka Mito, maziwa na maeneo ya pwani Mabadiliko ya umbo ili kuchanganyika na vyanzo vya maji na kudhibiti mikondo Matokeo ya juu ndiyo yanayofaa zaidi, Harmonic Coral yenyewe, kama inavyotarajiwa. Wanyama wengine wawili ambao tunatafuta ni Dreamweaver Octopus na Aqua Wraith. Zote zinashiriki vitu muhimu vya mada ( ) na Harmonic Coral: sifa Makazi ya majini ( ) habitat Uwezo wa kushawishi au kudhibiti mazingira yao ( ) behavior Sifa za kuona zenye nguvu au za maji ( ) look Uzani wa sifa Tuseme, sasa, kwamba tunataka kutoa umuhimu zaidi kwa sifa . Mfumo wa Superlinked huturuhusu kurekebisha uzito kwa urahisi wakati wa hoja. Kwa ulinganisho rahisi, tutatafuta wanyama wakali wanaofanana na Harmonic Coral, lakini uzani wetu ukiwa umerekebishwa ili kupendelea . look look weights = { "look_weight": 1.0, "habitat_weight": 0, "behavior_weight": 0 } app.query( monster_query.with_vector(monster, "Harmonic Coral"), limit=LIMIT, **weights ) kitambulisho alama tazama makazi tabia Matumbawe ya Harmonic 0.57735 Muundo wa matawi, unaofanana na ala ya muziki na mielekeo inayotetemeka Bahari ya kina kifupi na mabwawa ya maji Huunda nyimbo changamano ili kuwasiliana na kuathiri hisia Thornvine Elemental 0.252593 Kiumbe kama mmea na mwili wa mizabibu iliyopotoka na miiba Magofu yaliyokua na misitu minene Hukua haraka na kudhibiti maisha ya mimea inayozunguka Nyoka ya Plasma 0.243241 Kiumbe anayefanana na nyoka aliyetengenezwa kwa nishati inayopasuka Dhoruba za umeme na mitambo ya nguvu Inalisha mikondo ya umeme na inaweza kutumia teknolojia ya mzunguko mfupi Matokeo yetu yote (inafaa) yana mwonekano sawa - "Matawi yenye mitiririko ya vibrating", "Kiumbe kinachofanana na mimea na mwili wa mizabibu iliyopotoka na miiba", "Nyoka-kama". Sasa, wacha tufanye utafutaji mwingine, kwa kupuuza mwonekano, na badala yake tutafute monsters ambao wanafanana katika suala la na kwa wakati mmoja: habitat behavior weights = { "look_weight": 0, "habitat_weight": 1.0, "behavior_weight": 1.0 } kitambulisho alama tazama makazi tabia Matumbawe ya Harmonic 0.816497 Muundo wa matawi, unaofanana na ala ya muziki na mielekeo inayotetemeka Bahari ya kina kifupi na mabwawa ya maji Huunda nyimbo changamano ili kuwasiliana na kuathiri hisia Dreamweaver Octopus 0.357656 Cephalopod yenye mikunjo inayometa kama aurora Mifereji ya kina kirefu ya bahari na mapango ya chini ya maji Inathiri ndoto za viumbe vya karibu Ukungu Phantom 0.288106 Ethereal, humanoid inayofanana na ukungu na vipengele vinavyobadilika Mabwawa, moors, na ukanda wa pwani wenye ukungu Huwavutia wasafiri kwa udanganyifu na minong'ono Tena, mbinu ya Superlinked hutoa matokeo mazuri. Wanyama wote watatu wanaishi katika mazingira ya maji na wana uwezo wa kudhibiti akili. Mwishowe, wacha tujaribu utaftaji mwingine, tukiweka uzani wa sifa zote tatu tofauti - kupata wanyama wakubwa ambao kwa kulinganisha na Harmonic Coral wanaonekana sawa, wanaishi katika makazi tofauti sana, na wana tabia sawa: weights = { "look_weight": 0.5, "habitat_weight": -1.0, "behavior_weight": 1.0 } kitambulisho alama tazama makazi tabia Matumbawe ya Harmonic 0.19245 Muundo wa matawi, unaofanana na ala ya muziki na mielekeo inayotetemeka Bahari ya kina kifupi na mabwawa ya maji Huunda nyimbo changamano ili kuwasiliana na kuathiri hisia Mwangaza 0.149196 Kiumbe anayefanana na nondo mwenye mbawa zinazong'aa na antena Misitu minene na misitu yenye mimea ya bioluminescent Hutoa mifumo nyepesi ya kutuliza ili kuwasiliana na kuvutia mawindo Mchezaji wa Zephyr 0.136456 Kiumbe wa ndege wa kupendeza na wenye manyoya yenye rangi isiyo na rangi Vilele vya milima mirefu na nyanda zinazopeperushwa na upepo Huunda maonyesho ya angani ya kuvutia ili kuvutia wenzi Matokeo mazuri tena! Wanyama wetu wengine wawili waliorejeshwa - Luminoth na Zephyr Dancer - wana tabia sawa na Harmonic Coral na wanaishi katika makazi tofauti na Harmonic Coral's. Pia zinaonekana tofauti sana na Harmonic Coral. (Ijapokuwa mikunjo ya Harmonic Coral na antena ya Luminoth ni sifa zinazofanana, tulipunguza uzito wa kwa 0.5, na mfanano kati ya wanyama hawa wawili mbaya zaidi unaishia hapo.) look_weight Wacha tuone jinsi alama za jumla za wanyama hawa wakubwa huibuka kulingana na sifa za mtu binafsi: kitambulisho tazama makazi tabia jumla Matumbawe ya Harmonic 0.19245 -0.3849 0.3849 0.19245 Mwangaza 0.052457 -0.068144 0.164884 0.149196 Mchezaji wa Zephyr 0.050741 -0.079734 0.165449 0.136456 Kwa uzani hasi wa (-1.0), "tunasukuma mbali" kwa makusudi wanyama wadogo walio na makazi yanayofanana na badala yake kuwakumba wanyama wakubwa ambao mazingira yao ni tofauti na ya Harmonic Coral - kama inavyoonekana katika alama hasi ya Luminoth's na Zephyr Dancer. Alama za za Luminoth's na Zephyr Dancer ni za juu kiasi, zikionyesha mfanano wao wa kitabia na Harmonic Coral. Alama zao za ni chanya lakini ni za chini, zinaonyesha ufanano lakini sio uliokithiri wa Harmonic Coral. habitat_weight habitat behavior look fulani Kwa kifupi, mkakati wetu wa kupunguza uzito wa -1.0 na hadi 0.5 lakini kuweka saa 1.0 kunathibitisha ufanisi katika kuwakabili wanyama-mwitu wanaoshiriki sifa kuu za kitabia na Harmonic Coral lakini wana mazingira tofauti sana na wanaonekana angalau tofauti. habitat_weight look_weight behavior_weight Hitimisho Utafutaji wa vekta yenye sifa nyingi ni maendeleo makubwa katika urejeshaji taarifa, unaotoa usahihi zaidi, uelewaji wa muktadha, na kunyumbulika kuliko utafutaji msingi wa mfanano wa kisemantiki. Bado, mbinu yetu ya kutojua (hapo juu) - kuhifadhi na kutafuta vivekta vya sifa kando, kuchanganya matokeo - ina kikomo katika uwezo, ujanja, na ufanisi tunapohitaji kupata vitu vilivyo na sifa nyingi kwa wakati mmoja. (Zaidi ya hayo, utafutaji mwingi wa kNN huchukua muda zaidi kuliko utafutaji mmoja wenye vekta zilizounganishwa.) kisha Ili kushughulikia hali kama hizi, ni bora kuhifadhi vidhibiti vya sifa zako zote kwenye duka moja la vekta na , ukiweka uzani wa sifa zako kwa wakati wa hoja. Mbinu ya Superlinked ni sahihi zaidi, yenye ufanisi, na ina hatari zaidi kuliko mbinu ya kipuuzi kwa programu yoyote inayohitaji urejeshaji wa vekta wa haraka, unaotegemewa, usio na maana, wenye sifa nyingi - iwe kesi yako ya utumiaji inashughulikia changamoto za ulimwengu halisi katika biashara yako ya mtandaoni au mfumo wa mapendekezo. ... au kitu tofauti kabisa, kama vile kupigana na monsters. utafute mara moja Wachangiaji Andrey Pikunov, mwandishi Bwana Kapronczay, Mhariri Iliyochapishwa awali. hapa