Views
No views yet
pip install torch transformers datasets tqdm sacrebleu1import torch, json
2from tqdm import tqdm
3from transformers import AutoModel
4from datasets import load_dataset
5from sacrebleu.metrics import BLEU
6
7# --- 配置与加载 ---
8device = "cuda" if torch.cuda.is_available() else "cpu"
9m_path, d_name, cfg = "yxdu/smt-9b-hf", "yxdu/multi30k_tts_test", "test_2016_flickr"
10model = AutoModel.from_pretrained(m_path, trust_remote_code=True).to(device, torch.bfloat16).eval()
11ds = load_dataset(d_name, split=cfg)
12bleu = BLEU(tokenize="13a")
13batch_size = 64
14res_map, all_data = {}, []
15
16# --- 推理 ---
17with torch.inference_mode():
18 for i in tqdm(range(0, len(ds), batch_size), desc="Inference"):
19 b = ds[i : i + batch_size]
20 # 拼接 ASR 和 Prompt
21 prompts = [a + p for a, p in zip(b["asr"], b["prompt"])]
22 # 批量翻译
23 outs = model.translate_batch(b["audio"], prompts, max_new_tokens=200)
24 tqdm.write(f"\n[Batch {i//batch_size+1} | Sample 0]\nInput: {prompts[0]}\nOutput: {outs[0]}\n" + "-"*30)
25
26 for j, out in enumerate(outs):
27 # 记录数据
28 item = {k: b[k][j] for k in ["id", "asr", "s2tt", "prompt", "source"]}
29 item["response"] = out
30 all_data.append(item)
31 # 按语种对分类用于计算 BLEU
32 p = item["prompt"]
33 pair = (p[2:5], p[9:12])
34 res_map.setdefault(pair, [[], []])
35 res_map[pair][0].append(out)
36 res_map[pair][1].append(item["s2tt"])
37
38# --- 保存与评估 ---
39with open("results.jsonl", "w", encoding="utf-8") as f:
40 for d in all_data: f.write(json.dumps(d, ensure_ascii=False) + "\n")
41
42print(f"\n{'Pair':<12} | {'BLEU':<6} | {'Count'}\n" + "-"*30)
43for (s, t), (hyps, refs) in res_map.items():
44 score = bleu.corpus_score(hyps, [refs]).score
45 print(f"{s}->{t:<7} | {score:<6.2f} | {len(hyps)}")@misc{du2026scalablemultilingualmultimodalmachine,
title={Scalable Multilingual Multimodal Machine Translation with Speech-Text Fusion},
author={Yexing Du and Youcheng Pan and Zekun Wang and Zheng Chu and Yichong Huang and Kaiyuan Liu and Bo Yang and Yang Xiang and Ming Liu and Bing Qin},
year={2026},
eprint={2602.21646},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2602.21646},
}