| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env bash
- #
- # Copyright (c) 2016-present, Facebook, Inc.
- # All rights reserved.
- #
- # This source code is licensed under the MIT license found in the
- # LICENSE file in the root directory of this source tree.
- #
- # This script produces the results from Table 1 in the following paper:
- # Bag of Tricks for Efficient Text Classification, arXiv 1607.01759, 2016
- myshuf() {
- perl -MList::Util=shuffle -e 'print shuffle(<>);' "$@";
- }
- normalize_text() {
- tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \
- sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \
- -e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \
- -e 's/\?/ \? /g' -e 's/\;/ /g' -e 's/\:/ /g' | tr -s " " | myshuf
- }
- DATASET=(
- ag_news
- sogou_news
- dbpedia
- yelp_review_polarity
- yelp_review_full
- yahoo_answers
- amazon_review_full
- amazon_review_polarity
- )
- ID=(
- 0Bz8a_Dbh9QhbUDNpeUdjb0wxRms # ag_news
- 0Bz8a_Dbh9QhbUkVqNEszd0pHaFE # sogou_news
- 0Bz8a_Dbh9QhbQ2Vic1kxMmZZQ1k # dbpedia
- 0Bz8a_Dbh9QhbNUpYQ2N3SGlFaDg # yelp_review_polarity
- 0Bz8a_Dbh9QhbZlU4dXhHTFhZQU0 # yelp_review_full
- 0Bz8a_Dbh9Qhbd2JNdDBsQUdocVU # yahoo_answers
- 0Bz8a_Dbh9QhbZVhsUnRWRDhETzA # amazon_review_full
- 0Bz8a_Dbh9QhbaW12WVVZS2drcnM # amazon_review_polarity
- )
- # These learning rates were chosen by validation on a subset of the training set.
- LR=( 0.25 0.5 0.5 0.1 0.1 0.1 0.05 0.05 )
- RESULTDIR=result
- DATADIR=data
- mkdir -p "${RESULTDIR}"
- mkdir -p "${DATADIR}"
- # Small datasets first
- for i in {0..0}
- do
- echo "Downloading dataset ${DATASET[i]}"
- if [ ! -f "${DATADIR}/${DATASET[i]}.train" ]
- then
- wget -c "https://drive.google.com/uc?export=download&id=${ID[i]}" -O "${DATADIR}/${DATASET[i]}_csv.tar.gz"
- tar -xzvf "${DATADIR}/${DATASET[i]}_csv.tar.gz" -C "${DATADIR}"
- cat "${DATADIR}/${DATASET[i]}_csv/train.csv" | normalize_text > "${DATADIR}/${DATASET[i]}.train"
- cat "${DATADIR}/${DATASET[i]}_csv/test.csv" | normalize_text > "${DATADIR}/${DATASET[i]}.test"
- fi
- done
- # Large datasets require a bit more work due to the extra request page
- for i in {1..7}
- do
- echo "Downloading dataset ${DATASET[i]}"
- if [ ! -f "${DATADIR}/${DATASET[i]}.train" ]
- then
- curl -c /tmp/cookies "https://drive.google.com/uc?export=download&id=${ID[i]}" > /tmp/intermezzo.html
- curl -L -b /tmp/cookies "https://drive.google.com$(cat /tmp/intermezzo.html | grep -Po 'uc-download-link" [^>]* href="\K[^"]*' | sed 's/\&/\&/g')" > "${DATADIR}/${DATASET[i]}_csv.tar.gz"
- tar -xzvf "${DATADIR}/${DATASET[i]}_csv.tar.gz" -C "${DATADIR}"
- cat "${DATADIR}/${DATASET[i]}_csv/train.csv" | normalize_text > "${DATADIR}/${DATASET[i]}.train"
- cat "${DATADIR}/${DATASET[i]}_csv/test.csv" | normalize_text > "${DATADIR}/${DATASET[i]}.test"
- fi
- done
- make
- for i in {0..7}
- do
- echo "Working on dataset ${DATASET[i]}"
- ./fasttext supervised -input "${DATADIR}/${DATASET[i]}.train" \
- -output "${RESULTDIR}/${DATASET[i]}" -dim 10 -lr "${LR[i]}" -wordNgrams 2 \
- -minCount 1 -bucket 10000000 -epoch 5 -thread 4 > /dev/null
- ./fasttext test "${RESULTDIR}/${DATASET[i]}.bin" \
- "${DATADIR}/${DATASET[i]}.test"
- done
|