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

В этом руководстве мы расскажем об основах объяснимого ИИ, в том числе о том, почему он важен, как он работает и как его реализовать. К концу этого руководства у вас будет четкое представление об объяснимом ИИ и о том, как создавать прозрачные и надежные системы ИИ.

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

Почему объяснимый ИИ важен?

Системы искусственного интеллекта часто называют «черными ящиками», потому что людям может быть трудно понять, как они делают свои прогнозы и решения. Это отсутствие прозрачности может быть проблемой, когда системы ИИ используются для принятия решений, влияющих на жизнь людей, например, в здравоохранении или финансах. Например, если система ИИ используется для принятия решения об одобрении заявки на получение кредита, важно, чтобы решение системы было объяснимым и справедливым.

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

Как работает объяснимый ИИ?

Существуют различные подходы к созданию объяснимых систем ИИ, но обычно они делятся на две категории: основанные на моделях и не зависящие от моделей.

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

Одним из примеров подхода, основанного на модели, является модель дерева решений, которая представляет собой модель, которая разбивает процесс принятия решений на ряд бинарных разбиений. Модели деревьев решений популярны, потому что их легко понять и интерпретировать людям. Вот пример модели дерева решений в Python с использованием библиотеки scikit-learn:

from sklearn.tree import DecisionTreeClassifier

# Create the model
model = DecisionTreeClassifier()

# Train the model on the training data
model.fit(X_train, y_train)

# Make predictions on the test data
predictions = model.predict(X_test)

Независимые от модели подходы, с другой стороны, направлены на объяснение любой модели черного ящика, независимо от ее внутренней структуры. Эти подходы обычно включают создание аппроксимаций модели или создание объяснений постфактум.

Одним из примеров независимого от модели подхода являются локальные интерпретируемые объяснения, не зависящие от модели (LIME). LIME работает, создавая упрощенную интерпретируемую модель, которая локально соответствует исходной модели и может использоваться для объяснения прогнозов, сделанных исходной моделью.

Теперь, когда мы рассмотрели основы LIME, давайте рассмотрим более подробный пример того, как его использовать в Python.

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

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

Вот как обучить модель в Python:

# Load the data
import pandas as pd
data = pd.read_csv("patient_data.csv")

# Split the data into features (X) and target (y)
X = data.drop("disease", axis=1)
y = data["disease"]

# Train the model
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X, y)p

Теперь, когда модель обучена, мы можем использовать LIME для объяснения прогноза, сделанного моделью.

# Explain a prediction
from lime.lime_tabular import LimeTabularExplainer
explainer = LimeTabularExplainer(X.values, feature_names=X.columns)
exp = explainer.explain_instance(X.iloc[0], model.predict_proba)
exp.show_in_notebook()

В этом коде мы сначала создали экземпляр класса LimeTabularExplainer и передали обучающие данные и имена функций. Затем мы вызвали метод explain_instance, передав ряд данных (симптомы пациента и медицинские записи) и вероятности, предсказанные моделью. Это возвращает объект объяснения, который мы можем использовать для визуализации и понимания прогноза.

Наконец, мы вызвали метод show_in_notebook, чтобы отобразить объяснение в блокноте Jupyter. Это отображает таблицу, показывающую, какие функции оказали наибольшее влияние на прогноз и как они повлияли на окончательный прогноз.

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

Другие типы объяснимого ИИ

В дополнение к модельно-ориентированным и модельно-независимым подходам существует несколько других типов объяснимого ИИ, которые были предложены и разработаны. Вот несколько примеров:

Системы на основе правил. Это системы искусственного интеллекта, которые используют явные правила для принятия решений. Например, основанная на правилах система диагностики заболеваний может использовать набор правил, таких как «если у пациента жар и кашель, то, вероятно, у него грипп». Системы, основанные на правилах, по своей сути объяснимы, потому что правила могут быть поняты людьми.

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

def diagnose_disease(symptoms):
  if "fever" in symptoms and "cough" in symptoms:
    return "flu"
  elif "rash" in symptoms and "joint pain" in symptoms:
    return "measles"
  elif "abdominal pain" in symptoms and "diarrhea" in symptoms:
    return "food poisoning"
  else:
    return "unknown"

# Test the function
symptoms = ["fever", "cough"]
print(diagnose_disease(symptoms)) # flu

symptoms = ["rash", "joint pain"]
print(diagnose_disease(symptoms)) # measles

symptoms = ["abdominal pain", "diarrhea"]
print(diagnose_disease(symptoms)) # food poisoning

symptoms = ["headache"]
print(diagnose_disease(symptoms)) # unknown

Система diagnose_disease использует правила, представленные в операторе if-elif-else, для проверки различных комбинаций симптомов и возврата соответствующего диагноза.

Системы на основе примеров. Это системы ИИ, которые используют примеры для принятия решений. Например, основанная на примерах система классификации животных может использовать набор помеченных примеров (например, изображение кошки, помеченной как «кошка»), чтобы научиться классифицировать новые, не помеченные примеры. Системы, основанные на примерах, могут быть объяснимы, если примеры, используемые для обучения системы, сами по себе объяснимы.

Вот пример основанной на примерах системы на Python, которая классифицирует животных на основе набора помеченных примеров:

from sklearn.neighbors import KNeighborsClassifier

# Define the training data
X = [["dog"], ["cat"], ["bird"], ["fish"]]
y = ["mammal", "mammal", "bird", "fish"]

# Train the model
model = KNeighborsClassifier()
model.fit(X, y)

# Classify a new example
example = [["cat"]]
prediction = model.predict(example)
print(prediction) # "mammal"

Сотрудничество человека и ИИ. В этом подходе система ИИ работает с человеком для принятия решений. Человек может давать объяснения прогнозам системы ИИ, а система ИИ может оправдывать свои действия. Этот подход можно использовать для создания более прозрачных и надежных систем ИИ.

Ниже приведен пример простой системы совместной работы человека и ИИ на Python, которая помогает человеку классифицировать животных на основе их характеристик:

def classify_animal(characteristics):
  # Ask the human for help
  classification = input("What type of animal is this? (mammal, bird, fish) ")

  # Check if the human is confident in their classification
  confidence = input("Are you confident in your classification? (yes/no) ")
  if confidence == "yes":
    return classification
  else:
    # If the human is not confident, ask the AI for help
    from sklearn.neighbors import KNeighborsClassifier
    X = [characteristics]
    model = KNeighborsClassifier()
    model.fit(X, [classification])
    prediction = model.predict(X)[0]
    if prediction == classification:
      return classification
    else:
      return "unknown"

# Test the function
characteristics = ["has fur", "has four legs", "says meow"]
print(classify_animal(characteristics)) # "mammal" (assuming the human classifies it as a mammal)

В этом коде мы добавили проверку, чтобы убедиться, что человек уверен в своей классификации. Если да, функция возвращает их классификацию. Если они не уверены, функция обращается за помощью к ИИ, обучая классификатор k ближайших соседей заданным характеристикам и классификации человека. Затем прогноз ИИ сравнивается с классификацией человека, и если они совпадают, функция возвращает классификацию. Если они не совпадают, функция возвращает «неизвестно», чтобы указать, что классификация неопределенна.

Объяснимые искусственные нейронные сети. Хотя нейронные сети могут быть очень мощными, людям может быть сложно их понять. Было проведено множество исследований методов повышения интерпретируемости нейронных сетей, таких как визуализация активаций сети или использование таких методов, как LIME, для аппроксимации модели.

Объяснимый ИИ — это разнообразная область, которая охватывает широкий спектр подходов к тому, чтобы сделать системы ИИ более прозрачными и заслуживающими доверия. В этом руководстве мы узнали об объяснимом ИИ и о том, как использовать LIME для объяснения прогнозов, сделанных моделями машинного обучения. Мы видели пример того, как использовать LIME в Python, чтобы понять, как классификатор случайного леса пришел к своим прогнозам. Понимая внутреннюю работу наших систем искусственного интеллекта, мы можем создавать более прозрачные и заслуживающие доверия системы, которым люди с большей вероятностью будут доверять и которые будут приняты.