Как анализирах 1,6 милиона статии за състезание по наука за данни

Ако следвате datasciencechallenge.org, ще сте видели тяхното скорошно стартиране на две предизвикателства за наука за данни. Те бяха подкрепени от правителствените агенции на Обединеното кралство - включително MI5 и MI6.

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

Първото предизвикателство включваше класифицирането на видове превозни средства от въздушни снимки. Вторият и избран от мен предмет се съсредоточи върху класифицирането на кризисни документи въз основа на техните теми.

Конкретни подробности за „Нарастваща нестабилност: Класифициране на доклади за кризи“ „можете да намерите тук“.

Предизвикателството

Получихме набор от новинарски статии и документи, свързани с хуманитарна криза.

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

Основните предизвикателства пред този проблем бяха:

  • Работа с класификация с множество етикети на сложни и понякога двусмислени статии
  • Използване на исторически документи за прогнозиране на темите на бъдещи документи
  • Работа с текстови данни или NLP (Natural Language Processing), която е една от най-предизвикателните и интересни области на изкуствения интелект.

Подготовка на наборите от данни

Моето решение беше създадено в Python и използваше пакетите spaCy за обработка на естествен език и scikit-learn за машинно обучение.

Колекцията за обучение съдържа приблизително 1,6 милиона документа и всяка статия може да бъде етикетирана с една или повече теми, напр. статия X може да бъде за „война“, „Близък изток“ и „политика“.

Колекцията съдържаше и статии и теми, които не представляваха интерес, напр. „спорт“ и „начин на живот“. Общо 160 теми представляваха интерес за предизвикателството.

Обработка на 1,6 милиона документа

Първата стъпка във всеки анализ е да разберем нашите данни, но размерът на набора от данни представлява предизвикателство.

С повече от 1,6 милиона статии за обработка, имахме работа с обеми данни, много по-големи от това, което може да бъде ефективно погълнато на един лаптоп.

Един общоприет подход е да се изпробва представителна подгрупа от статии, която би била с много по-управляем размер. Например премахване на теми и статии от набора от данни, които не са свързани с предизвикателството. Бърза хистограма на останалите статии разкри неравномерно представяне на темите, а 14 теми дори не съдържаха никакви статии.

Обучението на модел с твърде малко документи за дадена тема обикновено ще генерира шум и няма да се обобщи добре за бъдещи документи.

Допълнителни данни за теми с по-малко от 200 документа бяха наивно изведени от текста. напр. търсене на етикета „активизъм“ в текста и етикетиране, ако присъства. API на NY Times беше използван за допълнителни документи за теми, които не могат да бъдат изведени от документите.

Преобразуване на документи в данни

Втората стъпка е превръщането на статиите в числа, за да можем да изградим статистически модел.

Този процес се нарича извличане на характеристики и в нашия случай ние изграждаме вектори на думи.

Бяха изпълнени класически NLP техники като токенизация, извличане на именувани обекти и лематизация на всяка статия. Премахнах също препинателни знаци, спиращи думи, интервали, цифри, символи, много често срещани и необичайни думи и видове тагове за част от речта от всяка статия.

Идеята е, че като ги премахнем от статиите, вместо това можем да се съсредоточим върху важните думи.

След това приложих термин честота-обратна честота на документа (tf-idf) тегло към размерите на униграми, биграми и триграми на думи в документа. Това тегло е мярка за това колко важна е дадена дума за документа в колекцията. Резултатът е многоразмерна рядка матрица, използваща tf-idf резултатите на дума като характеристики.

Създаване на подходящи модели

След това данните се разделят на обучителен набор за обучение на модела и тестов набор за оценката му. Това също може да се направи k-кратно време за по-нататъшна оценка на модела.

Моделът, който смятах, че е най-подходящ за този тип данни, беше Support Vector Machines (SVM), метод за класифициране на контролирано машинно обучение. SVM може да обработва големи набори от данни, тъй като в този случай имахме 10 000+ функции. Оцених ефективността на други контролирани методи на обучение, но те не се справиха толкова добре с броя на измеренията в данните за обучение.

Използван е линеен SVM в комбинация с функцията OneVsRestClassifier в пакета scikit-learn. OneVsRestClassifier може ефективно да побере един етикет на класификатор и резултатите са лесни за тълкуване.

Моделът беше оценен с помощта на резултата micro F1 на тестовия комплект, който е цялостна мярка за точността на модела, но отчита както прецизността, така и припомнянето. Използван е алгоритъм за търсене в мрежа, за да се намерят най-добрите параметри за модела, който е върнал най-висок резултат F1.

Преобучих модела върху целия набор от данни, като използвах най-добрите параметри и го проведох срещу предоставения невиждан тестов набор.

Предсказаните резултати за всяка статия в тестовия набор съдържаха поредица от 0 и 1 за 160 теми, където 1 показваше присъствие на темата.

Този файл беше качен в платформата на състезанието, където резултатът беше автоматично генериран в публичната класация за 30% от данните. Частна класация не беше показана до края на състезанието.

Резултатите

Като цяло постигнах топ 20 класиране от 579 записа за първото си състезание по наука за данни.

Мисля, че със задна дата бих разгледал други подходи за подобряване на този резултат и цялостното класиране, като например изследване на различни вектори на функции, като например вграждане на думи.

Това, което ми показа това предизвикателство, е, че данните от реалния свят не винаги са чисти и структурирани и по-голямата част от времето се изразходва за подготовка на набора от данни (предварителна обработка), в противен случай той е боклук в боклука!

Кажете ни вашите мисли за това състезание по наука за данни. Ако искате да научите повече за нашия набор от инструменти за данни, изтеглете това ръководство за захранване на excel ⇓

Първоначално публикувано в redpixie.com на 31 май 2017 г.