Kontextuális célzás az adatvédelem-barát reklámozáshoz a szövegosztályozásnak köszönhetően Természetes nyelvi feldolgozó API

Article by Rafał Rybnik, Szoftverfejlesztési vezető Instytut Badań Pollster

Kontextuális hirdetés
Hacsak másképp nem szerepel, a cikkben szereplő összes képet a szerző készítette.

Ne a felhasználót, hanem az érdeklődési köröket kövesse

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.).

Kontextuscélzás

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.

Kontextuális hirdetés
(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.

Adj egy címkét

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:

Helytelen kontextuális reklámozás
(kép a Rossz reklámelhelyezések Vicces, Ha nem a tiéd)

A cikkek szöveges osztályozása

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:

Hirdetés elhelyezése

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.

Szövegosztályozó API

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).

NLP Cloud modellek

Az NLP Cloud API segítségével kipróbálhatja, melyik algoritmus lehet hasznos egy adott üzleti esetben.

A szöveges osztályozás integrálása a weboldal tartalmába

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 []

Kampányok

Tegyük fel, hogy 3 hirdetési kampányt kell lefuttatnunk:

Ad placement
Biztosító (kulcsszó: insurance)

Ad placement
Megújuló energiával foglalkozó vállalat (kulcsszó: renewables)

Ad placement
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ó.

Hirdetés elhelyezése
A megújuló energiaforrással kapcsolatos hírek illeszkednek a PV-cella hirdetésekhez.

Hirdetés elhelyezése
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.

Hirdetés elhelyezése
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.

Teljesítmény

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!

Takeaways

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)

Papír repülőgép

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.