Haas-ja-v1.0-mlx

English version below

้žๅ…ฌๅผใฎๅค‰ๆ›็‰ฉใงใ™ใ€‚ third-intelligence/Haas-ja-v1.0ใฎMLX็‰ˆใงใ™ใ€‚Third Intelligence, Inc.ใจใฏๆๆบใƒปๆ‰ฟ่ชใƒปๅพŒๆดใฎ้–ขไฟ‚ใซใ‚ใ‚Šใพใ›ใ‚“ใ€‚

้‡ใฟใฏๅ…ƒใฎbf16ใฎๅ€คใ‚’ไฟๆŒใ—ใ€่ปธใฎไธฆในๆ›ฟใˆใจๆŽจ่ซ–ใซไธ่ฆใชnum_batches_trackedใฎ้™คๅŽปใ ใ‘ใ‚’่กŒใ„ใพใ™ใ€‚Hugging FaceไธŠใฎๅˆ†้กžใฏquantizedใงใ™ใŒใ€้‡ๅญๅŒ–ใ—ใฆใ„ใพใ›ใ‚“ใ€‚

ๆฆ‚่ฆใƒป็’ฐๅขƒ

ๅ…ƒใƒขใƒ‡ใƒซใฏFastConformerใ‚จใƒณใ‚ณใƒผใƒ€ใจTDTใƒ‡ใ‚ณใƒผใƒ€๏ผˆไบˆๆธฌใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใฏKimi Delta Attention๏ผ‰ใงใ€ๅ…ฌๅผใฎๅฎŸ่กŒ็’ฐๅขƒใฏLinuxใจNVIDIA GPU๏ผˆNeMo 2.7๏ผ‰ใซ้™ใ‚‰ใ‚Œใพใ™ใ€‚

  • ใ“ใฎๅค‰ๆ›็‰ฉ: Apple SiliconใฎMacๅฐ‚็”จใ€‚NeMoใƒปCUDAใƒปTritonใฏไธ่ฆใ€‚ๆŽจ่ซ–ใ‚ณใƒผใƒ‰ใฏๅˆฅ้€”haas-ja-localใ‚’ไฝฟ็”จใ€‚
  • Python 3.12๏ผˆ>=3.12,<3.13๏ผ‰ใ€‚ๅฎŸ่กŒๆ™‚ไพๅญ˜ใฏmlxใƒปnumpyใƒปsentencepieceใƒปsoundfileใƒปsoxrใ€‚torchไธ่ฆใ€‚้‡ใฟ็”จใซ็ด„1.2GBๅฟ…่ฆใ€‚
  • ๆคœ่จผๆฉŸใฏApple M5 Max๏ผˆ128GB๏ผ‰ใ€macOS 27.2ใ€mlx 0.32.4ใฎ1ๅฐใฎใฟใ€‚

ไฝฟใ„ๆ–น

hfใฏhuggingface_hubใซไป˜ๅฑž๏ผˆๅฟ…่ฆใชใ‚‰pip install huggingface_hub๏ผ‰ใ€‚

pip install "haas-ja-local[mlx] @ git+https://github.com/basyauma-tech/haas-ja-local"
hf download basyauma-tech/Haas-ja-v1.0-mlx --local-dir Haas-ja-v1.0-mlx

Python:

from haas_ja_local import load_audio, load_model, transcribe

backend, tokenizer = load_model("Haas-ja-v1.0-mlx")
result = transcribe(backend, tokenizer, load_audio("audio.wav"))
print(result.text)

CLI:

haas-ja-local transcribe Haas-ja-v1.0-mlx audio.wav
  • ๅ…ฅๅŠ›: soundfileๅฏพๅฟœๅฝขๅผ๏ผˆWAVใƒปFLACใชใฉ๏ผ‰ใ€‚่ค‡ๆ•ฐใƒใƒฃใƒณใƒใƒซใฏๅนณๅ‡ใ—ใฆใƒขใƒŽใƒฉใƒซๅŒ–ใ—ใ€soxrใง16kHzใซๅค‰ๆ›ใ€‚
  • ้•ทๆ™‚้–“้Ÿณๅฃฐ: 30็ง’่ถ…ใ‚’้€ๆฌกๅˆ†ๅ‰ฒใ€‚ๅ„ๆ–ญ็‰‡ใฎๅ…ˆ้ ญใ‹ใ‚‰30็ง’ยฑ2็ง’ๅ†…ใงใ€ๆœ€ใ‚‚้™ใ‹ใช0.1็ง’็ช“ใฎไธญๅฟƒใ‚’ๅˆ‡ๆ–ญ็‚นใจใ—ใ€่ช่ญ˜็ตๆžœใ‚’้€ฃ็ตใ€‚
  • Metalใ‚ญใƒฃใƒƒใ‚ทใƒฅ: ๆ—ขๅฎš1GiBใ€‚HaasMLX.loadใฎcache_limit_bytesใงๅค‰ๆ›ด๏ผˆNoneใฏ่จญๅฎšใ—ใชใ„๏ผ‰ใ€‚
  • ๆ™‚ๅˆป: --json --timestampsใง1ใƒ•ใ‚กใ‚คใƒซ1่กŒใฎJSONใ€‚ใƒˆใƒผใ‚ฏใƒณใ”ใจใฎ้–‹ๅง‹ใƒป็ต‚ไบ†็ง’ใ‚’80msๅˆปใฟใงๅ‡บๅŠ›ใ€‚่ค‡ๆ•ฐใƒใ‚คใƒˆใƒˆใƒผใ‚ฏใƒณใฎๆ–‡ๅญ—ใฏ1ไปถใซ็ตฑๅˆใ€‚
haas-ja-local transcribe Haas-ja-v1.0-mlx audio.wav --json --timestamps
{"file": "audio.wav", "text": "ไปŠๆ—ฅใฏ่‰ฏใ„ๅคฉๆฐ—ใงใ™ใญใ€‚", "tokens": [{"text": "ไปŠ", "start": 0.0, "end": 0.32}, {"text": "ๆ—ฅใฏ", "start": 0.32, "end": 0.64}, {"text": "่‰ฏ", "start": 0.64, "end": 0.88}, {"text": "ใ„", "start": 0.88, "end": 1.04}, {"text": "ๅคฉ", "start": 1.04, "end": 1.28}, {"text": "ๆฐ—", "start": 1.28, "end": 1.6}, {"text": "ใงใ™ใญ", "start": 1.6, "end": 1.84}, {"text": "ใ€‚", "start": 1.84, "end": 2.0}]}

็ฒพๅบฆ

asr-ja-bench v1.1ใ€jacer v1.2.0ใงๆธฌๅฎšใ€‚ๅ˜ไฝใฏ%ใ€‚

ใ‚ตใƒ–ใ‚ปใƒƒใƒˆ ็™บ่ฉฑๆ•ฐ ้Ÿณๅฃฐ๏ผˆๆ™‚้–“๏ผ‰ ๆŒ‡ๆจ™ ใ“ใฎๅค‰ๆ› ๅ…ฌ่กจๅ€ค ๅทฎ๏ผˆใƒใ‚คใƒณใƒˆ๏ผ‰
FLEURS 650 2.36 CER strict 3.65 3.65ใ€œ3.67 0.00
FLEURS 650 2.36 CER flex 2.98 ๆœช็…งๅˆ -
FLEURS 650 2.36 CER kana 2.33 ๆœช็…งๅˆ -
JVNV 1,375 3.33 CER strict 4.51 4.50ใ€œ4.53 0.00
JVNV 1,375 3.33 CER flex 3.06 ๆœช็…งๅˆ -
JVNV 1,375 3.33 CER kana 2.25 ๆœช็…งๅˆ -

ๆธฌๅฎšๆกไปถ:

  • rebuild.pyใง่ฉ•ไพกใƒ‡ใƒผใ‚ฟใ‚’ๅ†ๆง‹็ฏ‰ใ—ใ€ๅ…จๆ›ธใ่ตทใ“ใ—ใฎใƒใƒƒใ‚ทใƒฅ็…งๅˆใซๅˆๆ ผใ€‚JVNVใฎ16kHzๅŒ–ใฏๆƒณๅฎšใฎffmpeg 7.1ใงใฏใชใ9.0.2ใฎใŸใ‚ใ€ๅ…ฌๅผ้Ÿณๅฃฐใจๅพฎๅทฎใฎๅฏ่ƒฝๆ€งใ‚ใ‚Šใ€‚
  • 1็™บ่ฉฑใšใค่ช่ญ˜ๅพŒใ€ใ‚ตใƒ–ใ‚ปใƒƒใƒˆๅ…จไฝ“ใงjacer.cerใ‚’1ๅ›ž่จˆ็ฎ—๏ผˆใƒžใ‚คใ‚ฏใƒญๅนณๅ‡๏ผ‰ใ€‚3ๆŒ‡ๆจ™ใจใ‚‚ๅฅ่ชญ็‚นใƒป็ฉบ็™ฝใ‚’้™คๅค–ใ€‚ๅ…จ็™บ่ฉฑ30็ง’ไปฅไธ‹ใงๅˆ†ๅ‰ฒใชใ—ใ€‚
  • ไธŠ่จ˜M5 Maxใ€Metalใ€ใƒใƒƒใƒ1ใ€‚ใ‚จใƒณใ‚ณใƒผใƒ€bf16ใ€ไบˆๆธฌใƒป็ตๅˆใƒใƒƒใƒˆใƒฏใƒผใ‚ฏfloat32ใ€‚
  • ๅ…ฌ่กจๅ€คใฏๅ…ฌๅผasr-ja-bench v1.1๏ผˆNeMoใƒปbf16ใƒปH200๏ผ‰ใ€‚ใƒขใƒ‡ใƒซใ‚ซใƒผใƒ‰ใจๅ…ฌ้–‹่จ˜ไบ‹ใฎๅฐๆ•ฐ็ฌฌ2ไฝใฎๅทฎใ‚’ๅน…ใง่กจ็คบใ€‚ๅทฎใฏ่ฟ‘ใ„็ซฏใจใฎๅทฎใ€็ฏ„ๅ›ฒๅ†…ใฏ0ใ€‚flexใƒปkanaใฏๆœช็…งๅˆใ€‚
  • ็ฒพๅบฆ่ชฟๆ•ดใชใ—ใฎๅˆๅ›žๅฎŸ่กŒใ€‚

ๆœชๆธฌๅฎš: JSUT basic5000ใƒปTEDxJP-10KใƒปSpeechBSD๏ผˆ5ใ‚ตใƒ–ใ‚ปใƒƒใƒˆใฎ้‡ใฟไป˜ใCERใชใ—๏ผ‰ใ€Intel Macใ€ใƒกใƒขใƒช16GBไปฅไธ‹ใ€ใƒใƒƒใƒ2ไปฅไธŠใ€ๅŒไธ€่ฉฑ่€…ใŒ่ฉฑใ—็ถšใ‘ใ‚‹ๅฎŸ้š›ใฎ้•ทๆ™‚้–“้Œฒ้Ÿณใ€‚

่ฉณ็ดฐใƒปๅ†็พๆ‰‹้ †: ็ฒพๅบฆใจ้€Ÿๅบฆใ€ๆ•ฐๅ€คไธ€่‡ดใ€‚

MLX็‰ˆ๏ผˆbf16๏ผ‰ใจPyTorchๅ‚็…งๅฎŸ่ฃ…๏ผˆfloat32๏ผ‰ใฎๆฏ”่ผƒใงใฏใ€FLEURS650็™บ่ฉฑไธญ632็™บ่ฉฑ๏ผˆ97.2%๏ผ‰ใงใƒˆใƒผใ‚ฏใƒณๅˆ—ใจๆœฌๆ–‡ใŒไธ€่‡ดใ—ใ€็•ฐใชใ‚‹18็™บ่ฉฑใฎใ†ใก12็™บ่ฉฑใฏๅฅ่ชญ็‚นใ ใ‘ใฎ้•ใ„ใงใ—ใŸใ€‚

ๅฎŸ่ฃ…ใฎ็ขบ่ช

PyTorchๅ‚็…งๅฎŸ่ฃ…ใฏใ€ๅŒใ˜ใƒใ‚งใƒƒใ‚ฏใƒใ‚คใƒณใƒˆใ‹ใ‚‰็ฌฌไธ‰่€…ใŒๆ›ธใๅ‡บใ—ใŸfloat32ใฎONNXใจFLEURSใฎ6็™บ่ฉฑใงๆฏ”่ผƒใ—ใ€ๆœ€ๅคง่ชคๅทฎใฏlog-mel 9.54e-07ใ€ใ‚จใƒณใ‚ณใƒผใƒ€ๅ‡บๅŠ›๏ผˆ็›ธๅฏพ๏ผ‰4.36e-06ใ€็ตๅˆใƒใƒƒใƒˆใƒฏใƒผใ‚ฏๅ‡บๅŠ›๏ผˆ็›ธๅฏพ๏ผ‰1.16e-06ใ€ใƒˆใƒผใ‚ฏใƒณๅˆ—ใฏ6็™บ่ฉฑใ™ในใฆไธ€่‡ดใงใ—ใŸใ€‚

้€Ÿๅบฆใจใƒกใƒขใƒช

FLEURSๅ…จ650็™บ่ฉฑใ‹ใ‚‰ๅ…ˆ้ ญ3็™บ่ฉฑใฎใ‚ฆใ‚ฉใƒผใƒ ใ‚ขใƒƒใƒ—ใ‚’้™คๅค–ใ—ใŸ647็™บ่ฉฑใ€2.35ๆ™‚้–“ใ€‚ไธŠ่จ˜็’ฐๅขƒใƒป่จˆ็ฎ—ๅž‹ใ€ใƒใƒƒใƒ1ใง้€ๆฌก่ช่ญ˜ใ€‚้Ÿณๅฃฐ่ชญใฟ่พผใฟใ‚’้™คใ่ช่ญ˜ๆ™‚้–“ใ€‚GB๏ผ10^9ใƒใ‚คใƒˆใ€‚

้ …็›ฎ ๆ—ขๅฎš๏ผˆใ‚ญใƒฃใƒƒใ‚ทใƒฅไธŠ้™1GiB๏ผ‰ ไธŠ้™ใชใ—๏ผˆๅ‚่€ƒใ€ๆณจ๏ผ‰
RTFx๏ผˆ1็™บ่ฉฑใ”ใจใฎไธญๅคฎๅ€ค๏ผ‰ 254.2 250.9
RTFx๏ผˆๅˆ่จˆ้Ÿณๅฃฐรทๅˆ่จˆๅ‡ฆ็†ๆ™‚้–“๏ผ‰ 256.1 255.9
ใƒ”ใƒผใ‚ฏRSS 1.57GB 2.68GB
mlxใฎใƒ”ใƒผใ‚ฏๅ‰ฒใ‚Šๅฝ“ใฆ๏ผˆmx.get_peak_memory()๏ผ‰ 1.76GB 1.82GB
macOSใฎใƒ”ใƒผใ‚ฏใƒกใƒขใƒชใƒ•ใƒƒใƒˆใƒ—ใƒชใƒณใƒˆ 3.19GB 14.40GB
  • ไธŠ้™ใชใ—ใฎใƒ•ใƒƒใƒˆใƒ—ใƒชใƒณใƒˆใฎใฟๅŒๆกไปถใฎๅ†ๅฎŸ่กŒๅ€คใ€‚ไป–ใฏๅˆๅ›žใ€‚
  • ไธŠ้™ใชใ—: 1็™บ่ฉฑใฎไธญๅคฎๅ€ค0.050็ง’ใ€ใƒขใƒ‡ใƒซ่ชญใฟ่พผใฟ0.15็ง’๏ผˆOSใ‚ญใƒฃใƒƒใ‚ทใƒฅๆธˆใฟ๏ผ‰ใ€‚
  • CLIใง33.8ๅˆ†๏ผˆ2,026.5็ง’๏ผ‰ใ‚’68ๅˆ†ๅ‰ฒ: ่ตทๅ‹•ใƒปใƒขใƒ‡ใƒซ่ชญใฟ่พผใฟ่พผใฟ6.97็ง’ใ€ๆœ€ๅคงRSS 1.74GBใ€ใƒ”ใƒผใ‚ฏใƒ•ใƒƒใƒˆใƒ—ใƒชใƒณใƒˆ3.48GBใ€‚
  • ๅ…ƒใƒขใƒ‡ใƒซใฎๅ…ฌ่กจRTFxใฏNVIDIA H200ใƒปใƒใƒƒใƒ512ใฎใŸใ‚ๆฏ”่ผƒไธๅฏใ€‚
  • ๅŒใ˜33.8ๅˆ†้ŸณๅฃฐใงไธŠ้™ใชใ—ใงใฏใƒ•ใƒƒใƒˆใƒ—ใƒชใƒณใƒˆ13.96GBใ€‚ๅฎŸไฝฟ็”จใฏ1.25GBใงไธ€ๅฎšใ€‚่งฃๆ”พๆธˆใฟMetalใƒใƒƒใƒ•ใ‚กใฎไฟๆŒใงใ‚ใ‚Šใƒชใƒผใ‚ฏใงใฏใชใใ€ๆ—ขๅฎšใฎไธŠ้™ใฏใ“ใฎๅข—ๅŠ ใ‚’ๆŠ‘ใˆใ‚‹ใŸใ‚ใ€‚

ๅค‰ๆ›ๆ–นๆณ•

pip install "haas-ja-local[convert] @ git+https://github.com/basyauma-tech/haas-ja-local"
hf download third-intelligence/Haas-ja-v1.0 Haas-ja-v1.0.nemo --revision 660728d39019e5e065046154beca44ac9a66a540 --local-dir upstream
haas-ja-local convert-mlx --nemo upstream/Haas-ja-v1.0.nemo --out Haas-ja-v1.0-mlx
้ …็›ฎ ๅ€ค
ๅค‰ๆ›ๅ…ƒ third-intelligence/Haas-ja-v1.0ใฎHaas-ja-v1.0.nemo
ใƒชใƒ“ใ‚ธใƒงใƒณ 660728d39019e5e065046154beca44ac9a66a540๏ผˆ2026-11-08ๅ–ๅพ—๏ผ‰
SHA-256 c6ed38698300a371a86eadab4b56d5458f47623f7fc4a5f1e938b5adbe8458aa
ใ‚ตใ‚คใ‚บ 1,232,384,000ใƒใ‚คใƒˆ
ๅค‰ๆ›ใƒ„ใƒผใƒซ haas-ja-local 0.1.0๏ผˆmodel.safetensorsใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใซ่จ˜้Œฒ๏ผ‰
  • bf16ใฎๅ€คใƒปๅž‹ใฏไธๅค‰ใ€‚็•ณใฟ่พผใฟใฎใฟMLXใฎใƒใƒฃใƒณใƒใƒซๆœซๅฐพ้…็ฝฎใธๅค‰ๆ›ด: 2ๆฌกๅ…ƒ[O,I,H,W]โ†’[O,H,W,I]ใ€1ๆฌกๅ…ƒ๏ผˆๆทฑใ•ๆ–นๅ‘ใ‚’ๅซใ‚€๏ผ‰[O,I,K]โ†’[O,K,I]ใ€‚
  • ๅ†ๅค‰ๆ›ใฎใƒ†ใƒณใ‚ฝใƒซๅ€คใฏใƒ“ใƒƒใƒˆไธ€่‡ดใ€‚safetensorsใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚ญใƒผ้ †ใฏไธๅฎšใฎใŸใ‚ใ€ใƒ•ใ‚กใ‚คใƒซๅ…จไฝ“ใฎSHA-256ใฏไธ€่‡ดใ—ใชใ„ๅ ดๅˆใ‚ใ‚Šใ€‚

ใƒ•ใ‚กใ‚คใƒซไธ€่ฆง

ใƒ•ใ‚กใ‚คใƒซ ๅ†…ๅฎน
model.safetensors bf16ใ€1,231,827,296ใƒใ‚คใƒˆใ€SHA-256: 96600ed4ca8a4d9d45e6ed6bfd276ab9109da3f1c9e20e2bb0870e6f894fe5e4
config.json ใƒขใƒ‡ใƒซ่จญๅฎš
tokenizer.model SentencePiece BPEใ€3,072ใƒˆใƒผใ‚ฏใƒณ
LICENSE ใƒฉใ‚คใ‚ปใƒณใ‚น
NOTICE ๅธฐๅฑžๆƒ…ๅ ฑ

ๅˆถ้™ไบ‹้ …

  • ๅ…ƒใƒขใƒ‡ใƒซๅŒๆง˜ใ€ใƒ•ใ‚ฃใƒฉใƒผ๏ผˆใ€Œใˆใƒผใ€ใ€Œใ‚ใฎใ€๏ผ‰ใŒๆŠœใ‘ใ‚„ใ™ใใ€ๆผขๅญ—ใƒปใ‹ใชใƒปๆ•ฐๅญ—ใฎ่กจ่จ˜ๆŒ‡ๅฎšใฏไธๅฏใ€‚
  • ็„ก้Ÿณใƒป้›‘้Ÿณใง็Ÿญ่ชžใ‚’ๅ‡บใ™ๅฏ่ƒฝๆ€งใ‚ใ‚Šใ€‚10็ง’ใฎ็„ก้Ÿณใƒปๅผฑใ„ใƒ›ใƒฏใ‚คใƒˆใƒŽใ‚คใ‚บใฎๅˆๆˆ้Ÿณๅฃฐ4็จฎใงใฏๅ‡บๅŠ›ใชใ—ใ€‚ๅฎŸ้Œฒ้Ÿณใฏๆœช็ขบ่ชใ€‚
  • 30็ง’่ถ…ใฎๅˆ†ๅ‰ฒใงCERใŒๆ‚ชๅŒ–ใ€‚FLEURS 150็™บ่ฉฑใ‚’้€ฃ็ตใ—ใŸ33.8ๅˆ†้ŸณๅฃฐใฎCER strictใฏใ€็™บ่ฉฑๅˆฅ4.10%ใ€็ด„30็ง’ๅˆ†ๅ‰ฒ6.44%ใ€PyTorch๏ผˆfloat32๏ผ‰6.39%ใ€‚MLXใฎๆ•ฐๅ€ค่ชคๅทฎใงใฏใชใใ€ใƒขใƒ‡ใƒซใจๅ…ฌๅผtranscribe_longformใซๆฒฟใฃใŸๅˆ†ๅ‰ฒ่ฆๅ‰‡ใซใ‚ˆใ‚‹ใ€‚
  • ๆ‚ชๅŒ–ใฎ็ด„1ใƒใ‚คใƒณใƒˆใฏ็•ฐ่ฉฑ่€…ใฎ้€ฃ็ต๏ผˆ็™บ่ฉฑใ‚’ๅˆ‡ใ‚‰ใš30็ง’ไปฅๅ†…ใซใพใจใ‚ใฆใ‚‚5.08%๏ผ‰ใ€‚ๅŒไธ€่ฉฑ่€…ใฎๅฎŸ้Œฒ้Ÿณใงใฏๅฐใ•ใ„ๅฏ่ƒฝๆ€งใ‚ใ‚Šใ€‚ๆฎ‹ใ‚Š็ด„1.4ใƒใ‚คใƒณใƒˆใฏ็™บ่ฉฑ้€”ไธญใฎๅˆ‡ๆ–ญ๏ผˆ67ๅขƒ็•Œไธญ50๏ผ‰ใ€‚
  • ใƒใƒƒใƒ1ใฎใฟใ€‚ใ‚นใƒˆใƒชใƒผใƒŸใƒณใ‚ฐใƒป่ฉฑ่€…ใƒฉใƒ™ใƒซใƒปๅ…ฌๅผHaas-ASRใฎใ‚ซใ‚นใ‚ฟใƒ ่ชžๅฝ™ใฏๆœชๅฏพๅฟœใ€‚
  • ๆ™‚ๅˆปใฏ80msๅˆปใฟใฎใƒˆใƒผใ‚ฏใƒณๅ˜ไฝใ€‚ๅ˜่ชžๅ˜ไฝใงใฏใชใ„ใ€‚

ใƒฉใ‚คใ‚ปใƒณใ‚นใจๅธฐๅฑž

  • ้‡ใฟใƒปๆŽจ่ซ–ใ‚ณใƒผใƒ‰: Apache-2.0ใ€‚ๅ…ƒ้‡ใฟใฏthird-intelligence/Haas-ja-v1.0๏ผˆCopyright Third Intelligence, Inc.๏ผ‰ใ€‚ๅธฐๅฑžใฏNOTICEใ€‚ใ€ŒHaasใ€ใฏๅค‰ๆ›ๅ…ƒใ‚’็คบใ™ๅ็งฐใ€‚
  • ๅ‚่€ƒๅฎŸ่ฃ…: NVIDIA NeMoใ€third-intelligence/Haas-ASR๏ผˆๅ…ฌๅผๆŽจ่ซ–ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธ๏ผ‰ใ€matsuurajun/haas-mlxใ€Sanami/haas-ja-onnxใฏApache-2.0ใ€‚flash-linear-attentionใฏMITใ€‚
  • Sanamiใฎfloat32 ONNXใฏๆ•ฐๅ€คๆฏ”่ผƒใฎใฟใงใ€้‡ใฟใฏๅ†้…ๅธƒใ—ใชใ„ใ€‚้…ๅธƒ้‡ใฟใฏใ™ในใฆๅ…ƒใฎ.nemoใฎ้žๅ…ฌๅผใฎๅค‰ๆ›็‰ฉใ€‚
  • ่ฉ•ไพกใƒ‡ใƒผใ‚ฟ: FLEURSใฏCC BY 4.0ใ€JVNVใฏCC BY-SA 4.0ใ€‚ๅŒๆขฑใƒปๅ†้…ๅธƒใ—ใชใ„ใ€‚

English

This is an unofficial conversion of third-intelligence/Haas-ja-v1.0 to MLX. It is not affiliated with, endorsed by, or sponsored by Third Intelligence, Inc.

Original bf16 values are preserved; only tensor axes are rearranged and unused num_batches_tracked values removed. Hugging Face classifies it as quantized, but no quantization is applied.

Overview and requirements

The original model uses a FastConformer encoder and a TDT decoder (Kimi Delta Attention prediction network); the official runtime is limited to Linux with NVIDIA GPUs (NeMo 2.7).

  • This conversion: Apple Silicon Macs only; no NeMo, CUDA or Triton. Inference code is separate: haas-ja-local.
  • Python 3.12 (>=3.12,<3.13); mlx, numpy, sentencepiece, soundfile, soxr. No torch needed. Allow about 1.2 GB for weights.
  • Tested on one Apple M5 Max (128 GB), macOS 27.2, mlx 0.32.4.

Usage

hf comes with huggingface_hub (pip install huggingface_hub if needed).

pip install "haas-ja-local[mlx] @ git+https://github.com/basyauma-tech/haas-ja-local"
hf download basyauma-tech/Haas-ja-v1.0-mlx --local-dir Haas-ja-v1.0-mlx
haas-ja-local transcribe Haas-ja-v1.0-mlx audio.wav
haas-ja-local transcribe Haas-ja-v1.0-mlx audio.wav --json --timestamps
from haas_ja_local import load_audio, load_model, transcribe

backend, tokenizer = load_model("Haas-ja-v1.0-mlx")
print(transcribe(backend, tokenizer, load_audio("audio.wav")).text)
  • Input: soundfile formats (WAV, FLAC, etc.). Channels are averaged to mono; soxr resamples to 16 kHz.
  • Long audio: split sequentially above 30 seconds. Each cut is the centre of the quietest 0.1-second window within 30 ยฑ 2 seconds of the piece's start. Results are joined.
  • Metal cache: 1 GiB default; change cache_limit_bytes in HaasMLX.load (None leaves it unchanged).
  • Times: --json --timestamps emits one JSON line per file, with token start/end seconds in 80 ms steps. Multiple byte tokens for one character are merged.

Accuracy

asr-ja-bench v1.1, jacer v1.2.0; values in %.

Subset Utterances Audio (hours) Metric This conversion Published Difference (points)
FLEURS 650 2.36 CER strict 3.65 3.65โ€“3.67 0.00
FLEURS 650 2.36 CER flex 2.98 not compared -
FLEURS 650 2.36 CER kana 2.33 not compared -
JVNV 1,375 3.33 CER strict 4.51 4.50โ€“4.53 0.00
JVNV 1,375 3.33 CER flex 3.06 not compared -
JVNV 1,375 3.33 CER kana 2.25 not compared -

Conditions:

  • Data rebuilt with rebuild.py; all transcript hashes passed. JVNV resampling to 16 kHz used ffmpeg 9.0.2 instead of the expected 7.1, so audio may differ slightly.
  • Utterances transcribed individually; one jacer.cer call per subset (micro-average). All three metrics ignore punctuation/spaces. All utterances โ‰ค30 seconds; no splitting.
  • M5 Max setup above, Metal, batch 1; bf16 encoder, float32 prediction/joint networks.
  • Published: official asr-ja-bench v1.1 (NeMo, bf16, H200). Model-card/blog differences in the second decimal place form the range. Differences use the nearer endpoint, or 0 within the range. flex/kana not compared.
  • First run; no accuracy tuning.

Not measured: JSUT basic5000, TEDxJP-10K, SpeechBSD (no weighted CER across all five subsets); Intel Macs; โ‰ค16 GB machines; batch sizes โ‰ฅ2; real long recordings of one continuous speaker.

Details/reproduction (Japanese): accuracy and speed, numerical agreement.

MLX (bf16) and the PyTorch reference (float32) matched in both token sequences and text on 632 of 650 FLEURS utterances (97.2%); 12 of the 18 differing utterances differed only in punctuation.

Implementation verification

The PyTorch reference was compared on 6 FLEURS utterances against third-party float32 ONNX exported from the same checkpoint: maximum errors were 9.54e-07 for log-mel, 4.36e-06 for encoder output (relative), and 1.16e-06 for joint network output (relative); token sequences matched on all 6 utterances.

Speed and memory

647 of 650 FLEURS utterances, 2.35 hours, excluding three warm-ups. Same setup/precision as above, batch 1, sequential. Transcription time excludes audio reading. GB = 10^9 bytes.

Item Default (1 GiB cache cap) No cap (reference, see note)
RTFx (median per utterance) 254.2 250.9
RTFx (total audio / total processing time) 256.1 255.9
Peak RSS 1.57 GB 2.68 GB
mlx peak allocation (mx.get_peak_memory()) 1.76 GB 1.82 GB
macOS peak memory footprint 3.19 GB 14.40 GB
  • Only the uncapped footprint is from a same-condition rerun; other values are from the first run.
  • Uncapped: median 0.050 seconds/utterance; loading 0.15 seconds with files in the OS cache.
  • CLI, 33.8 minutes (2,026.5 seconds), 68 pieces: 6.97 seconds including startup/loading; maximum RSS 1.74 GB, peak footprint 3.48 GB.
  • Published RTFx uses NVIDIA H200, batch 512; not comparable.
  • Uncapped on the same 33.8-minute file: footprint 13.96 GB, active memory constant at 1.25 GB. Retained freed Metal buffers, not a leak; the default cap limits this growth.

Conversion

pip install "haas-ja-local[convert] @ git+https://github.com/basyauma-tech/haas-ja-local"
hf download third-intelligence/Haas-ja-v1.0 Haas-ja-v1.0.nemo --revision 660728d39019e5e065046154beca44ac9a66a540 --local-dir upstream
haas-ja-local convert-mlx --nemo upstream/Haas-ja-v1.0.nemo --out Haas-ja-v1.0-mlx
Item Value
Source Haas-ja-v1.0.nemo from third-intelligence/Haas-ja-v1.0
Revision 660728d39019e5e065046154beca44ac9a66a540 (downloaded 2026-11-08)
SHA-256 c6ed38698300a371a86eadab4b56d5458f47623f7fc4a5f1e938b5adbe8458aa
Size 1,232,384,000 bytes
Converter haas-ja-local 0.1.0 (recorded in the model.safetensors metadata)
  • bf16 values/types unchanged. Only convolution axes move to channels-last: 2-D [O,I,H,W]โ†’[O,H,W,I]; 1-D, including depthwise, [O,I,K]โ†’[O,K,I].
  • Repeated conversion gives bit-identical tensors. File SHA-256 may differ because safetensors metadata-key order is not fixed.

Files

File Contents
model.safetensors bf16; 1,231,827,296 bytes; SHA-256: 96600ed4ca8a4d9d45e6ed6bfd276ab9109da3f1c9e20e2bb0870e6f894fe5e4
config.json Model configuration
tokenizer.model SentencePiece BPE, 3,072 tokens
LICENSE License
NOTICE Attribution

Limitations

  • As with the original model, fillers ("ใˆใƒผ", "ใ‚ใฎ") may be omitted; kanji/kana/numeral style cannot be selected.
  • Silence/noise may produce short words. Four synthetic 10-second silence/weak-white-noise inputs produced none; real recordings untested.
  • Splitting above 30 seconds raises CER. For 150 FLEURS utterances joined into 33.8 minutes, CER strict: 4.10% individually, 6.44% with ~30-second splits, 6.39% in PyTorch (float32). This reflects the model and splitting rule following official transcribe_longform, rather than MLX numerics.
  • About 1 point comes from joining different speakers (5.08% even when grouping intact utterances into โ‰ค30 seconds); this may be smaller with one continuous speaker. About 1.4 points come from mid-utterance cuts (50 of 67 boundaries).
  • Batch 1 only. No streaming, speaker labels or official Haas-ASR custom vocabulary.
  • Token timestamps in 80 ms steps, not word timestamps.

License and attribution

Downloads last month
-
Safetensors
Model size
0.6B params
Tensor type
BF16
ยท
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for basyauma-tech/Haas-ja-v1.0-mlx

Quantized
(11)
this model