Группа инструментов Анализ текста в наборе инструментов GeoAI предоставляет набор инструментов для задач обработки текста, таких как классификация текста, извлечение элементов и перевод текста. Модели обработки естественного языка (natural language processing (NLP)), которые созданы при помощи этих инструментов, встроены в языковые модели, такие как BERT, RoBERTa и T5, и большие языковые модели (large language models (LLM)), такие, как Mistral, чтобы обеспечить высокопроизводительный анализ текста.
Хотя эти готовые модели надежны, вам может понадобиться пользовательский рабочий процесс NLP, например, при использовании LLM для стандартизации адресов, выполнения анализа настроений или извлечения пользовательских элементов или отношений, который в данный момент не поддерживаются в группе инструментов Анализ текста. В этих целях вы можете интегрировать ArcGIS с внешними сторонними языковыми моделями. Сюда относятся LLM из открытых источников, а также размещенные в облаке коммерческие LLM, доступные при использовании веб API. Имейте в виду, что при использовании LLM, размещенной в веб, данные, обрабатываемые вами, будут отправлены для обработки к провайдеру LLM. Разработчики Python могут создавать пользовательские функции NLP для интеграции с внешними моделями и упаковывать свои модели как пакеты глубокого обучения Esri (файл .dlpk) для использования со следующими инструментами:
- Классифицировать текст при помощи глубокого обучения
- Извлечь элементы при помощи глубокого обучения
- Преобразовать текст при помощи глубокого обучения
Пользовательская функция Python NLP
Вы можете изменить функцию NLP в Python, чтобы интегрировать сторонние языковые модели в конвейер обработки текста. Функции NLP обрабатывают текстовые данные и выполняют различные задачи по обработке текста.
Методы функции NLP перечислены в следующей таблице и более подробно описаны в разделах ниже.
Метод | Описание |
---|---|
__init__ | Инициализируйте переменные экземпляра, такие как name, description, и другие атрибуты, необходимые для функции NLP. |
initialize | Загрузите модели NLP и установите любые исходные конфигурации. Используйте этот метод в начале функции NLP Python. |
getParameterInfo | Определите параметры, которые принимает функция NLP. Сюда относятся любые настройки конфигурации, необходимые для загрузки или подключения к модели, а также параметры, необходимые для обработки текста. |
getConfiguration | Опишите, как инструмент будет выполнять обработку и создание выходных данных. Это включает подробную информацию для любых шагов предварительной обработки и постобработки, необходимых для функции. |
predict | Функция, отвечающая за преобразование введенного текста в желаемый результат. Она использует заданные параметры и логику обработки для создания конечного результата. |
Методы функции
Методы функции NLP описаны далее.
__init__
Метод __init__ является конструктором пользовательской функции NLP и инициализирует переменные экземпляра, такие как имя, описание и другие основные атрибуты. Этот метод задает свойства, которые определяют поведение и характеристики функции NLP.
Конструктор создает экземпляр пользовательского класса NLP со всеми атрибутами, необходимыми для обработки и анализа. При создании экземпляра класса NLP этот метод гарантирует, что он содержит все необходимые настройки и значения по умолчанию. Например, если для функции NLP необходимы определенные настройки, такие как пути к моделям, или специальные токены, их можно задать при помощи этого метода.
class MyTextClassifier:
def __init__(self, **kwargs):
"""
It sets up the initial state of an object by defining its attributes,
such as name, description, and other properties.
"""
self.name = "Text classifier"
self.description = '''The `MyTextClassifier` class is designed to perform text classification tasks
such as categorizing text data into predefined categories.'''
# Additional initialization code here
...
initialize
Метод initialize вызывается в начале пользовательской функции Python NLP, и этому методу передается kwargs['model']. Аргумент kwargs['model'] является путем к файлу определения модели Esri (.emd). Этот метод следует использовать для загрузки весов модели, чтобы настроить модель NLP, обеспечивая привязку к ней для последующих операций.
def initialize(self, **kwargs):
"""
Initialize model parameters, such as loading pretrained model weights.
"""
json_file = kwargs['model']
with open(json_file, 'r') as f:
self.json_info = json.load(f)
# access the model path in the model definition file
model_path = json_info['ModelFile']
# load your model and keep an instance for the model
self.model = load_your_model(model_path)
# Additional initialization code here
...
getParameterInfo
Метод getParameterInfo вызывается инструментами Анализа текста после метода initialize и служит для определения параметров, необходимых модели. Этот метод возвращает список входных параметров, ожидаемых пользовательской функцией NLP. Каждый параметр описывается при помощи словаря, содержащего имя, тип данных, отображаемое имя и описание параметра, а также логический параметр, определяющий, является ли параметр обязательным, как показано далее.
def getParameterInfo(self):
return [
{
"name": "class_names",
"dataType": "string",
"required": True,
"displayName": "class_names",
"description": "Comma-separated list of class names used for classification.",
"value": "positive,negative"
},
{
"name": "prompt",
"dataType": "string",
"required": False,
"displayName": "prompt",
"description": "The number of samples processed in one forward pass through the model.",
"value": "Classify the following text into the defined classes."
},
# Additional code here
...
]
Метод возвращает список словарей, каждый из которых описывает параметр. Ключевые атрибуты словаря:
- name — строковый идентификатор параметра
- dataType — тип данных, допустимый для этого параметра, например, строка, логическое или список
- value — значение по умолчанию для параметра
- required — логическое значение, указывающее, является ли этот параметр обязательным
- displayName — понятное пользователю имя параметра
- domain — набор допустимых значений, если применимо
- description — подробное описание параметра
Список параметров показывается пользователю с помощью аргументов пользовательской модели в инструментах анализа текста. Пользователи модели могут задать эти значения интерактивно при помощи пользовательского интерфейса инструмента или при помощи программирования, передавая их в метод getConfiguration в качестве аргументов ключевых слов.
getConfiguration
Метод getConfiguration задает параметры для функции NLP и управляет ими. Он передает аргументы ключевых слов, содержащие параметры, обновленные пользователем модели через инструмент или путем программирования. Метод также управляет тем, как функция обрабатывает и выводит данные на основе обновленных параметров. Этот метод вызывается после метода getParameterInfo и перед методом predict. Возвращаемое значение функции - словарь, содержащий значение batch_size, указывающее количество строк модели, которые можно обработать за один раз. Возвращаемое значение метода информирует инструмент о том, как необходимо разбить входные данные для обработки моделью по одному пакету за раз.
def getConfiguration(self, **kwargs):
"""
This method configures the supported NLP function parameters and
controls further processing based on them.
"""
# Set the class names from the provided arguments
self.class_names = kwargs.get("class_names", "")
self.prompt = kwargs.get("prompt", "")
# Set the batch size, limiting it to a maximum of 4
if kwargs.get("batch_size", 0) > 4:
kwargs["batch_size"] = 4
# Additional code here
...
# Return the updated parameter values
return kwargs
В примере, приведенном выше, пользовательская функция NLP настраивается при помощи следующих шагов:
- Настройка параметра class_names по предоставленным аргументам.
- Настройка параметра prompt по предоставленным аргументам.
- Ограничение параметра batch_size максимальным значением 4, если предоставлено большее значение.
- Возвращение обновленных значений параметра.
predict
Метод predict выполняет логический вывод, то есть строит прогнозы с помощью модели NLP. Этому методу передается FeatureSet, содержащий входные пространственные объекты (или строки, в случае таблицы), и kwargs, содержащий имя поля с входными строками. Этот метод возвращает результаты в форме объекта FeatureSet. Далее приводится типичный рабочий процесс:
- Извлечь входной текст для обработки из предоставленного FeatureSet и предварительно обработать его для соответствия требованиям модели.
- Применить модель NLP для предварительно обработанного текста, чтобы построить прогнозы.
- Уточнить или отформатировать прогнозы модели при необходимости.
- Упаковать обработанные прогнозы в объект FeatureSet и вернуть его.
def predict(self, feature_set: FeatureSet, **kwargs):
"""
Predicts the classification of text data from the input FeatureSet and returns a new FeatureSet with the predictions.
"""
# read the text from the input Featureset, when calling this function from ArcGIS Pro tools, be sure to use the name of the column that contains the text data instead of `input_str`.
field = kwargs["input_field"]
input_text = feature_set.df[field].to_list()
# Preprocessing input code here
#
...
# Make Predictions
results = self.model.predict(input_text, self.class_names, self.prompt)
# Additional code here
...
# Create featureset
feature_dict = {
"fields": [
{"name": "input_str", "type": "esriFieldTypeString"},
{"name": "class", "type": "esriFieldTypeString"}
],
'geometryType': "",
'features': [{'attributes': {'input_str': inputs, "class": result}}]
}
# Return the featureset
return FeatureSet.from_dict(feature_dict)
Файл Esri .emd
После создания пользовательской функции NLP Python включите ссылку на функцию в файл .emd, указав ее рядом с параметром InferenceFunction. Это гарантирует, что файл .emd правильно ссылается на функцию, делая ее доступной для использования в конвейере обработки NLP.
{
"InferenceFunction": "MyTextClassifier.py",
"ModelType": "TextClassifier",
"OutputField": "ClassLabel",
"Labels": [
"positive",
"negative"
],
# additional keys here
...
}
Примечание:
Файл .emd должен содержать следующие ключи:
- InferenceFunction — указывает имя файла, содержащего пользовательскую функцию NLP.
- ModelType — указывает тип модели на основании ее задачи. Поддерживаются значения TextClassifier, SequenceToSequence и EntityRecognizer.
- OutputField — предоставляет имя выходного поля, которое будет хранить результаты моделей TextClassifier или SequenceToSequence.
Пользовательский файл .dlpk
Для завершения настройки пользовательской NLP создайте файл модели .dlpk. Файл .dlpk позволяет использовать модель с инструментами логического ввода в группе инструментов Анализ текста.
Организуйте файлы следующим образом:
- Создайте папку и включите в нее файл пользовательской функции NLP (например, MyTextClassifier.py) и файл Esri .emd (например, TextClassifier.emd). Имя папки должно совпадать с именем файла .emd.
Включите любые дополнительные файлы или папки, необходимые для функции NLP.TextClassifier/ ├── MyTextClassifier.py └── TextClassifier.emd
- Выполните сжатие папки в архив ZIP. Переименуйте файл .zip по имени файла .emd, но с расширением .dlpk. Файл .dlpk теперь готов для использования с инструментами ввода в группе инструментов Анализ текста.