Table des matières

Diario de instalación de SOPA

Instrucciones para instalar SOPA

Clonar el código de github

git clone https://github.com/dbuscaldi/SOPA

Este es el directorio base de SOPA (o $SOPA_HOME)

Instalar software externo (sugerencia pornerlo dentro del directorio de SOPA)

Wordnet 3.0

wget http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.gz
tar xzvf WordNet-3.0.tar.gz

Modelos de la libreria NLPCore Stanford

El objetivo es pasar la librería de modelos al directorio lib de SOPA

wget http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip
unzip stanford-corenlp-full-2014-08-27.zip
cp stanford-corenlp-full-2014-08-27/stanford-corenlp-3.4.1-models.jar lib/

Indices

Descargar (de la máquina de Davide o de la de Iván) el archivo

 IRindexes.sopa.semeval.clean.tar.gz (? Gb; md5sum=?)

Este archivo contiene los siguientes recursos:

Descomprimirlos en $SOPA_HOME

 $ tar xzvf IRindexes.sopa.semeval.clean.tar.gz .

Compilar el código

Compilar todo el código fuente (Si alguien puede producir una línea más pequeña sería una buena idea)

$ mkdir bin
$ javac -classpath src:lib/*  -d bin src/jweb1t/*.java  \
src/fr/lipn/sts/semantic/*.java src/fr/lipn/sts/twitter/*.java \
src/fr/lipn/sts/ckpd/*.java src/fr/lipn/sts/align/sphynx/*.java \
src/fr/lipn/sts/align/sultan/*.java src/fr/lipn/sts/geo/*.java \
src/fr/lipn/sts/syntax/*.java src/fr/lipn/sts/basic/*.java \
src/fr/lipn/sts/tools/*.java src/fr/lipn/sts/ner/*.java \
src/fr/lipn/sts/*.java

Similaridad de Sultan como web service

Primero hay que instalar la librería de CoreNLP para python (preferentemente ponerla en el directiorio lib de SOPA):

git clone git://github.com/dasmith/stanford-corenlp-python.git
cd stanford-corenlp-python/
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip
unzip stanford-corenlp-full-2014-08-27.zip

Además hay que remplazar la línea 107 de corenlp.py, por la siguiente:

rel, left, right = split_entry

Segundo hay que instalar la librería de alineación de Sultan (preferentemente ponerla en el directorio lib de SOPA):

git clone https://github.com/ivanvladimir/monolingual-word-aligner.git
sudo easy_install Flask

Configurar la herramienta

Editar el archivo config.xml localizado en el directorio SOPA/res. Este es una muestra con los pasos anteriores

<config>
        <lang>en</lang> <!-- language -->
        <wnhome>WordNet-3.0/</wnhome> <!-- location of WordNet -->
        <bnhome></bnhome> <!-- location of babelnet -->
        <DBPedia lang="en">indexes/DBPedia_indexed</DBPedia> <!-- location of DBpedia index -->
        <IRindex lang="en">indexes/AQUAINT_indexed</IRindex> <!-- location of IR index -->
        <Ngrams lang="en">indexes/googleNgramsEN.db</Ngrams> <!-- location of SQLITE3 database of Google bigrams and trigrams -->
        <GoogleTF>1gms/vocab_cs</GoogleTF> <!-- location of list of Google unigrams -->
        <ssim>pg1</ssim> <!-- Structural similarity measure: pg1, pg2, pg3, wp -->
        <ic>jc</ic> <!-- information content measure: jc or lin -->
</config>

Probar el código

Ejecutar servicios

Dado que estamos utilizando la librería de Sultan y esta a su vez usa la de nlpcore de python hay que levantarlos para que los pueda usar SOPA.

Para hacer lo siguiente ejecuart los siguientes comandos (suponiendo que se instalaron en el directorio lib de SOPA).

cd lib/stanford-corenlp-python
python corenlp.py &
cd ../monolingual-word-aligner/
python service.py &

Nota: estos servicios necesitan NLTK y en particular los stopwords cargados desde la linea de comando de Python con nltk.download().

TestCoreNLP

La herramienta de prueba, por el momento tiene un error y hay que agregar la siguiente línea en el archivo $SOPA_HOME/src/fr/lipn/sts/TestCoreNLP.java:

 GoogleTFFactory.init(SOPAConfiguration.GoogleTF);

Una opción es:

 GoogleTFFactory.init(SOPAConfiguration.GoogleTF);
 StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

Despues recompilar, y ejecutar

Java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.TestCoreNLP

Debe funcionar cargar la mayoría de las librerías (Por el momento marca un error con la interacción con Bing)

UkWaCIndexer

Cambiar las líneas 22 y 23 del archivo UkWaCIndexer.java en el directorio $SOPAHOME/src/fr/lipn/sts/ir/indexing/ <code> String filename=“/media/expT1/corpora/WaCky/en/ukwac/cleaned_pre.pos.corpus”; String dest=“/media/expT1/index/ukwac”; </code> Sustituir por: <code> String filename=“$SOPAHOME/indexes/ukwac/cleanedpre.pos.corpus”; String dest=“$SOPA_HOME/indexes/ukwac”; </code> OJO: hay que reemplazar $SOPA_HOME por la ruta absoluta en donde está instalada SOPA === SemanticComparer === * Cambiar la línea 114 en $SOPAHOME/src/fr/lipn/sts/SemanticComparer.java

 props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, sentiment, parse");

por

 props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, sentiment");

Reemplazar

 IRSimilarity irswac= new IRSimilarity("/media/expT1/index/ukwac");

por

  IRSimilarity irswac= new IRSimilarity("$SOPA_HOME/indexes/ukwac"); 

cuidando reemplazar $SOPA_HOME por la ruta absoluta de la instalación de SOPA.

Y recompilar.

Y para ejecuarlo escoger alguno de los archivos de frases en el sistema de pruebas

 java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.SemanticComparer -f \
 ../SemEval/testbed/data/2014/train/STS.2012.train.input.MSRpar.txt

En modo de entrenamiento, hay que agregar la opción -g y el nombre del archivo .gs de referencia (o gold standard):

 $ java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.SemanticComparer -f \
 ../SemEval/english_testbed/data/2014/train/STS.2012.train.input.MSRpar.txt -g \
 ../SemEval/english_testbed/data/2014/train/STS.2012.train.gs.MSRpar.txt

Interpretar la salida de SOPA

Cada línea del archivo típico de salida de SOPA corresponde a un par de frases del archivo de entrada. El par es analizado de acuerdo a un conjunto de dieciséis descriptores estructurales. He aquí un ejemplo de una línea típica del archivo de salida de SOPA

 0.0 1:0.5799918669836017 2:0.7647590041160583 3:0.721046374948145 4:0.6666666269302368
 5:0.7165572664608884 6:0.6992204407643969 7:0.41701820964924186 8:0.7253049656792512
 9:1.0 10:0.40990165297573933 11:0.60801467567322 12:0.7913405726936663
 13:0.4127906976744186 14:0.5862069129943848 15:0.509259259259 16:41.0

El formato NN:FFFFFF se interpreta como descriptor NN con un valor igual a FFFFFF (El descriptor 0.00 es despreciable). La versión 2015 de SOPA contiene dieciséis descriptores (o si se prefiere features). He aquí la descripción:

  1. Similaridad de n-gramas (CKPD)
  2. Similaridad conceptual (WordNet estilo Wu-Palmer)
  3. Similaridad sintáctica
  4. Distancia de Levenshtein
  5. Distancia coseno (tf.idf)
  6. Entidades nombradas en común (NER overlap)
  7. Similaridad conceptual (WordNet estilo Jiang-Conrath)
  8. Similaridad RI (index AQUAINT)
  9. Similaridad geográfica
  10. Similaridad Rank-Biased Overlap (índice AQUAINT)
  11. Similaridad de Entidades nombradas según DBPedia
  12. Similaridad RI (índice UkWaC)
  13. Similaridad Skip-grams
  14. WER de Sphynx
  15. Similaridad de Sultan
  16. Similaridad por tamaño de frase

Si SOPA fue ejecutado con la opción -g de entrenamiento cada línea del archivo de salida va precedida por el gold standard o valor de referencia de la anotación humana para el par de frases en cuestión.

 4.000 1:0.5799918669836017 2:0.7647590041160583 3:0.721046374948145 4:0.6666666269302368
 5:0.7165572664608884 6:0.6992204407643969 7:0.41701820964924186 8:0.7253049656792512
 9:1.0 10:0.40990165297573933 11:0.60801467567322 12:0.7913405726936663 13:0.4127906976744186
 14:0.5862069129943848 15:0.509259259259 16:41.0