Реализация кодирования ускоряющей активной учебной аннотации с Adala и Google Gemini

В этом уроке мы узнаем, как использовать структуру Adala для создания модульного активного обучения для классификации медицинских симптомов. Мы начнем с установки и проверки Adala вместе с необходимыми зависимостями, а затем интегрируем Google Gemini в качестве пользовательского аннотатора для классификации симптомов в предопределенные медицинские области. Благодаря простой трехтерационной петле активного обучения, определяя приоритеты критических симптомов, таких как боль в груди, мы увидим, как выбрать, аннотировать и визуализировать уверенность классификации, получая практическую информацию о поведении модели и расширяемой архитектуре Адалы.

!pip install -q git+https://github.com/HumanSignal/Adala.git
!pip list | grep adala

Мы устанавливаем последний релиз Adala непосредственно из его репозитория GitHub. В то же время последующий список PIP | Команда Grep Adala сканирует список пакетов вашей среды для любых записей, содержащих «Adala», обеспечивая быстрое подтверждение того, что библиотека была успешно установлена.

import sys
import os
print("Python path:", sys.path)
print("Checking if adala is in installed packages...")
!find /usr/local -name "*adala*" -type d | grep -v "__pycache__"




!git clone https://github.com/HumanSignal/Adala.git
!ls -la Adala

Мы распечатываем ваши текущие пути поиска модуля Python, а затем ищем в каталоге /USR /Local для любых установленных папок «Adala» (за исключением __pycache__), чтобы проверить пакет. Затем он клонирует репозиторий Adala Github в ваш рабочий каталог и перечисляет его содержимое, чтобы вы могли подтвердить, что все исходные файлы были извлечены правильно.

import sys
sys.path.append('/content/Adala')

Добавляя клонированную папку Adala в Sys.path, мы говорим Python обращаться /контент /Adala в качестве импортируемого каталога пакетов. Это гарантирует, что последующий импорт Adala … операторы будут загружаться непосредственно с вашего локального клона, а не (или в дополнение к) любой установленной версии.

!pip install -q google-generativeai pandas matplotlib


import google.generativeai as genai
import pandas as pd
import json
import re
import numpy as np
import matplotlib.pyplot as plt
from getpass import getpass

Мы устанавливаем Google Generative AI SDK наряду с анализами данных и построением библиотек (Pandas и Matplotlib), затем импортируют ключевые модули, Genai для взаимодействия с Gemini, Pandas для табличных данных, JSON и RE для разделения, Numpy для численных операций, Matplotlib.pyplot для визуализации и запрашивать, чтобы он запрашивал для пользователя для их API.

try:
    from Adala.adala.annotators.base import BaseAnnotator
    from Adala.adala.strategies.random_strategy import RandomStrategy
    from Adala.adala.utils.custom_types import TextSample, LabeledSample
    print("Successfully imported Adala components")
except Exception as e:
    print(f"Error importing: {e}")
    print("Falling back to simplified implementation...")

Эта попытка/за исключением попыток блока загрузить основные классы Adala, Baseannotator, Randomstrategy, Textsample и MarkedSample, чтобы мы могли использовать его встроенные аннотаторы и стратегии выборки. При успехе это подтверждает, что компоненты Adala доступны; Если какой -либо импорт не удается, он улавливает ошибку, печатает сообщение об исключении и изящно возвращается к более простой реализации.

GEMINI_API_KEY = getpass("Enter your Gemini API Key: ")
genai.configure(api_key=GEMINI_API_KEY)

Мы надежно побуждаем вас ввести свой ключ API Gemini, не повторяя его в ноутбук. Затем мы настраиваем Google Generative AI Client (Genai) с этим ключом для аутентификации всех последующих вызовов.

CATEGORIES = ("Cardiovascular", "Respiratory", "Gastrointestinal", "Neurological")


class GeminiAnnotator:
    def __init__(self, model_name="models/gemini-2.0-flash-lite", categories=None):
        self.model = genai.GenerativeModel(model_name=model_name,
                                          generation_config={"temperature": 0.1})
        self.categories = categories
       
    def annotate(self, samples):
        results = ()
        for sample in samples:
            prompt = f"""Classify this medical symptom into one of these categories:
            {', '.join(self.categories)}.
            Return JSON format: {{"category": "selected_category",
            "confidence": 0.XX, "explanation": "brief_reason"}}
           
            SYMPTOM: {sample.text}"""
           
            try:
                response = self.model.generate_content(prompt).text
                json_match = re.search(r'(\{.*\})', response, re.DOTALL)
                result = json.loads(json_match.group(1) if json_match else response)
               
                labeled_sample = type('LabeledSample', (), {
                    'text': sample.text,
                    'labels': result("category"),
                    'metadata': {
                        "confidence": result("confidence"),
                        "explanation": result("explanation")
                    }
                })
            except Exception as e:
                labeled_sample = type('LabeledSample', (), {
                    'text': sample.text,
                    'labels': "unknown",
                    'metadata': {"error": str(e)}
                })
            results.append(labeled_sample)
        return results

Мы определяем список медицинских категорий и внедряем класс Geminiannotator, который завершает генеративную модель Google Gemini для классификации симптомов. В своем методе аннотации он создает подсказку для возврата JSON для каждого образца текста, анализирует ответ модели в структурированную метку, оценку доверия и объяснение, и завершает их в легкие объекты с маркированным образцом, возвращаясь к «неизвестной» метке, если возникают какие-либо ошибки.

sample_data = (
    "Chest pain radiating to left arm during exercise",
    "Persistent dry cough with occasional wheezing",
    "Severe headache with sensitivity to light",
    "Stomach cramps and nausea after eating",
    "Numbness in fingers of right hand",
    "Shortness of breath when climbing stairs"
)


text_samples = (type('TextSample', (), {'text': text}) for text in sample_data)


annotator = GeminiAnnotator(categories=CATEGORIES)
labeled_samples = ()

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

print("\nRunning Active Learning Loop:")
for i in range(3):  
    print(f"\n--- Iteration {i+1} ---")
   
    remaining = (s for s in text_samples if s not in (getattr(l, '_sample', l) for l in labeled_samples))
    if not remaining:
        break
       
    scores = np.zeros(len(remaining))
    for j, sample in enumerate(remaining):
        scores(j) = 0.1
        if any(term in sample.text.lower() for term in ("chest", "heart", "pain")):
            scores(j) += 0.5  
   
    selected_idx = np.argmax(scores)
    selected = (remaining(selected_idx))
   
    newly_labeled = annotator.annotate(selected)
    for sample in newly_labeled:
        sample._sample = selected(0)  
    labeled_samples.extend(newly_labeled)
   
    latest = labeled_samples(-1)
    print(f"Text: {latest.text}")
    print(f"Category: {latest.labels}")
    print(f"Confidence: {latest.metadata.get('confidence', 0)}")
    print(f"Explanation: {latest.metadata.get('explanation', '')(:100)}...")

Этот цикл активного обучения работает для трех итераций, каждый раз фильтрации уже меченных образцов и присваивающий базовый балл 0,1 – на 0,5 для ключевых слов, таких как «грудь», «сердце» или «боль» – для расстановки приоритетов критических симптомов. Затем он выбирает выборку с самым высоким показателем, вызывает Geminiannotator для создания категории, уверенности и объяснения, и печатает эти детали для обзора.

categories = (s.labels for s in labeled_samples)
confidence = (s.metadata.get("confidence", 0) for s in labeled_samples)


plt.figure(figsize=(10, 5))
plt.bar(range(len(categories)), confidence, color="skyblue")
plt.xticks(range(len(categories)), categories, rotation=45)
plt.title('Classification Confidence by Category')
plt.tight_layout()
plt.show()

Наконец, мы извлекаем предсказанные метки категорий и их оценки доверия и используем Matplotlib для построения вертикальной бар -диаграммы, где высота каждой полосы отражает уверенность модели в этой категории. Названия категорий повернуты для читаемости, добавляется заголовок, и tagn_layout () гарантирует, что элементы диаграммы аккуратно расположены перед отображением.

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


Проверить Колаб ноутбук здесь. Весь кредит на это исследование направлено на исследователей этого проекта. Кроме того, не стесняйтесь следить за нами Twitter И не забудьте присоединиться к нашему 90K+ ML SubredditПолем

Вот краткий обзор того, что мы строим в Marktechpost:


ASIF Razzaq является генеральным директором Marktechpost Media Inc. как дальновидного предпринимателя и инженера, ASIF стремится использовать потенциал искусственного интеллекта для социального блага. Его последнее усилие-запуск медиа-платформы искусственного интеллекта, Marktechpost, которая выделяется благодаря глубокому освещению машинного обучения и новостей о глубоком обучении, которое является технически обоснованным и легко понятным для широкой аудитории. Платформа может похвастаться более чем 2 миллионами ежемесячных просмотров, иллюстрируя свою популярность среди зрителей.

Source link

Scroll to Top