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 maelfu 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.
Je, ikiwa tunaweza kuunda zana ambayo mara moja hupata mnyama anayefaa zaidi kwa kila hali? Zana inayozingatia vipengele vingi kwa wakati mmoja , kuhakikisha kila mkutano ni wa kuzama na wa kusisimua iwezekanavyo?
Wacha tuanze harakati yetu wenyewe: tujenge mfumo wa mwisho wa kutafuta monster, kwa kutumia nguvu ya utafutaji wa vekta wa sifa nyingi!
Utafutaji wa Vekta 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.
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 unavyohifadhiwa na kutafutwa .
spaces
za Superlinked pia huturuhusu kupima kila sifa kwa wakati wa hoja ili kutoa matokeo muhimu zaidi, bila uchakataji wa baada. 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!
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 .
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 .
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 all-mpnet-base-v2
-uliozalishwa.
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 sifa zote tatu kwa wakati mmoja . Wacha tuunganishe matokeo yetu ili kuona jinsi wanyama wetu wakubwa wanavyofanya katika kufikia lengo hili:
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:
look
: Wanyama watatu walipatikana (Kivuli cha kunong'ona, Djinn ya Dhoruba ya Mchanga, na Mwangaza).habitat
: Mnyama mmoja tu kutoka kwa matokeo ya look
ndiye aliyekuwa muhimu (Kivuli cha Kunong'ona).behavior
: Mnyama mmoja tu kutoka kwa matokeo ya look
ndiye aliyefaa (Luminoth), lakini ni tofauti na yule anayefaa kwa habitat
.Kwa kifupi, mbinu ya utaftaji wa ujinga inashindwa kupata monsters ambayo inakidhi vigezo vyote mara moja. Labda tunaweza kurekebisha suala hili kwa kurejesha wanyama wakubwa zaidi kwa kila sifa? Wacha tujaribu na monsters 6 kwa kila sifa, badala ya 3. Wacha tuangalie ni nini njia hii hutoa:
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 bado tuna suala sawa: hakuna hata mmoja wa wanyama hawa waliopatikana kwa sifa zote tatu.
Kuongeza idadi ya wanyama waliorejeshwa (zaidi ya 6) kunaweza kutatua tatizo letu, lakini inazua masuala ya ziada:
Kwa jumla, mbinu ya ujinga haina uhakika na haifai kwa utafutaji unaowezekana wa sifa nyingi, haswa katika uzalishaji.
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 behavior
(0.006), ina sifa "inayong'aa" na mazingira ya giza ambayo hufanya look
wake (0.168) na habitat
(0.203) alama sana. juu, ikiipa alama ya juu zaidi (0.377), na kuifanya kuwa mnyama anayefaa zaidi kwa ujumla. Ni uboreshaji ulioje!
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. Tunaweza kutoa sifa za mnyama huyu na kuunda vigezo vya hoja sisi wenyewe. Lakini Superlinked ina njia ya with_vector
tunaweza kutumia kwenye kitu cha kuuliza. Kwa sababu kitambulisho cha kila mnyama ni jina lake, tunaweza kueleza ombi letu kwa urahisi kama vile:
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 ( sifa ) na Harmonic Coral:
habitat
)behavior
)look
) Tuseme, sasa, kwamba tunataka kutoa umuhimu zaidi kwa sifa look
. 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
.
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 habitat
na behavior
kwa wakati mmoja:
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 look_weight
kwa 0.5, na mfanano kati ya wanyama hawa wawili mbaya zaidi unaishia hapo.)
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 habitat_weight
(-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 habitat
ya Luminoth's na Zephyr Dancer. Alama za behavior
za Luminoth's na Zephyr Dancer ni za juu kiasi, zikionyesha mfanano wao wa kitabia na Harmonic Coral. Alama zao za look
ni chanya lakini ni za chini, zinaonyesha ufanano fulani lakini sio uliokithiri wa Harmonic Coral.
Kwa kifupi, mkakati wetu wa kupunguza uzito wa habitat_weight
-1.0 na look_weight
hadi 0.5 lakini kuweka behavior_weight
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.
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, kisha 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.)
Ili kushughulikia hali kama hizi, ni bora kuhifadhi vidhibiti vya sifa zako zote kwenye duka moja la vekta na utafute mara moja , 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.
Iliyochapishwa hapa awali.