Máte problémy s AI alebo vývojom celého balíka? Naši odborníci sú tu, aby vám poradili: poradenstvo na mieru, technická integrácia a ďalšie služby. Obráťte sa na [email protected].

Kontextové zacielenie na reklamu šetrnú k súkromiu vďaka API na spracovanie prirodzeného jazyka pre klasifikáciu textu

Article by Rafał Rybnik, Vedúci oddelenia vývoja softvéru na Instytut Badań Pollster

Kontextová reklama
Pokiaľ nie je uvedené inak, všetky obrázky v článku sú od autora.

Nesledujte používateľa, sledujte záujmy

V dnešnej realite online reklamy sa účinné marketingové taktiky spoliehajú na rôzne spôsoby sledovania používateľov. ako sú súbory cookie tretích strán (a alternatívne úložiská) a odtlačky zariadení. Ale v svete únikov údajov, nariadení GDPR, CCPA a nimi inšpirovanej zvýšenej legislatívy o ochrane údajov je to sa tento prístup stáva zastaraným. Safari a Firefox už majú zabudované riešenia na obmedzenie sledovania medzi stránkami. Na alternatívnych riešeniach pracuje aj prehliadač Chrome. Koniec súborov cookie tretích strán je teda čoskoro. Identifikátor spoločnosti Apple pre Advertisers (IDFA) bude čoskoro prístupný len pre aplikácie s výslovným súhlasom používateľa. Na stránke . zániku možnosti sledovania medzi doménami núti inzerentov vrátiť sa ku kontextovým reklamu.

V tomto článku vám ukážem, ako implementovať kontextové zacielenie na základe rozhrania API klasifikácie textu. poskytovaného službou NLP Cloud. Opísaný prístup sa dá ľahko prispôsobiť akýmkoľvek reklamným technológiám (napríklad reklamné servery, OpenRTB atď.).

Kontextové zacielenie

Keďže inzerenti nebudú môcť pomocou súborov cookie tretích strán cieliť na jednotlivých používateľov. predpovede je, že kontextové reklamné kampane opäť vzrastú. To by mohol byť jediný spôsob, ako zacieliť používateľa záujmov v dostatočne veľkom rozsahu. Kontextové reklamy sú založené na obsahu, ktorý si používateľ prezerá práve teraz, namiesto histórie jeho prehliadača alebo profilu správania.

Kontextová reklama
(obrázok z Čo je kontextové Reklama?)

Pre používateľov má byť zaujímavejšia, pretože sa im budú zobrazovať reklamy, ktoré sa zhodujú s témou webových stránok, ktoré navštevujú.

Dajte mi značku

Väčšina technológií na zobrazovanie reklamy a reklamných sietí podporuje odovzdávanie kľúčových slov alebo značiek počas reklamy. kódov. Text je jadrom webu a môže byť mimoriadne bohatým zdrojom informácií. Avšak, extrahovanie kontextu, značiek a kľúčových slov z neho, napr. na účely reklamy alebo odporúčania, môže byť náročné a zdĺhavé. Ak ste však majiteľom aj stredne veľkého spravodajského webu, okrem niekoľkých značiek pridelených redakčným tímom, bude ťažké extrahovať všetky relevantné témy.

Prvé pokusy o automatizáciu tohto procesu viedli v minulosti k viac či menej vtipným chybám:

Nesprávna kontextová reklama
(obrázok z Zlé umiestnenie reklamy Zábavné, Ak nie tvoje)

Klasifikácia textu článkov

Našťastie pokrok v oblasti spracovania prirodzeného jazyka umožňuje oveľa presnejšie zhody v kratšom čase. Klasifikácia textu je priraďovanie kategórií alebo značiek v súlade s obsahom textu.

Uveďme príklad stránky s článkami na rôzne témy:

Umiestnenie reklamy

Naším cieľom je, aby sa na reklamných miestach zobrazovali bannery tematicky súvisiace s obsahom článku.

Podmienky, ktoré musí naše riešenie spĺňať:

Upozorňujeme, že reklamné systémy a vývoj webových stránok sú mimo rozsahu tohto článku, ale všeobecné koncepty zostávajú rovnaké bez ohľadu na použité nástroje a technológie.

Rozhranie API na klasifikáciu textu

Mojím preferovaným riešením v takýchto prípadoch je oddeliť logiku, ktorá spracováva klasifikáciu textu, do samostatného rozhrania API. Máme dve možnosti: vytvoriť si ju sami alebo použiť hotové riešenie.

Príprava jednoduchého nástroja na klasifikáciu textu pomocou jazyka Python a knižníc na spracovanie prirodzeného jazyka je úloha na jedno popoludnie. Problém však nastáva z hľadiska presnosti a obsluhy zvýšenej návštevnosti. Musíme si nejako poradiť s rastúcou základňou používateľov a ich prúdom kliknutí.

Ak ste majiteľom webovej stránky, pravdepodobne sa nebudete chcieť hrať s ladením a vyhodnocovaním modelov strojového učenia. Preto čo najviac prenesieme na externé riešenie. Všimnite si, že tu neplánujeme odosielať žiadne údaje používateľov, iba údaje patriace webovej lokalite. Vďaka tomu je použitie externých nástrojov na kontextové cielenie oveľa jednoduchšie z hľadiska ochrany súkromia používateľov.

NLP Cloud je poskytovateľom viacerých rozhraní API na spracovanie textu pomocou modelov strojového učenia. Jedným z nich je je klasifikátor textu, ktorý vyzerá sľubne z hľadiska jednoduchej implementácie (pozri dokumenty).

Modely NLP Cloud

Pomocou rozhrania NLP Cloud API môžete vyskúšať, ktorý algoritmus by mohol byť užitočný pre konkrétny obchodný prípad.

Integrácia klasifikácie textu s obsahom webovej stránky

Keďže backend webovej stránky je založený na jazyku Python (Flask), začneme napísaním jednoduchého klienta pre spracovanie prirodzeného jazyka 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
    ]
}

Celkom dobré. Každému štítku je bez námahy priradená jeho relevantnosť k téme.

Plán je taký, že výber bannerov, ktoré sa majú zobraziť, bude vykonávať systém na zobrazovanie reklám (rozhodovanie bude založené na bodovom hodnotení individuálne priradených značiek). Preto, aby nedošlo k vystaveniu API kľúče a aby sme mali väčšiu kontrolu nad údajmi, napíšeme jednoduchý proxy server:

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

Kampane

Predpokladajme, že máme spustené 3 reklamné kampane:

Ad placement
Poisťovňa (kľúčové slovo: insurance)

Ad placement
Spoločnosť zaoberajúca sa obnoviteľnou energiou (kľúčové slovo: renewables)

Ad placement
Kaderníctvo (kľúčové slovo: good look)

Nakreslime mechanizmus na front-ende, ktorý bude riadiť zobrazenie vhodnej kreatívy.

function displayAd(keyword, placement_id) {

    var conditions = {
        false: ' ',
        "insurance": ' ',
        "renewables": ' ',
        "good look": ' '
    }

    var banner = document.querySelector(placement_id);
    banner.innerHTML = conditions[keyword];

}

Toto je náš adserver 🤪

Teraz pomocou funkcie fetch načítame štítky pre text článku, ktorý sme získali pomocou jeho selektora:

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

Všimnite si, že reklamu klienta zobrazíme len vtedy, ak je skóre vyššie ako 0,8:

Math.max(…scores) >= 0.8

V opačnom prípade zobrazujeme vlastnú propagáciu.

Ide samozrejme o ľubovoľnú hodnotu, ktorú možno podľa potreby sprísňovať a uvoľňovať.

Umiestnenie reklamy
Novinky o obnoviteľných zdrojoch energie sa hodia do reklám na fotovoltaické články.

Umiestnenie reklamy
Správy o nebezpečenstvách v dome môžu zvýšiť úmysel kúpiť poistenie.

Umiestnenie reklamy
Hoci by sa do článku hodila reklama na poistenie, bola nezobrazila, pretože nebola dosiahnutá správna úroveň relevantnosti.

Pozorný čitateľ si všimne, že sa neobjavil príklad kaderníckeho transparentu. To je preto, lebo téma článkov je zameraná na vážne správy zo sveta, kde sú otázky módy neriešia. Aby ste mohli kampaň realizovať, musíte si vybrať inú stránku alebo prehodnotiť svoje stratégiu kľúčových slov.

Výkon

Vďaka tejto asynchrónnej funkcii môžeme dosiahnuť rýchle načítanie stránky: fetch . Zároveň sa však reklama zobrazí až po stiahnutí štítkov. Z tohto dôvodu a kvôli zníženiu nákladov je v produkčnom prostredí najlepšie implementovať určitú formu vyrovnávacej pamäte.

Ďalšou úpravou by mohlo byť jednoduché ukladanie štítkov priamo do databázy. Pre zriedkavo aktualizované články to určite má zmysel.

Riešenie založené na samostatnom rozhraní API, ktoré môžeme priradiť k akémukoľvek textu a získať jeho popisky, nám však poskytuje možnosť používať JS kód prakticky na akejkoľvek stránke takmer v reálnom čase, a to aj bez prístupu k backendu!

Výstupy

Najväčšou výzvou pri používaní kontextového cielenia je jeho použitie na spravodajských webových stránkach. Mnohé témy sa objavujú v článkov, vrátane tých, ktoré sú v súlade s odvetvím inzerenta. Ale na zároveň senzačný, často smutný podtón príbehov, ktoré obsahujú, nie je vhodným miestom na inzerovať.

Text Na druhej strane, API klasifikácie od NLP Cloud odvádza celkom dobrú prácu pri označovaní textov, takže môžeme celý proces zopakovať, pričom tentoraz budeme mať na pamäti vylúčenie textov s danou témou z toho, aby sa na nich vysielali bannery (pozrite si stránku API klasifikácie textu)

Papierové lietadlo

Ďakujeme za prečítanie. Dúfam, že ste si čítanie užili rovnako, ako som si ja užila písanie tejto knihy pre vás.