Rekommendationssystem är en av de mest använda teknikerna för maskininlärning (ML) i verkliga applikationer, allt från sociala nätverk till e-handelsplattformar. Användare av många onlinesystem förlitar sig på rekommendationssystem för att skapa nya vänskaper, upptäcka ny musik enligt föreslagna musiklistor eller till och med fatta beslut om e-handelsköp baserat på de rekommenderade produkterna. I sociala nätverk är ett vanligt användningsfall att rekommendera nya vänner till en användare baserat på användarnas andra kopplingar. Användare med gemensamma vänner känner sannolikt varandra. Därför bör de ha en högre poäng för ett rekommendationssystem att föreslå om de inte har anslutits ännu.
Sociala nätverk kan naturligtvis uttryckas i en graf, där noderna representerar människor, och kopplingarna mellan människor, som vänskap eller arbetskamrater, representeras av kanter. Följande illustrerar ett sådant socialt nätverk. Låt oss föreställa oss att vi har ett socialt nätverk med medlemmarna (noderna) Bill, Terry, Henry, Gary och Alistair. Deras relationer representeras av en länk (kant), och varje persons intressen, såsom sport, konst, spel och serier, representeras av nodegenskaper.
Målet här är att förutsäga om det finns en potentiell saknad länk mellan medlemmar. Ska vi till exempel rekommendera en koppling mellan Henry och Terry? När vi tittar på grafen kan vi se att de har två gemensamma vänner, Gary och Alistair. Därför finns det en god chans att Henry och Terry antingen redan kände varandra eller kanske lär känna varandra snart. Vad sägs om Henry och Bill? De har inga gemensamma vänner, men de har en svag koppling genom sina vänners kopplingar. Dessutom har de båda liknande intressen för konst, serier och spel. Bör vi främja denna koppling? Alla dessa frågor och intuitioner är kärnlogiken i rekommendationssystem för sociala nätverk.
Ett möjligt sätt att göra detta är att rekommendera relationer baserade på grafutforskning. I graffrågespråk, som t.ex Apache TinkerPop Gremlin, är implementeringen av regeluppsättningar som att räkna gemensamma vänner relativt lätt, och det kan användas för att fastställa kopplingen mellan Henry och Terry. Dessa regeluppsättningar kommer dock att vara mycket komplicerade när vi vill ta hänsyn till andra attribut som nodegenskaper, anslutningsstyrka, etc. Låt oss föreställa oss en regeluppsättning för att bestämma kopplingen mellan Henry och Bill. Denna regeluppsättning måste ta hänsyn till deras gemensamma intressen och deras svaga kopplingar genom vissa vägar i grafen. För att öka robustheten kan vi också behöva lägga till en avståndsfaktor för att gynna starka kopplingar och straffa de svaga. På samma sätt skulle vi vilja ha en faktor som gynnar gemensamma intressen. Snart kommer regeluppsättningarna som kan avslöja komplexa dolda mönster att bli omöjliga att räkna upp.
ML-teknik låter oss upptäcka dolda mönster genom att lära oss algoritmer. Ett exempel är XGBoost, som används flitigt för klassificerings- eller regressionsuppgifter. Algoritmer som XGBoost använder dock en konventionell ML-metod baserat på ett tabellformat. Dessa tillvägagångssätt är inte optimerade för grafdatastrukturer, och de kräver komplex funktionsteknik för att klara av dessa datamönster.
I det föregående exemplet på sociala nätverk är grafinteraktionsinformationen avgörande för att förbättra rekommendationens noggrannhet. Graph Neural Network (GNN) är ett ramverk för djupinlärning (DL) som kan tillämpas på grafdata för att utföra prediktionsuppgifter på kantnivå, nodnivå eller grafnivå. GNN kan utnyttja individuella nodegenskaper såväl som grafstrukturinformation när man lär sig grafrepresentationen och underliggande mönster. Därför har GNN-baserade metoder under de senaste åren satt nya standarder för många referenssystems riktmärken. Se mer detaljerad information i de senaste forskningsartiklarna: En omfattande undersökning om grafiska neurala nätverk och Grafinlärningsbaserade rekommendationssystem: En recension.
Följande är ett känt exempel på ett sådant användningsfall. Forskare och ingenjörer på Pinterest har utbildat sig Graph Convolutional Neural Networks for Web-Scale Recommender Systems, kallad PinSage, med tre miljarder noder som representerar stift och brädor, och 18 miljarder kanter. PinSage genererar högkvalitativa inbäddningar som representerar pins (visuella bokmärken till onlineinnehåll). Dessa kan användas för ett brett utbud av rekommendationsuppgifter nedströms, till exempel sökningar efter närmaste granne i det inlärda inbäddningsutrymmet för innehållsupptäckt och rekommendationer.
I det här inlägget kommer vi att gå igenom hur du använder GNN:er för rekommendationsanvändningsfall genom att casta detta som ett länkförutsägelseproblem. Vi kommer också att illustrera hur Neptune ML kan underlätta implementeringen. Vi kommer också att tillhandahålla exempelkod på GitHub att träna din första GNN med Neptune ML och göra rekommendationer om demografen genom länkförutsägelseuppgifter.
Länkförutsägelse med Graph Neural Networks
Med tanke på det tidigare exemplet på sociala nätverk, skulle vi vilja rekommendera nya vänner till Henry. Både Terry och Bill skulle vara bra kandidater. Terry har fler gemensamma vänner (Gary, Alistair) med Henry men inga gemensamma intressen. Medan Bill delar gemensamma intressen (konst, serier, spel) med Henry, men inga gemensamma vänner. Vilken skulle vara en bättre rekommendation? När det ramas in som ett länkförutsägelseproblem är uppgiften att tilldela en poäng till varje möjlig länk mellan de två noderna. Ju högre länkpoäng, desto mer sannolikt kommer denna rekommendation att konvergera. Genom att lära sig länkstrukturer som redan finns i grafen kan en länkprediktionsmodell generalisera nya länkförutsägelser som "fullbordar" grafen.
Funktionens parametrar f
som förutsäger länkpoängen lärs in under träningsfasen. Sedan funktionen f
gör en förutsägelse för två valfria noder i grafen, är funktionsvektorerna associerade med noderna väsentliga för inlärningsprocessen. För att förutsäga länkpoängen mellan Henry och Bill har vi en uppsättning rådatafunktioner (konst, serier, spel) som kan representera Henry och Bill. Vi omvandlar detta, tillsammans med kopplingarna i grafen, med hjälp av ett GNN-nätverk för att bilda nya representationer som kallas nod-inbäddningar. Vi kan också komplettera eller ersätta de ursprungliga råfunktionerna med vektorer från en inbäddningsuppslagstabell som kan läras under utbildningsprocessen. Helst bör de inbäddade funktionerna för Henry och Bill representera deras intressen såväl som deras topologiska information från grafen.
Hur GNN fungerar
En GNN omvandlar de initiala nodfunktionerna till nodinbäddningar genom att använda en teknik som kallas meddelande som passerar. Processen för att skicka meddelanden illustreras i följande figur. I början omvandlas nodattributen eller funktionerna till numeriska attribut. I vårt fall gör vi en hett kodning av de kategoriska dragen (Henrys intressen: konst, serier, spel). Sedan samlar det första lagret av GNN alla grannarnas (Gary och Alistair) råa funktioner (i svart) för att bilda en ny uppsättning funktioner (i gult). Ett vanligt tillvägagångssätt är den linjära transformationen av alla närliggande särdrag, sedan aggregera dem genom en normaliserad summa och skicka resultaten till en icke-linjär aktiveringsfunktion, såsom ReLU, för att generera en ny vektoruppsättning. Följande figur illustrerar hur meddelandeöverföring fungerar för nod Henry. H, GNN-meddelandets överföringsalgoritm, kommer att beräkna representationer för alla grafnoder. Dessa används senare som indatafunktioner för det andra lagret.
Det andra lagret av en GNN upprepar samma process. Den tar den tidigare beräknade funktionen (i gult) från det första lagret som indata, aggregerar alla Gary och Alistairs grannars nya inbäddade funktioner och genererar andra lagerfunktionsvektorer för Henry (i orange). Som du kan se, genom att upprepa mekanismen för meddelandeöverföring, utökade vi funktionsaggregationen till grannar med två hopp. I vår illustration begränsar vi oss till 2-hop grannar, men att utöka till 2-hop grannar kan göras på samma sätt genom att lägga till ytterligare ett GNN-lager.
De sista inbäddningarna från Henry och Bill (i orange) används för att beräkna poängen. Under träningsprocessen definieras länkpoängen som 1 när kanten finns mellan de två noderna (positivt sampel) och som 0 när kanterna mellan de två noderna inte existerar (negativt sampel). Sedan, felet eller förlusten mellan den faktiska poängen och förutsägelsen f(e1,e2)
återförs till tidigare lager för att justera vikterna. När träningen är klar kan vi lita på de inbäddade funktionsvektorerna för varje nod för att beräkna deras länkpoäng med vår funktion f
.
I det här exemplet förenklade vi inlärningsuppgiften på a homogen graf, där alla noder och kanter är av samma typ. Till exempel är alla noder i diagrammet av typen "People", och alla kanter är typen "vänner med". Men inlärningsalgoritmen stöder även heterogena grafer med olika nod- och kanttyper. Vi kan utöka det tidigare användningsfallet för att rekommendera produkter till olika användare som delar liknande interaktioner och intressen. Se mer information i detta forskningsdokument: Modellera relationsdata med diagramkonvolutionsnätverk.
På AWS re:Invent 2020 introducerade vi Amazon Neptune ML, vilket låter våra kunder träna ML-modeller på grafdata, utan att nödvändigtvis ha djup ML-expertis. I det här exemplet kommer vi med hjälp av Neptune ML att visa dig hur du bygger ditt eget rekommendatorsystem på grafdata.
Träna ditt Graph Convolution Network med Amazon Neptune ML
Neptune ML använder grafisk neural nätverksteknik för att automatiskt skapa, träna och distribuera ML-modeller på dina grafdata. Neptune ML stöder vanliga grafförutsägelseuppgifter, såsom nodklassificering och regression, kantklassificering och regression och länkförutsägelse.
Den drivs av:
- Amazon Neptunus: en snabb, pålitlig och fullständigt hanterad grafdatabas, som är optimerad för att lagra miljarder relationer och fråga efter grafen med millisekunders latens. Amazon Neptune stöder tre öppna standarder för att bygga grafapplikationer: Apache TinkerPop Gremlin, RDF SPARQL och openCypher. Läs mer på Översikt över Amazon Neptune-funktioner.
- Amazon SageMaker: en helt hanterad tjänst som ger varje utvecklare och datavetare möjligheten att snabbt förbereda bygga, träna och distribuera ML-modeller.
- Deep Graph Library (DGL): en öppen källkod, högpresterande och skalbart Python-paket för DL på grafer. Det ger snabba och minneseffektiva meddelanden som skickar primitiver för träning av Graph Neural Networks. Neptune ML använder DGL för att automatiskt välja och träna den bästa ML-modellen för din arbetsbelastning. Detta gör att du kan göra ML-baserade förutsägelser på grafdata i timmar istället för veckor.
Det enklaste sättet att komma igång med Neptune ML är att använda AWS CloudFormation snabbstartsmall. Mallen installerar alla nödvändiga komponenter, inklusive ett Neptune DB-kluster, och ställer in nätverkskonfigurationer, IAM-roller och tillhörande SageMaker-anteckningsboksinstans med förifyllda anteckningsboksexempel för Neptune ML.
Följande figur illustrerar olika steg för Neptune ML att träna ett GNN-baserat rekommendationssystem. Låt oss zooma in på varje steg och utforska vad det innebär:
-
Dataexportkonfiguration
Det första steget i vår Neptune ML-process är att exportera grafdata från Neptune-klustret. Vi måste specificera parametrarna och modellkonfigurationen för dataexportuppgiften. Vi använder Neptune-arbetsbänken för alla konfigurationer och lovord. Arbetsbänken låter oss arbeta med Neptune DB-klustret med hjälp av Jupyter-anteckningsböcker hos Amazon SageMaker. Dessutom ger den ett antal magiska kommandon i anteckningsböckerna som sparar mycket tid och ansträngning. Här är vårt exempel på exportparametrar:
In export_params
, måste vi konfigurera den grundläggande inställningen, såsom Neptune-klustret och output Amazon Simple Storage Service (S3) sökväg för exporterad datalagring. Konfigurationen som anges i additionalParams
är den typ av ML-uppgift som ska utföras. I det här exemplet används länkprediktion valfritt för att förutsäga en viss kanttyp (Användare—VÄN—Användare). Om ingen måltyp specificeras kommer Neptune ML att anta att uppgiften är Link Prediction. Parametrarna anger också detaljer om data som lagras i vår graf och hur ML-modellen kommer att tolka dessa data (vi har "Användare" som nod och "intressen" som nodegenskap).
För att köra varje steg i ML-byggprocessen, använd helt enkelt Neptune arbetsbänkskommandon. De Neptune arbetsbänk innehåller en linjemagi och en cellmagi som kan spara mycket tid på att hantera dessa steg. För att köra dataexporten, använd kommandot Neptune workbench: %neptune_ml export start
När exportjobbet är klart kommer vi att ha Neptunus-grafen exporterad till CSV-format och lagrad i en S3-hink. Det kommer att finnas två typer av filer: nodes.csv
och edges.csv
. En fil som heter training-data-configuration.json
kommer också att genereras som har den konfiguration som behövs för att Neptune ML ska kunna utföra modellträning.
Se Exportera data från Neptune för Neptune ML för mer information.
-
Förbehandling av data
Neptune ML utför funktionsextraktion och kodning som en del av databearbetningsstegen. Vanliga typer av förbearbetning av egendom inkluderar: kodning av kategoriska egenskaper genom one-hot-kodning, bucketing av numeriska funktioner eller användning av word2vec för att koda en strängegenskap eller andra friformsvärden för textegenskap.
I vårt exempel kommer vi helt enkelt att använda egenskapen "intressen". Neptune ML kodar värdena som multikategoriska. Men om ett kategoriskt värde är komplext (mer än tre ord per nod) drar Neptune ML slutsatsen att egenskapstypen är text och använder text_word2vec-kodningen.
För att köra dataförbearbetning, använd följande Neptune notebook magiska kommando: %neptune_ml dataprocessing start
I slutet av detta steg genereras en DGL-graf från den exporterade datamängden för användning av modellträningssteget. Neptune ML ställer automatiskt in modellen med Hyperparameter Optimization Tuning-jobb definierade i training-data-configuration.json
. Vi kan ladda ner och modifiera den här filen för att justera modellens hyperparametrar, såsom batch-storlek, num-hidden, num-epochs, dropout, etc. Här är en exempel på filen configuration.json.
Se Bearbetar grafdata som exporteras från Neptune för träning för mer information.
-
Modellutbildning
Nästa steg är den automatiserade utbildningen av GNN-modellen. Modellutbildningen sker i två steg. Det första steget använder ett SageMaker Processing-jobb för att generera en modell för utbildningsstrategi. Detta är en konfigurationsuppsättning som specificerar vilken typ av modell- och modellhyperparameterintervall som kommer att användas för modellträningen.
Sedan kommer ett SageMaker hyperparameterjusteringsjobb att lanseras. De SageMaker Hyperparameter Tuning Optimization jobb kör ett förbestämt antal modellträningsjobbförsök på den bearbetade datan, provar olika hyperparameterkombinationer enligt model-hpo-configuration.json
fil och lagrar modellartefakterna som genereras av träningen i Amazon S3-utdataplatsen.
För att starta träningssteget kan du använda %neptune_ml training start
kommando.
När alla träningsjobb är klara kommer inställningsjobbet med Hyperparameter att spara artefakterna från den modell som har bäst prestanda, som kommer att användas för slutledning.
I slutet av utbildningen kommer Neptune ML att instruera SageMaker att spara den tränade modellen, de råa inbäddningarna som beräknats för noderna och kanterna och kartläggningsinformationen mellan inbäddningarna och nodindexen.
Se Att träna en modell med hjälp av Neptune ML för mer information.
-
Skapa en slutpunkt för slutledning i Amazon SageMaker
Nu när grafrepresentationen är inlärd kan vi distribuera den inlärda modellen bakom en slutpunkt för att utföra slutledningsbegäranden. Modellinmatningen kommer att vara den användare som vi behöver generera vänners rekommendationer för, tillsammans med kanttypen, och utdata kommer att vara listan över de troligtvis rekommenderade vännerna för den användaren.
För att distribuera modellen till SageMaker-slutpunktsinstansen, använd %neptune_ml endpoint create
kommando.
-
Fråga ML-modellen med Gremlin
När slutpunkten är klar kan vi använda den för grafisk slutledningsfrågor. Neptune ML stöder grafinferensfrågor i Gremlin eller SPARQL. I vårt exempel kan vi nu kontrollera vänners rekommendation med Neptune ML på användaren "Henry". Det kräver nästan samma syntax för att korsa kanten, och det listar de andra användare som är anslutna till Henry via FRIEND-anslutningen.
Neptune#ml.prediction
returnerar anslutningen som bestäms av Neptune ML-förutsägelser genom att använda modellen som vi just tränade på den sociala grafen. Bill returneras precis som våra förväntningar.
Här är ett annat exempel på förutsägelsefråga som används för att förutsäga de åtta bästa användarna som med största sannolikhet kommer att ansluta till Henry:
Resultaten rangordnas från starkare koppling till svagare, där koppling Henry — FRIEND — Colin and Henry — FRIEND — Terry
föreslås också. Detta förslag är genom grafbaserad ML där komplexa interaktionsmönster på grafer kan utforskas.
Se Gremlin slutledningsfrågor i Neptune ML för mer information.
Modellomvandling eller omskolning när grafdata ändras
En annan fråga du kan ställa är: vad händer om mitt sociala nätverk ändras, eller om jag vill ge rekommendationer för nyligen tillagda användare? I dessa scenarier, där du har ständigt föränderliga grafer, kan du behöva uppdatera ML-förutsägelser med de senaste grafdata. De genererade modellartefakterna efter träning är direkt kopplade till träningsdiagrammet. Detta innebär att slutpunktens slutpunkt måste uppdateras när entiteterna i det ursprungliga träningsdiagrammet ändras.
Du behöver dock inte träna om hela modellen för att göra förutsägelser på den uppdaterade grafen. Med ett inkrementellt modellinferensarbetsflöde behöver du bara exportera Neptune DB-data, utföra en inkrementell dataförbearbetning, köra ett modellbatchtransformeringsjobb och sedan uppdatera slutpunktens slutpunkt. Modellomvandlingssteget tar den tränade modellen från huvudarbetsflödet och resultaten av steget för inkrementell dataförbehandling som indata. Sedan matar den ut en ny modellartefakt att använda för slutledning. Denna nya modellartefakt skapas från aktuella grafdata.
Ett speciellt fokus här är för stegkommandot modellförvandling. Den kan beräkna modellartefakter på grafdata som inte användes för modellträning. Nodinbäddningarna beräknas om och alla befintliga nodinbäddningar åsidosätts. Neptune ML tillämpar den inlärda GNN-kodaren från den tidigare tränade modellen på de nya grafdatanoderna med sina nya funktioner. Därför måste den nya grafdatan bearbetas med samma funktionskodningar och den måste följa samma grafschema som den ursprungliga grafdatan. Se mer Neptune ML implementeringsdetaljer på Genererar nya modellartefakter.
Dessutom kan du träna om hela modellen om grafen förändras dramatiskt, eller om den tidigare tränade modellen inte längre kunde representera de underliggande interaktionerna korrekt. I det här fallet kan återanvändning av de inlärda modellparametrarna på en ny graf inte garantera en liknande modellprestanda. Du måste träna om din modell på den nya grafen. För att påskynda sökningen av hyperparametrar kan Neptune ML utnyttja informationen från den tidigare modellens träningsuppgift med varmstart: resultaten från tidigare träningsjobb används för att välja bra kombinationer av hyperparametrar för att söka över det nya inställningsjobbet.
Se arbetsflöden för hantering av grafdata under utveckling för mer detaljer.
Slutsats
I det här inlägget har du sett hur Neptune ML och GNN kan hjälpa dig att ge rekommendationer om grafdata med hjälp av en länkförutsägelseuppgift genom att kombinera information från de komplexa interaktionsmönstren i grafen.
Länkförutsägelse är ett sätt att implementera ett rekommendationssystem på graf. Du kan konstruera din rekommendator på många andra sätt. Du kan använda inbäddningarna som du lärt dig under länkförutsägelseträning för att gruppera noderna i olika segment på ett oövervakat sätt och rekommendera objekt till den som tillhör samma segment. Dessutom kan du erhålla inbäddningarna och mata in dem i ett nedströms likhetsbaserat rekommendationssystem som en inmatningsfunktion. Nu kodar denna extra inmatningsfunktion också den semantiska informationen som härrör från grafen och kan ge betydande förbättringar av systemets övergripande precision. Lär dig mer om Amazon Neptune ML genom att besöka webbplats eller ställ gärna frågor i kommentarerna!
Om författarna
Yanwei Cui, PhD, är en maskininlärningsspecialistlösningsarkitekt på AWS. Han startade maskininlärningsforskning vid IRISA (Research Institute of Computer Science and Random Systems) och har flera års erfarenhet av att bygga artificiell intelligensdrivna industriella applikationer inom datorsyn, bearbetning av naturligt språk och online -beteendeprognoser. På AWS delar han domänkompetensen och hjälper kunderna att låsa upp affärspotentialer och driva användbara resultat med maskininlärning i stor skala. Utanför jobbet tycker han om att läsa och resa.
Will Badr är en Principal AI/ML Specialist SA som arbetar som en del av det globala Amazon Machine Learning-teamet. Will brinner för att använda teknik på innovativa sätt för att positivt påverka samhället. På fritiden gillar han att dyka, spela fotboll och utforska Stillahavsöarna.
- '
- "
- 100
- 2020
- 7
- Om oss
- Enligt
- Konto
- Dessutom
- Annat
- algoritm
- algoritmer
- Alla
- redan
- amason
- Amazon maskininlärning
- Amazon SageMaker
- Apache
- tillämpningar
- konstgjord
- artificiell intelligens
- konst
- Automatiserad
- AWS
- AWS re: Invent
- Börjar
- BÄST
- Bill
- Miljarder
- Svart
- SLUTRESULTAT
- Byggnad
- företag
- fall
- utmaningar
- klassificering
- koda
- Gemensam
- samfundet
- komplex
- Compute
- Datavetenskap
- Datorsyn
- databehandling
- konfiguration
- anslutning
- Anslutningar
- Konsol
- innehåll
- konvergerar
- kunde
- Kunder
- datum
- datavetare
- datalagring
- Databas
- behandla
- djupt lärande
- Utvecklare
- olika
- Upptäckten
- avstånd
- e-handel
- kant
- Slutpunkt
- Teknik
- Ingenjörer
- etc
- exempel
- erfarenhet
- utforskning
- export
- extraktion
- SNABB
- Leverans
- Funktioner
- Figur
- Förnamn
- Fokus
- formen
- format
- Ramverk
- Fri
- Vänskap
- fungera
- Games
- generera
- Välgörenhet
- god
- diagram neurala nätverk
- stor
- Arbetsmiljö
- hjälpa
- hjälper
- här.
- Hur ser din drömresa ut
- How To
- HTTPS
- IAM
- Inverkan
- genomföra
- förbättra
- Inklusive
- Öka
- individuellt
- industriell
- informationen
- innovativa
- Intelligens
- interaktion
- intressen
- IT
- Jobb
- Lediga jobb
- språk
- Språk
- LÄRA SIG
- lärt
- inlärning
- Hävstång
- Bibliotek
- linje
- LINK
- Lista
- listor
- läge
- du letar
- slå upp
- maskininlärning
- Medlemmar
- millisekund
- ML
- modell
- Musik
- Naturligt språk
- Naturlig språkbehandling
- behövs
- grannar
- nät
- nätverk
- neural
- neurala nätverk
- neurala nätverk
- Nya funktioner
- noder
- bärbara datorer
- nätet
- öppet
- Övriga
- stilla havet
- Papper
- Personer
- prestanda
- fas
- Plattformar
- Spela
- Precision
- förutsägelse
- Förutsägelser
- presentera
- Principal
- Problem
- process
- Produkter
- Profil
- främja
- egenskapen
- föreslå
- ge
- ger
- inköp
- Python
- fråga
- område
- Raw
- rådata
- RE
- Läsning
- regression
- Förhållanden
- ersätta
- forskning
- Resultat
- omskolning
- återgår
- Körning
- sagemaker
- Skala
- Vetenskap
- Sök
- in
- Dela
- aktier
- liknande
- Enkelt
- Small
- Fotboll
- Social hållbarhet
- social graf
- sociala nätverk
- sociala nätverk
- Lösningar
- Utrymme
- Sporter
- Etapp
- standarder
- starta
- igång
- förvaring
- lagrar
- Strategi
- komplettera
- Stöder
- Undersökning
- system
- System
- Målet
- Tekniken
- Teknologi
- Grafen
- Genom
- tid
- topp
- Utbildning
- Förvandla
- Transformation
- Uppdatering
- us
- användare
- värde
- syn
- Vad
- VEM
- brett
- wikipedia
- utan
- ord
- Arbete
- arbetsflöde
- fungerar
- skulle
- år
- zoom