с помощью Microsoft Azure и NLTK

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

Эти бизнес-пользователи являются людьми в курсе.

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

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

Бизнес-пользователи обычно не являются техническими специалистами. Они могут просматривать данные, но не могут обновлять миллионы записей своими руками. С данными, варьирующимися от простого текста до изображений и структурированных данных, встроенных в изображение, это множество данных требует различных методов маркировки для каждого типа данных. Суровая реальность состоит в том, что почти каждая организация работает с огромными объемами неразмеченных данных и, следовательно, нуждается в людях, которые помогут правильно, полностью и всесторонне разметить их. Есть ли способ избавить людей от траты времени на маркировку набора данных и вместо этого сосредоточиться на предоставлении ценности процессам и клиентам, которых они обслуживают? Да.

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

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

Где использовать?

Если у вас есть распечатанные отчеты, формы, приложения, резюме и т. д., вы можете использовать эту реализацию для мгновенного преобразования любого отсканированного документа в помеченный экземпляр. Все, что вам нужно сделать, это сделать снимок или загрузить отсканированный документ с URL-адреса или локального диска, а затем запустить код. Чтобы попробовать код, вам нужно будет внести изменения в переменную имени файла. Позже вы можете просмотреть папку и получить все файлы, которые хотите обработать. Рассмотрите возможность использования мощных пакетов os и sys.

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

Для этой реализации я выбрал Microsoft Azure Cognitive Services и NLTK.

Что вам нужно?

Вам понадобится подписка Azure — пробная версия предлагает превосходный бесплатный период. Если у вас уже есть подписка, используйте ее для создания группы ресурсов Распознаватель форм и соответствующего экземпляра. Затем получите конечную точку и Ключ 1оба конфиденциальны. Если у вас нет подписки Azure, создайте бесплатную, чтобы попробовать это. Подробнее об этом читайте в разделе Предварительные условия.

Что такое распознаватель форм?

Распознаватель форм – это служба искусственного интеллекта, которая применяет расширенное машинное обучение для автоматического и точного извлечения текста, пар "ключ-значение", таблиц и структур из документов. Это помогает превратить документы в полезные данные и смещает акцент с обработки информации, а не ее компиляции. (Источник: azure.microsoft.com/en-us/products/form-recognizer)

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

Вы можете использовать сервисы Microsoft Azure и Amazon AWS для извлечения важных фраз. Это повлечет за собой дополнительную комиссию сверх установленных бесплатных лимитов. С помощью Распознаватель форм вы выбираете коммерческий путь, если ваши объемы, вероятно, будут высокими. Обратитесь к ценовым таблицам, опубликованным этими поставщиками облачных услуг, чтобы узнать, находится ли ваш объем в доступных пределах или может превышать их.

Лучше всего моделировать/оценивать потребление с помощью калькуляторов ценообразования. В Azure и AWS доступны отчеты и информационные панели, которые позволяют просматривать, отслеживать и контролировать потребление/плату. Хотя плата может быть доступной для вас, это не означает, что вам не нужно контролировать использование!

См. ссылки ниже для получения дополнительной информации.

NER на облачных провайдерах

NER в Microsoft Azure

Что такое функция распознавания именованных объектов (NER) в Azure Cognitive Service for Language? — Когнитивные службы Azure | Обучение Майкрософт

NER, на AWS

Распознавание именованных объектов — Amazon SageMaker

О НЭР

Распознавание именованных объектов (NER) (также известное как идентификация (именованных) объектов, разделение объектов и извлечение объектов) — это подзадача извлечения информации, которая направлена ​​на поиск и классификацию именованных объектов, упомянутых в неструктурированном тексте, в заранее определенные категории, такие как человек имена, организации, местоположения, медицинские коды, выражения времени, количества, денежные значения, проценты и т. д. (Источник: Распознавание именованных объектов — Википедия)

Почему эта реализация?

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

Предпосылки

1. Идентификатор электронной почты Microsoft Outlook

2. Учетная запись Azure — уровень бесплатного пользования, созданный с помощью вашего идентификатора электронной почты Outlook

3. Группа ресурсов Azure

4. Служба распознавания форм Azure и экземпляр. (После развертывания службы у вас должна быть конечная точка и 2 ключа. Используйте ключ 1 в коде).

5. Python 3.6 или более поздней версии

6. pip после azure.core.credentials, azure.ai.formrecognizer

Процесс создания этих ресурсов в Azure прост. Вам не требуется никаких знаний в области облачных вычислений.

Относится к

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

· Все, что напечатано и разборчиво, конечно

Вход

· Любое изображение, содержащее печатный текст

Выход

· Текстовый вывод документа

· В зависимости от документа могут быть указаны дополнительные поля

· Текст, извлеченный с помощью NLTK NER

Преимущества

· Высокая надежность Azure

· Быстрая обработка, опыт машинного обучения не требуется

· Вы можете перейти на полностью облачное или полуоблачное и полу-NLTK-облако.

· Извините, HITL удален

Предостережения

· Слишком много власти у машин, а не у людей? ☹

· Стоимость, если ваш объем действительно высок. Azure предлагает выгодные плиты.

· Реализация полуоблака и полу-NLTK может не иметь смысла с архитектурной точки зрения. Можно использовать полностью округленное облако, но тогда также необходимо добавить платные облачные API или NER.

Примечание. Code2.png содержит текст из Википедии.

Код находится по адресу: penredink/Remove-the-Human-in-the-Loop-Phew- (github.com)

import re

import nltk
import pandas as pd
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
from nltk import pos_tag
from nltk.tokenize import word_tokenize

# -----------------Variables and Data Structures --------------------
filename = "Code2.png"
search_list = []
all_the_lines = []
full_text = str()

# TODO: PLEASE POPULATE YOUR ENDPOINT URL AND KEY INI THE CREDENTIALS OR THE CODE WILL NOT WORK :-)
endpoint = ""
credential = AzureKeyCredential("")

# -------------------------------------
def gen_NER_tags(paramtext: str):
    tagged_text = pos_tag(word_tokenize(paramtext))
    # Look for all nouns and pronouns. These 'Things' tend to be Actors!
    for t in tagged_text:
        # Use a loop though you can use smaller lambda functions
        if t[1] == "NN" or t[1] == "NNS" or t[1] == "NNP" or t[1] == "NNPS" or t[1] == "PRP" or t[1] == "PRP$":
            search_list.append(t[0])
    #
    return search_list

# -------------------------------------
def most_important_pareto(paramtext: str):
    listed_text = word_tokenize(paramtext)
    extraction_metric = int(0.20 * round(len(listed_text), 0))
    # print(f"\n\nMost important phrases: {extraction_metric} of {len(listed_text)}")
    freqdist = nltk.FreqDist(samples=listed_text)
    top20percent = freqdist.most_common(extraction_metric)
    for t in top20percent: search_list.append(t[0])
    #
    return search_list
#
print("Connecting to Azure...")
azure_client = DocumentAnalysisClient(endpoint, credential)
#
print(f"Opening {filename}...")
with open(filename, "rb") as fd:
    document = fd.read()
#
print(f"Analysing {filename}...")
polled_outcome = azure_client.begin_analyze_document("prebuilt-layout", document)
#
print("Fetching results from Azure...")
outcome = polled_outcome.result()
# Loop through the resultset sent by powerful Form Recognizer endpoint
for page in outcome.pages:
    print(f"Source file {filename}, dimensions:{page.width} x {page.height}, metric unit: {page.unit}")
    for the_lineid, line in enumerate(page.lines):
        all_the_lines.append(line.content)
        full_text = full_text + line.content

# Clean punctuations unless you want these to be searchable as well :-)
to_clean = r',|\(|\)|\[|\]|;|:|!]|#|\.'
refined = re.sub(to_clean, '', full_text)
# Remove 1 character word that are not important unless you want them to be searachable as well :-)
to_clean = r' . '
refined = re.sub(to_clean, '', refined)
# Call functions to generate labels - this helps in search and as removes human from the loop
most_important_pareto(refined)
gen_NER_tags(refined)

# Make text unique to reduce overhead, redundancy
labels_or_search_strings = list(set(search_list))
schema_data = {"filename": filename, "labels": labels_or_search_strings}
# Remove the human in loop and label the image
df = pd.DataFrame(schema_data)
df.to_csv(filename + ".csv", index=False)
print(df)

Отказ от ответственности

Все авторские права и товарные знаки принадлежат соответствующим компаниям и владельцам.