Spaces:
Sleeping
Sleeping
# Copyright (c) Facebook, Inc. and its affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the BSD-style license found in the | |
# LICENSE file in the root directory of this source tree. | |
# | |
# LASER Language-Agnostic SEntence Representations | |
# is a toolkit to calculate multilingual sentence embeddings | |
# and to use them for document classification, bitext filtering | |
# and mining | |
# | |
# -------------------------------------------------------- | |
# | |
# bash script to downlaod and extract XNLI and multiNLI corpus | |
if [ -z ${LASER+x} ] ; then | |
echo "Please set the environment variable 'LASER'" | |
exit | |
fi | |
xnli="XNLI-1.0" | |
xnli_mt="XNLI-MT-1.0" | |
xnli_http="https://dl.fbaipublicfiles.com/XNLI" | |
mnli_http="https://www.nyu.edu/projects/bowman/multinli/multinli_1.0.zip" | |
languages=("en" "fr" "es" "de" "el" "bg" "ru" "tr" "ar" "vi" "th" "zh" "hi" "sw" "ur") | |
edir="embed" | |
# encoder | |
model_dir="${LASER}/models" | |
encoder="${model_dir}/bilstm.93langs.2018-12-26.pt" | |
bpe_codes="${model_dir}/93langs.fcodes" | |
# NLI classifier params | |
N=200 | |
nhid="512 384" | |
drop=0.3 | |
seed=159753 | |
bsize=128 | |
lr=0.001 | |
############################################################################################## | |
# get the XNLI dev and test corpus in 15 languages | |
ExtractXNLI () { | |
echo "Installing XNLI" | |
if [ ! -s ${xnli}/xnli.test.tsv ] ; then | |
echo " - Downloading " | |
wget -q ${xnli_http}/${xnli}.zip | |
echo " - unzip " | |
unzip -q ${xnli}.zip | |
/bin/rm -rf __MACOS ${xnli}.zip | |
fi | |
for lang in ${languages[@]} ; do | |
for part in "dev" "test" ; do | |
if [ ! -f ${edir}/xnli.${part}.prem.${lang} ] ; then | |
echo " - extracting xnli.${part}.${lang}" | |
tail -n +2 ${xnli}/xnli.${part}.tsv \ | |
| grep "^${lang}" | cut -f7 \ | |
> ${edir}/xnli.${part}.prem.${lang} | |
tail -n +2 ${xnli}/xnli.${part}.tsv \ | |
| grep "^${lang}" | cut -f8 \ | |
> ${edir}/xnli.${part}.hyp.${lang} | |
tail -n +2 ${xnli}/xnli.${part}.tsv \ | |
| grep "^${lang}" | cut -f2 \ | |
| sed -e 's/entailment/0/' -e 's/neutral/1/' -e 's/contradiction/2/' \ | |
> ${edir}/xnli.${part}.cl.${lang} | |
fi | |
done | |
done | |
} | |
############################################################################################## | |
# https://www.nyu.edu/projects/bowman/multinli/multinli_1.0.zip | |
# MT translated data is already tokenized ! | |
ExtractXNLI_MT () { | |
echo "Installing XNLI MT" | |
if [ ! -d ${xnli_mt}/multinli ] ; then | |
echo " - Downloading " | |
wget -q ${xnli_http}/${xnli_mt}.zip | |
echo " - unzip " | |
unzip -q ${xnli_mt}.zip | |
/bin/rm -rf __MACOS ${xnli_mt}.zip | |
fi | |
part="train" | |
for lang in "en" ; do | |
if [ ! -f ${edir}/multinli.${part}.prem.${lang}.gz ] ; then | |
echo " - extracting ${part}.${lang}" | |
tail -n +2 ${xnli_mt}/multinli/multinli.${part}.${lang}.tsv \ | |
| cut -f1 > ${edir}/multinli.${part}.prem.${lang} | |
tail -n +2 ${xnli_mt}/multinli/multinli.${part}.${lang}.tsv \ | |
| cut -f2 > ${edir}/multinli.${part}.hyp.${lang} | |
tail -n +2 ${xnli_mt}/multinli/multinli.${part}.${lang}.tsv \ | |
| cut -f3 \ | |
| sed -e 's/entailment/0/' -e 's/neutral/1/' -e 's/contradictory/2/' \ | |
> ${edir}/multinli.${part}.cl.${lang} | |
fi | |
done | |
} | |
############################################################################################## | |
# https://www.nyu.edu/projects/bowman/multinli/multinli_1.0.zip | |
# MT translated data is already tokenized ! | |
ExtractMNLI () { | |
echo "Installing MultiNLI" | |
train_txt="multinli_1.0/multinli_1.0_train.txt" | |
if [ ! -d ${edir} ] ; then mkdir -p ${edir}; fi | |
if [ ! -f ${edir}/xnli.train.cl.en ] ; then | |
echo " - Downloading" | |
wget -q ${mnli_http} | |
echo " - unzip" | |
unzip -q multinli_1.0.zip ${train_txt} | |
echo " - extracting" | |
tail -n +2 ${train_txt} | cut -f6 | gzip > ${edir}/xnli.train.prem.en.gz | |
tail -n +2 ${train_txt} | cut -f7 | gzip > ${edir}/xnli.train.hyp.en.gz | |
tail -n +2 ${train_txt} | cut -f1 \ | |
| sed -e 's/entailment/0/' -e 's/neutral/1/' -e 's/contradiction/2/' \ | |
> ${edir}/xnli.train.cl.en | |
fi | |
} | |
############################################################################################## | |
if [ ! -d ${edir} ] ; then mkdir -p ${edir}; fi | |
ExtractXNLI | |
ExtractMNLI | |
# calculate embeddings | |
export PYTHONPATH="$PYTHONPATH:$LASER/tools-external/jieba" | |
python3 xnli.py --data_dir ${edir} --lang ${languages[@]} --bpe_codes ${bpe_codes} --encoder ${encoder} --verbose | |
#for fr in 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 ; do | |
for fr in 0.6 0.7 0.8 0.9 ; do | |
echo -e "\nTraining the classifier (see ${edir}/xnli.fract${fr}.log)" | |
python3 ${LASER}/source/nli.py -b ${edir} \ | |
--train xnli.train.%s.enc.en --train-labels xnli.train.cl.en \ | |
--dev xnli.dev.%s.enc.en --dev-labels xnli.dev.cl.en \ | |
--test xnli.test.%s.enc --test-labels xnli.test.cl --lang ${languages[@]} \ | |
--nhid ${nhid[@]} --dropout ${drop} --bsize ${bsize} \ | |
--seed ${seed} --lr ${lr} --nepoch ${N} \ | |
--cross-lingual \ | |
--fraction $fr \ | |
--save-outputs ${edir}/xnli.fract${fr}.outputs \ | |
--gpu 1 > ${edir}/xnli.fract${fr}.log | |
done | |