2016-11-22 7 views
3

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

  • Использование word2vec для создания вложения слов (больше на ниже корпуса).
  • Подайте вывод word2vec в CNN, поскольку векторы, которые находятся близко друг к другу, имеют сходные смысловые значения.

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

Несколько проблем, которые у меня есть:

  1. выбор Корпус. Достаточно ли использовать общий корпус, например, википедии? Или я должен использовать специализированный корпус для счетов-фактур? Если это последний, как я могу сгенерировать этот корпус? У меня есть большой набор данных, которые я могу использовать.
  2. Извлечение информации. Скажем, все вышеизложенное отлично работает, и я могу понять семантическую информацию из нового невидимого счета. Как я могу извлечь некоторые части информации? Например, предположим, что мы вводим новый счет-фактуру с order number: 12345, предполагая, что order number является номером счета (или любыми векторами, которые находятся в той же близости от order number), как извлечь значение 12345? Одна область, на которую я смотрел, - SyntaxNet, которая могла бы помочь здесь.

Любая помощь/проницательность оценена.

Развейте на вопрос @ Васи-Ахмада: Причина Я пытаюсь понять семантическую информацию о выставление счета в конечном счете иметь возможность извлекать значения из него. Так, например, если я представляю невидимый счет в моей нейронной сети, он найдет номер счета (независимо от его метки) и извлечет его значение.

+0

Голосование, чтобы закрыть этот вопрос, потому что он слишком широк, не имеет смысла. Тема моего вопроса специфична: извлечение информации из документа, являющегося счет-фактурой. Я представил свою идею, и мне нужна проверка и/или другая перспектива, отсюда и мой пост. – abstractpaper

+0

Вы можете проверить следующее обсуждение: http://stackoverflow.com/questions/40752242/machine-learning-information-extraction-from-a-document Надеюсь, что это поможет. – sansingh

+0

@sansingh это ссылка на мой вопрос – abstractpaper

ответ

3
  1. Если у вас есть большой набор счетов-фактур, вы можете использовать его. Набор данных имеет некоторое очевидное влияние на построение вложений слов. Чтобы построить корпус, вы можете удалить общие слова остановки (например, a и т. Д.), А затем использовать вес tf-idf каждого слова, чтобы представить документ, прежде чем подавать их на модельили CBOW. Вы также можете использовать one-hot encoding в качестве альтернативы весу tf-idf. Вы также можете подумать о простой языковой модели (используя bigram или trigram), так как у вас есть очень специфический домен для работы. Это упростит вашу модель!

  2. Ваша вторая проблема не ясна для меня! Обычно числовые значения заменяются некоторой меткой, например NUM во время этапа предварительной обработки задачи извлечения информации. Однако SyntaxNet фактически предназначен для анализа зависимостей. Поскольку ваша конечная цель - извлечь семантический смысл из счетов-фактур, почему вам нужна синтаксическая информация? Это поможет вам в этой задаче? Если у вас большой набор данных, вы можете создать словарь для определенного целевого домена. Но это зависит от того, как вы собираетесь использовать извлеченную семантическую информацию, которую вы не упомянули в своем посте!

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

+0

спасибо за ваш ответ 'wasi', очень полезно. Что касается второго момента, поэтому все, что я объясняю, направлено на извлечение информации из невидимого счета (или, возможно, измененного) формата. Поэтому, если мой NN понимает, как выглядит «номер счета», и мы представляем ему новый невидимый счет-фактуру, он обнаружил бы номер «номер счета-фактуры» и его значение, поэтому я пытаюсь понять семантику счета-фактуры. – abstractpaper

2

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

1) Возьмите хотя бы один пример каждого типа счета-фактуры, который вы ожидаете обработать, и пометьте его тегами типа xml, которые отражают извлечение цели, например. «Номер для заказа: 12445». XML или другой парсер могут захватить его позже для этапа оценки, если это необходимо или после обработки.

2) Подумайте о простейшем способе извлечения информации - я предлагаю вам начать с регулярного выражения.

3) Если регулярного выражения недостаточно, вам может потребоваться некоторое наблюдение за машиной. Это позволит получать более разнообразные фразы и может выполнять очень высокий уровень точности и запоминать правильные фразы. См. http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html для множества подходов.

4) Если вам нужно больше, чем фраза соответствия - например. номер детали и количество деталей, то вам может понадобиться верхний стек с классификатором, который решает, является ли совпадение законным или нет.

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

Breck

Смежные вопросы