2

Я работаю с Python по задаче, связанной с наукой о данных. Что мне нужно сделать - я извлек некоторые новостные статьи, и теперь я хочу выборочно выбирать только те статьи новостей, которые принадлежат конкретному человеку, и определить, является ли лицо, упомянутое в статье, тем же самым человеком, которого я интересую.Идентификация объекта в статье

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

  • Имя этого человека
  • Имя его политической партии
  • имена других людей, тесно связанных с ним, упомянутых в в статье
  • Другие атрибуты, которые описывают, что человек

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

+1

Вы посмотрели на это: http://www.nltk.org/book/ch07.html#named-entity-recognition – reynoldsnlp

+0

@bebop, Это не решит мою проблему, поскольку я не пытаюсь идентифицировать все текстовые упоминания названных объектов. Я хочу определить вероятность того, что человек «Х», упомянутый в данной статье, является тем же человеком, которого я ищу. –

+0

Я могу придумать решение, включающее контролируемое обучение, то есть классификацию между «Это парень» и «Это не тот парень». Сколько у вас статей с именем человека? Они все об этом человеке, или некоторые статьи о других людях с тем же именем? – HugoMailhot

ответ

2

Эта задача обычно известна как Связь объекта. Если вы работаете над популярными объектами, например. те, у кого есть статья в Википедии, тогда вы можете взглянуть на DBpedia Spotlight или BabelNet, которые решают эту проблему.

Если вы хотите реализовать свой собственный компоновщик, то можете взглянуть на related articles. В большинстве случаев, упомянутый линкер линков обнаруживает , упоминает (имена людей в вашем случае), тогда необходимо указать шаг, который вычисляет вероятности для доступных ссылок (и NIL в качестве упоминания может не иметь ссылки), для любое конкретное упоминание в тексте и использование контекстных подсказок (например, слова предложения, абзаца или целой статьи, содержащие упоминание).

+0

Спасибо, что назвали проблему! – HugoMailhot

+0

Добро пожаловать :) – eldams

3

Хорошо, так что это мой лучший снимок.

Первоначальные предположения

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

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

Общее решение: Текст классификации

Вы должны разработать алгоритм классификации, которая извлекает функции из статьи и подает эти функции в модели, полученной посредством контролируемого обучения. Модель выведет один из двух ответов, например True или False. Это требует тренировочного набора. Для целей оценки (зная, что ваше решение работает), вам также понадобится набор тестов.

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

Какие возможности использовать

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

Два примера, предполагая, что мы ищем статьи о Джастине Трюдо, новоизбранном премьер-министре Канады, в отличие от любого другого, которого также называют Джастином Трюдо.

A) Выбор функции себя

С немного исследований, вы узнаете, что Джастин Трюдо ведет Либеральная партия Канады, поэтому некоторые хорошие возможности было бы проверить изделие содержит ли или нет эти строки :

Либеральная партия Канады, Parti либеральные дю Канада, LPC, PLC, либералами, Libéraux, Жан Кретьен, Пол Мартин, и т.д.

С Трюдо политик, ищет это может быть хорошей идеей:

политика, политика, право, реформы, парламент, палата общин и т.д.

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

B) Позволить алгоритм обучения сделать работу

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

Программные ресурсы

Все, что вы хотите делать, если вам необходимо обучить классификатор, вы должны использовать scikit-learn. Его самым популярным выбором будет его классификатор SVM. Naive Bayes - это более классический подход к классификации документов.

+0

Хорошее решение! Действительно scikit учиться очень удобно программное обеспечение и будет, несомненно, достичь часть машинного обучения. Об особенностях, как правило, подходы сравнивают контекст упоминания (предложение, параграф, статья) с текстами, описывающими ссылки (например, статьи в Википедии). – eldams

+0

@HugoMailhot, я думаю, вы ударили ноготь по голове. IMO сочетание обоих ваших подходов (A) и (B) выше для построения функций должно давать более точные результаты, т. Е. Набор выбранных слов (например, исследуя этот объект в Википедии), смешанный с n-граммами. Я должен попытаться понять, что лучше всего работает, но в целом он, похоже, указывает в правильном направлении. Есть ли у вас какие-либо конкретные причины рекомендовать scikit-learn над NLTK? –

+0

Кроме того, я хотел получить оценку, поэтому считаю, что полученная мною «точность» в классификаторе, например «nltk.classify.util.accuracy», может дать мне оценку точности? Благодаря! –

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