From 774702f245045ae3752e67b85906a7df4b333cf5 Mon Sep 17 00:00:00 2001 From: Chris Dyer Date: Sat, 16 Feb 2013 03:18:42 -0500 Subject: new metric --- mteval/Makefile.am | 2 ++ mteval/ns_ssk.cc | 32 ++++++++++++++++++++++++++++++++ mteval/ns_ssk.h | 22 ++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 mteval/ns_ssk.cc create mode 100644 mteval/ns_ssk.h diff --git a/mteval/Makefile.am b/mteval/Makefile.am index 83adee17..681e798e 100644 --- a/mteval/Makefile.am +++ b/mteval/Makefile.am @@ -19,6 +19,7 @@ libmteval_a_SOURCES = \ ns_comb.h \ ns_docscorer.h \ ns_ext.h \ + ns_ssk.h \ ns_ter.h \ scorer.h \ ter.h \ @@ -31,6 +32,7 @@ libmteval_a_SOURCES = \ ns_comb.cc \ ns_docscorer.cc \ ns_ext.cc \ + ns_ssk.cc \ ns_ter.cc \ scorer.cc \ ter.cc diff --git a/mteval/ns_ssk.cc b/mteval/ns_ssk.cc new file mode 100644 index 00000000..c94e62ca --- /dev/null +++ b/mteval/ns_ssk.cc @@ -0,0 +1,32 @@ +#include "ns_ssk.h" + +#include + +#include "kernel_string_subseq.h" +#include "tdict.h" + +static const unsigned kNUMFIELDS = 2; +static const unsigned kSIMILARITY = 0; +static const unsigned kCOUNT = 1; + +unsigned SSKMetric::SufficientStatisticsVectorSize() const { + return kNUMFIELDS; +} + +void SSKMetric::ComputeSufficientStatistics(const std::vector& hyp, + const std::vector >& refs, + SufficientStats* out) const { + out->fields.resize(kNUMFIELDS); + out->fields[kCOUNT] = 1; + float bestsim = 0; + for (unsigned i = 0; i < refs.size(); ++i) { + float s = ssk<4>(hyp, refs[i], 0.8); + if (s > bestsim) bestsim = s; + } + out->fields[kSIMILARITY] = bestsim; +} + +float SSKMetric::ComputeScore(const SufficientStats& stats) const { + return stats.fields[kSIMILARITY] / stats.fields[kCOUNT]; +} + diff --git a/mteval/ns_ssk.h b/mteval/ns_ssk.h new file mode 100644 index 00000000..0d418770 --- /dev/null +++ b/mteval/ns_ssk.h @@ -0,0 +1,22 @@ +#ifndef _NS_SSK_H_ +#define _NS_SSK_H_ + +#include "ns.h" + +class SSKMetric : public EvaluationMetric { + friend class EvaluationMetric; + private: + unsigned EditDistance(const std::string& hyp, + const std::string& ref) const; + protected: + SSKMetric() : EvaluationMetric("SSK") {} + + public: + virtual unsigned SufficientStatisticsVectorSize() const; + virtual void ComputeSufficientStatistics(const std::vector& hyp, + const std::vector >& refs, + SufficientStats* out) const; + virtual float ComputeScore(const SufficientStats& stats) const; +}; + +#endif -- cgit v1.2.3