с помощью 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, на 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)
Отказ от ответственности
Все авторские права и товарные знаки принадлежат соответствующим компаниям и владельцам.