Действия

SMC. Руководство пользователя: различия между версиями

Материал из Флора AI

(Новая страница: «===== '''Общее описание''' ===== Сервис Short  Message Classifier предназначен для классификации текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON. ===== '''Термины и определения''' ===== Short  M...»)
 
Нет описания правки
 
(не показано 58 промежуточных версий 5 участников)
Строка 11: Строка 11:




===== '''Описание методов API''' =====
===== '''Описание методов API SMC''' =====
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SMC. По умолчанию используется порт 6181/tcp.
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SMC. По умолчанию используется порт 6181/tcp.


Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок <code>"accept: application/json"</code>
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок <code>"accept: application/json"</code>


Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6183 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке <nowiki>http://АДРЕС:6181</nowiki> будет отображен интерфейс swagger со всеми методами с возможностью их проверки.  


{| class="wikitable"
===== '''Постобработка''' =====
Модель может содержать постобработчик. Это стандартный файл на языке Python, который выполняет произвольные действия с результатом работы модели. Обязательным условием является наличие функции handler, которая должна возвращать данные такого же вида, как и метод GET /smc/classify/{id}.
 
 
 
Пример пустой функции:
 
<code>def handler(classes=[],text=""):</code>
 
<code>  returns classes</code>
 
На вход подается результат работы модели, а также начальный текст.
 
 
<onlyinclude>
{| class="wikitable" style="width: 110%"
|+
|+
!Метод
</onlyinclude>
!Тип
!style="color:blue;width: 15%"|'''GET/smc/'''
!Описание
!colspan="3" style="width: 85%"|<small>Вывод списка моделей. Выводит только пользовательские модели. Сервисные модели, корпуса, наборы меток не выводит.</small>
!Входные параметры
|-
!Ответ
|colspan="2" style="width: 50%|<small>Без входных параметров</small>
|colspan="2" style="width: 50%|<small><code>{ models: [model1,...,modelN] }</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/automark/list'''
!colspan="3" style="width: 85%"|<small>Список заданий на автоматическую разметку корпуса. Метод для использования сервисом ups.</small>
|-
|colspan="2" style="width: 50%|<small>Без входных параметров</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
 
<small><code>  "error": 0,</code></small>
 
<small><code>  "message": "success",</code></small>
 
<small><code>  "tasks": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "id": "id-1",</code></small>
 
<small><code>      "taskname": "name1",</code></small>
 
<small><code>      "status": "finished"</code></small>
 
<small><code>    },</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "id": "id-nnnn",</code></small>
 
<small><code>      "taskname": "name2",</code></small>
 
<small><code>      "status": "finished"</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ]</code></small>
 
<small><code>}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/automark/result/{id}'''
!colspan="3" style="width: 85%"|<small>Получить результат задания на автоматическую разметку корпуса. Метод для использования сервисом ups.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор задания</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
 
<small><code>  "error": 0,</code></small>
 
<small><code>  "message": "success",</code></small>
 
<small><code>  "started": "2024-10-09 18:05:51",</code></small>
 
<small><code>  "finished": "2024-10-09 18:05:51",</code></small>
 
<small><code>  "corpus": [[ [], [ ["тэг"],"фраза 1"]],</code></small>
 
<small><code>    [ [], [["тэг"],"фраза 2"]] ]</code></small>
 
<small><code>}</code></small>
|-
!style="color:green;width: 15%"|'''POST/smc/automark/start'''
!colspan="3" style="width: 85%"|<small>Начать автоматическую разметку корпуса. Метод для использования сервисом ups.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''taskname''' - произвольное имя задания</small>
 
* <small>'''corpus''' - json строка с размечаемым корпусом[</small><small>[ [класс1,... классН], текст ],</small>
 
<small>[ [класс1,... классН], текст ]]</small>
 
* <small>'''marks''' - json строка с набором меток [    [ метка, [синоним, синоним2 ... синоним Н], порог ],</small>
 
<small>[ метка, [синоним, синоним2 ... синоним Н], порог ]]</small>
 
* <small>'''appendMarks''' - "yes" - дополнить разметку, "no" -заменить разметку</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
 
<small><code>  "error": 0,</code></small>
 
<small><code>  "message": "success",</code></small>
 
<small><code>  "id": "уникальный id задания"</code></small>
 
<small><code>}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/automark/status/{id}'''
!colspan="3" style="width: 85%"|<small>Получить статус задания на автоматическую разметку корпуса. Метод для использования сервисом ups.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор задания</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
 
<small><code>  "error": "",</code></small>
 
<small><code>  "status": "finished",</code></small>
 
<small><code>  "started": "2024-10-09 13:49:46",</code></small>
 
<small><code>  "finished": "2024-10-09 13:49:46",</code></small>
 
<small><code>  "progress": 0</code></small>
 
<small><code>}</code></small>
|-
|-
|/smc/
!style="color:blue;width: 15%"|'''GET/smc/automark/stop/{id}'''
|GET
!colspan="3" style="width: 85%"|<small>Прервать задание на автоматическую разметку корпуса. Метод для использования сервисом ups.</small>
|Вывод списка моделей
| -
|<code>{ models: [model1,...,modelN] }</code>
|-
|-
|/smc/classify/{id}
|colspan="2" style="width: 50%|
|GET
* <small>'''id''' - идентификатор задания</small>
|Классификация текстовой фразы
|colspan="2" style="width: 50%|<small><code>{</code></small>
|'''id''' - идентификатор модели
<small><code>  "error": 0,</code></small>
'''text''' - текст, подлежащий классификации
 
'''multiclass''' - опция запроса нескольких классов при их наличии, если multiclass=1
<small><code>  "message": "success"</code></small>
|Если multiclass=0 ответ будет в виде массива с одним классом, иначе - список массивов. Ниже пример такого списка.
 
[
<small><code>}</code></small>
{ class: Appointment,
calculated: Appointment,
confidence: 0.9993352,
start: 0,
length: 2
}, {...}
]
'''start''' - позиция слова начала фрагмента, определяющего класс
'''length''' - количество слов во фрагменте, определяющим класс
'''confidence''' - вероятность правильного определения класса
'''calculated''' - поле, содержащее измененное постобработчиком (при его наличии) значение класса.
|-
|-
|/smc/confusion/{id}/{type}
<onlyinclude>
|GET
!style="color:blue;width: 15%"|'''GET/smc/classify/{id}'''
|Получение изображения матрицы ошибок
!colspan="3" style="width: 85%"|<small>Классификация текстовой фразы. В случает если модель была создана из меток в ответе groups и nearest будут пустыми, а ответ будет построен без учета confidenceThreshold из запроса.</small>
|'''id''' - идентификатор модели
<small>В ответе:</small>
'''type''' - тип данных для построения матрицы, train или test
 
|Возвращает PNG изображение с матрицей ошибок
* <small>'''classes''' - список , для каждого класса которого отображается название класса, к которому был отнесен текст, и вероятность его принадлежности к этому классу.</small>
 
* <small>'''groups''' - название группы и число совпавших классов. Если метки совпадают с несколькими группами, они отображаются в порядке убывания числа совпавших классов (т.е. чем полнее группа, тем выше ее позиция в списке).</small>
 
* <small>'''nearest''' - отображаются группы, до которых не хватает всего одной метки, с указанием процента заполненности и сортировкой по убыванию этого процента.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
 
* <small>'''text''' - текст, подлежащий классификации</small>
* <small>'''correction''' - проверять правописание слов и исправлять ошибки</small>
 
* <small>'''confidenceThreshold''', % - минимальный порог доверия.</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
<small><code>  "classes": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "class": "название класса",</code></small>
 
<small><code>      "confidence": 1</code></small>
 
<small><code>    },</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "class": "название класса 2",</code></small>
 
<small><code>      "confidence": 1</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ],</code></small>
 
<small><code>  "groups": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": "название группы 1",</code></small>
 
<small><code>      "intersection": 2,</code></small>
 
<small><code>      "classes": [ "название класса", "название класса 2" ]</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ],</code></small>
 
<small><code>  "nearest": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": "название группы 2",</code></small>
 
<small><code>      "percent": 0.67,</code></small>
 
<small><code>      "need": "название класса которого не хватило 1"</code></small>
 
<small><code>    },</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": ""название группы 3",</code></small>
 
<small><code>      "percent": 0.67,</code></small>
 
<small><code>      "need": "название класса которого не хватило 2"</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ]</code></small>
 
<small><code>}</code></small>
|-
|-
|/smc/data/{id}
</onlyinclude>
|GET
!style="color:blue;width: 15%"|'''GET/smc/compress'''
|Получение архива модели
!colspan="3" style="width: 85%"|<small>Убирает из фразы слова не влияющие на ее смысл.</small>
|'''id''' - идентификатор модели
|<code>ZIP-файл с моделью, либо { error: 1, message: DESCRIPTION }</code>
|-
|-
|/smc/data/{id}
|colspan="2" style="width: 50%|
|POST
* <small>'''text''' - текст для сжатия</small>
|Добавление модели. Может быть добавлена следующими способами:


* файл архива модели
* <small>'''threshold''' - уровень компрессии от 1 до 100. Чем меньше число тем меньше слов будет в итоговой фразе</small>
* переименование существующей модели если указана переменная '''from-existing-model'''. В данном случае происходит переименование модели на сервере '''from-existing-model -> id'''
|colspan="2" style="width: 50%|<small><code>{</code></small>
* создание новой модели из обучающего корпуса, текстового файла со строками CLASS<TAB>TEXT в переменной '''csv-file'''


|'''id''' - идентификатор модели
<small><code>  "text": "сжатый текст"</code></small>
'''zip-model''' - zip-архив с файлами модели '''from-existing-model''' - название модели, которое до
 
|<code>{ error: INT, message: DESCRIPTION }</code>
<small><code>}</code></small>
|-
|-
|/smc/data/{id}
!style="color:blue;width: 15%"|'''GET/smc/confusion/{id}/{type}'''
|DELETE
!colspan="3" style="width: 85%"|<small>Получение изображения матрицы ошибок.</small>
|Удаление модели
|id - идентификатор модели
|<code>{ error: INT, message: DESCRIPTION }</code>
|-
|-
|/smc/stt/{id}
|colspan="2" style="width: 50%|
|POST
* <small>'''id''' - идентификатор модели</small>
|Отправка файла на распознавание речи. Моно-файлы до 30 секунд распознаются без разбивки на фрагменты. Многоканальные файлы и файлы длиннее 30 секунд предварительно разбиваются на фрагменты по отсутствию речи. Настройка данных параметров описана в [[SPR. Руководство администратора.|руководстве администратора]]. В случае отправки переменной speakers=1, дополнительно производится поиск говорящих и получение метаданных по каждому говорящему.
 
|'''id''' - идентификатор модели
* <small>'''type''' - тип данных для построения матрицы, train или test</small>
'''wav''' - файл для распознавания '''speakers''' - опция разделения по говорящим
|colspan="2" style="width: 50%|<small>Возвращает PNG изображение с матрицей ошибок</small>
|'''text''' заполняется только для файлов менее 60 секунд. '''speakers, speaker, confidence''' (вероятность правильности определения говорящего) возвращаются только при отправке speakers=1.
|-
<code>{</code> <code>model: модель, text: текст без разбивки,</code> <code>speakers: [</code> <code>{ gender: пол,</code> <code>age: возраст,</code> <code>emotion: эмоция, id: идентификатор</code> <code>}, ...</code> <code>],</code> <code>splitted": [</code> <code>{ start: "00:00:02.255",</code> <code>stop: "00:00:10.995",</code> <code>channel: канал в файле,</code> <code>duration: 00:00:08.740,</code> <code>start_ms: 2255,</code> <code>stop_ms: 10995,</code> <code>duration_ms: 8740,</code> <code>speaker: индекс говорящего,</code> <code>confidence: 0.9541002174024272,</code> <code>text: распознанный текст}, ...</code> <code>]</code> <code>}</code>
!style="color:blue;width: 15%"|'''GET/smc/correct'''
!colspan="3" style="width: 85%"|<small>Коррекция правописания. Изменяет неправильно написанные слова меняя их на наиболее близкие правильные (из знакомых модели). Если модель коррекции не смогла предложить правильное написание текста, метод вернет текст неизменным.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''text''' - текст для коррекции</small>
* <small>'''correction''' - уровень коррекции, от 1 до 3. По умолчанию 1.</small>
* <small>'''model''' - если указано, то при коррекции дополнительно используется словарь модели</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>
<small><code>  "text": "корректный текст"</code></small>
 
<small><code>}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/data/{id}'''
!colspan="3" style="width: 85%"|<small>Получение архива модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
|colspan="2" style="width: 50%|<small>ZIP-файл с моделью, либо { error: 1, message: DESCRIPTION }</small>
|-
!style="color:red;width: 15%"|'''DELETE/smc/data/{id}'''
!colspan="3" style="width: 85%"|<small>Удаление модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
|colspan="2" style="width: 50%|<small><code>{ error: INT, message: DESCRIPTION }</code></small>
|-
!style="color:green;width: 15%"|'''POST/smc/data/{id}'''
!colspan="3" style="width: 85%"|<small>Добавление модели. Окончание работы проверяется через метод /smc/info/{id}. Модель может быть добавлена следующими способами:</small>
* '''<small>файл архива модели</small>'''
 
* <small>'''переименование существующей модели'''</small>
 
* <small>'''создание новой модели из обучающего корпуса'''</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
* <small>'''zip-model''' - zip-архив с файлами модели</small>
* <small>'''from-existing-model''' - название модели, которое должно быть переименовано в '''id'''</small>
* <small>'''csv-file''' - текстовый файл для обучения модели или json файл с метками</small>
* <small>'''isMarks''' - если "1" то вместо csv файла корпуса метод ожидает json файл с меткам, формат файла '''csv-file''':</small><small>{"id": "уникальный идентификатор",  "name": "имя набора", "data": [ ["метка1",["синоним1", "еще несколько синонимов через запятую"],порог достоверности],</small>  <small>["еще метка",["синоним", "еще несколько синонимов через запятую"],порог достоверности]]}</small>  <small>модель созданная из меток при этом не обучается, созданный файл модели используется для расчетов векторов "на лету" и выдачи результатов на основании сравнения векторов текста и синонимов из файла с метками</small>
|colspan="2" style="width: 50%|<small><code>{ error: INT, message: DESCRIPTION }</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/emotion'''
!colspan="3" style="width: 85%"|<small>Анализ эмоций. На выходе один из вариантов ''positive negative neutral.''</small>
|-
|colspan="2" style="width: 50%|
* <small>'''text''' - фраза для анализа эмоций</small>
|colspan="2" style="width: 50%|<small><code>{ "emotion": "positive", "score": 0.9601 }</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/errors/{id}'''
!colspan="3" style="width: 85%"|<small>Получение файла с ошибками модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
* <small>'''type''' - тип ошибок, возможные варианты:</small>
<small>'''train''' - ошибки обучения</small>
 
<small>'''test''' - ошибки тестирования</small>
 
<small>'''mark''' - ошибки создания модели из меток</small>
|colspan="2" style="width: 50%|<small>текстовый файл со строками вида:</small>
<small>ИСТИНА<TAB>ОПРЕДЕЛЕНО<TAB>ФРАЗА</small>
|-
!style="color:blue;width: 15%"|'''GET/smc/groups/{id}'''
!colspan="3" style="width: 85%"|<small>Поиск групп по ранее полученным меткам. Ищет группы по набору меток. Результат - группы (если найдены) и ближайшие группы с указанием недостающих меток.  Позволяет сохранять контекст в виде меток и дозапрашивать группы с учетом контекста.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
* <small>'''classes''' — набор меток через запятую</small>
|colspan="2" style="width: 50%|<small>Результат в виде json.</small><small><code>{</code></small>
 
<small><code>  "groups": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": "Группа 1",</code></small>
 
<small><code>      "intersection": 3,</code></small>
 
<small><code>      "classes": [ "метка1_о", "метка2_о", "метка3_о"]</code></small>
 
<small><code>    },</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": "Группа 2",</code></small>
 
<small><code>      "intersection": 2,</code></small>
 
<small><code>      "classes": [ "метка1_о", "метка5_о" ]</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ],</code></small>
 
<small><code>  "nearest": [</code></small>
 
<small><code>    {</code></small>
 
<small><code>      "group": "Группа до которой не хватило 1 метки",</code></small>
 
<small><code>      "percent": 0.75,</code></small>
 
<small><code>      "need": "недостающая метка_о"</code></small>
 
<small><code>    }</code></small>
 
<small><code>  ]</code></small>
 
<small><code>}</code></small>
|-
!style="color:green;width: 15%"|'''POST/smc/groups/{id}'''
!colspan="3" style="width: 85%"|<small>Добавляет к модели группы.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
 
* <small>'''csv-file''' - файл с группами</small>
|colspan="2" style="width: 50%|<small><code>{ "error": 0,</code></small><small><code>"message": "string"</code></small> <small><code>}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/handler/{id}'''
!colspan="3" style="width: 85%"|<small>Получает [https://wiki.connect2ai.net/index.php/SMC._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F#%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0 постобработчик] модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
|colspan="2" style="width: 50%|<small>Файл программы обработчика на python</small>
|-
!style="color:red;width: 15%"|'''DELETE/smc/handler/{id}'''
!colspan="3" style="width: 85%"|<small>Удаляет [https://wiki.connect2ai.net/index.php/SMC._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F#%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0 постобработчик] модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
|colspan="2" style="width: 50%|<code><small>{ "error": 0,"message": "string" }</small></code>
|-
!style="color:green;width: 15%"|'''POST/smc/handler/{id}'''
!colspan="3" style="width: 85%"|<small>Устанавливает [https://wiki.connect2ai.net/index.php/SMC._%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F#%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0 постобработчик] модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
 
* <small>'''handler''' - файл постобработчика</small>
|colspan="2" style="width: 50%|<code><small>{ "error": 0,"message": "string" }</small></code>
|-
!style="color:blue;width: 15%"|'''GET/smc/info/{id}'''
!colspan="3" style="width: 85%"|<small>Получение информации о модели. В результате выполнения будет возвращен массив с данными о модели. Матрица ошибок отдельно содержат классы, определяющие столбцы и строки матрицы, их количество может быть меньше, т.к. в матрицы попадают только те классы, по которым были ошибки.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
|colspan="2" style="width: 50%|<small>На выходе будут следующие параметры:</small>
<small>'''id''' - идентификатор</small>
 
<small>'''status''' - статус</small>
 
<small>'''classes''' - список классов в модели</small>
 
<small>'''groups''' - список групп в модели</small>
 
<small>'''trainCorpusName''', '''testCorpusName''' - названия файлов, использованных при обучении и тестировании</small>
 
<small>'''trainAccuracy''', '''testAccuracy''' - точность обучения и тестирования</small>
 
<small>'''initCorpusLength''' - начальный размер корпуса обучения</small>
 
<small>'''trainCorpusLength''' - размер корпуса после нормализации и синтеза данных</small>
 
<small>'''testCorpusLength''' - размер тестового корпуса</small>
 
<small>'''trainConfusionMatrix''' - матрица ошибок обучения</small>
 
<small>'''testConfusionMatrix''' - матрица ошибок тестирования</small>
|-
!style="color:blue;width: 15%"|'''GET/smc/log/{id}'''
!colspan="3" style="width: 85%"|<small>Лог всех действий во время обучения/тестирования модели.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - наименование модели</small>
|colspan="2" style="width: 50%|<small>Лог содержится в переменной log в виде списка.</small>
 
<small><code>{ </code></small>
 
<small><code>"log": [</code></small>
 
<small><code>    "training",</code></small>
 
<small><code>    "normalization: 5, model size: 2",</code></small>
 
<small><code>    ...</code></small>
 
<small><code>]</code></small>
 
<small><code>}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/normalize'''
!colspan="3" style="width: 85%"|<small>Обратная нормализация текста. Пример: двадцать пятого апреля в пятом часу -> 25 апреля в 5-м часу</small>
|-
|colspan="2" style="width: 50%|
* <small>'''text''' - текст для обработки</small>
|colspan="2" style="width: 50%|<small><code>{"text": "<строка после обратной нормализации>"}</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/punctuate'''
!colspan="3" style="width: 85%"|<small>Расстановка знаков препинания.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''text''' - текст для обработки</small>
|colspan="2" style="width: 50%|<small><code>{  "text": "string" }</code></small>
|-
!style="color:green;width: 15%"|'''POST/smc/search'''
!colspan="3" style="width: 85%"|<small>Семантический поиск фразы в тексте.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''phrase''' - искомая фраза</small>
 
* <small>'''text''' - текст в котором нужно найти фразу</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>  <small><code>"error": 0,</code></small>
 
<small><code>  "message": "success",</code></small>
 
<small><code>  "similarity": 1,</code></small>
 
<small><code>  "fragment": "найденная фраза"</code></small>
 
<small><code>}</code></small>
|-
!style="color:green;width: 15%"|'''POST/smc/test/{id}'''
!colspan="3" style="width: 85%"|<small>Тестирование модели. Тестируется заранее подготовленным текстовым файлом со строками вида: КЛАСС<TAB>ФРАЗА</small>
 
<small>Метод асинхронный. Окончание работы проверяется через метод /smc/info/{id}.</small>
|-
|colspan="2" style="width: 50%|
* <small>'''id''' - идентификатор модели</small>
* <small>'''csv-file''' - файл для тестирования</small>
* <small>'''correction''' - исправлять ошибки правописания в файле для тестирования ('''0''' или '''1''')</small>
|colspan="2" style="width: 50%|<small><code>{ error: INT, message: DESCRIPTION }</code></small>
|-
!style="color:blue;width: 15%"|'''GET/smc/toxicity'''
!colspan="3" style="width: 85%"|<small>Определение токсичности высказывания. Высказывание анализируется по 4 параметрам, по каждому выдается вероятность от 0 до 1:</small>
|-
|colspan="2" style="width: 50%|
* <small>'''text''' - текстовая строка с высказыванием</small>
|colspan="2" style="width: 50%|<small><code>{</code></small>  <small><code>"insult": 0.13, # оскорбление</code></small>
 
<small><code>  "obscenity": 0, # брань</code></small>
 
<small><code>  "threat": 0, # угрозы</code></small>
 
<small><code>  "politeness": 0.53 вежливость</code></small>
 
<small><code>}</code></small>
|}
|}

Текущая версия от 12:47, 29 октября 2025

Общее описание

Сервис Short  Message Classifier предназначен для классификации текстовых фрагментов (фраз естественной речи). Принимает на вход текстовую строку и возвращает структурированные данные в формате JSON.


Термины и определения

Short  Message Classifier (SMC) - сервис классификации текстовых фрагментов.

Модель — предварительно обученная специализированная нейронная сеть классификации коротких фраз.

Swagger UI – интерактивная  веб-консоль с кратким описанием методов АPI и возможностью выполнять запросы к сервису SMC.


Описание методов API SMC

Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SMC. По умолчанию используется порт 6181/tcp.

Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок "accept: application/json"

Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6181 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.

Постобработка

Модель может содержать постобработчик. Это стандартный файл на языке Python, который выполняет произвольные действия с результатом работы модели. Обязательным условием является наличие функции handler, которая должна возвращать данные такого же вида, как и метод GET /smc/classify/{id}.


Пример пустой функции:

def handler(classes=[],text=""):

  returns classes

На вход подается результат работы модели, а также начальный текст.


GET/smc/ Вывод списка моделей. Выводит только пользовательские модели. Сервисные модели, корпуса, наборы меток не выводит.
Без входных параметров { models: [model1,...,modelN] }
GET/smc/automark/list Список заданий на автоматическую разметку корпуса. Метод для использования сервисом ups.
Без входных параметров {

  "error": 0,

  "message": "success",

  "tasks": [

    {

      "id": "id-1",

      "taskname": "name1",

      "status": "finished"

    },

    {

      "id": "id-nnnn",

      "taskname": "name2",

      "status": "finished"

    }

  ]

}

GET/smc/automark/result/{id} Получить результат задания на автоматическую разметку корпуса. Метод для использования сервисом ups.
  • id - идентификатор задания
{

  "error": 0,

  "message": "success",

  "started": "2024-10-09 18:05:51",

  "finished": "2024-10-09 18:05:51",

  "corpus": [[ [], [ ["тэг"],"фраза 1"]],

    [ [], [["тэг"],"фраза 2"]] ]

}

POST/smc/automark/start Начать автоматическую разметку корпуса. Метод для использования сервисом ups.
  • taskname - произвольное имя задания
  • corpus - json строка с размечаемым корпусом[[ [класс1,... классН], текст ],

[ [класс1,... классН], текст ]]

  • marks - json строка с набором меток [    [ метка, [синоним, синоним2 ... синоним Н], порог ],

[ метка, [синоним, синоним2 ... синоним Н], порог ]]

  • appendMarks - "yes" - дополнить разметку, "no" -заменить разметку
{

  "error": 0,

  "message": "success",

  "id": "уникальный id задания"

}

GET/smc/automark/status/{id} Получить статус задания на автоматическую разметку корпуса. Метод для использования сервисом ups.
  • id - идентификатор задания
{

  "error": "",

  "status": "finished",

  "started": "2024-10-09 13:49:46",

  "finished": "2024-10-09 13:49:46",

  "progress": 0

}

GET/smc/automark/stop/{id} Прервать задание на автоматическую разметку корпуса. Метод для использования сервисом ups.
  • id - идентификатор задания
{

  "error": 0,

  "message": "success"

}

GET/smc/classify/{id} Классификация текстовой фразы. В случает если модель была создана из меток в ответе groups и nearest будут пустыми, а ответ будет построен без учета confidenceThreshold из запроса.

В ответе:

  • classes - список , для каждого класса которого отображается название класса, к которому был отнесен текст, и вероятность его принадлежности к этому классу.
  • groups - название группы и число совпавших классов. Если метки совпадают с несколькими группами, они отображаются в порядке убывания числа совпавших классов (т.е. чем полнее группа, тем выше ее позиция в списке).
  • nearest - отображаются группы, до которых не хватает всего одной метки, с указанием процента заполненности и сортировкой по убыванию этого процента.
  • id - идентификатор модели
  • text - текст, подлежащий классификации
  • correction - проверять правописание слов и исправлять ошибки
  • confidenceThreshold, % - минимальный порог доверия.
{

  "classes": [

    {

      "class": "название класса",

      "confidence": 1

    },

    {

      "class": "название класса 2",

      "confidence": 1

    }

  ],

  "groups": [

    {

      "group": "название группы 1",

      "intersection": 2,

      "classes": [ "название класса", "название класса 2" ]

    }

  ],

  "nearest": [

    {

      "group": "название группы 2",

      "percent": 0.67,

      "need": "название класса которого не хватило 1"

    },

    {

      "group": ""название группы 3",

      "percent": 0.67,

      "need": "название класса которого не хватило 2"

    }

  ]

}

GET/smc/compress Убирает из фразы слова не влияющие на ее смысл.
  • text - текст для сжатия
  • threshold - уровень компрессии от 1 до 100. Чем меньше число тем меньше слов будет в итоговой фразе
{

  "text": "сжатый текст"

}

GET/smc/confusion/{id}/{type} Получение изображения матрицы ошибок.
  • id - идентификатор модели
  • type - тип данных для построения матрицы, train или test
Возвращает PNG изображение с матрицей ошибок
GET/smc/correct Коррекция правописания. Изменяет неправильно написанные слова меняя их на наиболее близкие правильные (из знакомых модели). Если модель коррекции не смогла предложить правильное написание текста, метод вернет текст неизменным.
  • text - текст для коррекции
  • correction - уровень коррекции, от 1 до 3. По умолчанию 1.
  • model - если указано, то при коррекции дополнительно используется словарь модели
{

  "text": "корректный текст"

}

GET/smc/data/{id} Получение архива модели.
  • id - идентификатор модели
ZIP-файл с моделью, либо { error: 1, message: DESCRIPTION }
DELETE/smc/data/{id} Удаление модели.
  • id - идентификатор модели
{ error: INT, message: DESCRIPTION }
POST/smc/data/{id} Добавление модели. Окончание работы проверяется через метод /smc/info/{id}. Модель может быть добавлена следующими способами:
  • файл архива модели
  • переименование существующей модели
  • создание новой модели из обучающего корпуса
  • id - идентификатор модели
  • zip-model - zip-архив с файлами модели
  • from-existing-model - название модели, которое должно быть переименовано в id
  • csv-file - текстовый файл для обучения модели или json файл с метками
  • isMarks - если "1" то вместо csv файла корпуса метод ожидает json файл с меткам, формат файла csv-file:{"id": "уникальный идентификатор", "name": "имя набора", "data": [ ["метка1",["синоним1", "еще несколько синонимов через запятую"],порог достоверности], ["еще метка",["синоним", "еще несколько синонимов через запятую"],порог достоверности]]} модель созданная из меток при этом не обучается, созданный файл модели используется для расчетов векторов "на лету" и выдачи результатов на основании сравнения векторов текста и синонимов из файла с метками
{ error: INT, message: DESCRIPTION }
GET/smc/emotion Анализ эмоций. На выходе один из вариантов positive negative neutral.
  • text - фраза для анализа эмоций
{ "emotion": "positive", "score": 0.9601 }
GET/smc/errors/{id} Получение файла с ошибками модели.
  • id - идентификатор модели
  • type - тип ошибок, возможные варианты:

train - ошибки обучения

test - ошибки тестирования

mark - ошибки создания модели из меток

текстовый файл со строками вида:

ИСТИНА<TAB>ОПРЕДЕЛЕНО<TAB>ФРАЗА

GET/smc/groups/{id} Поиск групп по ранее полученным меткам. Ищет группы по набору меток. Результат - группы (если найдены) и ближайшие группы с указанием недостающих меток. Позволяет сохранять контекст в виде меток и дозапрашивать группы с учетом контекста.
  • id - идентификатор модели
  • classes — набор меток через запятую
Результат в виде json.{

  "groups": [

    {

      "group": "Группа 1",

      "intersection": 3,

      "classes": [ "метка1_о", "метка2_о", "метка3_о"]

    },

    {

      "group": "Группа 2",

      "intersection": 2,

      "classes": [ "метка1_о", "метка5_о" ]

    }

  ],

  "nearest": [

    {

      "group": "Группа до которой не хватило 1 метки",

      "percent": 0.75,

      "need": "недостающая метка_о"

    }

  ]

}

POST/smc/groups/{id} Добавляет к модели группы.
  • id - наименование модели
  • csv-file - файл с группами
{ "error": 0,"message": "string" }
GET/smc/handler/{id} Получает постобработчик модели.
  • id - наименование модели
Файл программы обработчика на python
DELETE/smc/handler/{id} Удаляет постобработчик модели.
  • id - наименование модели
{ "error": 0,"message": "string" }
POST/smc/handler/{id} Устанавливает постобработчик модели.
  • id - наименование модели
  • handler - файл постобработчика
{ "error": 0,"message": "string" }
GET/smc/info/{id} Получение информации о модели. В результате выполнения будет возвращен массив с данными о модели. Матрица ошибок отдельно содержат классы, определяющие столбцы и строки матрицы, их количество может быть меньше, т.к. в матрицы попадают только те классы, по которым были ошибки.
  • id - наименование модели
На выходе будут следующие параметры:

id - идентификатор

status - статус

classes - список классов в модели

groups - список групп в модели

trainCorpusName, testCorpusName - названия файлов, использованных при обучении и тестировании

trainAccuracy, testAccuracy - точность обучения и тестирования

initCorpusLength - начальный размер корпуса обучения

trainCorpusLength - размер корпуса после нормализации и синтеза данных

testCorpusLength - размер тестового корпуса

trainConfusionMatrix - матрица ошибок обучения

testConfusionMatrix - матрица ошибок тестирования

GET/smc/log/{id} Лог всех действий во время обучения/тестирования модели.
  • id - наименование модели
Лог содержится в переменной log в виде списка.

"log": [

    "training",

    "normalization: 5, model size: 2",

    ...

]

}

GET/smc/normalize Обратная нормализация текста. Пример: двадцать пятого апреля в пятом часу -> 25 апреля в 5-м часу
  • text - текст для обработки
{"text": "<строка после обратной нормализации>"}
GET/smc/punctuate Расстановка знаков препинания.
  • text - текст для обработки
{  "text": "string" }
POST/smc/search Семантический поиск фразы в тексте.
  • phrase - искомая фраза
  • text - текст в котором нужно найти фразу
{ "error": 0,

  "message": "success",

  "similarity": 1,

  "fragment": "найденная фраза"

}

POST/smc/test/{id} Тестирование модели. Тестируется заранее подготовленным текстовым файлом со строками вида: КЛАСС<TAB>ФРАЗА

Метод асинхронный. Окончание работы проверяется через метод /smc/info/{id}.

  • id - идентификатор модели
  • csv-file - файл для тестирования
  • correction - исправлять ошибки правописания в файле для тестирования (0 или 1)
{ error: INT, message: DESCRIPTION }
GET/smc/toxicity Определение токсичности высказывания. Высказывание анализируется по 4 параметрам, по каждому выдается вероятность от 0 до 1:
  • text - текстовая строка с высказыванием
{ "insult": 0.13, # оскорбление

  "obscenity": 0, # брань

  "threat": 0, # угрозы

  "politeness": 0.53 вежливость

}