Как с помощью машинного обучения извлекать из документа большие фрагменты текста?

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

Я хочу извлечь важные части схемы вязания (сам узор, а не все вступление и тому подобное). Например, я хотел бы накормить эту веб-страницу в мою программу и получи что-то вроде этого:

{
    title: "Boot Style Red and White Baby Booties for Cold Weather"
    directions: "
    Right Bootie.
    Cast on (31, 43) with white color.
    Rows (1, 3, 5, 7, 9, 10, 11): K.
    Row 2: K1, M1, (K14, K20), M1, K1, M1, (K14, K20), M1, K1. (35, 47 sts)
    Row 4: K2, M1, (K14, K20), M1, K3, M1, (K14, K20), M1, K2. (39, 51 sts)
    Row 6: K3, M1, (K14, K20), M1, K5, M1, (K14, K20), M1, K3. (43, 55 sts)
    ..."
}

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

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

Может ли кто-нибудь указать мне правильное направление алгоритмов и методов извлечения больших частей текста?


person karianneberg    schedule 05.04.2015    source источник


Ответы (1)


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

В результате для каждого предложения нужно извлечь функции, содержащие информацию о его статусе. Скорее всего, это потребует токенизации предложения и, возможно, применения некоторого типа нормализации. Сначала я сосредоточился на таких функциях, как отдельные слова (M1, K1 и т. Д.) Или n-граммы (количество соседних слов). Да, их много, но хороший классификатор узнает, какие функции информативны, а какие нет. Если вы действительно беспокоитесь о разреженности данных, вы также можете уменьшить количество функций, сопоставив похожие «слова», такие как M1 и K1, с одной и той же функцией.

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

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

person yvespeirsman    schedule 05.04.2015
comment
Это альтернатива, которую я не рассматривал, спасибо за это! Я больше думал о том, чтобы найти границы для каждого из больших фрагментов текста, поскольку они, как правило, находятся вместе. Думаю, с вашим методом я потеряю информацию об этом предложении сразу после этого предложения, которое определенно было частью указаний, что может быть важным, но это определенно стоит попробовать. - person karianneberg; 06.04.2015
comment
Если положение предложений важно, вы также можете рассмотреть возможность добавления информации о предыдущем предложении в качестве функции к текущему предложению. В качестве альтернативы вы можете использовать системы машинного обучения, специально предназначенные для классификации последовательностей, такие как скрытые марковские модели или условные случайные поля. - person yvespeirsman; 06.04.2015