Как убрать маркер сущности Луиса из высказывания - PullRequest
0 голосов
/ 17 января 2019

Я использую LUIS, чтобы определить, в каком состоянии живет клиент. Я настроил объект списка, называемый «состоянием», который имеет 50 состояний с их двухбуквенными сокращениями в качестве синонимов, как описано в документации. LUIS возвращает определенные двухбуквенные слова, такие как «hi» или «in», в качестве государственных объектов.

Я настроил намерение с помощью таких фраз, как «Мое состояние - Орегон», «Я из штата Вашингтон» и т. Д. Внутри намерения, если слово «в» включено в высказывание, например в высказывание «Я живу в Кентукки», слово «в» автоматически помечается LUIS как государственное образование, и я не могу удалить этот маркер.

Ниже приведен фрагмент ответа LUIS JSON на высказывание "Я живу в Кентукки". Как видите, ответ включает в себя как Индиану, так и Кентукки в качестве сущностей, когда должен быть только Кентукки.

 "query": "I live in Kentucky",
  "topScoringIntent": {
    "intent": "STATE_INQUIRY",
    "score": 0.9338141
  },
....
    "entities": [
....
    {
      "entity": "in",
      "type": "state",
      "startIndex": 7,
      "endIndex": 8,
      "resolution": {
        "values": [
          "indiana"
        ]
      }
    },
    {
      "entity": "kentucky",
      "type": "state",
      "startIndex": 10,
      "endIndex": 17,
      "resolution": {
        "values": [
          "kentucky"
        ]
      }
    }
  ], ....

Как мне научить LUIS не помечать слова "in" и "hi" в этом контексте как состояния, если я не могу удалить маркер намерения из высказывания?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

@ Ответ Стивена Канберга был очень полезным, но, к сожалению, не полным для моей ситуации.Я пытался реализовать как geographyV2, так и Places.AbsoluteLocation (отдельно).Ни один из них не работает полностью так, как мне нужно (распознавая состояния и их двухбуквенные сокращения таким образом, чтобы их можно было запрашивать у сущностей в ответе).

Итак, мой выбор:

  1. Создайте свой собственный список состояний, используя имя состояния и двухбуквенную аббревиатуру в качестве синонимов, как описано в самом описании списка.Это работает за исключением двухбуквенных сокращений, которые также являются словами, такими как «in», «hi» и «me».
  2. Использовать встроенный geographyV2, который не допускает синонимов и вообще не распознает двухбуквенные аббревиатуры, или
  3. Использовать Places.AbsoluteLocation, который распознает двухбуквенные аббревиатуры для состояний, не путает ихсо словами, но также захватывает все местоположения, включая города, страны и адреса, и не делает различий между ними, поэтому я не могу разобрать, какая сущность является государством в высказывании типа «Я живу в Лейк-Стивенс, округ Снохомиш, Вашингтон».

Решение: Если я объединю 1 с 3, я могу запросить сущности, которые имеют оба этих типа.Если LUIS помечает слово «in» как штат (штат Индиана), я могу проверить, не было ли это слово также помечено как AbsoluteLocation.Если нет, то я могу смело отказаться от этой сущности.Это не идеально, но это обходной путь, который решает проблему.

0 голосов
/ 18 января 2019

В этом конкретном случае (заполнение объекта списка аббревиатурами / именами состояний) вам будет удобнее использовать предварительно созданный объект geographyV2 или предварительно созданный объект домена Places.AbsoluteLocation. (Обратите внимание, что на момент написания этой статьи у готового объекта geographyV2 была небольшая ошибка, поэтому лучше использовать предварительно созданный объект домена).

Причина этого двоякая:

Во-первых, географические местоположения уже запечены в LUIS, и они не сталкиваются с обычными синтаксическими словами, такими как «in», «hi» или «me». Я проверил это в обратном порядке, создав список [Medical], который содержал «ct» в качестве нормализованного значения и «ct scan» в качестве синонима. Когда я набрал «получить мне КТ в КТ», это привело к «получить меня [медицинский] в [медицинский]». Чтобы исправить это, я выбрал второе значение «CT» и переназначил его для объекта Places.AbsoluteLocation. После переподготовки я проверил «когда в КТ показывают мне опции ct», что правильно привело к «когда в [Places.AbsoluteLocation] показывают мне [медицинские] опции». Дальнейшие примеры и обучение улучшат результаты.

Два, списки работают хорошо для слов, которые имеют разные слова, которые могут ссылаться на один. В этом руководстве показан простой пример, в котором слабо связанные слова назначаются как синонимы каноническому имени (нормализованное значение).

Надежда на помощь!

...