Omnilingual ASR

Hệ thống nhận dạng giọng nói mã nguồn mở hỗ trợ hơn 1.600 ngôn ngữ với khả năng học zero-shot tiên tiến.

Giới thiệu

Omnilingual ASR là dự án nghiên cứu đột phá từ Meta AI (FAIR) nhằm giải quyết vấn đề rào cản ngôn ngữ trong công nghệ nhận dạng giọng nói (ASR). Trong khi các hệ thống hiện tại chỉ hỗ trợ khoảng 100 ngôn ngữ phổ biến, Omnilingual ASR mở rộng khả năng hỗ trợ lên tới hơn 1.600 ngôn ngữ, bao gồm hàng trăm ngôn ngữ chưa từng được công nghệ ASR tiếp cận. Dự án này ứng dụng thực tế trong việc bảo tồn ngôn ngữ hiếm, phát triển trợ lý ảo đa ngữ, và cung cấp công cụ chuyển đổi giọng nói thành văn bản cho các cộng đồng yếu thế (low-resource languages).

Tính năng chính

  • Hỗ trợ hơn 1.600 ngôn ngữ: Bao phủ rộng khắp các hệ ngôn ngữ trên thế giới, vượt trội so với các mô hình trước đây (như Whisper hay MMS).
  • Zero-Shot Learning: Khả năng nhận dạng ngôn ngữ mới chưa từng được huấn luyện chỉ bằng cách cung cấp một vài ví dụ mẫu (audio-text pairs) trong ngữ cảnh (in-context learning).
  • Đa dạng kiến trúc mô hình: Cung cấp nhiều biến thể từ mô hình CTC truyền thống đến các mô hình LLM-ASR (dựa trên Large Language Models) với kích thước từ 300M đến 7B tham số.
  • Mã nguồn mở hoàn toàn: Phát hành theo giấy phép Apache 2.0, cho phép cộng đồng tự do sử dụng, nghiên cứu và thương mại hóa.
  • Tích hợp Hugging Face: Dễ dàng truy cập dataset và mô hình thông qua hệ sinh thái Hugging Face.

Hướng dẫn cài đặt Local (macOS)

Để chạy dự án trên macOS, bạn cần cài đặt Python và các thư viện xử lý âm thanh.

  1. Cài đặt System Dependencies (qua Homebrew): Mở Terminal và chạy lệnh sau để cài đặt ffmpeglibsndfile (cần thiết cho xử lý audio):
    brew install ffmpeg libsndfile git
    
  2. Thiết lập môi trường Python: Khuyến khích sử dụng Anaconda hoặc Virtualenv (Python 3.9+):
    conda create -n omniasr python=3.10
    conda activate omniasr
    
  3. Cài đặt PyTorch: Cài đặt PyTorch tương thích với chip M1/M2/M3 (MPS acceleration):
    pip install torch torchaudio
    
  4. Clone và cài đặt Repository:
    git clone https://github.com/facebookresearch/omnilingual-asr.git
    cd omnilingual-asr
    pip install -e .
    # Cài đặt thêm các thư viện hỗ trợ data nếu cần
    pip install "omnilingual-asr[data]"
    

Hướng dẫn Docker

Sử dụng Docker giúp tránh xung đột thư viện. Dưới đây là Dockerfile cơ bản để chạy dự án:

  1. Tạo file Dockerfile:
    FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
    
    # Cài đặt system dependencies
    RUN apt-get update && apt-get install -y \
        git \
        ffmpeg \
        libsndfile1 \
        && rm -rf /var/lib/apt/lists/*
    
    # Thiết lập workdir
    WORKDIR /app
    
    # Clone repo và cài đặt dependencies
    RUN git clone https://github.com/facebookresearch/omnilingual-asr.git .
    RUN pip install --no-cache-dir -e .
    RUN pip install --no-cache-dir "omnilingual-asr[data]"
    
    # Lệnh mặc định (ví dụ mở python shell)
    CMD ["python3"]
    
  2. Build và Run:
    # Build image
    docker build -t omni-asr .
    
    # Run container (mount thư mục hiện tại để truy cập file audio)
    docker run -it --rm -v $(pwd):/app/data omni-asr
    

Ví dụ Code (Example Code)

Dưới đây là đoạn code Python minh họa cách tải một mô hình LLM-ASR và thực hiện nhận dạng giọng nói từ file âm thanh:

import torch
from omnilingual_asr.models.inference.pipeline import ASRInferencePipeline
import soundfile as sf

# 1. Khởi tạo Pipeline với mô hình 7B (hoặc chọn 'omniASR_CTC_300M' cho nhẹ hơn)
# Model sẽ tự động tải về từ Hugging Face
print("Đang tải model...")
pipeline = ASRInferencePipeline(model_card="omniASR_LLM_7B", device="cuda" if torch.cuda.is_available() else "cpu")

# 2. Chuẩn bị dữ liệu audio (giả sử bạn có file 'test_audio.wav')
# Lưu ý: Model hỗ trợ input dạng path hoặc mảng numpy
audio_path = "test_audio.wav"

# Nếu chưa có file, tạo file dummy hoặc tải từ dataset mẫu
# import numpy as np
# audio_data = [{"waveform": np.random.randn(16000), "sample_rate": 16000}] # Dummy data

# 3. Thực hiện nhận dạng (Transcribe)
# Bạn có thể chỉ định ngôn ngữ đích (ví dụ: 'vie_Latn' cho tiếng Việt)
print("Đang nhận dạng...")
transcriptions = pipeline.transcribe(
    [audio_path], 
    lang="vie_Latn",  # Mã ngôn ngữ cho Tiếng Việt
    batch_size=1
)

# 4. In kết quả
for i, text in enumerate(transcriptions):
    print(f"Kết quả: {text}")

Sources

Github Page

https://github.com/facebookresearch/omnilingual-asr

Tags: github
Share: X (Twitter) Facebook LinkedIn