From 93d559d3a9b538fbd59e32bd613fda47ede095ef Mon Sep 17 00:00:00 2001 From: dea Date: Thu, 30 Jul 2020 05:15:27 +0200 Subject: [PATCH] Added clueweb entity linking project --- .../post/project-clueweb-entity-linking.md | 519 ++++++++++++++++++ .../workflow.png | Bin 0 -> 46359 bytes 2 files changed, 519 insertions(+) create mode 100644 content/post/project-clueweb-entity-linking.md create mode 100644 static/img/project-clueweb-entity-linking/workflow.png diff --git a/content/post/project-clueweb-entity-linking.md b/content/post/project-clueweb-entity-linking.md new file mode 100644 index 0000000..2e56a84 --- /dev/null +++ b/content/post/project-clueweb-entity-linking.md @@ -0,0 +1,519 @@ +--- +title: "ClueWeb Entity Linking" +date: 2020-07-30T12:04:17+01:00 +author: "Pablo de Andres" +authorAvatar: "img/ada.jpg" +tags: [NER, NED, NLP] +categories: [] +image: "img/project-clueweb-entity-linking/workflow.png" +draft: false +--- + +In this project, Named Entity Recognition and Disambiguation is carried out on the ClueWeb12 dataset. + + + + + + + +[AD teaching Wiki description](http://ad-wiki.informatik.uni-freiburg.de/teaching/BachelorAndMasterProjectsAndTheses/ClueWebEntityRecognition) + +## Content +- [About the project](#about-the-project) + +- [Dataset](#dataset) + +- [Design](#design) + +- [File Execution](#file-execution) + + 1. [File Input](#1-file-input) + + 1. [Workflow](#2-workflow) + + 1. [Text preparation](#2-1-text-preparation) + + 1. [NER and NED](#2-2-ner-and-ned) + + 1. [File Output](#3-file-output) + + 1. [HTML Record files](#3-1-html-record-files) + + 1. [Only entities](#3-2-only-entities) + + 1. [Statistics file](#3-3-statistics-file) + +- [Server execution](#server-execution) + +- [Benchmark execution](#benchmark-execution) + + 1. [Benchmark Input](#1-benchmark-input) + + 1. [Metrics](#2-metrics) + + 1. [Benchmark Output](#3-benchmark-output) + +- [Final Notes](#final-notes) + + +## About the project +Given the sentence ` is 's highest mountain`. + +We say that `Mount Everest` and `Earth` are Named Entities in that they refer to a real-world object that can be denoted with a proper name. + +The process by which these entities are identified is called Named Entity Recognition (NER). +This can be done by tagging each of the words and tokens with parts of speech (noun, verb, adjective...), known as POS tagging, and choosing a particular tag for entities +(like NNP, or proper noun). + +The process that determines that in the example `Earth` refers to the planet, and not to the soil or ground, is called Named Entity Disambiguation (NED). + +This Java project seeks to carry out NER and NED in a specific dataset called the [ClueWeb12 dataset](http://lemurproject.org/clueweb12/). +This dataset contains millions of websites in English collected by a web crawler. +The tool used for NER and NED is [Standford's CoreNLP](https://stanfordnlp.github.io/CoreNLP/). It will be presented in the following sections. + +A [benchmark](#benchmark-execution) has also been developed, as well as a simple server for [testing NER and NED](#server-execution) + + +The project is built to be run in a Docker container: + +``` +sudo docker build -t . +sudo docker run -p : -it -v :/input-files +``` + +An example run with wharfer: + +``` +wharfer build -t pablo-de-andres . +wharfer run -p 49152:49152 -it -v /nfs/students/pablo-de-andres/input-files:/input-files pablo-de-andres +``` + +## Dataset +The ClueWeb12 dataset is made up of WARC files. + +A WARC (or Web ARChive) is a standard file format for web crawls to aggregate related content and metadata. +A WARC file is a concatenation of WARC records, which consist of a header and a content block. +The header includes information like the type or the length of the record. + +The dataset contains 22.447 WARC files taking 389gb compressed. +These are organised in 4 disks, with 5 segments per disk, up to 20 directories per segment and up to 100 WARC files per directory. +In total there are over 52 million records. Each file takes around 200mb. + +The relevant records are HTTP responses that contain the HTML code of a website queried by the crawler. + +## Design +The program has been designed to have 3 different execution modes: + +- _File execution:_ the main execution. Runs NER and NED on WARC files. + +- _Server execution:_ a simple web server to demo NER and NED with an input for text. + +- _Benchmark execution:_ to measure the precision and recall between different file executions. + +In the following sections we will review each one in detail. + +## File Execution +The program receives one or multiple WARC files (a directory), iterates the records inside the compressed files and extracts the cleaned text. +The text is then fed to a Standford CoreNLP pipeline that carries out NER to identify the entities, and NED, by matching them to a Wikipedia URL. + +Wikipedia is then queried through their API to extract the desired information which is written in the output files. + +The program is run as follows: + +``` +java -jar dist/NerMain.java [-fineGrained] +``` +where `-fineGrained` is a flag that carries out a more detailed NER (slower). +It is set to false by default. + +The first step will load Stanford's CoreNLP library, which takes around 1 or 2 minutes. +Then, the program will go through the steps explained in the upcoming sections. + +For reference, one execution time for the file `0000wb-00.warc.gz` of 155mb (982mb uncompressed) with 41,356 records is 201 minutes, +with a total of 814,399 entities detected of which 694,956 are found in Wikipedia. + +### 1. File Input +The input for the program should be individual WARC files or directories containing (only) WARC files. +If the input is a folder, the files are iterated and run individually. +### 2. Workflow +#### 2.1. Text preparation +- First, the WARC file records are iterated. + For efficiency purposes, this is done without decompressing the file fully, with the [Mixnode WARC reader](https://github.com/Mixnode/mixnode-warcreader-java) library. + This library allows the program to go through all the records, filtering the HTTP responses to the crawler (response records). + +- `Apache HttpComponents` is used to extract the content of the HTTP response. This will be HTML code. + +- The relevant content from the HTML is extracted with [boilerpipe](https://code.google.com/archive/p/boilerpipe/). + This means removing things like tags, images and boilerplate. + Originally, [Jsoup](https://jsoup.org/) was used to select only the content of the `

` tags, but it proved to be too limiting. + +- In a previous version (prior to CoreNLP), the text was split into sentences, and the sentences into words with a [BreakIterator](https://docs.oracle.com/javase/8/docs/api/java/text/BreakIterator.html). + However, CoreNLP has to tokenize the text during its pipeline, so the whole cleaned text can be fed to the library. + +#### 2.2. NER and NED +The initial approach was to use Viterbi's algorithm for Hidden Markov Models as presented in the Information Retrieval lecture +([here](https://daphne.informatik.uni-freiburg.de/ws1920/InformationRetrieval/svn/public/slides/lecture-13.pdf) are the slides). +This algorithm uses the probabilities of each word to be a certain POS tag and the probabilities for the transition between tags to find the most probable sequence of tags for a sentence. +Then, the `NNP` (Proper Noun Singular) tag is used to mark entities. + +The program was later modified to use Stanford's CoreNLP since it provides more comprehensive methods for NER and NED. +The CoreNLP software allows you to choose which annotators should be applied to the text. +When the pipeline is executed, the annotators are run sequentially (starting on the input text). +The relevant ones for this project are: + + - `tokenize`: Divides the text into tokens (roughly correspond to words). +

+ Example + + ``` + Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing. + ``` + + becomes + + ``` + Mr. + O'Neill + thinks + that + the + boys + ' + stories + about + Chile + 's + capital + are + n't + amusing + . + ``` +
+ + - `ssplit`: Uses the tokens to split a text into sentences. + + - `pos`: Assigns POS tags to each token per sentence. +
+ Example + + ``` + Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing. + ``` + + becomes + +

+     Mr.NNP O'NeillNNP thinksVBZ thatIN theDT boysNNS 'POS storiesNNS aboutIN Chile NNP 'sPOS capitalNN areVBP n'tRB amusingJJ ..
+     
+
+ + - `lemma`: Generates the lemmas (base or dictionary form of a word) for each token. +
+ Example + + ``` + Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing. + ``` + + becomes + +

+      Mr.Mr. O'NeillO'Neill thinksthink thatthat thethe boysboy '' storiesstory aboutabout Chile Chile 's's capitalcapital arebe n'tnot amusingamusing ..
+      
+
+ + - `ner`: Recognises the Named Entities. There are 3 different models applied: 3class, 7class, and MISCclass. + + NER can be run with a higher level of detail, at a (rather large) time penalisation. + As a reference, running the program on `0000wb-32.warc.gz` without applying fine grained detection detects 631,759 wikientities, and takes just over 4 hours. + Activating fineGrained NER increases the detected wikientities to 782,335; but requires over 14 hours. + fineGrained can be activated as a flag when running the jar file (see the [execution](#file-execution) section). +
+ Example + + ``` + Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing. + ``` + + becomes + +

+      Mr. O'NeillPerson thinks that the boys' stories about Chile Country's capital aren't amusing.
+      
+
+ + - `entitylink`: Matches the entity mentions to wikipedia entities (over 20 million string matches). + + For that, `stanford-english-kbp-corenlp-2018-10-05-models.jar` is required. + This jar contains a [dictionary-like structure](https://nlp.stanford.edu/pubs/crosswikis.pdf) where strings of entities are mapped to canonical English Wikipedia URLs. + + For instance, for the text "FDR" or "Franklin Delano Rooseveltand" it outputs `Franklin_D._Roosevelt` + that can be appended to `https://en.wikipedia.org/wiki/` in order to obtain the wikiEntity + (https://en.wikipedia.org/wiki/Franklin_D._Roosevelt). + +The full URL is used to connect to Wikipedia's API to extract the name, description, wikidata ID and image URL. +This is done via a query like `https://en.wikipedia.org/w/api.php?action=query&prop=pageprops|pageimages&piprop=original&format=json&titles=Chile`. +A JSON with the information is returned, and used to enrich the entity information. +
+ Example + + ``` + Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing. + ``` + + becomes + +
+   Mr. O'Neill thinks that the boys' stories about Chile 
+   Image not found
+   Chile
+   WikidataId: Q298
+   Description: Republic in South America
+   's capital aren't amusing.
+
+ +The queried entities are stored within a run for increased efficiency. +By default, a HashMap is used since it is much faster, but using a database instead just requires uncommenting some lines +(view `src/java/core/NamedEntityDisambiguation.java`). + + + For more information specific to CoreNLP, [their documentation](https://stanfordnlp.github.io/CoreNLP/index.html) is quite thorough. + +### 3. File Output +There are 3 main types of files generated/modified during a run: + +1. HTML record files: HTML reconstruction of the text per warc file highlighting the entities found. + +2. Only entities: TSV file containing only the entities found. + +3. Results file: general summary of the runs (time, number of records, number of entities found...). + +#### 3.1. HTML Record files +There is one HTML record file per warc file. + +They are located under `output//html`. + +They contain all the extracted sentences in different paragraphs and the entities highlighted in a different colour. +The entities matched to a wikipedia entity (through NED) are marked with an asterisk (`*`), +and the property "data-record" in the paragraph points to the record where the sentence was found. + +
+ Sample + + ```html + + + + + + + + 0000wb-32.warc.gz + + + +

DAYSTAR* + + Image not found +
Daystar Television Network +
WikidataId: +
Description: +
+
NEWSLETTER NOVEMBER 2009 Once again we want to say '' Thank you '' for your business .

+

For over 30 years* + + Image not found +
Porter five forces analysis +
WikidataId: +
Description: +
+
we have been providing safety equipment , services , and solutions for many companies in the Midwest* + + Image not found +
Midwestern United States +
WikidataId: Q186545 +
Description: One of the four census regions of the United States of America +
+
.

+ + + + ``` + +
+ +#### 3.2. Only entities + This file contains only the detected entities for each warc file. + + It has 4 tab separated columns: + + - wikidata ID + + - WARC record ID + + - Offset (begin) + + - Offset (end) + + They are located under `output//tsv/`. + + These files can be used as the input to compute the benchmark statistics (explained in the benchmark execution section). + +
+ Sample + + ``` + Q634951 clueweb12-0000wb-00-00000 40 88 + Q84 clueweb12-0000wb-00-00000 92 98 + Q2478 clueweb12-0000wb-00-00000 113 117 + Q21 clueweb12-0000wb-00-00000 148 155 + Q794 clueweb12-0000wb-00-00000 157 161 + Q43 clueweb12-0000wb-00-00000 166 172 + Q2476 clueweb12-0000wb-00-00000 204 208 + Q84 clueweb12-0000wb-00-00000 213 219 + Q664609 clueweb12-0000wb-00-00000 244 253 + Q739700 clueweb12-0000wb-00-00000 296 314 + Q794 clueweb12-0000wb-00-00000 333 337 + ``` + +
+ +#### 3.3. Statistics file + All executions are also logged to a `output/results.log` tsv log file, like the following: + +| date | file | records | runtime (min) | wikientities | total entities | +| -------------------------- | ----------------- | -----: | -------: | -------: | -------: | +| 2020-02-19T01:36:25.695708 | 0000wb-32.warc.gz | 34030 | 270,17 | 631759 | 730767 | +| 2020-02-19T13:52:09.694204 | 0000wb-77.warc.gz | 35179 | 208,35 | 606178 | 713374 | +| 2020-02-20T04:34:22.440702 | 0000wb-27.warc.gz | 38536 | 217,49 | 705700 | 822316 | +| 2020-02-20T17:04:36.226648 | 0000wb-88.warc.gz | 35921 | 168,23 | 722767 | 838604 | +| 2020-02-21T01:25:59.114743 | 0000wb-83.warc.gz | 32003 | 101,20 | 429399 | 496036 | + +## Server execution +For demonstration and testing purposes, a simple web server is available. +When started, the server will render a page where the user can input a sample text and see the POS tags and detected entities. + +The server execution starts by default at port number 49152, but a different port can be provided. + ``` + java -jar dist/NerMain.java [-p ] + ``` +Since the testing will be done in relatively small texts, fineGrained NER is activated. + +## Benchmark execution +The benchmark execution compares the wikidata ids between two different files, grouping them by their WARC record id. + +The execution can be done via: + ``` + java -jar dist/NerMain.java + ``` + +### 1. Benchmark Input +Both files being compared should follow the same format. +Said format is the one presented in the [text record output file](#3-2-only-entities) of the execution, +namely four tab separated columns (wikidata ID, WARC record ID and offsets). + +In order to use the [FACC annotated files of the dataset](http://lemurproject.org/clueweb12/FACC1/), +once the files are downloaded (`wget `) and uncompressed (`tar -zxvf ClueWeb12_*`) some preprocessing is required: + +- From each tsv, only the WARC record ID (first column), the offsets (fourth and fifth coluns) and the freebase ID (eight column) are relevant. + +- The freebase IDs are mapped to wikidata IDs. + +- The file is formatted to have the wikidata ID in the first column and the WARC record ID in the second. The offset are last + +- The new file will be named `.benchmark`. + +- A file with all the missing freebase-wikidata mappings is also generated (`.freq_missing_ids`). + +The python script to carry all these tasks, as well as the file with the mapping of the IDs is located in `/nfs/students/pablo-de-andres/freebase_wikidata_mapping`. + +_IMPORTANT NOTE:_ +The offsets from the Freebase annotated version do not match the offsets that this program outputs. +This is due to the fact that CoreNLP receives the cleaned text and computes the offsets from that text. +However, the offsets from Freebase refer to the original WARC file. + +### 2. Metrics +- First, the ground truth file is loaded into a helper data structure called `BenchmarkFile`. +It is a `Map`, with the WARC record IDs as keys and for values a nested `Map` with the offsets as keys and the wikidata IDs as values. +(`Map>`). + +- Similarly, the file being compared against the ground truth is loaded into another `BenchmarkFile`. + +- While loading the second file, four more datastructures are filled: + + - True positives: The entities detected during the run (second file) also present in the ground truth. + + - False positives: The entities detected during the run that are not present in the ground truth. + + - Missing mapping: The entities present in the run and in the ground truth, but missing the mapping from freebase to wikidata ID. + + - Wrong entity: The entities present in both files, but with different wikidata entity IDs assigned. + +- The true positives are then used to compute the [_precision_ and _recall_](https://en.wikipedia.org/wiki/Precision_and_recall): + + - Precision = true positives / entities detected in the run. + + - Recall = true positives / entities in the ground truth. + +### 3. Benchmark Output +Running the benchmark will generate a folder under `output/benchmark/` and dump the four computed data structures +(true positives, false positives missing mapping and wrong entity). +These follow a structure like the other tsv files explained until now, namely four columns, wikidata ID, WARC record ID and offsets. + +For the benchmark execution there is also an statistics file located in `output/benchmark/statistics.log`: + +| date | Benchmark_File | Benchmark_Entities | Identified_File | Identified_Entities | Precision | Recall | +|------------|----------------|-------------------:|----------------:|--------------------:|----------:|-------:| +| 2020-07-22T09:11:43.166127 | 0000wb-00.benchmark | 435401 | 0000wb-00.warc.text_record.tsv | 694536 | 0.35610713684477563 | 0.48089920151530735 | + +## Final Notes +This project aims to define the structure and an algorithm for performing NER and NED on the dataset. +Thus, improvements can be made in future iterations: + +- Given the size of the dataset, the program has only been run in a very small subset. + For a full execution, multiple processes, with higher resources are recommended. + +- The NER carried out by CoreNLP is limited. Some structures like "Gone with the wind", with POS-tags: \ + \ + \ + \ are not detected by default. + Marking those structures as entities will make structures like "The Zähringen family was \ in 1120. This reduces the accuracy, and could cause shorter, real entities to be skipped when they are part of a bigger structure. + Nevertheless, this behaviour can be forced by using the `-fineGrained` flag when executing. + +- NED is also done via CoreNLP, because the number of disambiguated entities is higher than that of the first algorithm. + However, the results are not the most accurate, and the usage of another tool could probably improve the results. + + - For example, [AGDISTIS](http://aksw.org/Projects/AGDISTIS.html) is an interesting option. + +- The current benchmark implementation does not work to compare to the Freeebase annotated version. +However, it can still be used to compare the results between different versions of the code. +Fixing the benchmark to match the offsets from freebase would require to find the text in the original record file and compute the offset there, which is not a trivial task. diff --git a/static/img/project-clueweb-entity-linking/workflow.png b/static/img/project-clueweb-entity-linking/workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..076c89dd8dc9c5bf66d75911951ca033b17e0e4a GIT binary patch literal 46359 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 literal 0 HcmV?d00001