Article by Rafał Rybnik, Tarkvaraarenduse juht Instytut Badań Pollster

Kui ei ole märgitud teisiti, on kõik artiklis olevad pildid autori tehtud.
Tänapäeva online-reklaami reaalsuses tuginevad tõhusad turundustaktikad erinevatele kasutajate jälgimisvõimalustele. meetodeid, näiteks kolmanda osapoole küpsised (ja alternatiivsed salvestused) ja seadme sõrmejäljed. Kuid andmelekete, GDPRi, CCPA ja nendest inspireeritud andmekaitsealaste õigusaktide karmistumise maailmas on see lähenemine muutub iganenuks. Safari ja Firefox on juba sisseehitatud lahendused saidiülese jälgimise vähendamiseks. Chrome töötab samuti alternatiivide kallal. Seega on kolmanda osapoole küpsiste lõpp varsti käes. Apple'i identifikaatori jaoks Advertisers (IDFA) on varsti kättesaadav ainult rakendustele, mille kasutaja on andnud selleks selgesõnalise nõusoleku. domeenideülese jälgimise võimaluse kadumine paneb reklaamijad naasma kontekstuaalsete reklaami juurde.
Selles artiklis näitan teile, kuidas rakendada tekstide klassifitseerimise API-l põhinevat kontekstipõhist sihtimist. mida pakub NLP Cloud. Siin kirjeldatud lähenemisviisi saab hõlpsasti kohandada mis tahes reklaamitehnoloogiatele (näiteks reklaamiserverid, OpenRTB jne).
Kuna reklaamijad ei saa kolmandate osapoolte küpsiste abil üksikuid kasutajaid sihtida, on lihtne ennustus on, et kontekstipõhised reklaamikampaaniad tõusevad taas. See võib olla ainus võimalus kasutajaid sihtida huvidele piisavalt suures ulatuses. Kontekstipõhised reklaamid põhinevad sisul, mida kasutaja vaatab. just praegu, mitte tema brauseri ajalugu või käitumisprofiili.

(pilt pärineb Mis on kontekstuaalne
Reklaam?)
See peaks olema kasutajate jaoks huvitavam, kuna nad näevad reklaame, mis sobivad teemaga veebisaidi lehekülgedele, mida nad külastavad.
Enamik reklaami edastamise tehnoloogiaid ja reklaamivõrgustikke toetavad märksõnade või siltide edastamist reklaami ajal. koodide vahendusel. Tekst on veebi tuum ja võib olla äärmiselt rikkalik teabeallikas. Siiski, konteksti, märgiste ja märksõnade väljavõtmine sellest, nt reklaami või soovituste jaoks, võib olla väga keeruline. raske ja aeganõudev. Kui aga olete isegi keskmise suurusega uudistesaidi omanik, siis lisaks mõne sildi toimetuse poolt eraldatud, on raske kõiki asjakohaseid teemasid välja võtta.
Esimesed katsed seda protsessi automatiseerida on minevikus viinud enam-vähem lõbusa mokaamiseni:

(pilt pärineb Halvad reklaamplakatid Naljakas,
Kui mitte sinu)
Õnneks võimaldavad edusammud loomulikus keeletöötluses palju täpsemaid vasteid, ja seda palju kiiremini. Teksti klassifitseerimine on teksti sisule vastavate kategooriate või siltide määramine.
Vaatleme näidislehte, kus on artikleid erinevatel teemadel:
Meie eesmärk on, et reklaamplakatid näitaksid artikli sisuga temaatiliselt seotud bännerid.
Tingimused, millele meie lahendus peab vastama:
Pange tähele, et reklaamisüsteemid ja veebiarendus ei kuulu käesoleva artikli reguleerimisalasse, kuid üldmõisted jäävad samaks, sõltumata kasutatavatest vahenditest ja tehnoloogiatest.
Minu eelistatud lahendus sellistel juhtudel on eraldada loogika, mis tegeleb teksti klassifitseerimisega, ühte eraldi API-sse. Meil on kaks võimalust: luua see ise või kasutada valmislahendust.
Lihtsa teksti klassifitseerimismootori koostamine Pythoni ja loomuliku keele töötlemise raamatukogude abil on ühe pärastlõunase päeva ülesanne. Kuid probleem tekib täpsuse ja suurenenud liikluse teenindamise osas. Me peame kuidagi toime tulema kasvava kasutajaskonna ja nende klikivoogudega.
Kui olete veebisaidi omanik, siis tõenäoliselt ei soovi te mängida masinõppe mudelite häälestamise ja hindamisega. Seega delegeerime nii palju kui võimalik välisele lahendusele. Pange tähele, et me ei kavatse siia saata kasutajaandmeid, vaid ainult veebisaidile kuuluvaid andmeid. See muudab väliste kontekstipõhiste sihtimisvahendite kasutamise kasutajate privaatsuse seisukohast palju lihtsamaks.
NLP Cloud pakub mitmeid APIsid teksti töötlemiseks masinõppe mudelite abil. Üks neist on tekstiklassifikaator, mis tundub lihtsa rakendamise poolest paljutõotav. (vt dokumente).
NLP Cloud API abil saate proovida, milline algoritm võiks olla kasulik konkreetse ärijuhtumi puhul.
Kuna veebilehe backend on Python-põhine (Flask), siis alustame lihtsa kliendi kirjutamisest Natural Language Processing'ile. API-LE:
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
]
}
Päris hea. Igale sildile on ilma vaevata omistatud tema asjakohasus.
Plaan on, et kuvatavate bännerite valik toimub reklaami teenindamise süsteemi abil (otsus põhineb individuaalselt määratud siltide hindel). Seega, et mitte eksponeerida API võtmeid ja et oleks rohkem kontrolli andmete üle, kirjutame lihtsa proxy:
@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 []
Oletame, et meil on 3 reklaamikampaaniat:
Kindlustusselts (märksõna: insurance)
Taastuvenergia ettevõte (märksõna: renewables)
Juuksur (märksõna: good look)
Visandame esiplaanis mehhanismi, mis haldab sobiva loovuse kuvamist.
function displayAd(keyword, placement_id) {
var conditions = {
false: '
',
"insurance": '
',
"renewables": '
',
"good look": '
'
}
var banner = document.querySelector(placement_id);
banner.innerHTML = conditions[keyword];
}
See on meie reklaamserver 🤪
Nüüd kasutame fetch'i, et saada artikli tekstile sildid, mille saame selle selektori abil:
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));
Pange tähele, et me näitame kliendi reklaami ainult siis, kui skoor on üle 0,8:
Math.max(…scores) >= 0.8
Vastasel juhul näitame enesereklaami.
See on muidugi suvaline väärtus, mida saab vastavalt vajadusele pingutada ja lõdvendada.
Uudised taastuvenergia allika kohta sobivad PV-elementide reklaamidele.
Uudised majas valitsevate ohtude kohta võivad suurendada ostukavatsust
kindlustust.
Ehkki kindlustust käsitlev reklaam oleks sobinud artiklisse, oli see
ei kuvatud, sest ei saavutatud õiget asjakohasuse taset.
Tähelepanelik lugeja märkab, et juuksuribänneri näide ei ilmunud. See on sest artiklite teema on keskendunud tõsistele maailma uudistele, kus moeküsimused on ei käsitleta. Kampaania elluviimiseks tuleb valida teine sait või mõelda ümber oma märksõnastrateegia.
Tänu sellele asünkroonsele funktsioonile saavutame kiire lehe laadimise: fetch .
Samal ajal ilmub reklaam aga alles pärast etikettide allalaadimist. Sel põhjusel
ja kulude vähendamiseks on tootmiskeskkonnas kõige parem rakendada mingisugust vahemälu.
Täiendav muudatus võiks olla lihtsalt siltide salvestamine otse andmebaasis. Harva kasutatavate uuendatavate artiklite puhul on see kindlasti mõistlik.
Eraldi API-l põhinev lahendus, mida me saame sööta suvalisele tekstile ja saada selle sildid, annab meile aga võimaluse kasutada JS-koodi praktiliselt igal lehel peaaegu reaalajas, isegi ilma juurdepääsuta backendile!
Suurim väljakutse kontekstuaalse sihtimise kasutamisel on selle kasutamine uudiste veebilehtedel. Paljud teemad ilmuvad seal avaldatud artiklites, sealhulgas need, mis on kooskõlas reklaamija tööstusharuga. Kuid aadressil samal ajal ei ole seal sisalduvate lugude sensatsiooniline, sageli kurblik alatoon hea koht selleks, et reklaamida.
Tekst NLP Cloudi klassifitseerimise API teeb teisest küljest üsna head tööd tekstide märgistamisel, nii et võime sama hästi korrata kogu protsessi, pidades seekord silmas, et välistada antud teemaga tekstid bännerite väljastamisest (vaata teksti klassifitseerimise API lehekülge)

Tänan teid lugemise eest. Loodan, et teile meeldis lugeda sama palju kui mulle meeldis seda teile kirjutada.