Почему Azure Content Moderator не может определить пользовательские термины? - PullRequest
2 голосов
/ 06 мая 2019

Я пытаюсь обнаружить пользовательские помеченные ключевые слова в фрагменте текста, используя службы когнитивных служб Azure (более конкретно azure-cognitiveservices-vision-contentmoderator==1.0.0).

Код работает следующим образом:

from azure.cognitiveservices.vision.contentmoderator import ContentModeratorClient
from msrest.authentication import CognitiveServicesCredentials

subscription_key = '<my_key>'
endpoint_url = 'https://westeurope.api.cognitive.microsoft.com/'

client = ContentModeratorClient(endpoint_url, CognitiveServicesCredentials(subscription_key))

После этого я также могу создать список (с именем 123) пользовательских терминов (используя методы client.list_management_term_lists.create и client.list_management_term.add_term)

client.list_management_term_lists.create(
        content_type="application/json",
        body={
            "name": "My custom list",
            "description": "Monty Python related terms",
        }
)

client.list_management_term.add_term(
        list_id=123,
        term="eggs",
        language="eng"
)

и я могу убедиться, что это работает так, как задумано

terms_data = client.list_management_term.get_all_terms(list_id=123, language="eng").data
terms_data.as_dict()

выходы

{'language': 'eng', 'rules': [{{term ':' eggs '}, {' term ':' spam '}], 'status': {'code': 3000, 'description': 'OK'}, 'tracking_id': 'Some_id'}

Однако, если я попытаюсь обнаружить с помощью

import io

TEXT = "Do you like spam and eggs ?"

text_screen = client.text_moderation.screen_text(
    text_content_type="text/plain",
    text_content=io.StringIO(TEXT),
    language="eng",
    list_id=123,
    classify=True
)

text_screen.as_dict()

нет 'Terms' сущность появляется, поскольку то, что я получаю из вышесказанного, просто:

{'original_text': 'Do you like spam and eggs ?',
 'normalized_text': ' you like spam  eggs ?',
 'classification': {'category1': {'score': 0.028309470042586327},
  'category2': {'score': 0.14004242420196533},
  'category3': {'score': 0.12679287791252136},
  'review_recommended': False},
 'status': {'code': 3000, 'description': 'OK'},
 'language': 'eng'}

Что я делаю не так и как я должен делать это правильно?

Также (не уверен, если это уместно), стрельба

client.list_management_term_lists.refresh_index_method(list_id=123, language="eng")

дает мне APIErrorException: Operation returned an invalid status code 'Not Found'

...