Skip to content

Instantly share code, notes, and snippets.

@markketai
Created October 23, 2020 21:25
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save markketai/b537f0bd10e0190980b96ebaf05620b0 to your computer and use it in GitHub Desktop.
Save markketai/b537f0bd10e0190980b96ebaf05620b0 to your computer and use it in GitHub Desktop.
Markket - Intro to Ads.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Markket - Intro to Ads.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyMyA5Q0kgBbNKytZEuSfI0O",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/markketai/b537f0bd10e0190980b96ebaf05620b0/markket-intro-to-ads.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R1jSrPtkjIpZ"
},
"source": [
"# Like most other language tasks, making ads with GPT-3 is pretty easy."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rr6gbqi0q4Ik"
},
"source": [
"This first part uses my standard template for a notebook (https://gist.github.com/brockmanmatt/d051e781e5a00713c28698403949233b)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qOmYocc0xGbr"
},
"source": [
"We need to get the API keys into Colab somehow; here I have a key.json file which has {\"key\":\"SECRET KEY\"}"
]
},
{
"cell_type": "code",
"metadata": {
"id": "beoH3hxNjJHn",
"outputId": "c5be6134-5c17-4b55-8911-446782064cef",
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 86
}
},
"source": [
"from google.colab import files\n",
"uploaded = files.upload()\n",
"print(\"done\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" <input type=\"file\" id=\"files-de842fb4-99df-45d9-86d0-9bc9c920aaf2\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-de842fb4-99df-45d9-86d0-9bc9c920aaf2\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script src=\"/nbextensions/google.colab/files.js\"></script> "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving key.json to key.json\n",
"done\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UkT7VfG5yvjT"
},
"source": [
"So now we do the imports that we need"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PqjqDimvr2eM",
"outputId": "5d54cf6e-1fb7-42ac-8771-36bd1ae7cdbf",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 135
}
},
"source": [
"!pip install openai\n",
"import json, re, requests, random, os\n",
"import sys, datetime, openai\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Requirement already satisfied: openai in /usr/local/lib/python3.6/dist-packages (0.2.5)\n",
"Requirement already satisfied: requests>=2.20; python_version >= \"3.0\" in /usr/local/lib/python3.6/dist-packages (from openai) (2.23.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20; python_version >= \"3.0\"->openai) (2020.6.20)\n",
"Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20; python_version >= \"3.0\"->openai) (3.0.4)\n",
"Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20; python_version >= \"3.0\"->openai) (1.24.3)\n",
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.20; python_version >= \"3.0\"->openai) (2.10)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yLVurqSZy3In"
},
"source": [
"import the API keys"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gHtQhov8y0gN"
},
"source": [
"openai.api_key = json.load(open(\"key.json\", \"r\"))[\"key\"] #could also import from os.environ if local\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Dmav2sfhzkoV"
},
"source": [
"query function: wrapper to just get the text of a response and not worry about parameters"
]
},
{
"cell_type": "code",
"metadata": {
"id": "5MdPSOwkzEaG"
},
"source": [
"def query(prompt, myKwargs = {}):\n",
" \"\"\"\n",
" Wrapper for the gpt-3 API\n",
" \"\"\"\n",
"\n",
" #arguments to send the API\n",
" kwargs = {\n",
" \"engine\":\"davinci\",\n",
" \"temperature\":.25,\n",
" \"max_tokens\":150,\n",
" \"stop\":\"\\n\\n\",\n",
" }\n",
"\n",
" for kwarg in myKwargs:\n",
" kwargs[kwarg] = myKwargs[kwarg]\n",
"\n",
" r = openai.Completion.create(prompt=prompt, **kwargs)\n",
" return r\n",
"\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "vupU_TGy0tql"
},
"source": [
"making sure it works"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Q3lk_lZOz-AZ",
"outputId": "70a685f8-8da8-4c59-b0b1-1a7e445d5fe0",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 245
}
},
"source": [
"query(\"q: what is 1+1?\\na:\", myKwargs = {\"stop\":\"\\n\", \"max_tokens\":4})"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<OpenAIObject text_completion id=cmpl-6xKFk6HGguM18dfRgo65PmT1 at 0x7fa82ac1da98> JSON: {\n",
" \"choices\": [\n",
" {\n",
" \"finish_reason\": \"stop\",\n",
" \"index\": 0,\n",
" \"logprobs\": null,\n",
" \"text\": \" 2\"\n",
" }\n",
" ],\n",
" \"created\": 1603479455,\n",
" \"id\": \"cmpl-6xKFk6HGguM18dfRgo65PmT1\",\n",
" \"model\": \"davinci:2020-05-03\",\n",
" \"object\": \"text_completion\"\n",
"}"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "sJsRURst2a28"
},
"source": [
"# Setting up the few-shot examples\n",
"\n",
"GPT can do few-shot training, which is when you give the model a couple of exapmles to pattern match."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1YlYwNvy1DOJ"
},
"source": [
"K, so now we need some ad examples, I just pulled these from the Google Adsense examples and labeled them with what they're about."
]
},
{
"cell_type": "code",
"metadata": {
"id": "bJc3l4Vi0sLn"
},
"source": [
"myAds = [\n",
" {\n",
" \"company\":\"None\",\n",
" \"audience\":\"Beachgoers, Elderly\",\n",
" \"tone\":\"Neutral\",\n",
" \"promo\": \"None\",\n",
" \"keywords\": \"Bikes, Low Prices\",\n",
" \"product\":\"bikes\",\n",
" \"background\":\"We rent bikes that people can use to go to the beach with. Good for old and young alike\",\n",
" \"AdSense Headline\":\"Low Priced Beach Bikes | Great for the beach\",\n",
" \"Final Description\": \"We have low prices and a huge selection. Great way to stay fit with a bike ride on the beach!\"\n",
" },\n",
" {\n",
" \"company\": \"Betty's Bikes\",\n",
" \"audience\":\"Large groups\",\n",
" \"tone\": \"Brief\",\n",
" \"promo\": \"20% off rentals for 3 or more people\",\n",
" \"keywords\": \"Syle, Experience, Rentals\",\n",
" \"product\":\"bikes\",\n",
" \"background\":\"Betty's Bikes rents bikes that people can use to go to the beach with. Good for old and young alike\",\n",
" \"AdSense Headline\":\"Betty's Bike Rentals | 20% Off Rentals for 3 or More\",\n",
" \"Final Description\": \"Stylish bikes. Make your experience memorable. Reserve group deals online in minutes!\",\n",
" },\n",
" {\n",
" \"company\":\"Jimbo's Backpacks\",\n",
" \"audience\":\"School kids\",\n",
" \"tone\": \"Urgent\",\n",
" \"promo\": \"15% Off All Backpacks\",\n",
" \"keywords\": \"Customer Service, Local, Backpacks\",\n",
" \"product\":\"backpacks\",\n",
" \"background\":\"Jimbo's backpacks has sold backpacks for years. Our backpacks are locally sourced. With school approaching, everyon wants a bike. Great customer service.\",\n",
" \"AdSense Headline\": \"Great backpacks for School | Coolest Backpacks in Town | While supplies last\",\n",
" \"Final Description\": \"Hey kids, need the coolest backpack that fits you well? Our professional backpack pickers can help you prepare for the new school year. Backpacks are flying off the shelves, get yours before they're gone.\",\n",
" },\n",
" {\n",
" \"company\":\"Donovan's Flowers\",\n",
" \"audience\":\"Boyfriends\",\n",
" \"tone\":\"Witty\",\n",
" \"promo\":\"Free shipping on orders over $100\",\n",
" \"keywords\":\"Fresh, Flowers, Quick, Valentines\",\n",
" \"product\":\"valentines flowers\",\n",
" \"background\":\"Donovan's flowers sells flowers. You need flowers? We got them. We have fast delivery.\",\n",
" \"AdSense Headline\":\"Donovan's Flowers | Last Minute Flowers\",\n",
" \"Final Description\": \"Hey Boyfriends! Valentines day is approaching! Make up for slacking off this year by giving your loved one our signature valentines flowers. Delivered so fast, she won't know you forgot again this year.\",\n",
" },\n",
"]\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "YzlMUpVtUZEz"
},
"source": [
"now we just need to select them as examples to make ads!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "h7k6SBLi1LTR"
},
"source": [
"def buildPrompt(someRequest, temperature=.5, verbose=False):\n",
" \"\"\"\n",
" Builds a prompt based off the examples and the above args; should make this take any args but w/e\n",
" \"\"\"\n",
" # company = someRequest[\"company\"]\n",
" # audience = someRequest[\"audience\"]\n",
" # tone = someRequest[\"tone\"]\n",
" # promo = someRequest[\"promo\"]\n",
" # keywords = someRequest[\"keywords\"]\n",
" # background = someRequest[\"background\"]\n",
" if verbose:\n",
" print(\"Recieved Request: {}\".format(someRequest))\n",
"\n",
" #removed keywords\n",
" possibleKeys = [\"company\", \"audience\", \"tone\", \"promo\", \"product\", \"background\"]\n",
" targetKeys = []\n",
" for key in possibleKeys:\n",
" if key in someRequest:\n",
" if someRequest[key] not in [\"None\",\"none\", \"\"]:\n",
" targetKeys.append(key)\n",
"\n",
" if verbose:\n",
" print(\"currentKeys: {}\".format(targetKeys))\n",
"\n",
" examples = []\n",
" if len(examples) < 3:\n",
" newExamples = random.sample(myAds, 3-len(examples))\n",
" prompt = \"Our new advertising team came up with the following ad campaigns for Google Search based on the provided Ad information.\\n\\n\"\n",
" for example in newExamples:\n",
" for key in targetKeys:\n",
" if key == \"company\":\n",
" prompt += \"Company Name: {}\\nAd information:\".format(example[key].strip())\n",
" else:\n",
" prompt += \" The ad's {} is {}.\".format(key, example[key])\n",
" prompt += \"\\n\"\n",
" for key in [\"AdSense Headline\", \"Final Description\"]:\n",
" prompt += \"{}: {}\\n\".format(key, example[key])\n",
"\n",
" prompt += \"\\n\"\n",
"\n",
" if verbose:\n",
" print(prompt)\n",
"\n",
" for key in targetKeys:\n",
" if key == \"company\":\n",
" prompt += \"Company Name: {}\\nAd Information:\".format(someRequest[key].strip())\n",
" else:\n",
" prompt += \" The ad's {} is {}.\".format(key, someRequest[key].strip())\n",
" prompt += \"\\n\"\n",
" prompt += \"\"\"AdSense Headline:\"\"\"\n",
"\n",
" results = query(prompt, myKwargs={\"temperature\":temperature, \"n\": 6, \"frequency_penalty\":.2, \"stop\":[\"\\n\\n\", \"AdSense\"]})\n",
" #print(\"RESULTS: {}\".format(\"\\n\".join([results[\"choices\"][i][\"text\"] for i in range(3)])))\n",
" outputs = []\n",
" for i in range(len(results[\"choices\"])):\n",
" current = results[\"choices\"][i][\"text\"]\n",
" sections = current.split(\"\\nFinal Description: \")\n",
" if len(sections) == 2:\n",
" output = \"\"\n",
" # output += \"EXAMPLE:<br>\"\n",
" heads = sections[0][:90]\n",
" newDescription = sections[1]\n",
" if len(sections[1]) > 177:\n",
" newDescription = sections[1][:177] + \"...\"\n",
" descriptions = \"{}\".format(newDescription)\n",
"\n",
"\n",
" outputs.append({\"heads\":heads, \"descriptions\":descriptions})\n",
"\n",
" #return(\"<br><br>\".join(outputs))\n",
" return(outputs)\n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lWrsSaZ9U9LD"
},
"source": [
"newAds = buildPrompt({\n",
" \"company\":\"markket.ai\",\n",
" \"audience\":\"everyone\",\n",
" \"background\":\"we use AI to make ads\"\n",
"})"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "P6Zj4xllU_19",
"outputId": "315f475f-fb94-4f54-b2b7-44b26cce3d98",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 232
}
},
"source": [
"newAds"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[{'descriptions': 'Our AI is the best in the business. We have a new technology that can create the best ads online.',\n",
" 'heads': ' AI Powered Advertising | Best Ads Online'},\n",
" {'descriptions': \"We'll make ads for you! Try it free\",\n",
" 'heads': \" AI Powered Ads | We'll make ads for you | Try it free\"},\n",
" {'descriptions': \"We use AI to make ads. Whether it's for a small business or a large one, we can make the ads for you.\",\n",
" 'heads': ' AI-generated ads | Get your ads done in minutes'},\n",
" {'descriptions': 'We use AI to make ads. We can make ads based on your audience.\\nAds by Markket.ai',\n",
" 'heads': ' AI Powered Ads'},\n",
" {'descriptions': 'We use AI to make ads. Our AI is trained to make ads that are better than what humans can make. We are the future of advertising.\\nAds were served on google search for a period o...',\n",
" 'heads': ' AI Makes Ads | Better Ads for Everyone'},\n",
" {'descriptions': 'We use AI to create amazing ads. Want to know more? Check out our blog to learn more about how we use AI to create better ads.\\nAds were shown with the following demographics:',\n",
" 'heads': ' AI Powered Ad Creation | The Future of Ads'}]"
]
},
"metadata": {
"tags": []
},
"execution_count": 18
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-5HxBCyXVXe0"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment