summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Denkowski <mdenkows@cs.cmu.edu>2013-09-02 15:09:19 -0700
committerMichael Denkowski <mdenkows@cs.cmu.edu>2013-09-02 15:09:19 -0700
commite6f15583081547a4adc2fca7f2ed96cb515a48f5 (patch)
tree1905387d7969798fc59a73df0e9e72944ed77c11
parente078ac74f3499298742174a06f915b58f2d4cbdb (diff)
Use kbest_cut_mira stream as decoder
-rwxr-xr-xrealtime/realtime.py6
-rw-r--r--realtime/rt/decoder.py16
2 files changed, 15 insertions, 7 deletions
diff --git a/realtime/realtime.py b/realtime/realtime.py
index c42b52ab..c169ce4c 100755
--- a/realtime/realtime.py
+++ b/realtime/realtime.py
@@ -11,7 +11,7 @@ import tempfile
import time
from rt import ForceAligner
-from rt import CdecDecoder
+from rt import MIRADecoder
class RealtimeDecoder:
@@ -35,8 +35,7 @@ class RealtimeDecoder:
# Decoder
decoder_config = os.path.join(configdir, 'cdec.ini')
decoder_weights = os.path.join(configdir, 'weights.final')
- #TODO: run MIRA instead
- self.decoder = CdecDecoder(decoder_config, decoder_weights)
+ self.decoder = MIRADecoder(decoder_config, decoder_weights)
def close(self):
logging.info('Closing processes')
@@ -90,6 +89,7 @@ def main():
if len(input) == 1:
hyp = rtd.decode(input[0])
sys.stdout.write('{}\n'.format(hyp))
+ sys.stdout.flush()
elif len(input) == 2:
rtd.learn(*input)
diff --git a/realtime/rt/decoder.py b/realtime/rt/decoder.py
index f4fea0e2..786bc07a 100644
--- a/realtime/rt/decoder.py
+++ b/realtime/rt/decoder.py
@@ -8,6 +8,11 @@ class Decoder:
def close(self):
self.decoder.stdin.close()
+ def decode(self, sentence, grammar):
+ input = '<seg grammar="{g}">{s}</seg>\n'.format(i=id, s=sentence, g=grammar)
+ self.decoder.stdin.write(input)
+ return self.decoder.stdout.readline().strip()
+
class CdecDecoder(Decoder):
def __init__(self, config, weights):
@@ -16,8 +21,11 @@ class CdecDecoder(Decoder):
decoder_cmd = [decoder, '-c', config, '-w', weights]
self.decoder = util.popen_io(decoder_cmd)
- def decode(self, sentence, grammar):
- input = '<seg grammar="{g}">{s}</seg>\n'.format(i=id, s=sentence, g=grammar)
- self.decoder.stdin.write(input)
- return self.decoder.stdout.readline().strip()
+class MIRADecoder(Decoder):
+ def __init__(self, config, weights):
+ cdec_root = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
+ mira = os.path.join(cdec_root, 'training', 'mira', 'kbest_cut_mira')
+ # optimizer=2 step=0.001 best=500, k=500, uniq, stream
+ mira_cmd = [mira, '-c', config, '-w', weights, '-o', '2', '-C', '0.001', '-b', '500', '-k', '500', '-u', '-t']
+ self.decoder = util.popen_io(mira_cmd)