paint-brush
Uwindaji wa Monster wa Mapinduzi: Mikutano ya D&D Iliyoimarishwa kwa AIkwa@superlinked
Historia mpya

Uwindaji wa Monster wa Mapinduzi: Mikutano ya D&D Iliyoimarishwa kwa AI

kwa Superlinked17m2025/01/31
Read on Terminal Reader

Ndefu sana; Kusoma

Nakala hiyo inachunguza utaftaji wa vekta wa sifa nyingi, ikilinganisha njia mbili kuu. Mbinu ya kutojua inajumuisha kuhifadhi kivekta ya kila sifa kando, kufanya utafutaji wa mtu binafsi, na kisha kuunganisha matokeo kupitia kuchakata baada ya. Kinyume na hilo, mbinu ya Superlinked inachanganya vekta zote za sifa kwenye duka moja la vekta, ikiruhusu utafutaji uliounganishwa ambapo sifa zinaweza kupimwa kwa nguvu wakati wa hoja—kuondoa hitaji la uchakataji baada ya usindikaji. Mfano wa Dungeons & Dragons unaonyesha faida za njia hii, ukionyesha jinsi inavyopata wanyama wakubwa wanaolingana na vigezo maalum, kama vile mwonekano, makazi na tabia. Kwa kurekebisha uzito wa sifa, mbinu hii hutoa matokeo sahihi zaidi na rahisi ya utafutaji kuliko mbinu za jadi.
featured image - Uwindaji wa Monster wa Mapinduzi: Mikutano ya D&D Iliyoimarishwa kwa AI
Superlinked HackerNoon profile picture
0-item
1-item

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 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!

Kujenga viumbe na utafutaji wa vector, kwa nini kufanya hivyo?

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 .

  1. mbinu ya ujinga - 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.
  2. mbinu ya Superlinked - kuunganisha na kuhifadhi vekta zote za sifa katika duka moja la vekta (kwa kutumia utendaji uliojengewa ndani wa Superlinked), ambayo huturuhusu kutafuta mara moja tu , na mafanikio ya ufanisi wa mhudumu. spaces za Superlinked pia huturuhusu kupima kila sifa kwa wakati wa hoja ili kutoa matokeo muhimu zaidi, bila uchakataji wa baada.

Mbinu mbili za utafutaji wa vekta wa sifa nyingi

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 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:

  1. Umuhimu kwa sifa:
    • 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 .
  2. 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. 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:

  1. Katika toleo la umma, kupata matokeo zaidi (utafutaji mwingi wa kNN) huongeza muda wa utafutaji kwa dhahiri.
  2. 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.
  3. Bado hatuna hakikisho kwamba tutapata wanyama wakubwa ambao wana sifa zetu zote tunazotaka.
  4. 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 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:

  1. Makazi ya majini ( habitat )
  2. Uwezo wa kushawishi au kudhibiti mazingira yao ( behavior )
  3. Sifa za kuona zenye nguvu au za maji ( look )

Uzani wa sifa

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.

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, 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.

Wachangiaji


Iliyochapishwa hapa awali.