Нажмите "Enter" для перехода к содержанию

5 проектов с искусственным интеллектом, которые вы можете создать в эти выходные (с помощью Python)

От начального уровня до продвинутого

Лучший способ развить свои навыки в области искусственного интеллекта — это создавать проекты. Однако, если вы только начинаете, разобраться, что именно создавать, может быть непросто. Здесь я расскажу о 5 проектах с использованием искусственного интеллекта, которые вы можете быстро создать на трех уровнях сложности. Я расскажу о шагах и библиотеках Python, необходимых для реализации каждой идеи.

Ошибка номер один, которую совершают новички, обдумывая проектные идеи, заключается в том, что они начинают с вопроса: «Как я могу использовать эту новую технологию?» Хотя это может быть отличным способом освоить новый инструмент, есть способ получше.

Хорошие проектные идеи начинаются с вопроса: “Какую проблему я могу решить?” Это не только создает интересную историю для потенциальных работодателей, но и помогает превратить технические навыки в ценность при решении проблем.

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

1) Оптимизация резюме (для начинающих)

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

Вот пошаговое описание того, как внедрить такую автоматизацию.

  1. Создайте версию своего резюме в markdown (Примечание: ChatGPT может сделать это за вас).
  2. Поэкспериментируйте с различными шаблонами приглашений, которые используют ваше резюме в markdown и описание работы и выводят новое резюме в markdown.
  3. Используйте Python API OpenAI, чтобы запросить GPT-4o-mini на динамическое редактирование вашего резюме.
  4. Преобразуйте файл markdown в HTML, а затем в PDF с помощью библиотек markdown и pdfkit соответственно.

Библиотеки: openai, markdown, pdfkit

Хотя мы могли бы с готовностью использовать для этого ChatGPT, преимущество реализации этого на Python заключается в том, что мы можем легко масштабировать процесс. Вот небольшой начальный код для шага 3.

import openai
openai.api_key = "your_sk"

# prompt (assuming md_resume and job_desciption have been defined)
prompt = f"""
У меня есть резюме, отформатированное в Markdown, и описание должности. \
Пожалуйста, адаптируйте мое резюме, чтобы оно лучше соответствовало \
требованиям к вакансии, сохраняя при этом профессиональный тон. \
Укажите мои навыки, опыт и достижения, чтобы подчеркнуть наиболее \
важные моменты для данной должности. Убедитесь, что мое резюме по-прежнему \
отражает мою уникальную квалификацию и сильные стороны, но подчеркивает \
навыки и опыт, соответствующие описанию должности.

### Here is my resume in Markdown:
{md_resume}

### Here is the job description:
{job_desciption}

Пожалуйста, измените резюме таким образом, чтобы:
- Используйте ключевые слова и фразы из описания должности.
- Измените основные пункты под каждой должностью, чтобы подчеркнуть соответствующие навыки и достижения.
- Убедитесь, что мой опыт работы представлен в соответствии с требуемой квалификацией.
- Соблюдайте ясность, лаконичность и профессионализм во всем.

Верните обновленное резюме в формате Markdown.

"""
    
# make api call
response = openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ], 
    temperature = 0.25
)
    
# extract response
resume = response.choices[0].message.content

Примечание: ChatGPT очень полезен для написания коротких фрагментов кода (и подсказок) вроде этого. Если у вас возникли трудности, попробуйте воспользоваться им для Шага 4.

2) Краткое изложение лекции на YouTube (для начинающих)

Хотя я люблю добавлять технические выступления в свой плейлист “посмотреть позже” на YouTube, возможно, пройдет некоторое время, прежде чем я их посмотрю (если у меня когда-нибудь дойдут до этого руки). Проект, который может помочь в этом, — это инструмент, который просматривает видео для меня и генерирует краткие резюме с ключевыми моментами.

Вот один из способов сделать это:

  • Извлеките идентификатор видео YouTube из ссылки на видео с помощью регулярного выражения
  • Используйте идентификатор видео для извлечения расшифровки с помощью youtube-transcript-api
  • Поэкспериментируйте с различными подсказками ChatGPT, которые эффективно суммируют расшифровку
  • Используйте Python API OpenAI для автоматизации процесса

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

Вот несколько начальных кодов для этого.

import re
from youtube_transcript_api import YouTubeTranscriptApi

youtube_url = "video link here"

# extract video ID with regex
video_id_regex = r'(?:v=|\/)([0-9A-Za-z_-]{11}).*'
match = re.search(video_id_regex, youtube_url)

if match:
    return match.group(1)
else:
    return None

# extract transcript
text_list = [transcript[i]['text'] for i in range(len(transcript))]
transcript_text = '\n'.join(text_list)

3) Автоматическая организация PDF-файлов (промежуточный уровень)

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

Можно создать инструмент, который будет анализировать содержимое каждого PDF на моем рабочем столе и организовывать их в папки по темам. Текстовые встраивания могут перевести каждую статью в плотное векторное представление, по которому похожие статьи могут быть сгруппированы с использованием традиционного алгоритма машинного обучения, такого как K-Means.

Вот более детальная разбивка:

  1. Прочитать аннотацию каждой исследовательской статьи с помощью PyMuPDF.
  2. Использовать библиотеку sentence-transformers для перевода аннотаций в текстовые встраивания и сохранить их в DataFrame Pandas.
  3. Использовать ваш любимый алгоритм кластеризации из sklearn для группировки встраиваний по сходству.
  4. Создать папки для каждого кластера и переместить файлы в соответствующие папки.

Ключевым шагом для этого проекта является генерация текстовых встраиваний. Вот фрагмент кода для выполнения этой задачи с помощью sentence_transformers.

from sentence_transformers import SentenceTransformer

# load embedding model
model = SentenceTransformer("all-MiniLM-L6-v2")

# store abstracts in a list
abstract_list = ["abstract 1", "abstract 2"]

# calculate embeddings
embeddings = model.encode(abstract_list)

4) Мульти-модальный поиск (промежуточный уровень)

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

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

    Вот базовая структура:

    • Разделите PDF-файл на разделы и извлеките изображения с помощью PyMuPDF
    • Используйте мульти-модальную модель встраивания (например, nomic-ai/nomic-embed-text-v1.5), чтобы представить разделы и изображения в виде плотных векторов и сохранить их в датафрейме
    • Повторите для всех PDF-файлов в базе знаний
    • При поступлении пользовательского запроса пропустите его через ту же модель встраивания, что и для базы знаний
    • Вычислите коэффициент косинусного сходства между вектором запроса и каждым элементом в базе знаний
    • Верните топ k результатов

    Самая важная часть этого проекта — это то, как разделяются PDF-файлы. Самый простой способ — использовать фиксированное количество символов с некоторым перекрытием между фрагментами. Также полезно захватывать метаданные, такие как имя файла и номер страницы для каждого фрагмента.

    Вот пример базового кода для выполнения этой задачи (по материалам ChatGPT). Если у вас возникнут трудности, попробуйте попросить его извлечь изображения.

    import fitz  # PyMuPDF
    
    def extract_text_chunks(pdf_path, chunk_size, overlap_size):
        # Open the PDF file
        pdf_document = fitz.open(pdf_path)
        chunks = []
    
        # Iterate through each page in the PDF
        for page_num in range(len(pdf_document)):
            page = pdf_document[page_num]
            page_text = page.get_text()
    
            # Split the text from the current page into chunks with overlap
            start = 0
            while start < len(page_text):
                end = start + chunk_size
                chunk = page_text[start:end]
    
                # Store the page number with the chunk
                chunks.append((page_num + 1, chunk))
                # Move to the next chunk with the overlap
                start += chunk_size - overlap_size
        
        return chunks
    
    # Parameters for extraction
    pdf_path = "your_file.pdf"
    chunk_size = 1000  # Size of each text chunk in characters
    overlap_size = 200  # Overlap size in characters
    
    text_chunks = extract_text_chunks_with_page_numbers(pdf_path, chunk_size, overlap_size)
    
    # Display the chunks with page numbers
    for i, (page_number, chunk) in enumerate(text_chunks):
        print(f"Chunk {i + 1} (Page {page_number}):\n{chunk}\n{'-' * 50}")

    5. Система вопросов и ответов на основе базы знаний (продвинутый уровень)

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

      Если мы уже разбили и сохранили наши документы в DataFrame, мы можем превратить инструмент многомодального поиска в многомодальную систему RAG.

      Вот шаги:

      1. Выполните поиск по базе знаний (как в проекте 4)
      2. Объедините запрос пользователя с лучшими k результатами поиска и передайте их многомодальной модели.
      3. Создайте простой пользовательский интерфейс Gradio для системы вопросов и ответов.

      Примечание: Llama 3.2 Vision бесплатна до 2025 года через API Together AI

      Этот проект по сути объединяет проекты 2 и 4. Однако он включает в себя необходимый компонент пользовательского интерфейса. Для этого мы можем использовать инструмент для создания дашбордов, такой как Gradio, который позволяет нам создать чат-интерфейс всего за несколько строк кода.

      Вот пример кода, адаптированный из документации Gradio для реализации этого.

      import gradio as gr
      import time
      
      def generate_response(message, history):
          """
              Your code for generating a response
          """
          return response
      
      demo = gr.ChatInterface(
          fn=generate_response, 
          examples=[{"text": "Hello", "files": []}], 
          title="Echo Bot", 
          multimodal=True)
      
      demo.launch()

      Что дальше?

      Благодаря таким инструментам, как ChatGPT и Cursor, создать AI-проекты стало проще, чем когда-либо. Вещи, которые раньше блокировали меня на часы (если не на дни), теперь можно решить за считанные минуты с помощью продвинутых помощников по кодированию.

      Мой совет на прощание — используйте эти инструменты, чтобы учиться быстрее и смело выбирать проекты. Найдите проблемы для проектов и ограничьте время реализации выходными.

      Обсуждение закрыто.