git clone https://github.com/dbuscaldi/SOPA
Este es el directorio base de SOPA (o $SOPA_HOME
)
wget http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.gz tar xzvf WordNet-3.0.tar.gz
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/
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 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
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
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>
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().
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)
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");
SemanticComparer.java
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
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:
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