1. “Извличане на информация от статии,
свързани с престъпления”
Проект
по “Извличане на информация“
на Любка Ташева Генова,
Докторант, задочна форма на обучение
юли 2016
ФМИ
СУ „Св. Климент Охридски
2. Contents
Задача на курсовата работа......................................................................................................................................4
Избрано технологично решение ................................................................................................................................4
Apache Nutch.................................................................................................................................................................4
GORA.............................................................................................................................................................................4
MongoDB.......................................................................................................................................................................4
Gate...............................................................................................................................................................................4
Elastic search..................................................................................................................................................................4
Kibana............................................................................................................................................................................4
Java................................................................................................................................................................................4
Алгоритъм .....................................................................................................................................................................4
Crawl с Nutch.................................................................................................................................................................4
Injector job.........................................................................................................................................................................................................................4
Generator job.....................................................................................................................................................................................................................4
Fetcher job..........................................................................................................................................................................................................................4
Parser job............................................................................................................................................................................................................................4
DB updater job...................................................................................................................................................................................................................4
Процесване...................................................................................................................................................................5
Процесване на събраните документи - GATE..........................................................................................................................................................5
Събиране и едновременно филтриране на колекции от фрази ........................................................................................................................5
Намиране на косинусова прилика..............................................................................................................................................................................5
Намиране на TF-IDF.........................................................................................................................................................................................................6
Намиране на Обща оценка...........................................................................................................................................................................................6
Обновяване на златния списък....................................................................................................................................................................................7
Финална фаза ...............................................................................................................................................................7
Косинусова прилика:......................................................................................................................................................................................................7
CosineSim_Title............................................................................................................................................................................................................7
CosineSim_Content .....................................................................................................................................................................................................7
GateAnnotations_[колекция]_Total - .....................................................................................................................................................................7
3. Total_PosNeg_AdjAdv, Total_PosNeg_VN ..............................................................................................................................................................7
Нормализация..................................................................................................................................................................................................................8
Обща оценка ...............................................................................................................................................................................................................8
Elastic индекс................................................................................................................................................................8
Kibana............................................................................................................................................................................9
Резултат......................................................................................................................................................................10
Crimes – Searches and Totals........................................................................................................................................ 10
Crimes – Annotations over totals .................................................................................................................................. 10
Crimes – HeatMaps....................................................................................................................................................... 12
Crimes – Annotated Content......................................................................................................................................... 13
Бъдещо развитие на проекта ..................................................................................................................................14
Литература.................................................................................................................................................................15
4. Задача на курсовата работа
Да се съберат статии, свързани с престъпления и да се извлекат от тях често срещани фрази, имена на
хора и организации. Самите документи и намерените фрази да се подредят по определени критерии и
да се покажат зависимости между тях
Избрано технологично решение
Apache Nutch като web crawler за намиране, събиране и парсиране на страниците- солиден,
конфигурируем, позволява да се работи с HBase, MongoDB, CouchDB
GORA за връзка между Nutch и MongoDB
MongoDB за запазване на данните
Gate за обработка и анотиране на събраните страници
Elastic search за индексиране на документите
Kibana за визуализация на резултата и по-лесно извършване на част от търсeнията
Java за интеграция на модулите и извършване на допълнителна обработка
Алгоритъм
Crawl с Nutch
Неколкократна итерация на следните стъпки
Injector job на Nutch – взима URL-лите от сийд файла seed.txt
Generator job – прави списък с URL-лите, които ще бъдат изтеглени като страници
Fetcher job – Обхожда и взима съдържанието и метаданните за всеки от горните URL-ли
Parser job – Изчиства съдържанието на страниците от html тагове и го предоставя като plain text
DB updater job – вкарва данните, получени на предната стъпка в базата
5. Процесване
На всеки 5 итерации на горните стъпки се прави еднократно и
Процесване на събраните документи - GATE
Document Reset PR
ANNIE English Tokeniser
ANNIE Gazetteer
ANNIE Sentence Splitter
ANNIE POS Tagger
ANNIE NE Transducer
ANNIE OrthoMatcher
ANNIE Pronominal Coref
Събиране и едновременно филтриране на колекции от фрази
Хора
Организации
Локации
Прилагателни и Наречия
Глаголи и съществителни
Намиране на косинусоваприлика
на всеки документ с така наречения „златен стандарт“ – списък от думи, който първоначално е
въведен на ръка, като на всяка итерация се обогатява с думи, които имат най-голяма тежест от
всички най-високо оценени документи (подробно – по-надолу)
o За всеки документ, който има косинусова прилика > 0, подредени в намаляващ ред според косинусовата
им прилика със златния стандарт
6. за всяка фраза от списъците се намира обща оценка на това доколко тя би се считала за свързана
логически към понятието „престъпления“
Тотал_на косинусовата_прилика =
2 * [косинусовата прилика на вектора, съставен от корена на фразата с вектора на „златния стандарт“]
+ [косинусовата прилика на вектора, съставен от корена на фразата с вектора на „думите с негативно
значение“]
- [косинусовата прилика на вектора, съставен от корена на фразата с вектора на „думите с позитивно
значение“]
Думите на златния стандарт, положителните и отрицателните списъци се пазят съответно във файловете в
Сonf папката – goldStandard.txt, positiveWords.txt, negativeWords.txt
Намиране на TF-IDF
За всяка фраза се намира TF-IDF стойността й за колекцията документи, където
TF = 0.6 + 0.4 * TFd / maxTFd – ползва се нормализираната стойност на честотата на срещане
на термина в документа спрямо максималната стойност на честота на термин в документа, за да
се неутрализира аномалията, която се получава от влиянието на многото срещания на термина,
ако документът е дълъг. 0.6 е изглаждащият фактор, чиято роля е да контролира тежестта на
TFd/maxTFd
IDF = numDocs / numDocsContainingP, където numDocs е общият брой документи, а
numDocsContainingP е броят документи, съдържащи термина
TF-IDF = tf * idf
Намиране на Обща оценка
За всяка фраза се намира тотал = Cos + TF-IDF
Фразите са подреждат низходящо по обща оценка и се ограничават до топ 10 елемента
7. Обновяванена златния списък
За всеки документ в топ 100 се избират топ 2 фрази от Хора, Организации и топ 3 от
Прилагателни_Наречия и Глаголи_Съществителни и се добавят към списъка със златни думи,
ако коренът им вече не е вкаран там
Ръчно се редактира списъка със златни думи, за да се премахнат ненужните думи(първите 4
итерации на документа са в папката на проекта, като и показано кои са добавени автоматичне и
кои премахнати ръчно
Накратко казано, до момента имаме събрани статии според запитване под формата на списък от златни думи,
което неколкотратно е подобрявано
Финална фаза
Извършва се отново:
Последователно се изпълняват логическите модули на GATE, след което се извършва допълнителната
обработка, като оценката е вече спрямо новия списък със златни думи, а резултатът е не само списък от
нови златни думи, но и самите списъци с фрази се сериализират и вкарват в базата, заедно с анотираното
съдържание на документите
Косинусоваприлика:
Намира се
CosineSim_Title - на заглавието
CosineSim_Content - на съдържанието
GateAnnotations_[колекция]_Total -общ тотал за цяла колекция за всяка от колекциите
Total_PosNeg_AdjAdv, Total_PosNeg_VN - общ тотал на корелация на Прилагателни_Наречия и
Глаголи_Съществителни с позитивните и негативните списъци
8. Нормализация
Оценките се нормализират в границите 1-100 и се изчислява обща крайна оценка на документа
Обща оценка
Total = 2 * косСъдържание + косЗаглавие + тоталПрилНар + тоталГлСъщ
Elastic индекс
с документите, а списъците се десериализират до полета от индекса
{"nutch":{"aliases":{},
"mappings":{"doc":{"properties":{"ContentAnnotated":{"type":"string"},
"CosineSim_Content":{"type":"float"},
"CosineSim_Title":{"type":"float"},
"GateAnnotations_Address":{"type":"string"},
"GateAnnotations_Address_Total":{"type":"string"},
"GateAnnotations_Date":{"type":"string"},
"GateAnnotations_Date_Total":{"type":"string"},
"GateAnnotations_Location":{"type":"string"},
"GateAnnotations_Location_Total":{"type":"string"},
"GateAnnotations_Organization":{"type":"string"},
"GateAnnotations_Organization_Total":{"type":"string"},
"GateAnnotations_Person":{"type":"string"},
"GateAnnotations_Person_Total":{"type":"string"},
"GateAnnotations_TokenAdjAdv":{"type":"string"},
"GateAnnotations_TokenAdjAdv_Total":{"type":"string"},
"GateAnnotations_Token_AdjAdv":{"type":"string"},
"GateAnnotations_Token_AdjAdv_Total":{"type":"string"},
"GateAnnotations_Token_VN":{"type":"string"},
"GateAnnotations_Token_VN_Total":{"type":"string"},
"Total":{"type":"float"},
"Total_PosNeg_AdjAdv":{"type":"float"},
"Total_PosNeg_VN":{"type":"float"},
"anchor":{"type":"string"},
"boost":{"type":"string"},
"cache":{"type":"string"},
"content":{"type":"string"},
"content________________________________________":{"type":"string"},
"digest":{"type":"string"},
"host":{"type":"string"},
"id":{"type":"long"},
"title":{"type":"string"},
"title____________________________":{"type":"string"},
"tstamp":{"type":"date",
"format":"strict_date_optional_time||epoch_millis"},
"url":{"type":"string"}}}},
"settings":{"index":{"creation_date":"1467544885387","number_of_shards":"5","number_of_replicas":"1",
"uuid":"wuZGcWeFRd-sx55QGS2GHw","version":{"created":"2020099"}}},"warmers":{}}}
10. Резултат
Crimes – Searches and Totals
в тази група визуализации се показва
Таблица с основните колони, подредена низходящо по обща оценка
Кръгова диаграма с разпределението на общата оценка по брой документи, таблица с
междинните оценки една спрямо друга и крива на общата оценка спрямо броя документи
Crimes – Annotations over totals
в тази група визуализации се показват по редове данни за ГлаголиСъществителни,
ПрилагателниНаречия и Хора
Първата колона: фразите са представени като тагове с различна големина, в зависимост от най-
голямата стойност на крайната оценка на документите, в които се срещат
Втората колона: корелацията между междинните оценки, показана в зависимост от съответната група
фрази – от тези радар-диаграми се вижда, че най-добре корелират Крайната оценка и
ТоталПрилагателниНаречия, както и има подобна връзка между оценките на заглавиете и съдържанието,
вижда се също, че крайната оценка е правопорционална на оценката на заглавието и обратно-пропорционална
на оценката на ГлаголиСъществителни
11. В третата колона са предоставени стълбове по хистограмата на крайната оценка, разбити на секции за
всяка дума според най-голямата стойност на крайната оценка
12. Crimes – HeatMaps
в тази група визуализации се показват
Първата таблица показва като редове ГлаголиСъществителни и като колони ПрилагателниНаречия,
подредени низходящо по брой документи, в които се срещат, а цветът на клетката се определя от средната
стойност на крайната оценка
Втората таблица е същата, но се взимат най-малко срещаните думи
Вижда се, че по-рядко срещаните думи се намират в документи с по-високранг
13. Crimes – Annotated Content
Показани са анотирани 6 документа в html формат. Избрани са:
1 от топ 5, 1 с тотал 80, 1 с тотал 60, 1 с тотал 4, 1 с тотал 20 и последният с тотал 4
14. Бъдещо развитие на проекта
Настоящият проект вероятно ще бъде използван като основа на проекта за PhD.
Насоки за развитие-
Подобряване на разпознаването на Хора, Организации и Локации
Класифициране на действията като деструктивни с различни степени на понятието – например единични
случаи на убийства на човек/семейство, рецидививиращи убийства и интересното за темата – масовите
убийства и терористичните актове.
Чрез кореферентен анализ да се намирят активни и пасивни субекти – такива, които извършват деструктивно
действие и жертви на такова.
От всички локации да се изолират само тези, където се извършват подобни действия. Да се намерят събития в
близост до локациите – например световни спортни мероприятия, които биха могли да бъдат използвани като
възможност.
Да бъде направен анализ на последователността на датите, когато такива актове се извършват и евентуално да
се направи прогноза за последващ такъв.
...
15. Литература
Introduction to Information Retrieval by Christopher D. Manning, Hinrich Schütze, Prabhakar Raghavan
Лекциите по „Извличане на Информация“ на доц. Койчев
GATE
GATE embedded
ANNIE: a Nearly-New Information Extraction System
Co-reference in Gate
Shallow Methods for Named Entity Coreference Resolution
Nutch
https://javalibs.com/artifact/org.apache.gora/gora-goraci
http://gora.apache.org/current/gora-mongodb.html
http://people.apache.org/~alfonsonishikawa/gora-174-notes.html
http://people.apache.org/~alfonsonishikawa/gora-174-notes.html
http://stackoverflow.com/questions/27450666/nutch-gora-and-mongodb
http://svn.apache.org/repos/asf/gora/trunk/
ElasticSearch
https://www.elastic.co/guide/en/elasticsearch/reference/2.0/search-aggregations-bucket-nested-
aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-rank-
aggregation.html
https://qbox.io/blog/introduction-to-elasticsearch-scripting
https://www.elastic.co/guide/en/elasticsearch/reference/2.0/nested.html
https://discuss.elastic.co/t/json-query-in-kibana-4/26128
https://www.elastic.co/guide/en/elasticsearch/guide/current/proximity-matching.html
MongoDB
http://www.tutorialspoint.com/mongodb/
http://www.mkyong.com/mongodb/java-mongodb-hello-world-example/