Máte potíže s umělou inteligencí nebo s vývojem celého balíku? Naši odborníci jsou tu pro vás: poradenství na míru, technická integrace a další. Obraťte se na [email protected].

Kontextové cílení pro reklamu šetrnou k soukromí díky API pro zpracování přirozeného jazyka s klasifikací textu

Article by Rafał Rybnik, Vedoucí vývoje softwaru na Instytut Badań Pollster

Kontextová reklama
Pokud není uvedeno jinak, všechny obrázky v článku jsou od autora.

Nesledujte uživatele, sledujte zájmy

V dnešní realitě online reklamy se efektivní marketingové taktiky opírají o různé způsoby sledování uživatelů. technikách, jako jsou soubory cookie třetích stran (a alternativní úložiště) a snímání otisků zařízení. Ale v světě úniků dat, GDPR, CCPA a zvýšené legislativy na ochranu osobních údajů, která je těmito nařízeními inspirována, je to se tento přístup stává zastaralým. V prohlížečích Safari a Firefox jsou již zabudována řešení pro omezení sledování napříč stránkami. Na alternativách pracuje také Chrome. Konec cookies třetích stran je tedy na spadnutí. Identifikátor společnosti Apple pro Advertisers (IDFA) bude brzy přístupný pouze pro aplikace s výslovným souhlasem uživatele. Na adrese . zmizení možnosti sledování napříč doménami nutí inzerenty vrátit se ke kontextovým reklamě.

V tomto článku vám ukážu, jak implementovat kontextové cílení založené na rozhraní API pro klasifikaci textu. poskytované službou NLP Cloud. Popsaný přístup lze snadno přizpůsobit jakýmkoli reklamním technologiím. (například reklamní servery, OpenRTB atd.).

Kontextové cílení

Vzhledem k tomu, že inzerenti nebudou moci pomocí souborů cookie třetích stran cílit na jednotlivé uživatele, je snadné. předpovědí je opětovný nárůst kontextových reklamních kampaní. To by mohl být jediný způsob, jak cílit na uživatele zájmů v dostatečně velkém měřítku. Kontextové reklamy jsou založeny na obsahu, který si uživatel prohlíží právě teď, namísto jeho historie prohlížeče nebo behaviorálního profilu.

Kontextová reklama
(obrázek z Co je kontextové Reklama?)

Pro uživatele má být zajímavější, protože se jim zobrazí reklamy, které odpovídají tématu. webových stránek, které navštěvují.

Dejte mi visačku

Většina reklamních technologií a reklamních sítí podporuje předávání klíčových slov nebo značek během reklamy. kódů. Text je jádrem webu a může být mimořádně bohatým zdrojem informací. Nicméně, extrakce kontextu, značek a klíčových slov z něj, např. pro účely reklamy nebo doporučení, může být obtížná. obtížné a časově náročné. Jste-li však majitelem byť jen středně velkého zpravodajského webu, kromě několika málo značek přidělených redakcí, bude obtížné extrahovat všechna relevantní témata.

První pokusy o automatizaci tohoto procesu vedly v minulosti k více či méně veselým průšvihům:

Nesprávná kontextová reklama
(obrázek z Špatné umístění reklamy Zábavné, Pokud ne vaše)

Klasifikace textu článků

Pokroky ve zpracování přirozeného jazyka naštěstí umožňují mnohem přesnější shody v kratším čase. Klasifikace textu je přiřazování kategorií nebo štítků v souladu s obsahem textu.

Uveďme příklad stránky s články na různá témata:

Umístění reklamy

Naším cílem je, aby se na reklamních plochách zobrazovaly bannery tematicky související s obsahem článku.

Podmínky, které musí naše řešení splňovat:

Všimněte si, že reklamní systémy a vývoj webových stránek jsou mimo rámec tohoto článku, ale obecné koncepty zůstávají stejné bez ohledu na použité nástroje a technologie.

Rozhraní API pro klasifikaci textu

V takových případech upřednostňuji oddělit logiku, která zpracovává klasifikaci textu, do samostatné rozhraní API. Máme dvě možnosti: buď si ji vytvoříme sami, nebo použijeme hotové řešení.

Příprava jednoduchého klasifikačního stroje pro text s využitím jazyka Python a knihoven pro zpracování přirozeného jazyka je úkol na jedno odpoledne. Problém však nastává z hlediska přesnosti a obsluhy zvýšeného provozu. Musíme nějak zvládnout rostoucí základnu uživatelů a jejich clickstream.

Pokud jste vlastníkem webových stránek, pravděpodobně si nebudete chtít hrát s laděním a vyhodnocováním modelů strojového učení. Proto přeneseme co nejvíce práce na externí řešení. Všimněte si, že zde neplánujeme odesílat žádná uživatelská data, pouze data patřící webové stránce. Díky tomu je použití externích nástrojů pro kontextové cílení z hlediska ochrany soukromí uživatelů mnohem jednodušší.

NLP Cloud je poskytovatelem několika rozhraní API pro zpracování textu pomocí modelů strojového učení. Jedním z nich je je klasifikátor textu, který vypadá slibně z hlediska jednoduché implementace (viz dokumenty).

Modely NLP Cloud

Pomocí rozhraní NLP Cloud API můžete vyzkoušet, který algoritmus by mohl být užitečný pro konkrétní obchodní případ.

Integrace klasifikace textu s obsahem webových stránek

Protože backend webové stránky je založen na Pythonu (Flask), začneme tím, že napíšeme jednoduchého klienta pro zpracování přirozené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
    ]
}

Docela dobré. Každému štítku je bez námahy přiřazena jeho relevance k tématu.

Výběr bannerů, které se budou zobrazovat, bude provádět systém pro zobrazování reklam (rozhodování o výběru bannerů). bude založeno na hodnocení individuálně přiřazených štítků). Proto, aby nedošlo k vystavení API klíče a abychom měli větší kontrolu nad daty, 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 []

Kampaně

Předpokládejme, že máme spustit 3 reklamní kampaně:

Ad placement
Pojišťovna (klíčové slovo: insurance)

Ad placement
Společnost zabývající se obnovitelnými zdroji energie (klíčové slovo: renewables)

Ad placement
Kadeřnictví (klíčové slovo: good look)

Nakresleme mechanismus na front-endu, který bude řídit zobrazení vhodné kreativy.

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áš reklamní server 🤪

Nyní pomocí funkce fetch načteme štítky pro text článku, který získáme pomocí jeho 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));

Všimněte si, že reklamu klienta zobrazíme pouze tehdy, pokud je skóre vyšší než 0,8:

Math.max(…scores) >= 0.8

V opačném případě zobrazujeme sebepropagaci.

Jedná se samozřejmě o libovolnou hodnotu, kterou lze podle potřeby zpřísňovat a uvolňovat.

Umístění reklamy
Novinky o obnovitelných zdrojích energie se hodí k reklamám na fotovoltaické články.

Umístění reklamy
Zprávy o nebezpečí v domě mohou zvýšit úmysl koupit pojištění.

Umístění reklamy
Přestože by se do článku hodila reklama na pojištění, byla nebyla zobrazena, protože nebylo dosaženo správné úrovně relevance.

Pozorný čtenář si všimne, že příklad kadeřnického transparentu se neobjevil. To je protože téma článků je zaměřeno na závažné zprávy ze světa, kde se problematika módy objevuje. neřeší. Aby bylo možné kampaň realizovat, je třeba zvolit jiný web nebo přehodnotit své strategii klíčových slov.

Výkon

Díky této asynchronní funkci můžeme dosáhnout rychlého načtení stránky: fetch . Zároveň se však reklama zobrazí až po stažení štítků. Z tohoto důvodu a kvůli snížení nákladů je nejlepší implementovat v produkčním prostředí nějakou formu mezipaměti.

Další úpravou by mohlo být jednoduché ukládání štítků přímo do databáze. Pro zřídka se vyskytující aktualizovaných článků to má jistě smysl.

Řešení založené na samostatném rozhraní API, které můžeme nakrmit libovolným textem a získat jeho popisky, nám však poskytuje možnost používat JS kód prakticky na libovolné stránce téměř v reálném čase, a to i bez přístupu k backendu!

Výstupy

Největší výzvou při používání kontextového cílení je jeho použití na zpravodajských webech. Mnoho témat se objevuje v článků, včetně těch, která jsou v souladu s oborem inzerenta. Ale na zároveň senzační, často smutný podtext příběhů, které obsahují, nejsou vhodným místem pro. inzerovat.

Text Klasifikační rozhraní API služby NLP Cloud na druhou stranu odvádí docela dobrou práci při označování textů. můžeme celý proces zopakovat, tentokrát však s ohledem na vyloučení textů s daným tématem. z toho, aby na nich byly vysílány bannery (viz stránka API pro klasifikaci textu)

Papírové letadlo

Děkujeme za přečtení. Doufám, že jste si čtení užili stejně jako já, když jsem pro vás tuto knihu psal.