Skip to content

Commit 4766c3a

Browse files
dbrkndberkin1
andauthored
Add metric-keyword support for custom vocab (#97)
Co-authored-by: dberkin1 <berkin@argmax.com>
1 parent 18c7372 commit 4766c3a

2 files changed

Lines changed: 23 additions & 4 deletions

File tree

src/openbench/dataset/dataset_transcription.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class TranscriptionExtraInfo(TypedDict, total=False):
1313

1414
language: str
1515
dictionary: list[str]
16+
metric_keywords: list[str]
1617

1718

1819
class TranscriptionRow(TypedDict):
@@ -24,6 +25,7 @@ class TranscriptionRow(TypedDict):
2425
word_timestamps_end: NotRequired[list[float]]
2526
language: NotRequired[str]
2627
dictionary: NotRequired[list[str]]
28+
metric_keywords: NotRequired[list[str]]
2729

2830

2931
class TranscriptionSample(BaseSample[Transcript, TranscriptionExtraInfo]):
@@ -39,6 +41,11 @@ def dictionary(self) -> list[str] | None:
3941
"""Convenience property to access dictionary from extra_info."""
4042
return self.extra_info.get("dictionary")
4143

44+
@property
45+
def metric_keywords(self) -> list[str] | None:
46+
"""Convenience property to access metric keywords from extra_info."""
47+
return self.extra_info.get("metric_keywords")
48+
4249

4350
class TranscriptionDataset(BaseDataset[TranscriptionSample]):
4451
"""Dataset for transcription pipelines with optional keyword support."""
@@ -60,4 +67,7 @@ def prepare_sample(self, row: TranscriptionRow) -> tuple[Transcript, Transcripti
6067
extra_info["language"] = row["language"]
6168
if "dictionary" in row:
6269
extra_info["dictionary"] = row["dictionary"]
70+
metric_keywords = row.get("metric-keywords") or row.get("metric_keywords")
71+
if metric_keywords:
72+
extra_info["metric_keywords"] = metric_keywords
6373
return reference, extra_info

src/openbench/runner/benchmark.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@ def _process_single_sample(
125125

126126
for metric_name, metric in metrics_dict.items():
127127
reference = sample.reference
128-
kwargs = sample.extra_info
128+
kwargs = dict(sample.extra_info)
129+
130+
# Use metric_keywords for metric calculation if available, falling back to dictionary
131+
if "metric_keywords" in kwargs:
132+
kwargs["dictionary"] = kwargs.pop("metric_keywords")
129133

130134
# The metric returns a dictionary that is also stored in the metric object as a state to compute the global result
131135
# We copy to avoid any side effects that may happen while interacting with dictionary for reporting
@@ -254,10 +258,15 @@ def _run_pipeline_on_dataset_parallel(
254258
# Update metric with all results
255259
for sample_result in per_sample_results:
256260
sample = dataset[sample_result.sample_id]
257-
# Get UEM from extra_info if available
258261
kwargs = {}
259-
if hasattr(sample, "extra_info") and "uem" in sample.extra_info:
260-
kwargs["uem"] = sample.extra_info["uem"]
262+
if hasattr(sample, "extra_info"):
263+
if "uem" in sample.extra_info:
264+
kwargs["uem"] = sample.extra_info["uem"]
265+
# Use metric_keywords for metric calculation if available, falling back to dictionary
266+
if "metric_keywords" in sample.extra_info:
267+
kwargs["dictionary"] = sample.extra_info["metric_keywords"]
268+
elif "dictionary" in sample.extra_info:
269+
kwargs["dictionary"] = sample.extra_info["dictionary"]
261270

262271
metric(hypothesis=sample_result.prediction, reference=sample.reference, detailed=True, **kwargs)
263272

0 commit comments

Comments
 (0)