Perspective API: правильный способ отправки запросов с автоопределением языка - PullRequest
1 голос
/ 10 апреля 2020

Я немного озадачен правильным способом отправки запросов с помощью Google Perspective API.

Работает отправка следующего запроса:

{"comment":{"text":"yo hamburger"},"languages":["en"],"requestedAttributes":{"TOXICITY":{}}}

В документация , там написано: «... Если вы используете производственный атрибут, язык определяется автоматически, если он не указан в запросе». Итак, я попытался:

{"comment":{"text":"yo hamburger"},"requestedAttributes":{"TOXICITY":{}}}

И в ответ я получил HTTP/1.0 400 Bad Request.

Я также попытался включить все языки, перечисленные на странице документации вот так:

{"comment":{"text":"yo hamburger"},"languages":["en","fr","es","de","it","pt"],"requestedAttributes":{"TOXICITY":{}}}

Но это также дало мне ответ HTTP/1.0 400 Bad Request.

Была предпринята еще одна попытка оставить массив языков пустым, как это :

{"comment":{"text":"yo hamburger"},"languages":[],"requestedAttributes":{"TOXICITY":{}}}

Тем не менее, он все еще дал мне ответ HTTP/1.0 400 Bad Request.

Мне было интересно, как правильно отправить запрос в API и есть ли у него язык автоопределения?

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

Пользователь x00 указал путь к решению в разделе комментариев к вопросу. Используя curl, я смог увидеть, что происходит.

Вот что происходит:

В этом первом примере система работала без ошибок.

CURL:

curl -H "Content-Type: application/json" --data \
    '{comment: {text: "yo hamburger"},
       languages: ["en"],
       requestedAttributes: {TOXICITY:{}} }' \
    https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=[API_KEY]

ОТВЕТ:

{
  "attributeScores": {
    "TOXICITY": {
      "spanScores": [
        {
          "begin": 0,
          "end": 12,
          "score": {
            "value": 0.050692778,
            "type": "PROBABILITY"
          }
        }
      ],
      "summaryScore": {
        "value": 0.050692778,
        "type": "PROBABILITY"
      }
    }
  },
  "languages": [
    "en"
  ],
  "detectedLanguages": [
    "tr",
    "ja-Latn",
    "de",
    "en"
  ]
}

Во втором примере система действительно автоматически обнаруживала язык, но, поскольку "гамбургер" был обнаружен как Turki sh, он мог не предоставить решение и вместо этого отправил 400 в качестве кода ответа.

CURL:

curl -H "Content-Type: application/json" --data \
    '{comment: {text: "yo hamburger"},
       requestedAttributes: {TOXICITY:{}} }' \
    https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=[API_KEY]

ОТВЕТ:

{
  "error": {
    "code": 400,
    "message": "Attribute TOXICITY does not support request languages: tr",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.commentanalyzer.v1alpha1.Error",
        "errorType": "LANGUAGE_NOT_SUPPORTED_BY_ATTRIBUTE",
        "languageNotSupportedByAttributeError": {
          "detectedLanguages": [
            "tr"
          ],
          "attribute": "TOXICITY"
        }
      }
    ]
  }
}

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

CURL:

curl -H "Content-Type: application/json" --data \
    '{comment: {text: "yo hamburger"},
    languages:["en","fr","es","de","it","pt"],
       requestedAttributes: {TOXICITY:{}} }' \
    https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=[API_KEY]

RESPONSE:

{
  "error": {
    "code": 400,
    "message": "Attribute TOXICITY does not support request languages: en,fr,es,de,it,pt",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.commentanalyzer.v1alpha1.Error",
        "errorType": "LANGUAGE_NOT_SUPPORTED_BY_ATTRIBUTE",
        "languageNotSupportedByAttributeError": {
          "requestedLanguages": [
            "en",
            "fr",
            "es",
            "de",
            "it"
          ],
          "attribute": "TOXICITY"
        }
      }
    ]
  }
}

В следующем примере, оставляя массив languages empty также предоставлял автоопределение языка, но опять же, "yo hamburger" был обнаружен как Turki sh, поэтому он не мог предоставить ответ.

CURL:

curl -H "Content-Type: application/json" --data \
    '{comment: {text: "yo hamburger"},
    languages:[],
       requestedAttributes: {TOXICITY:{}} }' \
    https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=[API_KEY]

ОТВЕТ:

{
  "error": {
    "code": 400,
    "message": "Attribute TOXICITY does not support request languages: tr",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.commentanalyzer.v1alpha1.Error",
        "errorType": "LANGUAGE_NOT_SUPPORTED_BY_ATTRIBUTE",
        "languageNotSupportedByAttributeError": {
          "detectedLanguages": [
            "tr"
          ],
          "attribute": "TOXICITY"
        }
      }
    ]
  }
}

Заметив, что Perspective API не позволяет мне выбирать все языки, предоставляемые для отчета TOXICITY, я решил попробовать два языка. Ответ был таким же. Очевидно, Perspective API отклоняет запрос, если указано несколько языков. Возможно, название поля «языки» было мыслью на будущее.

CURL:

curl -H "Content-Type: application/json" --data \
    '{comment: {text: "yo hamburger"},
       languages: ["en","fr"],
       requestedAttributes: {TOXICITY:{}} }' \
    https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=[API_KEY]

ОТВЕТ:

{
  "error": {
    "code": 400,
    "message": "Attribute TOXICITY does not support request languages: en,fr",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.commentanalyzer.v1alpha1.Error",
        "errorType": "LANGUAGE_NOT_SUPPORTED_BY_ATTRIBUTE",
        "languageNotSupportedByAttributeError": {
          "requestedLanguages": [
            "en",
            "fr"
          ],
          "attribute": "TOXICITY"
        }
      }
    ]
  }
}
0 голосов
/ 17 апреля 2020

Как я уже сказал в комментариях, общий подход к такого рода вопросам: используйте curl. Это очень помогает.

Подводя итог вашим выводам:

  • автоопределение с набором языков не работает.
  • правильный путь отправить запрос с включенным автоопределением - это
    {comment: {text: "some text"}, requestedAttributes: {TOXICITY:{}} }
    
  • , но иногда это не удается для коротких текстов, особенно со сленгом внутри.

Так что с этим можно сделать?

  1. Самый простой способ - присвоить некоторый вес Bad Request с (вероятно, что-то около 0.5). В любом случае, в ответ вы получите вероятность , а не окончательный ответ. Таким образом,

    • показатель токсичности = 1 означает "определенно токсичен c"
    • показатель токсичности = 0 означает "не токсичен c вообще"
    • и токсичность оценка = 0,5 означает «мы понятия не имеем»
    • то же самое относится к Bad Request - «вы понятия не имеете»


    , и вы будете время от времени получать 0.5, так что вы все равно должны как-то иметь дело с комментариями этого счета. А также с сетевыми ошибками и т. Д. c. Но я бы сказал, что вероятность токсичности комментария, в результате которого LANGUAGE_NOT_SUPPORTED_BY_ATTRIBUTE выше, чем 0.5. Но вам нужно определиться с точным числом.

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

  3. Сделайте три запроса, указав язык. Насколько я могу сказать, TOXICITY работает только с Engli sh, Spani sh и французским . На github у меня есть ответ :

    "TOXICITY в настоящее время поддерживается на английском языке sh (en), испанском sh (es), французском (fr), немецком (de), португальском (pt) и итальянском (it). удалите противоречия, которые вы определили. "

  4. Автоматическое обнаружение самостоятельно перед отправкой запроса. Это потребует некоторых усилий, но не должно быть слишком сложным, поскольку у вас гораздо больше контекста, чем для Perspective API (или любого другого стороннего API)

Также

  1. Такие API не должны оставаться без присмотра. Точная настройка и модерация с вашей стороны не требуется. В противном случае мы окажемся в худшем случае алгократии:).
  2. И я думаю, что в целом неплохо хранить статистику токсичности комментариев для пользователя ... а также для некоторых ручной коэффициент. Потому что, например: Математические формулы дают высокую токсичность

Я опубликовал несколько вопросов на github, , но пока не получил ответа (что за ответ по второму вопросу ). Когда / если я получу их, я уточню свой ответ с деталями.

0 голосов
/ 16 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...