Распознавание сущностей на основе контекста - PullRequest
0 голосов
/ 16 апреля 2020

Есть ли способ получить вероятность того, что слово принадлежит сущности, основываясь на контексте предложения. Например (объект: имя_сервера)

«Я хочу проверить МО go сервер» И результат будет, например:

Мо go: имя_сервера, 0.5688999

«Проверить состояние сервера mo go». Результат будет, например, таким:

Mo go: имя_сервера, 0.6272772

Одним из решений было бы, например, сопоставить все имена серверов в текстовом файле или объекте reco, чтобы сделать это ... но в этом случае имена серверов могут быть довольно большими, поэтому каждый раз мы хотим получить вероятность слова будучи действительно именем сервера, и поэтому проверьте в базе данных / json имя сервера (если оно существует, мы продолжим), если нет, мы спрашиваем пользователя, основываясь на этой вероятности, если (mo go) действительно имя сервера. мы добавляем его в базу данных. Таким образом, любой способ использовать nltk, spacy или rasa, чтобы извлечь слово как сущность, основанную на предложении (не на словах .txt или метках), и получить вероятность того, что слово с наибольшим потенциалом принадлежности к именованный объект?

Ответы [ 3 ]

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

Я отвечу, если вы хотите сделать это в проекте rasa chatbot. DIETClassifier может извлекать пользовательские объекты на основе ваших данных обучения. Кроме того, используя справочные таблицы для имен своих серверов, вы можете увеличить распознавание множества разных имен серверов, не разбирая при этом количество обучающих примеров.

Базовым классификатором для сущностей в DIET является CRF; практически говоря, и контекст предложения, и само слово способствуют тому, распознается ли слово как конкретная c сущность. Например, если ваши тренировочные данные содержат примеры, такие как

 - I want to check [mogo](server) server
 - Check status of server [mogo](server)
 - check [mongo](server) server status

, есть хороший шанс, что mongo в невидимом предложении `Я хочу проверить статус mon go) также будет правильно подобрано (на основе контекст предложения).

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

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

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

Попробуйте использовать CRF классификатор. Для каждого из слов в предложении вы можете получить оценки вероятности.

CRF ожидает, что данные обучения будут в формате IOB

Вот хороший блог об обнаружении NER с использованием CRF.

Пример

crf_.predict_marginals_single(sent2features_for_prediction("Bengaluru"))


[{'O': 0.0008245389052411774,
  'B-entity__location': 0.9764201257123432,
  'I-entity__location': 0.003916777298076389,
  'B-entity__other_ent': 0.003445348786883558,
  'I-entity__other_ent': 0.00012730443363195458,
  'B-entity__other_ent_2': 0.005445385992475527,
  'B-entity__other_ent_3': 3.704781572842554e-05,
  'I-entity__other_ent_3': 2.1092149059526482e-05,
  'I-entity__other_ent_2': 0.00011894529348380328,
  'B-entity__other_ent_4': 2.0753893397695066e-05,
  'I-entity__other_ent_4': 6.333056114953314e-05,
  'B-entity__other_ent_5': 0.009492141753363492,
  'I-entity__other_ent_5': 6.720740516588521e-05}]

Надеюсь, это поможет

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