Sliter du med AI eller fullstack-utvikling? Ekspertene våre er her for å veilede deg: skreddersydde råd, teknisk integrasjon og mer. Ta kontakt på [email protected].

Kontekstuell målretting for personvernvennlig annonsering takket være tekstklassifisering Natural Language Processing API

Article by Rafał Rybnik, Leder for programvareutvikling ved Instytut Badań Pollster

Kontekstuell annonsering
Med mindre annet er oppgitt, er alle bilder i artikkelen tatt av forfatteren.

Ikke spor brukeren, spor interesser

I dagens nettreklamevirkelighet er effektive markedsføringstaktikker avhengige av en rekke ulike teknikker for brukersporing teknikker, som tredjeparts informasjonskapsler (og alternativ lagring) og fingeravtrykk av enheter. Men i en verden med datalekkasjer, GDPR, CCPA og økt databeskyttelseslovgivning inspirert av disse, blir denne tilnærmingen foreldet. blir denne tilnærmingen foreldet. Safari og Firefox har allerede innebygde løsninger for å redusere sporing på tvers av nettsteder. Chrome jobber også med alternativer. Så det er snart slutt på tredjeparts informasjonskapsler. Apples identifikator for Annonsører (IDFA) vil snart bare være tilgjengelig for apper med eksplisitt samtykke fra brukeren. Den forsvinningen av muligheten for sporing på tvers av domener får annonsører til å gå tilbake til kontekstuell annonsering.

I denne artikkelen viser jeg deg hvordan du implementerer kontekstmålretting basert på API for tekstklassifisering levert av NLP Cloud. Tilnærmingen som er beskrevet her kan enkelt tilpasses alle annonseringsteknologier (for eksempel annonseservere, OpenRTB etc.).

Målretting mot kontekst

Fordi annonsører ikke vil være i stand til å målrette mot individuelle brukere ved å bruke tredjeparts informasjonskapsler, er en enkel en enkel spådom at kontekstuelle reklamekampanjer vil øke igjen. Dette kan være den eneste måten å målrette mot brukernes interesser i stor nok skala. Kontekstuelle annonser er basert på innhold som brukeren ser på akkurat nå, i stedet for nettleserhistorikken. akkurat nå, i stedet for nettleserhistorikken eller atferdsprofilen.

Kontekstuell annonsering
(bilde fra Hva er kontekstuell Reklame?)

Det er ment å være mer interessant for brukerne, ettersom de vil se annonser som samsvarer med temaet på nettsidene de besøker. nettsidene de besøker.

Gi meg en merkelapp

De fleste annonsevisningsteknologier og annonsenettverk støtter overføring av søkeord eller koder under annonsevisningen. visningskoder. Tekst er kjernen i nettet og kan være en ekstremt rik kilde til informasjon. Det er imidlertid vanskelig å Det kan imidlertid være vanskelig og tidkrevende å trekke ut kontekst, tagger og nøkkelord fra den, f.eks. for reklame- eller anbefalingsformål. vanskelig og tidkrevende. Men hvis du er eier av selv et middels stort nyhetsnettsted, utover noen få tags tildelt av redaksjonen, vil det være vanskelig å trekke ut alle relevante emner.

De første forsøkene på å automatisere denne prosessen har tidligere resultert i mer eller mindre morsomme tabber:

Feil kontekstuell annonsering
(bilde fra Dårlige annonseplasseringer Funny, Hvis ikke din)

Tekstklassifisering av artikler

Heldigvis muliggjør fremskritt innen naturlig språkbehandling mye mer nøyaktige treff på kortere tid. Tekstklassifisering er tildeling av kategorier eller etiketter som samsvarer med tekstinnholdet.

La oss se på en eksempelside med artikler om en rekke emner:

Annonseplassering

Vårt mål er at annonseplasseringene skal vise bannere som er tematisk relatert til artikkelinnholdet.

Betingelser som løsningen vår må oppfylle:

Merk at annonseringssystemer og nettutvikling ligger utenfor denne artikkelens virkeområde, men de generelle konseptene forblir de samme uansett hvilke verktøy og teknologier som brukes.

API for tekstklassifisering

Min foretrukne løsning i slike tilfeller er å skille ut logikken som håndterer tekstklassifisering i et eget API. eget API. Vi har to alternativer: lage det selv eller bruke en ferdig løsning.

Å forberede en enkel tekstklassifiseringsmotor ved hjelp av Python og Natural Language Processing-biblioteker er en oppgave for en ettermiddag. Men problemet oppstår når det gjelder nøyaktighet og betjening av økt trafikk. Vi må på en eller annen måte håndtere den voksende brukerbasen og klikkstrømmen deres.

Hvis du er eier av et nettsted, er det lite sannsynlig at du vil leke med innstilling og evaluering av maskinlæringsmodeller. Så vi vil delegere så mye vi kan til en ekstern løsning. Merk at vi ikke planlegger å sende noen brukerdata hit, bare data som tilhører nettstedet. Dette gjør bruken av eksterne kontekstuelle målrettingsverktøy mye enklere fra et personvernperspektiv.

NLP Cloud er en leverandør av flere API-er for tekstbehandling ved hjelp av maskinlæringsmodeller. En av disse er tekstklassifisereren, som ser lovende ut når det gjelder enkel implementering (se dokumenter).

NLP Cloud-modeller

Med NLP Cloud API kan du prøve ut hvilken algoritme som kan være nyttig for et bestemt forretningstilfelle.

Integrere tekstklassifisering med innholdet på nettstedet

Ettersom bakenden av nettstedet er Python-basert (Flask), starter vi med å skrive en enkel klient til Natural Language Processing 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
    ]
}

Ganske bra. Hvert merke tildeles sin relevans for emnet uten anstrengelse.

Planen er at utvelgelsen av bannere som skal vises, skal gjøres av et annonsevisningssystem (avgjørelsen vil være basert på poengsummen til hver enkelt merke). vil være basert på poengene til de individuelt tildelte etikettene). Derfor, for ikke å eksponere API-nøklene og for å ha mer kontroll over dataene, vil vi skrive en enkel 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 []

Kampanjer

La oss anta at vi har tre annonsekampanjer å kjøre:

Ad placement
Forsikringsselskap (nøkkelord: insurance)

Ad placement
Selskap for fornybar energi (nøkkelord: renewables)

Ad placement
Frisør (nøkkelord: good look)

La oss skissere en mekanisme på front-end, som vil administrere visningen av en passende kreativ.

function displayAd(keyword, placement_id) {

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

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

}

Dette er vår annonseserver 🤪

Nå bruker vi fetch til å hente etiketter for teksten i en artikkel, som vi får ved hjelp av velgeren:

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

Merk at vi bare viser klientannonsen hvis poengsummen er over 0,8:

Math.max(…scores) >= 0.8

Ellers viser vi egenreklame.

Dette er selvfølgelig en vilkårlig verdi, som kan strammes og løsnes etter behov.

Annonseplassering
Nyheter om fornybar energi passer til solcelleannonser.

Annonseplassering
Nyheter om farene i huset kan øke intensjonen om å kjøpe forsikring.

Annonseplassering
Selv om en annonse om forsikring ville ha vært passende for artikkelen, ble den ikke ble den ikke vist fordi det riktige relevansnivået ikke ble oppnådd.

Den oppmerksomme leser vil legge merke til at eksemplet med frisørbanneret ikke dukket opp. Dette skyldes fordi innholdet i artiklene er fokusert på seriøse verdensnyheter, der motespørsmål er ikke tas opp. For å kunne gjennomføre kampanjen, må du velge et annet nettsted eller revurdere din søkeordstrategien din.

Ytelse

Vi kan oppnå rask sideinnlasting takket være denne asynkrone funksjonen: fetch . Samtidig vises annonsen først etter at etikettene er lastet ned. Av denne grunn og for å redusere kostnadene, er det best å implementere en form for cache i et produksjonsmiljø.

En ytterligere endring kan være å lagre etikettene direkte i databasen. For sjeldent oppdaterte artikler er dette absolutt fornuftig.

En løsning basert på et eget API, som vi kan mate til hvilken som helst tekst og få dens etiketter, gir oss imidlertid muligheten til å bruke JS-kode praktisk talt på en hvilken som helst side i nær sanntid, selv uten tilgang til backend!

Takeaways

Den største utfordringen med å bruke kontekstuell målretting er å bruke det på nyhetsnettsteder. Mange emner dukker opp i artiklene som legges ut der, inkludert de som er i tråd med annonsørens bransje. Men samtidig Men samtidig er de sensasjonelle, ofte triste overtonene i historiene de inneholder, ikke et godt sted å annonsere. annonsere.

Teksten API for tekstklassifisering fra NLP Cloud, derimot, gjør en ganske god jobb med å tagge tekster, så vi kan like gjerne gjenta hele prosessen, denne gangen med tanke på å ekskludere tekster med et gitt tema fra å få bannere sendt ut på dem (se API-siden for tekstklassifisering)

Papirfly

Takk for at du leste. Jeg håper du likte å lese like mye som jeg likte å skrive dette for deg.