Main Page

From Dyna

Jump to: navigation, search


Contents

Dyna

Dyna is a small, very-high-level programming language that makes it easy to specify dynamic programs and train their weights. You write a short declarative specification in Dyna, and the Dyna optimizing compiler produces efficient C++ classes that form the core of your C++ application.

Natural applications in NLP include various kinds of parsing, machine translation, speech decoding, and finite-state modeling. Dyna also has many other applications, especially in other applied AI areas, since dynamic programming (and its degenerate case, tree search) is a common strategy for solving combinatorial optimization problems.

Properly speaking, Dyna is a "weighted" logic programming language: terms have values, and Horn clauses are replaced by aggregation equations. It is Turing-complete. You can also think of Dyna as extending compiled C++ with powerful deductive database features.

Looking for something? Try the FAQ, the documentation page (which serves as a site map), or the search box to your left.

Download

You can download Dyna v0.3.10 as RPM or tarball. (This alpha release is useful, but note that we are currently redesigning and reimplementing from the ground up.) Dyna runs on Unix/Linux platforms and on Windows with Cygwin. See the detailed list of supported platforms on the download page. Please let us know of any problems. See also: version history.

Documentation

We have published some papers, if you prefer those to a wiki.

Our documentation on this site is designed so that you can read it in order. The Documentation page serves as a site map, with the following sections:

Dyna is currently in very active development; both the language definition and the implementation are changing. The documentation at this site is therefore unfinished. There may be residual problems with the prototype as a result of all the changes - please let us know.

Project status

We are currently in the middle of redesigning and reimplementing everything from the ground up. The currently released prototype (v0.3.10) has proven useful for our own work, and we learned a lot from building and using it. But the forthcoming version 2 is much more ambitious and will be the one to watch out for.

  • Functionality: The prototype supports many NLP applications. This subset permits forward-chaining computation on ground terms, using semiring weights; training is supported for real-valued weights. The forthcoming version 2 will be considerably more expressive and flexible, generalizing the prototype on all the above points and more.
  • Usefulness: We presented statistical NLP papers that did all their implementation in Dyna at ACL (2004, 2005, 2006), EMNLP (2004, 2005, 2006), and several other forums such as AMTA, CoNLL, IWPT, and specialized workshops. We have other such papers in the pipeline. We have also used it to teach.
  • Efficiency: The compiled code in the prototype is carefully designed C++ code and is adequately fast for research. The forthcoming version 2 is intended to be competitive with hand-tuned systems (e.g., we expect a 5x speedup on parsing). It allows optional declarations that provide considerably more control over implementation details, including search and caching strategies and the details of how data are stored, accessed, and indexed. (Our eventual plan is for an optimizer to select these strategies automatically, to maximize empirical performance on a given dataset and machine.) For further efficiency and convenience, version 2 also supports cleaner integration with user-defined C++ classes and methods.
  • Theoretical grounding: We have a formal semantics, an interesting type system (for version 2), a set of powerful source-to-source program transformations, etc. See Blatz & Eisner (2007) for partial details.

About the Dyna project

Dyna is an open-source project led by Prof. Jason Eisner, at Johns Hopkins University's Computer Science Department and Center for Language and Speech Processing.

  • Present and past contributors to the all-new version we've started to design:

See the Developers page if you are interested in internals and/or would like to participate!

We are grateful for funding from the following generous sponsors, who do not necessarily endorse or subscribe to the opinions, findings, conclusions, or recommendations expressed on this website:

  • NSF ITR grant IIS-0313193, "Weighted Dynamic Programming for Statistical Natural Language Processing"
  • ONR MURI grant N00014-01-1-0685, "Improving Statistical Translation Models via Text Analyzers Trained from Parallel Corpora"
  • Wolman Fellowships to Eric and Markus; a Hertz Foundation Fellowship to Noah; a Pistritto Fellowship to Mike; an NSF Fellowship to David; and an NSDEG Fellowship to Roy. (What an amazing group of students!)

We are also grateful to these local establishments.

How to acknowledge Dyna in your own work

How you can help

  1. Please send us your confused questions, bug reports, feature requests, and interesting examples.
  2. We are looking for a creative postdoc with strong background in machine learning, declarative languages, or parsing algorithms.
  3. Feel free to improve this website yourself. You can edit without permission; it uses the same software as Wikipedia.
Personal tools