Как аннотировать и обучать данные для извлечения преимущественно числовых данных - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь извлечь информацию из неструктурированного текста.Например,

Генеральный директор недавно запросил предложения по функциям, которые можно добавить к разрабатываемому грузовику, и раскрыл некоторые запланированные функции, такие как опция для дальности от 400 до 500 миль, двухмоторный полноприводный автомобиль.трансмиссия с динамической подвеской, «300 000 фунтов тягового усилия» и многое другое.Когда спрошено о дате выпуска, генеральный директор дал предполагаемое время Q2 2021.

Идеальный результат будет что-то вроде

[minRange = 400, maxRange = 500, allWheelDrive = TRUE, susepnsionType = 'Dynamic', releaseDate = 2021-04-01 00:00]

, потому что данные, которые я хочу извлечь, выиграли 'всегда структурированы в пары с хорошим поведением (например, приведенное выше извлечение releaseDate требует семантической обработки всего предложения), и некоторых правил, вероятно, будет недостаточно.Я считаю, что мне нужно аннотировать свои наборы данных, а затем использовать NLP и средства обучения, такие как spaCy, NLTK или Stanford NLP, для извлечения пар атрибут-значение из будущих примеров.

Я пытаюсь использовать онлайн-ресурсы / учебные пособияно все они, кажется, сосредоточены либо на распознавании именованных объектов, либо на извлечении отношений с объектами на основе строк (например, LOC: Paris, REL: is capital, LOC: France).Большая часть (не все) данных, которые мне нужно извлечь, это просто пара атрибут-числовое значение.Как мне сделать это с помощью инструментов НЛП?По большей части я просто не уверен, следует ли считать числа сущностями, и если да, следует ли их аннотировать как сущность с именем «Значение» или дать имя сущности со связанным атрибутом.Например, какой из этих двух способов лучше аннотировать?:

  1. Автомобиль <\ PRODUCT> <\ PRODUCT> имеет буксирную способность <\ TOWING_CAP> 300 000 фунтов <\ TOWING_CAP>
  2. Автомобиль <\ PRODUCT> <\ PRODUCT> имеет тяговую способность <\ VALUE> 300 000 фунтов <\ VALUE>, ОТНОШЕНИЕ: "имеет тяговую мощность"

1 Ответ

0 голосов
/ 27 августа 2018

Если вы будете двигаться вперед с помощью spaCy, я не буду пытаться распознавать числа в NER, поскольку они уже распознаются в дереве зависимостей парсера как QUANTITY.

>>> import spacy
>>> text = "We have a towing capacity of 5,000 lbs"
>>> nlp = spacy.load('en_core_web_lg')
>>> doc = nlp(text)
doc.print_tree()
<stdin>:1: DeprecationWarning: Positional arguments to Doc.merge are deprecated. Instead, use the keyword arguments, for example tag=, lemma= or ent_type=.
[{'word': 'have', 'lemma': 'have', 'NE': '', ...{'word': 'of', ... 'modifiers': [{'word': '5,000 lbs', 'lemma': '5,000 lbs', 'NE': 'QUANTITY', 'POS_fine': 'NNS', 'POS_coarse': 'NOUN', 'arc': 'pobj', 'modifiers': []}]}]}]}]

Вы можете обучить *Конвейер 1005 * для выбора новых меток, таких как PRODUCT, хотя я настоятельно рекомендую прочитать о проблеме катастрофическое забвение , при которой модель "забудет" старые метки, как вы оттачивали на новыхиз них.Я лично столкнулся с этим с коллегой, когда мы научили его распознавать COMPANY как ярлык.

Я мог бы вместо того, чтобы научить NER распознавать каждую функцию, я бы, вероятно, обучил еераспознавать FEATURE как сущность, а затем передавать ей такие вещи, как «Полный привод» или «Внедорожный подвес», таким образом, вы можете объединять все FEATURE из фрагмента текста, а не обучать для каждогоодин.Конечно, это зависит от конечной игры, чего вы хотите от НЛП.Единственная причина, по которой я бы предложил, состоит в том, что я представляю, что число возможных вариантов на транспортном средстве будет расти и расти (например, вы бы включили радиолокационный круиз как функцию в свой идеальный выход?) И иметь универсальную волюсделать вещи легче.Опять же, это зависит от вашей конечной цели здесь

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