Article by Rafał Rybnik, Programmatūras izstrādes vadītājs vietnē Instytut Badań Pollster

Ja vien nav norādīts citādi, visu rakstā iekļauto attēlu autors ir autors.
Mūsdienu tiešsaistes reklāmas realitātē efektīvas mārketinga taktikas pamatā ir dažādas lietotāju izsekošanas iespējas. metodēm, piemēram, trešo pušu sīkfailiem (un alternatīvām krātuvēm) un ierīču pirkstu nospiedumiem. Taču datu noplūžu, GDPR, CCPA un to iedvesmoto datu aizsardzības tiesību aktu pastiprināšanas pasaulē, tas pieeja kļūst novecojusi. Safari un Firefox jau ir iebūvēti risinājumi, lai samazinātu vietņu savstarpējo izsekošanu. Arī pārlūkprogramma Chrome strādā pie alternatīvām. Tātad trešo pušu sīkfailiem drīz būs beigas. Apple identifikators Reklāmdevējiem (IDFA) drīz būs pieejams tikai lietotnēm ar lietotāja skaidru piekrišanu. . starpdomēnu izsekošanas iespējas izzušana liek reklāmdevējiem atgriezties pie kontekstuālās izsekošanas. reklāmu.
Šajā rakstā es parādīšu, kā īstenot konteksta mērķtiecīgu atlasi, pamatojoties uz teksta klasifikācijas API. ko nodrošina NLP Cloud. Šeit aprakstīto pieeju var viegli pielāgot jebkurām reklāmas tehnoloģijām. (piemēram, reklāmas serveriem, OpenRTB u. c.).
Tā kā reklāmdevēji nevarēs mērķtiecīgi atlasīt individuālus lietotājus, izmantojot trešo pušu sīkfailus. prognozē, ka atkal pieaugs kontekstuālo reklāmu kampaņu skaits. Tas varētu būt vienīgais veids, kā mērķēt lietotājus lietotāja intereses pietiekami lielā mērogā. Kontekstuālo reklāmu pamatā ir saturs, ko lietotājs skatās. tieši tagad, nevis uz viņa pārlūkprogrammas vēsturi vai uzvedības profilu.

(attēls no Kas ir kontekstuāls
reklāma?)
Lietotājiem tas varētu būt interesantāk, jo viņi redzēs reklāmas, kas atbilst tēmai. tīmekļa vietnes lapām, kuras viņi apmeklē.
Lielākā daļa reklāmu apkalpošanas tehnoloģiju un reklāmas tīklu atbalsta atslēgvārdu vai tagu nodošanu reklāmas apkalpošanas kodus. Teksts ir tīmekļa kodols, un tas var būt ārkārtīgi bagātīgs informācijas avots. Tomēr, konteksta, tagu un atslēgvārdu iegūšana no tā, piemēram, reklāmas vai ieteikumu nolūkos, var būt sarežģīta. grūti un laikietilpīgi. Taču, ja esat pat vidēja lieluma ziņu vietnes īpašnieks, papildus dažām tagiem. redakcijas piešķirtos tagus, būs grūti izvilināt visus attiecīgos tematus.
Pirmie mēģinājumi automatizēt šo procesu jau agrāk ir noveduši pie vairāk vai mazāk smieklīgiem neveiksmīgiem rezultātiem:

(attēls no Slikti reklāmu izvietojumi Smieklīgi,
Ja ne jūsu)
Par laimi, attīstība dabiskās valodas apstrādes jomā ļauj atrast daudz precīzākas atbilstības īsākā laikā. Teksta klasifikācija ir teksta saturam atbilstošu kategoriju vai etiķešu piešķiršana.
Aplūkosim piemēru lapu ar rakstiem par dažādām tēmām:
Mūsu mērķis ir, lai reklāmas izvietojumos tiktu rādīti baneri, kas tematiski saistīti ar raksta saturu.
Nosacījumi, kuriem jāatbilst mūsu risinājumam:
Ņemiet vērā, ka reklāmas sistēmas un tīmekļa izstrāde ir ārpus šī raksta darbības jomas, bet vispārīgie jēdzieni paliek nemainīgi neatkarīgi no izmantotajiem rīkiem un tehnoloģijām.
Man vēlamais risinājums šādos gadījumos ir teksta klasifikācijas loģikas nodalīšana, lai atsevišķā API. Mums ir divas iespējas: izveidot to pašiem vai izmantot gatavu risinājumu.
Vienkārša teksta klasifikatora sagatavošana, izmantojot Python un dabiskās valodas apstrādes bibliotēkas, ir uzdevums vienai pēcpusdienai. Taču problēma rodas saistībā ar precizitāti un paaugstinātas datplūsmas apkalpošanu. Mums kaut kā jāapstrādā pieaugošā lietotāju bāze un to klikšķu plūsma.
Ja esat vietnes īpašnieks, visticamāk, nevēlaties spēlēties ar mašīnmācīšanās modeļu regulēšanu un novērtēšanu. Tāpēc mēs deleģēsim pēc iespējas vairāk ārējam risinājumam. Ņemiet vērā, ka šeit neplānojam nosūtīt nekādus lietotāja datus, tikai datus, kas pieder vietnei. Tas padara ārējo kontekstuālās mērķēšanas rīku izmantošanu daudz vienkāršāku no lietotāja privātuma viedokļa.
NLP Cloud ir vairāku API nodrošinātājs teksta apstrādei, izmantojot mašīnmācīšanās modeļus. Viens no tiem ir teksta klasifikators, kas izskatās daudzsološs vienkāršas ieviešanas ziņā. (skatīt dokumentus).
Izmantojot NLP Cloud API, varat izmēģināt, kurš algoritms varētu būt noderīgs konkrētā biznesa gadījumā.
Tā kā tīmekļa vietnes backends ir balstīts uz Python (Flask), mēs sākam ar vienkārša klienta rakstīšanu dabiskās valodas apstrādei. 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
]
}
Diezgan labi. Katrai etiķetei bez pūlēm tiek piešķirta tās atbilstība tēmai.
Plānots, ka baneru atlasi, kas tiks rādīti, veiks reklāmas apkalpošanas sistēma (lēmumu pieņemšana). balstīsies uz individuāli piešķirto zīmju vērtējumu). Tāpēc, lai neizpaustu API atslēgas un lai iegūtu lielāku kontroli pār datiem, mēs uzrakstīsim vienkāršu starpniekserveri:
@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 []
Pieņemsim, ka mums ir jāizmanto 3 reklāmas kampaņas:
Apdrošināšanas sabiedrība (atslēgvārds: insurance)
Atjaunojamās enerģijas uzņēmums (atslēgvārds: renewables)
Frizētava (atslēgvārds: good look)
Izstrādāsim front-end mehānismu, kas pārvaldīs atbilstoša radošā attēla parādīšanu.
function displayAd(keyword, placement_id) {
var conditions = {
false: '
',
"insurance": '
',
"renewables": '
',
"good look": '
'
}
var banner = document.querySelector(placement_id);
banner.innerHTML = conditions[keyword];
}
Šis ir mūsu reklāmas serveris 🤪
Tagad, izmantojot fetch, mēs iegūsim etiķetes raksta tekstam, ko iegūstam, izmantojot tā selektoru:
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));
Ņemiet vērā, ka klienta reklāma tiek rādīta tikai tad, ja rezultāts ir lielāks par 0,8:
Math.max(…scores) >= 0.8
Pretējā gadījumā mēs parādām pašreklāmu.
Šī, protams, ir patvaļīgi noteikta vērtība, kuru pēc nepieciešamības var samazināt vai samazināt.
Jaunumi par atjaunojamo enerģijas avotu atbilst PV elementu reklāmām.
Ziņas par briesmām mājoklī var palielināt vēlmi pirkt
apdrošināšanu.
Lai gan rakstam būtu bijis piemērots sludinājums par apdrošināšanu, tas bija
netika parādīta, jo netika sasniegts pareizais atbilstības līmenis.
Uzmanīgs lasītājs pamanīs, ka friziera banera piemērs nav parādījies. Tas ir jo rakstu tematika ir vērsta uz nopietnām pasaules ziņām, kur modes jautājumi ir nav aplūkoti. Lai varētu īstenot kampaņu, jums ir jāizvēlas cita vietne vai jāpārdomā savs atslēgvārdu stratēģiju.
Pateicoties šai asinhronajai funkcijai, mēs varam panākt ātru lapas ielādi: fetch .
Tomēr tajā pašā laikā reklāma tiks rādīta tikai pēc etiķešu lejupielādes. Šī iemesla dēļ
un lai samazinātu izmaksas, ražošanas vidē vislabāk ir ieviest kādu kešatmiņas veidu.
Papildu modifikācija varētu būt vienkārši etiķešu saglabāšana tieši datubāzē. Reti rakstiem tas noteikti ir lietderīgi.
Tomēr risinājums, kura pamatā ir atsevišķs API, ko varam pievienot jebkuram tekstam un iegūt tā etiķetes. iespēju izmantot JS kodu praktiski jebkurā lapā gandrīz reāllaikā, pat bez piekļuves tīmekļa vietnei. backend!
Lielākais izaicinājums kontekstuālās mērķauditorijas izmantošanā ir izmantot to ziņu vietnēs. Daudzas tēmas parādās publicētajos rakstos, tostarp tādi, kas atbilst reklāmdevēja nozarei. Taču tajā pašā laikā tajos publicēto stāstu sensacionālais, bieži vien skumjais noskaņojums nav laba vieta, lai reklamēt.
Teksts NLP Cloud klasifikācijas API, no otras puses, veic diezgan labu darbu, lai atzīmētu tekstus. mēs varētu arī atkārtot visu procesu, šoreiz paturot prātā, lai izslēgtu tekstus ar noteiktu tematu. no baneru izvietošanas uz tiem (skatiet teksta klasifikācijas API lapu)

Paldies, ka izlasījāt. Es ceru, ka jums patika lasīt tikpat labi, cik man patika to rakstīt jums.