Определить английское слово как вещь или продукт?

Напишите программу со следующей целью - уметь определить, представляет ли слово / фраза вещь / продукт. Например: 1) " Перчатка, содержащая, по меньшей мере, емкость для указательного пальца, емкость для среднего пальца..." <-Возможна идентифицировать перчатку как вещь / изделие. 2) "В регуляторе окна, особенно для автомобилей, в которых окно подключено к приводу..." <- иметь возможность идентифицировать регулятор как вещь. Это говорит мне, что текст говорит о вещи / продукте. в отличие от этого, в следующем тексте говорится о процессе, а не о вещи / продукте -> " Процесс нанесения покрытия методом экструзии для производства гибких упаковочных пленок с покрытием из нейлона, состоящих из этапов..."

У меня есть миллионы таких текстов; следовательно, делать это вручную невозможно. До сих пор с помощью NLTK + Python я смог выявить некоторые конкретные случаи, в которых используются очень похожие ключевые слова. Но я не смог сделать то же самое с видами, упомянутыми в примерах выше. Любая помощь будет оценена!

2 ответа

То, что вы хотите сделать, на самом деле довольно сложно. Это своего рода (очень специфическая) задача семантической маркировки. Возможные решения:

  • создайте свой собственный алгоритм маркировки, создайте тренировочные данные, протестируйте, оцените и, наконец, отметьте свои данные
  • использовать существующую базу знаний (лексику) для извлечения семантических меток для каждого целевого слова

Первый вариант - это сложный исследовательский проект сам по себе. Делайте это, если у вас есть время и ресурсы.

Второй вариант даст вам только те ярлыки, которые доступны в базе знаний, и они могут не соответствовать вашим пожеланиям. Я хотел бы попробовать с Python, NLTK и Wordnet ( интерфейс уже доступен), вы могли бы использовать гиперсимволы synset для вашей проблемы.

Эта задача называется проблемой восстановления именованного объекта.

РЕДАКТИРОВАТЬ: Нет четкого определения NER в сообществе NLP, так что можно сказать, что это не задача NER, а случай более общей проблемы маркировки последовательности. Во всяком случае, до сих пор нет инструмента, который может сделать это из коробки.

Standford NLP может распознавать только следующие типы:

Распознает именованные (PERSON, LOCATION, ORGANIZATION, MISC), числовые (MONEY, NUMBER, ORDINAL, PERCENT) и временные (DATE, TIME, DURATION, SET) объекты

поэтому он не подходит для решения этой задачи. Есть некоторые коммерческие решения, которые, возможно, могут сделать эту работу, их можно легко найти, прибегая к помощи "название продукта с именем сущности", некоторые из них предлагают бесплатные пробные планы. Я не знаю ни одного бесплатного готового к развертыванию решения.

Конечно, вы можете создать свою собственную модель, вручную пометив около 1000 наименований продуктов, содержащих предложения, и обучив некоторый классификатор, такой как классификатор условного случайного поля, некоторым базовым функциям ( вот страница документации, которая объясняет, как это сделать со Stanford NLP). Это решение должно работать разумно, хотя, конечно, оно не будет идеальным (ни одна система не будет идеальной, но некоторые решения лучше других).

РЕДАКТИРОВАТЬ: Это сложная задача сама по себе, но не так сложно, если вы не хотите самых современных результатов. Вы можете создать разумную хорошую модель всего за 2-3 дня. Вот (пример) пошаговая инструкция, как это сделать с помощью инструмента с открытым исходным кодом:

  • Скачайте CRF++ и посмотрите на предоставленные примеры, они в простом текстовом формате
  • Аннотировать ваши данные аналогичным образом
    ДРУГОЙ 
    ПРОДУКТ перчаток 
    в составе ДРУГОГО... 

и так далее.

Разместил аннотированные данные в двух файлах train (80%) и dev(20%)

  1. использовать следующие базовые функции шаблона (вставить в файл шаблона)
    

    U02:% х [0,0]
    U01:% х [-1,0]
    U01:% х [-2,0]
    U02:% х [0,0]
    U03:% х [1,0]
    U04:% х [2,0]
    U05:% х [-1,0]/% х [0,0]
    U06:% х [0,0]/% х [1,0]

4.Run

crf_learn template train.txt model
crf_test -m model dev.txt  > result.txt 
  1. Посмотрите на result.txt. один столбец будет содержать данные, помеченные вами вручную, а другой - метки, предсказанные машиной. Затем вы можете сравнить их, вычислить точность и т. Д. После этого вы можете подать новые немеченые данные в crf_test и получить свои метки.

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

ОБРАТИТЕ ВНИМАНИЕ: это игнорирует многие вещи и некоторые передовые практики в решении таких задач, не подходит для академических исследований, не гарантирует 100% работы, но все же полезно для этой и многих подобных проблем в качестве относительно быстрого решения.

Другие вопросы по тегам