mirror of https://github.com/percyliang/sempre
179 lines
5.4 KiB
Ruby
Executable File
179 lines
5.4 KiB
Ruby
Executable File
#!/usr/bin/ruby
|
|
|
|
$: << 'fig/lib'
|
|
require 'execrunner'
|
|
|
|
# Note: run this on the NLP machines because SPARQL server is running on jack.
|
|
if ARGV.size == 0
|
|
puts "Usage:"
|
|
puts " ./parasempre @mode=train @domain=<webquestions|free917> @sparqlserver=<host:port> @cacheserver=<none|local>"
|
|
puts "Additional options can be any of the following:"
|
|
puts " - Additional program options (e.g., -BeamParser.beamSize 3)"
|
|
puts " - Execrunner options, which select the options to include (@data=0)"
|
|
exit 1
|
|
end
|
|
|
|
system "mkdir -p trans_state/execs"
|
|
system "touch trans_state/lastExec"
|
|
|
|
def header
|
|
l(
|
|
letDefault(:q, 0), sel(:q, l(), l('fig/bin/q', '-shareWorkingPath', o('mem', '5g'), o('memGrace', 10), '-add', '---')),
|
|
'fig/bin/qcreate',
|
|
'-statePath',
|
|
'trans_state',
|
|
(File.exists?('/u/nlp/bin/java7') ? '/u/nlp/bin/java7' : 'java'),
|
|
'-ea',
|
|
'-Xmx10g',
|
|
'-cp', 'classes:'+Dir['lib/*.jar'].join(':'),
|
|
letDefault(:prof, 0), sel(:prof,
|
|
l(),
|
|
'-Xrunhprof:cpu=samples,depth=100,file=_OUTPATH_/java.hprof.txt',
|
|
'-Xrunhprof:heap=sites,file=_OUTPATH_/java.hprof.txt'),
|
|
nil)
|
|
end
|
|
|
|
def sparqlOpts
|
|
l(
|
|
required(:sparqlserver, 'host:port of the Sparql server'),
|
|
o('SparqlExecutor.endpointUrl', lambda{|e| 'http://'+e[:sparqlserver]+'/sparql'}),
|
|
nil)
|
|
end
|
|
|
|
def defaultOpts
|
|
l(
|
|
o('execDir', '_OUTPATH_'), o('overwriteExecDir'),
|
|
o('addToView', 0),
|
|
nil)
|
|
end
|
|
|
|
def cachePaths(lexiconFnCachePath, sparqlExecutorCachePath)
|
|
l(
|
|
required(:cacheserver, 'none (don\'t cache to disk), local (write to local file), or <hostname>:<port> (hit the cacheserver)'),
|
|
lambda { |e|
|
|
cacheserver = e[:cacheserver]
|
|
case cacheserver
|
|
when 'none' then l()
|
|
when 'local' then l( # Use files directly - don't run more than one job that does this!
|
|
o('Lexicon.cachePath', 'LexiconFn.cache'),
|
|
o('SparqlExecutor.cachePath', 'SparqlExecutor.cache'),
|
|
nil)
|
|
else l(
|
|
o('Lexicon.cachePath', cacheserver + ':' + lexiconFnCachePath),
|
|
o('SparqlExecutor.cachePath', cacheserver + ':' + sparqlExecutorCachePath),
|
|
nil)
|
|
end
|
|
},
|
|
nil)
|
|
end
|
|
|
|
|
|
$defaultFeatureDomains = [
|
|
'Del',
|
|
'Denotation',
|
|
'Formula',
|
|
'NamedEntity',
|
|
#'Pt',
|
|
'Subst',
|
|
'WhType',
|
|
nil].compact
|
|
|
|
def unbalancedTrainDevSplit
|
|
l(o('ParaphraseDataset.trainFrac', 0.8), o('ParaphraseDataset.devFrac', 0.2))
|
|
end
|
|
|
|
def allTrainSplit
|
|
l(o('ParaphraseDataset.trainFrac', 1), o('ParaphraseDataset.devFrac', 0))
|
|
end
|
|
|
|
def train
|
|
l(
|
|
header,
|
|
'edu.stanford.nlp.sempre.paraphrase.ParaphraseMain',
|
|
defaultOpts, sparqlOpts,
|
|
o('ParaphraseMain.mode','train'),
|
|
required(:domain, 'domain (webquestions or free917)'),
|
|
selectDomain,
|
|
o('Rulebase.ruleTypes','Pt','Syntax', 'Move', 'Subst'),
|
|
o('ParaphraseFeatureMatcher.featureDomains', *$defaultFeatureDomains),
|
|
o('Params.l1Reg','lazy'),
|
|
o('Aligner.useWordnet',true),
|
|
o('FeatureSimilarityComputer.mode','lexical_overlap'),
|
|
nil)
|
|
end
|
|
|
|
def webquestions
|
|
l(
|
|
letDefault(:data, 0),
|
|
sel(:data,
|
|
l(o('ParaphraseDataset.parsingInPaths',
|
|
'train,lib/data/webquestions/dataset_11/webquestions.examples.train.json'),
|
|
unbalancedTrainDevSplit,
|
|
nil),
|
|
l(o('ParaphraseDataset.parsingInPaths',
|
|
'train,lib/data/webquestions/dataset_11/webquestions.examples.train.json',
|
|
'test,lib/data/webquestions/dataset_11/webquestions.examples.test.json'),
|
|
allTrainSplit,
|
|
nil),
|
|
nil),
|
|
o('ParaphraseLearner.maxTrainIters',2),
|
|
o('ParaphraseLearner.partialReward',true),
|
|
o('ParaphraseParser.alignment',true),
|
|
o('ParaphraseParser.vsm',true),
|
|
o('Lexicon.entitySearchStrategy','inexact'),
|
|
o('FormulaRetriever.supportCountUtterances',false),
|
|
o('FormulaRetriever.filterRelations',true),
|
|
o('FormulaRetriever.maxEntries',10),
|
|
o('FormulaRetriever.conservativeEntityExtraction',true),
|
|
o('Params.l1RegCoeff','0.00017782794'),
|
|
o('VectorSpaceModel.wordVectorFile','lib/wordreprs/cbow-lowercase-50.vectors'),
|
|
l(
|
|
o('EntityLexicon.exactMatchIndex','lib/lucene/4.4/inexact/'),
|
|
cachePaths('LexiconFnWebQ.cache', 'SparqlExecutor.cache'),
|
|
nil),
|
|
nil)
|
|
end
|
|
|
|
def free917
|
|
l(
|
|
letDefault(:data, 0),
|
|
sel(:data,
|
|
l(o('ParaphraseDataset.parsingInPaths', 'train,data/free917.train.examples.canonicalized.json'),
|
|
unbalancedTrainDevSplit,
|
|
nil),
|
|
l(o('ParaphraseDataset.parsingInPaths', 'train,data/free917.train.examples.canonicalized.json', 'test,data/free917.test.examples.canonicalized.json'),
|
|
allTrainSplit,
|
|
nil),
|
|
nil),
|
|
o('ParaphraseLearner.maxTrainIters',10),
|
|
o('ParaphraseLearner.partialReward',false),
|
|
o('ParaphraseParser.alignment',true),
|
|
o('ParaphraseParser.vsm',true),
|
|
o('Lexicon.entitySearchStrategy','exact'),
|
|
o('FormulaRetriever.supportCountUtterances',true),
|
|
o('FormulaRetriever.filterRelations',false),
|
|
o('FormulaRetriever.maxEntries',1000),
|
|
o('FormulaRetriever.conservativeEntityExtraction',false),
|
|
o('Params.l1RegCoeff',0.00562341325),
|
|
o('VectorSpaceModel.wordVectorFile','lib/wordreprs/wordLexicon'),
|
|
l(
|
|
o('EntityLexicon.exactMatchIndex','lib/lucene/4.4/free917/'),
|
|
cachePaths('LexiconFnFree917.cache', 'SparqlExecutor.cache'),
|
|
nil),
|
|
nil)
|
|
end
|
|
|
|
def selectDomain
|
|
sel(:domain, {
|
|
'webquestions' => webquestions,
|
|
'free917' => free917,
|
|
})
|
|
end
|
|
|
|
|
|
run!(
|
|
sel(:mode, {
|
|
'train' => train,
|
|
}),
|
|
nil)
|