Подтвердить что ты не робот

Как автотегировать содержимое, алгоритмы и предложения, необходимые

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

Теперь я ищу способы помочь мне пометить эти статьи несколькими дескриптивными тегами.

Все эти статьи доступны из URL-адреса, который выглядит следующим образом:

http://web.site/CATEGORY/this-is-the-title-slug

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

Мой первоначальный подход делал это:

  • Получить все статьи
  • Получить все слова, удалить все знаки препинания, разделить по пробелам и посчитать их по вступлению
  • Проанализируйте их и отфильтруйте общие не описательные слова, как "их", "я", "this", "эти", "их" и т.д.
  • Когда все общие слова были отфильтрованы, осталось только слова, достойные метки.

Но это оказалось довольно ручной задачей, а не очень красивым или полезным подходом.

Это также страдает от проблемы слов или имен, разделенных пробелом, например, если 1.000 статей содержат имя "John Doe", а 1.000 статей содержат имя "John Hanson", я бы получил слово "Джон", а не его имя и фамилия.

4b9b3361

Ответ 1

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

Чтобы начать работу, я бы предложил посмотреть на реализацию правильного Tokeniser (намного лучше, чем расщепление по пробелам), а затем взглянуть на алгоритмы Chunking и Stemming.

Вы также можете подсчитать частоты для n-gram, то есть последовательности слов, а не отдельные слова. Это позаботится о "словах, разделенных пробелом". Наборы инструментов, такие как NLTK, имеют встроенные функции.

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

Ответ 2

Для получения тегов вам следует использовать метрику, такую ​​как tf-idf:

  • Подсчитайте частоту каждого термина на каждый документ. Это член частоты, tf (t, D). Чем чаще термин встречается в документе D, тем важнее он для D.
  • Подсчитайте, на срок, количество документов, в которых появляется термин. Это частота документа, df (t). Чем выше df, тем меньше этот термин различается среди ваших документов и тем менее интересен.
  • Разделим tf на log df: tfidf (t, D) = tf (t, D)/log (df (D) + 1).
  • Для каждого документа объявляйте верхние k термины по их оценке tf-idf как теги для этого документа.

Доступны различные реализации tf-idf; для Java и .NET, там Lucene, для Python там scikits.learn.

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

Ответ 3

Взгляните на Kea. Это инструмент с открытым исходным кодом для извлечения ключевых фраз из текстовых документов.

Ваша проблема также обсуждалась много раз на http://metaoptimize.com/qa:

Ответ 4

Если я правильно понимаю ваш вопрос, вы хотите сгруппировать статьи в классы подобия. Например, вы можете назначить статью 1 "Спорт", статья 2 - "Политика" и т.д. Или, если ваши классы намного более мелкие, одни и те же статьи могут быть присвоены "Даллас Маверикс" и "Президентская гонка Республиканской партии".

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

Я бы порекомендовал вам взглянуть на "Раскрытие скрытого распределения" (http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation) или "LDA". У меня нет личного опыта с любой доступной реализацией LDA, поэтому я не могу рекомендовать определенную систему (возможно, другие более осведомлены, чем я мог бы рекомендовать для удобной реализации).

Вы также можете рассмотреть реализации агломерационных кластеров, доступных в LingPipe (см. http://alias-i.com/lingpipe/demos/tutorial/cluster/read-me.html), хотя я подозреваю, что реализация LDA может оказаться несколько более надежным.

Несколько вопросов, которые следует учитывать при поиске систем кластеризации:

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

  • Вы хотите создать набор классов вручную (т.е. перечислите "экономичность", "спорт",...), или вы предпочитаете изучать набор классов из данных? Ручные метки классов могут потребовать дополнительного контроля (ручное вмешательство), но если вы решите изучить данные, "метки", скорее всего, не будут иметь смысла для человека (например, класс 1, класс 2 и т.д.) И даже содержание классов может быть не очень информативным. То есть алгоритм обучения найдет сходство и кластерные документы, которые он считает похожими, но полученные кластеры могут не соответствовать вашей идее о том, что должен содержать "хороший" класс.

Ответ 5

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

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

Ответ 6

Если контент является изображением или видео, ознакомьтесь со следующей статьей блога:

http://scottge.net/2015/06/30/automatic-image-and-video-tagging/

Существуют два подхода к автоматическому извлечению ключевых слов из изображений и видео.

  • Обучение нескольким экземплярам (MIL)
  • Глубокие нейронные сети (DNN), повторяющиеся нейронные сети (RNN) и варианты

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

Если содержимое является крупным текстовым документом, ознакомьтесь с этой статьей блога:

Лучшие API-интерфейсы для экстрактов фраз на рынке http://scottge.net/2015/06/13/best-key-phrase-extraction-apis-in-the-market/

Спасибо, Скотт