Как ответить на вопросы из больших документов? - PullRequest
0 голосов
/ 03 апреля 2019

Около двух недель назад, из-за низкого спроса в моем проекте, мне был назначен совершенно необычный запрос: автоматически извлекать ответы из документов, основанных на машинном обучении.Я никогда не читал ничего о ML, AI или NLP, поэтому я в основном занимался этим в течение последних двух недель.

Когда речь идет о ML, большинство книг и рекомендаций, которые я нашелДо сих пор использовали язык и инструменты Python, поэтому я потратил первую неделю на изучение Python, NumPy, Scikit, Panda, Matplotlib и так далее.Затем на этой неделе я начал читать о самом НЛП, потратив несколько дней на чтение общих алгоритмов ML.

До сих пор я в основном читал о Bag of Words, используя TF-IDF (или просто подсчет терминов).) преобразовать слова в числовые представления и несколько методов, таких как гауссовские и многочленные наивные байесовские методы для обучения и прогнозирования значений.Методы также указывают на важность использования обычных методов предварительной обработки, таких как лемматизация и тому подобное.Тем не менее, в основном все примеры предполагают, что данный текст можно классифицировать в одной из разделенных на категории тем, например, в случае использования анализа настроений.Боюсь, это не соответствует моему варианту использования, поэтому я хотел бы описать его здесь, чтобы вы могли помочь мне определить, какие методы мне следует искать.

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

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

Например, я мог бы рассматривать каждое предложение документа как отдельный документ для анализа и сравнения с фрагментами, которые у меня уже есть для соответствующих данных.Однако я не могу быть уверен, что некоторые из этих предложений действительно ответят на вопрос.Например, возможно, в документах есть 6 вхождений, которые ответили бы на конкретный вопрос / поле, но, возможно, авторы ввода указали только 2 или 3 из них.

Кроме того, для любого данного предложения можно сказать, чтоответом для данного поля является A или B, или может быть, что нет абсолютно никакой связи между предложением и полем / вопросом, как это было бы в случае большинства предложений.Я знаю, что Scikit предоставляет метод предиката_процесса, так что я могу попытаться считать предложение только актуальным, если, например, вероятность ответа на вопрос будет выше 80%, но на основе нескольких быстрых тестов, которые я сделал снесколько слов и слов, я подозреваю, что это не очень хорошо сработает.Кроме того, может быть довольно медленно обрабатывать каждое предложение документов объемом 500 сотен страниц как отдельный документ для анализа, поэтому я не уверен, что существуют лучшие методы для обработки этого варианта использования.

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

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

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

Обновление: меня попросили более подробную информацию, поэтому вы здесь.

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

Итак, вот несколько предложений, выделенных для сделок слияния с публичными целями (эти документы поступают из публичной базы данных Edgar Filings, которые свободно доступны для сделок в США):

сделка 1 / документ 1: «СОГЛАШЕНИЕ И ПЛАН СЛИЯНИЯ от 14 марта 2018 года (настоящее« Соглашение »), заключенное между корпорацией HarborOne Bancorp, Inc., Массачусетская корпорация (« Покупатель »), Massachusetts Acquisitions, LLC, Мэриленд, общество с ограниченной ответственностью который Покупатель является единственным участником («Merger LLC»), и Coastway Bancorp, Inc., корпорация в Мэриленде («Компания»). "

«ПОСКОЛЬКУ, Покупатель, ООО« Слияние »и Компания намерены осуществить слияние (« Слияние ») ООО« Слияние »с Компанией и в ее состав в соответствии с настоящим Соглашением и Законом об общих корпорациях штата Мэриленд (« MGCL ») и Закон о компаниях с ограниченной ответственностью штата Мэриленд с внесенными в него поправками («MLLCA»), в котором Компания является выжившим лицом в результате слияния. За слиянием немедленно последует слияние Компании с покупателем и в него («Слияние в восходящем направлении»). »), При этом Покупатель является выжившим лицом в Слиянии в восходящем потоке. Предполагается, что Слияние будет взаимозависимым и является прецедентом для Слияния в восходящем направлении и что Слияние в восходящем направлении должно, посредством обязательного обязательства, подтвержденного настоящим Соглашением, вступать в силу немедленно после вступления в силу (как определено ниже) без дальнейшего одобрения, разрешения или направления со стороны или любой из сторон настоящего Соглашения, а также "

сделка 2 / документ 1:

"ПОСКОЛЬКУ также предлагается, чтобы, как только это стало практически возможным после реализации Предложения, Стороны хотели бы осуществить приобретение Компании Материнской компанией путем слияния Покупателя с Компанией и в нее, при этом Компания является выживающее существо («Слияние»); "

Теперь для сделок по покупке активов:

сделка 3 / документ 1:

"В соответствии с положениями и условиями настоящего Соглашения, Продавцы готовы продать Покупателю, а Покупатель готов приобрести у Продавцов все свои активы, относящиеся к Бизнесу, как указано в настоящем документе."

сделка 4 / документ 1:

"ПОСКОЛЬКУ Продавец желает продать и переуступить Покупателю, а Покупатель желает приобрести и принять от Продавца права и обязанности Продавца по приобретенным активам (согласно определению в настоящем документе) в соответствии с условиями, изложенными в настоящем документе. . "

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

Ответы [ 4 ]

2 голосов
/ 04 апреля 2019

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

2 голосов
/ 03 апреля 2019

Итак, во-первых, вы бы хотели, чтобы разные модели заполняли разные поля. Но я бы порекомендовал заглянуть в word2vec или другие модели встраивания.

Большой вопрос касается типа полей, которые вы пытаетесь заполнить - это информация, которая просто дословная / явная в тексте (например, дата, например?), Или это такие вещи, как решить тему, основываясь на словах ,

Еще одно замечание: при наличии более 1000 полей ... вы не собираетесь завершать проект в течение длительного времени (в масштабе года), если только вы не смотрите на относительно низкую точность. Уточнение модели / тестирование различных гиперпараметров занимает некоторое время (обычно часы, дни, если вы по-настоящему используете сложный метод или у вас недостаточно ресурсов, таких как графические процессоры для нейронной сети) для одной модели ... и вам понадобится модель для каждое поле реалистично (если только его вербатумная информация).

1 голос
/ 05 апреля 2019

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

~Preprocess your corpus to remove stop words. Maybe use lemmatization. 
Consider using the [hashing trick][1] if worried about corpus size
Convert docs to vectors (TFIDF or BOW should be good for most of your cases)

Создание и модели поездов:

Basic models seem better for you if you're new - in simple classification use
Naive Bayes or decision forest or support vector machines (SVMs). 

Основной код:

x_train, x_test = splitting(x, 0.8) #Ratio of train to test = 0.8, better to do crossvalidation
y_train, y_test = splitting(y, 0.8)
clf = SVC() #Or whatever algo
clf.fit(x_train, y_train)
acc = clf.score(x_test, y_test)
0 голосов
/ 04 апреля 2019

Я также задавал этот вопрос в списке рассылки Python Scikit-learn и получил удивительный ответ от Бориса Холласа, в котором упоминалась статья, посвященная этой проблеме с алгоритмом HMM.Дэйн Фрейтаг и Эндрю МакКаллум назвали статью «Извлечение информации с помощью структур HMM, изученных путем стохастической оптимизации».Мне все еще не хватает необходимых знаний, чтобы полностью понять эту статью, но она, безусловно, служит очень хорошей отправной точкой для лучшего понимания проблемы и ее возможных решений.Большое спасибо, Борис !!!

Как указал Джоэлн в своем ответе, этот класс задач известен как извлечение информации, и он также упомянул, что эта задача будет немного похожа на «шаблоны сценариев» или «заполнение слотов».«В то время как статья в Википедии об извлечении информации будет называть это« Заполнение шаблона », если я правильно понял.Со всеми этими вариантами мне, безусловно, будет легче продолжить мое исследование после того, как я узнаю наиболее часто используемые термины для этой конкретной задачи.

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

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