Мы будем периодически выпускать модель искусственного интеллекта с открытым исходным кодом по соответствующей теме для ваших личных проектов или хакатонов. Начнем с детектора ксенофобных твитов.

Авраам Староста и Таннер Гиллиган

Вступление

При создании новых приложений в современном быстро меняющемся мире машинное обучение часто необходимо, чтобы пользователи могли получить полезную информацию. К сожалению, для многих людей, разрабатывающих эти приложения, ИИ может быть сложно реализовать, а передача на аутсорсинг обходится дорого. Некоторые из наших технических друзей сказали, что работая над личными проектами или на хакатонах, они хотели бы включить машинное обучение. Обычно, даже если бы они знали, как реализовать модель, не существовало существующего набора данных, который они могли бы использовать для своего приложения, а создание набора данных с нуля было бы очень трудоемким процессом.

Чтобы восполнить этот пробел в сообществе разработчиков и ИИ, мы решили создать и выпустить серию общедоступных классификаторов, которые может использовать каждый. Мы будем периодически выпускать модель ИИ с открытым исходным кодом по интересной и актуальной теме, и пользователи могут либо загрузить модель / данные для локального использования, либо просто использовать наш API.

Для нашей первой модели мы создали модель для обнаружения ксенофобных твитов.

Ксенофобия в Twitter

Обнаружение языка ненависти в целом - очень важная проблема, и ИИ будет способствовать борьбе с ней на платформах социальных сетей. Несмотря на достижения в области искусственного интеллекта, достигнутые в последние годы, нам еще предстоит пройти долгий путь для решения этой проблемы. Луиза Мацакис из Wired объясняет, что только 38% сообщений с разжиганием ненависти, которые удаляет Facebook, обнаруживаются ИИ. Это главным образом потому, что существует так много типов языка вражды, а используемый язык быстро меняется.

Один из видов языка ненависти, который стал горячей темой в новостях на прошлой неделе, - это ксенофобия, которая является предубеждением против иммигрантов. Как и многие другие социальные сети, в Твиттере появилось множество твитов на эту тему, в том числе многие из них, которые можно рассматривать как разжигание ненависти. К счастью для нас, Twitter также предоставляет разработчикам API для загрузки твитов, так что это был отличный источник для получения соответствующих данных.

Вот несколько примеров твитов, которые мы хотим обнаружить:

Критерии

После того, как мы загрузили значительное количество твитов, нам нужно было пройти процесс создания помеченного набора данных. Для этого мы использовали комбинацию ручного аннотирования и слабого контроля, чтобы пометить в общей сложности 10 181 твит, следуя той же процедуре, что и в нашем старом блоге. На высоком уровне мы использовали определение тем и поиск по ключевым словам для маркировки данных и использовали эти данные для информирования модели со слабым контролем. Вот некоторые примеры концепций, которые мы использовали для выявления ксенофобных твитов:

  • Использование уничижительных фраз, таких как «нелегальные иностранцы» или «незаконные преступники».
  • Приказ иммигрантам «вернуться в свою страну»
  • Утверждают, что иммигранты «вторгаются» в США
  • Говорят, что иммигранты настроены против Америки
  • Говорят, что должны быть массовые депортации иммигрантов без документов
  • Говорят, что иммигранты приезжают в США только для того, чтобы воспользоваться системой.

И это основные критерии нексенофобных твитов:

  • Вызов расистских комментариев или скандалов
  • Говоря об истории расизма
  • Говоря о легальном получении гражданства
  • Говорят, что американские иммигранты тоже американцы
  • Различные другие темы, не относящиеся к ксенофобским

Модель Архитектура

После создания нашего набора данных следующим шагом было создание на его основе модели. Мы создали модель с помощью векторизатора TF-IDF с предиктором логистической регрессии. Твиты разделяются с помощью токенизатора, и только верхние 2000 токенов используются в качестве функций. Все шаги были выполнены с использованием Scikit-Learn, поэтому вы можете попробовать обучить модель самостоятельно, если хотите.

Количественная оценка

На следующем графике показана кривая точности-отзыва с площадью под кривой 0,82 (подтверждено ~ 150 примерами).

Модель возвращает вероятность того, что твит является ксенофобным. Поэтому, если вам нужна высокая точность (вы не хотите допускать ложноположительных ошибок), убедитесь, что вы используете порог высокой вероятности 0,9 или более. Другими словами, когда вы вычисляете вероятность с помощью модели, она должна быть выше 0,9, чтобы вы могли классифицировать твит как ксенофобский.

Вы также можете использовать приведенную ниже таблицу, чтобы выбрать порог на основе желаемой точности и запоминания:

Инструкции по использованию модели и загрузке набора данных

Вы можете скопировать и вставить код из нашего Блокнота Google Colab в свой локальный блокнот или блокнот Colab. Чтобы упростить задачу, мы также добавим сюда наш код.

Шаг 1. Первоначальная фильтрация твитов

Мы хотим запускать модель только для твитов, которые соответствуют поисковым запросам, которые мы использовали для создания набора данных твитов. Таким образом мы будем в большей безопасности от несоответствия данных. В противном случае модель может запутаться, увидев твиты, которые сильно отличаются от тех, на которых она была обучена. Вы можете использовать функцию ниже:

def does_tweet_match(tweet):
    """
    Check that tweet has one of the search queries used.
    """
    search_terms = ["illegal alien",
                    "illegal immigrant",
                    "illegal immigration",
                    "send her back",
                    "send them back",
                    "illegal criminal"]
    for s in search_terms:
        if s in tweet.lower():
            return True
    return False

Шаг 2 - вариант 1: Использование нашего API

Если твит соответствует одному из наших поисковых запросов, мы можем вызвать API с помощью следующего кода. Если твит не соответствует ни одному из поисковых запросов, API вернет сообщение об ошибке: «Твит не соответствует условиям поиска».

import json
import requests

def xenophobe_tweet_api(tweet_content, threshold=0.9):
    """
    Call API.
    """
    if not does_tweet_match(tweet_content):
        raise Exception("Tweet doesn't match search terms.")
    
    url = "https://rk56kry0qj.execute-api.us-west-2.amazonaws.com/default/xenophobic-tweet"
    payload = {}
    payload['text'] = tweet_content
    response = requests.request(
        "POST", url,
        data=json.dumps(payload),
        headers={'Content-Type': "application/json"}
    )
    
    prob_is_xenophobe = float(response.text)
    return prob_is_xenophobe > threshold, prob_is_xenophobe


xenophobe_tweet_api("You illegal alien go back home!")
>>> (True, 0.9002771303057671)

Примечание для пользователей Windows: поскольку модели были сериализованы на компьютере Mac, их десериализация на компьютере с Windows может вызвать проблемы. Поэтому, если у вас есть компьютер с Windows, мы настоятельно рекомендуем вам использовать API.

Шаг 2 - вариант 2: локальное использование моделей

Или вы можете загрузить модели и использовать их локально.

import urllib.request
from sklearn.externals import joblib
# Download models
url = 'https://sculpt-public-models.s3-us-west-2.amazonaws.com/xenophobia_tfidf.joblib'
urllib.request.urlretrieve(url, './xenophobia_tfidf.joblib')
url = 'https://sculpt-public-models.s3-us-west-2.amazonaws.com/xenophobia_logreg.joblib'
urllib.request.urlretrieve(url, './xenophobia_logreg.joblib')
tfidf = joblib.load("./xenophobia_tfidf.joblib")
logistic_reg = joblib.load("./xenophobia_logreg.joblib")

def classify_tweet_locally(tweet_content, threshold=0.95):
  if not does_tweet_match(tweet_content):
    raise Exception("Tweet doesn't match search terms")
  featurized_tweet = tfidf.transform([tweet_content])
  prob_is_xenophobic = logistic_reg.predict_proba(featurized_tweet)
  prob_is_xenophobe = prob_is_xenophobic[0][0]
  return prob_is_xenophobe > threshold, prob_is_xenophobe

classify_tweet_locally("You illegal alien go back home!")
>>> (True, 0.9998621759905209)

Если вы получаете ошибку SSL при загрузке моделей, запустите эту команду (на Mac):

/Applications/Python\ 3.7/Install\ Certificates.command

Скачивание набора данных

При желании вы также можете загрузить заархивированные наборы данных для обучения и тестирования здесь, чтобы обучить свою собственную модель и, надеюсь, превзойти нашу логистическую регрессию.

Идеи проектов

Если вы хотите вдохновения, мы написали ниже несколько идей для проектов / хакатонов, с которыми могла бы помочь модель:

  • Визуализируйте ксенофобные твиты на карте (можно сделать с помощью folium в блокноте Jupyter)
  • Где в США больше ксенофобии?
  • Найдите разные темы в ксенофобных твитах (наши данные вы можете найти ниже)
  • Обучите модель BERT с нашими данными
  • Он работает лучше, чем наша логистическая регрессия?
  • Небольшое приложение, которое показывает несколько ксенофобских твитов каждый день.
  • Панель управления, которая отслеживает количество ксенофобных твитов в день и строит график
  • Приложение, вызывающее пользователей, которые написали потенциально ксенофобные твиты.

Как создать свой собственный набор данных Twitter

Вам необходимо создать бесплатную учетную запись разработчика Twitter и получить токен доступа и потребительский ключ. Затем, если вы запустите наш скрипт на ночь, вы сможете загружать твиты за последние 7 дней, соответствующие запросу. Вы также можете использовать GNIP, если хотите получить доступ к потоку твитов в реальном времени, хотя они могут взимать за это плату.

Заключение

Мы надеемся, что вы опробуете нашу модель и поможете бороться с разжиганием ненависти. Если вы хотите стать партнером в создании модели, напишите нам по адресу [email protected].

Отказ от ответственности: ксенофобия - сложная и часто эмоциональная тема. Мы эксперты в области информатики, а не ксенофобии. Мы построили эту модель на основе наших личных исследований и не делаем никаких политических заявлений.