Извлечение и интерпретация текста с помощью OpenAI GPT-3.5 Turbo

В этом посте мы углубимся в сценарий Python, который служит практическим примером использования Langchain — библиотеки-оболочки OpenAI — для извлечения определенного содержимого из документа PDF. Наш скрипт фокусируется на извлечении номерного знака, но помните, что это всего лишь иллюстративный пример. Продемонстрированные здесь методы можно обобщить для извлечения любого интересующего содержимого из PDF-документа с использованием Langchain и API OpenAI.

Эта статья была написана с помощью искусственного интеллекта, выступающего в качестве моего второго пилота.

Скрипт начинается с импорта необходимых библиотек и установки ключа OpenAI API. Langchain — это библиотека-оболочка OpenAI, которая упрощает использование языковой модели OpenAI.

with open('../input/ABC123_verificacion_vehicular.pdf', 'rb') as pdfFileObj:
    pdfReader = PyPDF2.PdfReader(pdfFileObj)
    print(f"Number of pages: {len(pdfReader.pages)}")
    pageObj = pdfReader.pages[0]
    text = re.sub(r"(?<=\w) (?=\w)", "", pageObj.extract_text())

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

match = re.search(r'(placa|Número de Placa|patente|license_plate)(.{0,30})', text, re.IGNORECASE | re.DOTALL)
if match:
    segment = match.group(0)
else:
    print("No license plate found in the document.")
    exit(1)

content = "You are a text interpreter API. Your responses should always be in JSON format, using the following structure: {\"result\": \"$result\"}. Now, please search the license_plate or also called placa in Spanish in the following text: " + segment

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

chat = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
with get_openai_callback() as cb:
    print(chat([HumanMessage(content=content)]))
    print(cb)

Наконец, мы создаем сообщение для отправки в модель OpenAI, создаем экземпляр объекта ChatOpenAI, отправляем содержимое в модель и распечатываем ответ.

Этот скрипт является иллюстрацией того, как библиотеки Python в тандеме с OpenAI GPT-3.5 Turbo могут использоваться для точного извлечения и интерпретации текста. Модель GPT-3.5 Turbo была выбрана из-за ее экономичности и отличной производительности, особенно при наличии достаточного контекста — как в нашем примере.

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

Я надеюсь, что эта статья помогла понять, как использовать Langchain и API OpenAI для извлечения определенного содержимого из документов PDF. Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь обращаться к нам.

Вы также можете найти больше моих работ и связаться со мной на этих платформах:

Удачного кодирования!