Article by Rafał Rybnik, Szoftverfejlesztési vezető Instytut Badań Pollster
Hacsak másképp nem szerepel, a cikkben szereplő összes képet a szerző készítette.
A mai online hirdetési valóságban a hatékony marketing taktikák a felhasználók nyomon követésének különböző módozataira támaszkodnak. technikákra, például harmadik féltől származó cookie-kra (és alternatív tárolókra), valamint az eszköz-ujjlenyomatok rögzítésére. De egy GDPR, a CCPA és az ezek által inspirált fokozott adatvédelmi jogszabályok világában ez a megközelítés elavulttá válik. A Safari és a Firefox már beépített megoldásokkal csökkenti a keresztoldali követést. A Chrome is dolgozik az alternatívákon. A harmadik féltől származó sütiknek tehát hamarosan vége. Az Apple azonosítója a Advertisers (IDFA) hamarosan csak a felhasználó kifejezett beleegyezésével rendelkező alkalmazások számára lesz elérhető. A domainek közötti nyomon követés lehetőségének eltűnése arra készteti a hirdetőket, hogy visszatérjenek a kontextusfüggő reklámozáshoz.
Ebben a cikkben bemutatom, hogyan lehet a szöveges osztályozási API alapján kontextuscélzást megvalósítani. NLP Cloud által biztosított eszközzel. Az itt leírt megközelítés könnyen adaptálható bármilyen hirdetési technológiához. (például hirdetéskiszolgálók, OpenRTB stb.).
Mivel a hirdetők nem lesznek képesek a harmadik féltől származó cookie-k segítségével egyéni felhasználókat megcélozni, egy egyszerű előrejelzés szerint a kontextuális reklámkampányok ismét emelkedni fognak. Ez lehet az egyetlen módja annak, hogy a felhasználókat célzottan a felhasználók érdeklődési körét kellően nagy léptékben megcélozni. A kontextuális hirdetések a felhasználó által megtekintett tartalomra épülnek. a böngésző előzményei vagy viselkedési profilja helyett.
(kép a Mi a kontextuális
Reklám?)
Ez állítólag érdekesebb lesz a felhasználók számára, mivel olyan hirdetéseket látnak majd, amelyek illeszkednek az adott témához. weboldal témájához illeszkedik.
A legtöbb hirdetéskiszolgáló technológia és hirdetési hálózat támogatja a kulcsszavak vagy címkék átadását a hirdetés során. kódok alatt. A szöveg a web lényege, és rendkívül gazdag információforrás lehet. Azonban, a szövegkörnyezet, a címkék és a kulcsszavak kinyerése belőle, például hirdetési vagy ajánlási célokra, igen nehézkes lehet. nehéz és időigényes lehet. De ha Ön akár egy közepes méretű híroldal tulajdonosa is, néhány címkén túl a szerkesztőség által kiosztott címkéken túl nehéz lesz az összes releváns témát kinyerni.
A folyamat automatizálására tett első próbálkozások a múltban többé-kevésbé mulatságos baklövésekhez vezettek:
Szerencsére a természetes nyelvi feldolgozás fejlődése lehetővé teszi, hogy sokkal pontosabb találatokat találjunk, rövidebb idő alatt. A szövegosztályozás a szöveg tartalmának megfelelő kategóriák vagy címkék hozzárendelése.
Nézzünk egy példaoldalt, amely különböző témájú cikkeket tartalmaz:
Célunk, hogy a hirdetések a cikk tartalmához tematikusan kapcsolódó bannereket jelenítsenek meg.
Feltételek, amelyeknek a megoldásunknak meg kell felelnie:
Megjegyzendő, hogy a hirdetési rendszerek és a webfejlesztés kívül esik ennek a cikknek a tárgykörén, de a az általános fogalmak a használt eszközöktől és technológiáktól függetlenül ugyanazok maradnak.
Az általam preferált megoldás ilyen esetekben az, hogy a szöveg osztályozását kezelő logikát szétválasztom egy külön API-ba. Két lehetőségünk van: magunk készíthetjük el, vagy használhatunk egy kész megoldást.
Egy egyszerű szövegosztályozó motor elkészítése Python és Natural Language Processing könyvtárak segítségével egy délutáni feladat. A probléma azonban a pontosság és a megnövekedett forgalom kiszolgálása szempontjából merül fel. Valahogyan kezelnünk kell a növekvő felhasználói bázist és kattintásfolyamukat.
Ha Ön egy weboldal tulajdonosa, akkor valószínűleg nem szeretne a gépi tanulási modellek hangolásával és értékelésével játszani. Ezért amennyire csak lehet, delegáljuk egy külső megoldásra. Megjegyezzük, hogy nem tervezzük, hogy felhasználói adatokat küldünk ide, csak a weboldalhoz tartozó adatokat. Ez sokkal egyszerűbbé teszi a külső kontextuális célzási eszközök használatát a felhasználók adatvédelme szempontjából.
Az NLP Cloud több API-t kínál a gépi tanulási modellekkel történő szövegfeldolgozáshoz. Az egyik ilyen a szövegosztályozó, amely ígéretesnek tűnik az egyszerű megvalósítás szempontjából. (lásd a dokumentumokat).
Az NLP Cloud API segítségével kipróbálhatja, melyik algoritmus lehet hasznos egy adott üzleti esetben.
Mivel a weboldal hátoldala Python-alapú (Flask), ezért egy egyszerű kliens megírásával kezdjük a Natural Language Processing (természetes nyelvi feldolgozás) API-HOZ:
import pandas as pd
import requests
import json
class TextClassification:
def __init__(self, key, base='https://api.nlpcloud.io/v1/bart-large-mnli',):
self.base = base
self.headers = {
"accept": "application/json",
"content-type": "application/json",
"Authorization": f"Token {key}"
}
def get_keywords(self, text, labels):
url = f"{self.base}/classification"
payload = {
"text":text,
"labels":labels,
"multi_class": True
}
response = requests.request("POST", url, json=payload, headers=self.headers)
result = []
try:
result = dict(zip(response.json()['labels'], response.json()['scores']))
except:
pass
return result
tc = TextClassification(key='APIKEY')
print(
tc.get_keywords(
"Football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal. Unqualified, the word football normally means the form of football that is the most popular where the word is used. Sports commonly called football include association football (known as soccer in some countries); gridiron football (specifically American football or Canadian football); Australian rules football; rugby football (either rugby union or rugby league); and Gaelic football.[1][2] These various forms of football share to varying extent common origins and are known as football codes.",
["football", "sport", "cooking", "machine learning"]
)
)
Results:
{
'labels': [
'sport',
'football',
'machine learning',
'cooking'
],
'scores': [
0.9651273488998413,
0.938549280166626,
0.013061746023595333,
0.0016104158712550998
]
}
Elég jó. Minden címke minden erőfeszítés nélkül hozzárendeli a témához való relevanciáját.
A terv az, hogy a megjelenítendő bannerek kiválasztását egy hirdetéskiszolgáló rendszer végzi (döntés az egyedileg hozzárendelt címkék pontszámai alapján történik). Ezért annak érdekében, hogy ne tegyük ki a API-kulcsokat, és hogy nagyobb kontrollunk legyen az adatok felett, egy egyszerű proxy-t fogunk írni:
@app.route('/get-labels',methods = ['POST'])
def get_labels():
if request.method == 'POST':
try:
return tc.get_keywords(request.json['text'], request.json['labels'])
except:
return []
Tegyük fel, hogy 3 hirdetési kampányt kell lefuttatnunk:
Biztosító (kulcsszó: insurance)
Megújuló energiával foglalkozó vállalat (kulcsszó: renewables)
Fodrász (kulcsszó: good look)
Vázoljunk fel egy mechanizmust a front-endre, amely a megfelelő kreatív megjelenítését kezeli.
function displayAd(keyword, placement_id) {
var conditions = {
false: ' ',
"insurance": ' ',
"renewables": ' ',
"good look": ' '
}
var banner = document.querySelector(placement_id);
banner.innerHTML = conditions[keyword];
}
Ez a mi adserverünk 🤪
Most a fetch segítségével lekérdezzük a cikk szövegének címkéit, amelyeket a szelektor segítségével kapunk meg:
var text = document.querySelector("#article").textContent;
var labels = ["insurance", "renewables", "good look"];
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"text":text,"labels":labels});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
};
fetch("http://127.0.0.1:5000/get-labels", requestOptions)
.then(response =>
response.json()
)
.then(result => {
if (result == []){
console.log("self-promote");
displayAd(false, "#banner");
} else {
var scores = result['scores'];
var labels = result['labels'];
if (Math.max(...scores) >= 0.8) {
console.log("Ad success");
var indexOfMaxScore = scores.reduce((iMax, x, i, arr) => x > arr[iMax] ? i : iMax, 0);
displayAd(labels[indexOfMaxScore], "#banner");
} else {
displayAd(false, "#banner");
}
}
})
.catch(error => console.log('error', error));
Vegye figyelembe, hogy csak akkor jelenítjük meg az ügyfélhirdetést, ha a pontszám 0,8 felett van:
Math.max(…scores) >= 0.8
Ellenkező esetben önreklámot mutatunk.
Ez természetesen egy önkényes érték, amely szükség szerint szigorítható és lazítható.
A megújuló energiaforrással kapcsolatos hírek illeszkednek a PV-cella hirdetésekhez.
A házban lévő veszélyekről szóló hírek növelhetik a vásárlási szándékot
biztosítás megkötésére.
Bár egy biztosítási hirdetés is alkalmas lett volna a cikkhez, de ez
nem jelent meg, mert nem volt megfelelő a relevancia szintje.
A figyelmes olvasó észreveszi, hogy a fodrászbanner példája nem jelent meg. Ez mert a cikkek témája a komoly világhírekre összpontosít, ahol a divat kérdései nem foglalkoznak. Ahhoz, hogy a kampányt meg lehessen valósítani, más oldalt kell választani, vagy újra kell gondolni a kulcsszavas stratégiáját.
Ennek az aszinkron funkciónak köszönhetően gyors oldalbetöltést érhetünk el: fetch
.
Ugyanakkor a hirdetés csak a címkék letöltése után jelenik meg. Emiatt
és a költségek csökkentése érdekében a legjobb, ha a termelési környezetben valamilyen gyorsítótárat alkalmazunk.
További módosítás lehet a címkék egyszerű tárolása közvetlenül az adatbázisban. A ritkán frissített cikkek esetében ennek mindenképpen van értelme.
Azonban egy külön API-n alapuló megoldás, amellyel bármilyen szöveget betáplálhatunk, és megkapjuk a címkéket, a következőket adja nekünk lehetőséget, hogy a JS kódot gyakorlatilag bármilyen oldalon szinte valós időben használjuk, akár a backendhez!
A legnagyobb kihívást a kontextuális célzás alkalmazása jelenti a hírportálokon. Sok téma jelenik meg a az ott közzétett cikkekben, köztük olyanok is, amelyek összhangban vannak a hirdető iparágával. De a ugyanakkor az ott található szenzációs, gyakran szomorú felhangú történetek nem a megfelelő hely a hirdetni.
A szöveg NLP Cloud által használt szövegosztályozó API viszont elég jó munkát végez a szövegek címkézésében, ezért megismételhetjük az egész folyamatot, ezúttal szem előtt tartva, hogy kizárjuk az adott témájú szövegeket. a bannerek kibocsátásától (lásd a szövegosztályozási API oldalt)
Köszönjük, hogy elolvasta. Remélem, legalább annyira élveztétek az olvasást, mint amennyire én élveztem, hogy ezt megírtam nektek.