Article by Rafał Rybnik, Vodja razvoja programske opreme na spletnem mestu . Instytut Badań Pollster

Če ni navedeno drugače, so vse slike v članku avtorjeve.
V današnji realnosti spletnega oglaševanja so učinkovite taktike trženja odvisne od različnih načinov sledenja uporabnikom. tehnik, kot so piškotki tretjih oseb (in alternativne shrambe) ter prstni odtisi naprav. Toda v svetu uhajanja podatkov, uredbe GDPR, zakona CCPA in okrepljene zakonodaje o varstvu podatkov, ki so jo te uredbe navdihnile, je to postaja ta pristop zastarel. Safari in Firefox imata že vgrajene rešitve za zmanjšanje sledenja med spletnimi mesti. Tudi Chrome se ukvarja z alternativami. Torej je konec piškotkov tretjih oseb kmalu. Applov identifikator za oglaševalce (IDFA) bo kmalu dostopen le za aplikacije z izrecnim soglasjem uporabnika. Na spletni strani . izginotje možnosti sledenja med domenami oglaševalce sili, da se vrnejo h kontekstualnim oglaševanje.
V tem članku vam pokažem, kako implementirati ciljno usmerjanje konteksta na podlagi API za razvrščanje besedila. ki ga zagotavlja NLP Cloud. Pristop, opisan tukaj, lahko zlahka prilagodite vsem oglaševalskim tehnologijam. (kot so oglaševalski strežniki, OpenRTB itd.).
Ker oglaševalci s piškotki tretjih oseb ne bodo mogli ciljno usmerjati posameznih uporabnikov, je enostavno napoved je, da se bodo kontekstualne oglaševalske kampanje spet povečale. To bi lahko bil edini način za ciljno usmerjanje uporabnikov interese uporabnikov v dovolj velikem obsegu. Kontekstualni oglasi temeljijo na vsebini, ki si jo uporabnik ogleduje zdaj, namesto zgodovine brskalnika ali vedenjskega profila.

(slika iz Kaj je kontekstualno
oglaševanje?)
To naj bi bilo za uporabnike bolj zanimivo, saj bodo videli oglase, ki se ujemajo s temo spletnih strani, ki jih obiskujejo.
Večina tehnologij za prikazovanje oglasov in oglaševalskih omrežij podpira posredovanje ključnih besed ali oznak med oglaševanjem. kode za prikazovanje. Besedilo je jedro spleta in je lahko izjemno bogat vir informacij. Vendar, pridobivanje konteksta, oznak in ključnih besed iz njega, npr. za namene oglaševanja ali priporočanja, je lahko težko in zamudno. Če pa ste lastnik celo srednje velikega novičarskega spletišča, lahko poleg nekaj oznak ki jih je dodelila uredniška ekipa, bo težko izluščiti vse pomembne teme.
Prvi poskusi avtomatizacije tega postopka so v preteklosti povzročili bolj ali manj smešne napake:

(slika iz Slabe postavitve oglasov Smešno,
Če ne tvoje)
Na srečo napredek pri obdelavi naravnega jezika omogoča veliko natančnejše ujemanje v krajšem času. Klasifikacija besedila je dodeljevanje kategorij ali oznak v skladu z vsebino besedila.
Oglejmo si primer strani s članki o različnih temah:
Naš cilj je, da se na oglasnih mestih prikazujejo pasice, ki so tematsko povezane z vsebino članka.
Pogoji, ki jih mora izpolnjevati naša rešitev:
Upoštevajte, da oglaševalski sistemi in razvoj spletnih strani niso predmet tega članka, vendar splošni koncepti ostajajo enaki ne glede na uporabljena orodja in tehnologije.
V takih primerih najraje uporabljam rešitev, da logiko, ki skrbi za razvrščanje besedila, ločim v ločen API. Imamo dve možnosti: lahko jo ustvarimo sami ali uporabimo že pripravljeno rešitev.
Priprava preprostega mehanizma za razvrščanje besedil z uporabo Pythona in knjižnic za obdelavo naravnega jezika je naloga za eno popoldne. Vendar se pojavi težava v zvezi z natančnostjo in zagotavljanjem povečanega prometa. Nekako moramo obvladati naraščajočo bazo uporabnikov in njihov tok klikov.
Če ste lastnik spletnega mesta, se verjetno ne boste želeli ukvarjati z nastavljanjem in ocenjevanjem modelov strojnega učenja. Zato bomo čim več prenesli na zunanjo rešitev. Upoštevajte, da tukaj ne nameravamo pošiljati nobenih podatkov o uporabnikih, temveč le podatke, ki pripadajo spletnemu mestu. Zaradi tega je uporaba zunanjih orodij za kontekstualno ciljanje z vidika zasebnosti uporabnika veliko preprostejša.
NLP Cloud je ponudnik več vmesnikov API za obdelavo besedila z modeli strojnega učenja. Eden od teh je klasifikator besedila, ki je videti obetaven z vidika preprostega izvajanja (Oglejte si dokumentacijo).
Z vmesnikom API NLP Cloud lahko preizkusite, kateri algoritem bi lahko bil uporaben za določen poslovni primer.
Ker zaledje spletnega mesta temelji na Pythonu (Flask), začnemo s pisanjem preprostega odjemalca za obdelavo naravnega jezika API:
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
]
}
Precej dobro. Vsaki oznaki je brez truda dodeljena ustreznost za temo.
Načrtujemo, da bo izbiro prikazanih pasic opravil sistem za prikazovanje oglasov (odločitev bo temeljila na ocenah posamezno dodeljenih oznak). Zato, da ne bi izpostavili ključev API in da bi imeli večji nadzor nad podatki, bomo napisali preprost posrednik:
@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 []
Predpostavimo, da imamo 3 oglaševalske kampanje, ki jih je treba zagnati:
Zavarovalnica (ključna beseda: insurance)
Podjetje za obnovljive vire energije (ključna beseda: renewables)
Frizer (ključna beseda: good look)
Narišimo mehanizem na sprednjem koncu, ki bo upravljal prikaz ustrezne kreative.
function displayAd(keyword, placement_id) {
var conditions = {
false: '
',
"insurance": '
',
"renewables": '
',
"good look": '
'
}
var banner = document.querySelector(placement_id);
banner.innerHTML = conditions[keyword];
}
To je naš strežnik oglasov 🤪
Zdaj bomo z uporabo funkcije fetch pridobili oznake za besedilo članka, ki smo ga dobili z uporabo njegovega izbirnika:
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));
Upoštevajte, da se oglas odjemalca prikaže le, če je ocena višja od 0,8:
Math.max(…scores) >= 0.8
V nasprotnem primeru prikazujemo samopromocijo.
To je seveda poljubna vrednost, ki jo lahko po potrebi zmanjšate ali sprostite.
Novice o obnovljivih virih energije ustrezajo oglasom za fotovoltaične celice.
Novice o nevarnostih v hiši lahko povečajo namero za nakup
zavarovanje.
Čeprav bi bil oglas o zavarovanju primeren za članek, je bil
ni bil prikazan, ker ni bila dosežena ustrezna stopnja ustreznosti.
Pozoren bralec bo opazil, da se primer frizerskega transparenta ni pojavil. To je ker je tema člankov osredotočena na resne novice iz sveta, kjer so modna vprašanja ne obravnavajo. Da bi lahko izvedli kampanjo, morate izbrati drugo spletno mesto ali ponovno razmisliti o strategijo ključnih besed.
S to asinhrono funkcijo lahko dosežemo hitro nalaganje strani: fetch .
Hkrati pa se oglas prikaže šele po prenosu nalepk. Zaradi tega
in zaradi zmanjšanja stroškov je v produkcijskem okolju najbolje uporabiti predpomnilnik.
Dodatna sprememba bi lahko bila preprosto shranjevanje oznak neposredno v podatkovni zbirki. Za redke posodobljenih člankov je to vsekakor smiselno.
Rešitev, ki temelji na ločenem vmesniku API, ki ga lahko posredujemo kateremu koli besedilu in pridobimo njegove oznake, pa nam omogoča možnost uporabe kode JS praktično na kateri koli strani v skoraj realnem času, tudi brez dostopa do zaledja!
Največji izziv pri uporabi kontekstualnega ciljanja je uporaba na spletnih mestih z novicami. Številne teme se pojavljajo v objavljenih člankov, vključno s tistimi, ki so v skladu z oglaševalčevo panogo. Toda na hkrati pa senzacionalni, pogosto žalostni prizvok zgodb, ki jih vsebujejo, ni dobro mesto za oglaševanje.
Besedilo po drugi strani pa API za klasifikacijo v oblaku NLP Cloud precej dobro označuje besedila, tako da lahko celoten postopek ponovimo, tokrat pa ne pozabimo izključiti besedil z določeno temo da se na njih ne bi izpisovale oglasne pasice (Oglejte si stran API za razvrščanje besedil)

Hvala za branje. Upam, da ste uživali v branju, tako kot sem jaz uživala v pisanju za vas.