2 điểm bởi GN⁺ 2024-09-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • LLaMA-Omni là mô hình ngôn ngữ-giọng nói dựa trên Llama-3.1-8B-Instruct, nhận chỉ dẫn bằng giọng nói và đồng thời tạo ra phản hồi văn bản lẫn giọng nói
  • Mục tiêu cốt lõi là tương tác giọng nói độ trễ thấp, chất lượng cao, và theo README, độ trễ có thể giảm xuống mức thấp nhất là 226ms
  • Mô hình được huấn luyện trong chưa đến 3 ngày chỉ với 4 GPU, và chạy bằng Llama-3.1-8B-Omni, Whisper-large-v3, cùng vocoder HiFi-GAN dạng unit-based
  • Demo Gradio có cấu trúc chạy riêng controller, web server và model worker, và do tính không ổn định của phát âm thanh streaming trong Gradio nên không bật tự động phát
  • Mã nguồn dùng Apache-2.0 nhưng mô hình chỉ dành cho mục đích nghiên cứu học thuật, cấm sử dụng thương mại và cần liên hệ riêng để xin giấy phép thương mại

LLaMA-Omni làm gì

  • LLaMA-Omni là mô hình ngôn ngữ-giọng nói dựa trên Llama-3.1-8B-Instruct
  • Nhận chỉ dẫn giọng nói làm đầu vào và đồng thời tạo phản hồi văn bản và phản hồi giọng nói
  • Hướng tới tương tác giọng nói độ trễ thấp và phản hồi chất lượng cao, với độ trễ thấp nhất 226ms theo phần highlights trong README
  • Bài báo liên quan được công bố tại arXiv:2409.06666

Mô hình và bộ dữ liệu đã công bố

Cập nhật gần đây

  • Tháng 5/2025, LLaMA-Omni 2 được nhận vào hội nghị chính ACL 2025
  • Tháng 4/2025, LLaMA-Omni2 được công bố
    • Đây là series mô hình ngôn ngữ giọng nói từ 0.5B đến 32B tham số
    • Cải thiện chất lượng phản hồi và chất lượng tạo giọng nói
  • Tháng 1/2025, LLaMA-Omni được nhận vào ICLR 2025

Cài đặt và quy trình chạy

  • Cài đặt theo cách clone repository rồi cài package trong môi trường conda Python 3.10
    • Cài pip==24.0 rồi chạy pip install -e .
  • Cần cài thêm các phụ thuộc fairseqflash-attn
  • Phần quick start yêu cầu ba thành phần chuẩn bị
    • Tải mô hình Llama-3.1-8B-Omni
    • Tải mô hình Whisper-large-v3
    • Tải vocoder HiFi-GAN dạng unit-based và config.json

Demo Gradio và suy luận cục bộ

  • Demo Gradio gồm ba tiến trình
    • controller: omni_speech.serve.controller
    • Gradio web server: omni_speech.serve.gradio_web_server
    • model worker: omni_speech.serve.model_worker
  • Sau khi chạy demo, có thể tương tác với LLaMA-3.1-8B-Omni tại localhost:8000
  • Do phát âm thanh streaming của Gradio không ổn định nên chỉ triển khai tổng hợp âm thanh streaming, còn tự động phát không được bật
  • Suy luận cục bộ được thực hiện bằng cách chuẩn bị file chỉ dẫn giọng nói theo định dạng omni_speech/infer/examples, rồi chạy bash omni_speech/infer/run.sh omni_speech/infer/examples

Giấy phép và hạn chế sử dụng

  • Mã nguồn được công bố theo Apache-2.0 License
  • Mô hình chỉ được dùng cho mục đích nghiên cứu học thuật và cấm sử dụng thương mại
  • Trong môi trường học thuật, có thể sử dụng, sửa đổi và phân phối nhưng cần trích dẫn bài báo gốc
  • Mọi yêu cầu sử dụng thương mại hoặc xin giấy phép thương mại cần liên hệ fengyang@ict.ac.cn

Dự án nền tảng và trích dẫn

  • Codebase dựa trên LLaVA
  • Một phần mã liên quan đến speech encoder và speech adapter được mượn từ SLAM-LLM
  • Nếu hữu ích cho nghiên cứu, cần trích dẫn bài báo LLaMA-Omni: Seamless Speech Interaction with Large Language Models
  • Có thể liên hệ qua GitHub issue hoặc fangqingkai21b@ict.ac.cn

1 bình luận

 
GN⁺ 2024-09-20
Ý kiến trên Hacker News
  • Mô hình này có thể tạo ra cả những âm thanh không thể biểu đạt bằng văn bản không? Ví dụ như yêu cầu “hãy bắt chước tiếng gà kêu”

    • Nếu nó có thể tạo ra âm thanh gắn với cách ghi các từ phi ngôn ngữ, thì có vẻ không có lý do gì để riêng từ tượng thanh lại bị chặn
    • Nó cũng có thể hiểu những âm thanh như vậy không? Tôi tò mò liệu nó có phân biệt được phát âm hay ngữ điệu của từ là đúng hay sai không
    • Gần như chắc là không. Nghe giống một vocoder kiểu cũ chỉ được thiết kế để tạo tiếng người nói
    • Ý là những âm như “cục tác” ấy à?
      Nhưng liệu nó có thể vừa nói từ “cục tác” vừa tạo ra tiếng lách cách thực sự không?
  • Tôi không rõ một mô hình như thế này có ưu điểm hay tiềm năng gì so với cách gắn nhận dạng giọng nói/tổng hợp giọng nói vào một mô hình thuần văn bản
    Khi mô hình tinh vi hơn, có phải điểm then chốt là diễn giải hoặc tạo ra đúng những thứ như ngữ điệu, nhịp điệu, cảm xúc vốn bị mất trong tổng hợp giọng nói không?

    • Trong nhận dạng giọng nói/tổng hợp giọng nói có rất nhiều mất mát thông tin và suy đoán
      Mô hình nhận dạng giọng nói có thể nghe nhầm từ, nhưng audio LLM có thể hiểu được từ thực nhờ ngữ cảnh rộng hơn. Mô hình tổng hợp giọng nói phải đoán ngữ điệu nên có thể sai hoàn toàn, còn audio LLM có thể tự nhiên học được nên nói bằng tông nào. Ví dụ nếu là lời chen ngang thì có thể dùng tông cao hơn
      Chỉ riêng chuyện chen ngang thôi, hệ thống nhận dạng/tổng hợp giọng nói thường dựa vào phát hiện hoạt động giọng nói và heuristic để quyết định khi nào nói, nên nhiều hệ thống có quy tắc chỉ nói sau khi người dùng đã dừng nói. Audio LLM có thể học hội thoại tự nhiên, cách không chiếm quá nhiều thời lượng nói, và cách nói cùng lúc với nhiều người
      Audio LLM cũng có thể tạo nhạc hoặc âm thanh, hoặc cho biết bài hát bạn ngân nga là gì. Có rất nhiều khả năng mới
      Tuy nhiên lý do tôi nói “có thể học” là vì cần dữ liệu huấn luyện tốt. Theo tôi biết hiện nay phần lớn các mô hình kiểu này được huấn luyện bằng cách chuyển các bộ dữ liệu văn bản thông thường thành giọng nói tổng hợp, nên về thực chất chẳng hơn gì hệ thống nhận dạng/tổng hợp giọng nói thông thường. Cách đó tốt để chứng minh kiến trúc, nhưng không thể hiện được toàn bộ năng lực
    • Cá nhân tôi rất mong chờ việc dùng các mô hình giọng nói như advanced voice mode của OpenAI cho học ngôn ngữ
      Chỉ riêng khả năng nói nhanh hoặc nói chậm đã là phần mà các hệ thống tổng hợp giọng nói truyền thống chưa làm được. Về lý thuyết, nó cũng có thể cho biết phát âm của tôi có chính xác không, lặp lại cách tôi phát âm sai rồi phát âm đúng để sửa cho tôi
      Tôi chưa thấy ai kiểm thử kỹ xem advanced voice mode của OpenAI thực sự làm việc này tốt đến đâu, nên chưa biết, nhưng tôi muốn tự dùng thử. Nếu các mô hình giọng nói khác cũng đạt đến mức này thì sẽ cực kỳ tuyệt vời như một công cụ học ngôn ngữ
    • Chủ đề này đã được bàn khá nhiều rồi, ví dụ có thể xem bài báo -O của OpenAI
      Một yếu tố lớn là độ trễ do batching gây ra. Khó ngắt lời agent đúng cách, khiến hội thoại thực tế trở nên gượng gạo hơn. Và đúng vậy, đa phương thức hiểu tốt hơn. Tuy nhiên tôi chưa thấy phân tích nào về nhận diện cảm xúc; không biết có ai đã thấy phân tích về khả năng này của GPT-O chưa
    • Về bản chất có mất mát thông tin trong quá trình chuyển audio → văn bản. Đôi khi điều đó không quan trọng, nhưng đôi khi có thể nâng chất lượng đầu ra lên đáng kể
      Ngoài ra còn có thể có các lợi ích phụ như cải thiện độ trễ phản hồi, cải thiện tách người nói, phản ứng tốt hơn với các khoảng dừng trong hội thoại
    • Nếu chỉ viết “Really” thì không ai biết được ngữ điệu của nó
      Dù viết là “Really?” hay “Really!” thì vẫn còn dư địa diễn giải. Để giao diện giọng nói thật sự thành công, cần một khoảnh khắc giống như tìm kiếm trước Google vốn rất tệ rồi chuyển sang Google; và nếu cốt lõi của khoảnh khắc đó là diễn giải và tạo ra ngữ điệu, nhịp điệu, cảm xúc, thì việc xây dựng những mô hình như thế này khá hợp lý
  • Trong các công cụ chạy mô hình như Ollama, LM Studio, llama.cpp, có cái nào hỗ trợ cái này không?

  • Vậy tức là không phải kiến trúc nhận dạng giọng nói → LLM → tổng hợp giọng nói sao? Nếu hét tiếng Chewbacca vào đầu vào, mô hình sẽ nhận ra đó là đầu vào vô nghĩa, hay sẽ diễn giải thành đại vài từ như một hệ thống nhận dạng giọng nói tệ?

    • Về kiến trúc thì không phải vậy, nhưng có lẽ khả năng cao là nó sẽ không nhận ra đó là đầu vào vô nghĩa. Theo bài báo:

      we construct a dataset named InstructS2S-200K by rewriting existing text instruction data and performing speech synthesis
      Nó chỉ học các câu hỏi được đọc bằng giọng tổng hợp, và chưa từng thấy hay nghe âm thanh vô nghĩa. Có lẽ thay vì hỏi “Bạn có ổn không?”, nó sẽ ảo giác rằng bạn đã hỏi gì đó rồi tạo câu trả lời. Không có nhiều bộ dữ liệu audio giọng nói thật, và cũng không có phiên bản audio của StackOverflow để cào về

    • Trước đây tôi hay nghịch mấy thứ như vậy. Đặt Google Translate sang một ngôn ngữ tôi không biết như tiếng Trung, rồi phát âm bừa, nó sẽ cho ra các câu tiếng Anh nhất quán nhưng điên rồ
      Tôi có cảm giác các ngôn ngữ có thanh điệu đặc biệt dễ “ăn” hơn
  • Giọng tổng hợp trong clip demo nghe giống Ellen McLain, tức diễn viên lồng tiếng của Valve, đến đáng ngạc nhiên
    https://en.m.wikipedia.org/wiki/Ellen_McLain

    • Nghe như được huấn luyện bằng bộ dữ liệu LJ Speech. Đây là một trong những bộ dữ liệu tốt nhất và được dùng rất phổ biến
  • Tốc độ có vẻ khá tốt. Gần đây tôi đã thử chat giọng nói cục bộ bằng LMStudio + AnythingLLM, nhưng vẫn hơi chậm hơn mong muốn; giọng PiperTTS thì còn tốt hơn cái này

  • Với 3 ngày huấn luyện thì không tệ. Chất lượng đầu ra giọng nói cần được trau chuốt thêm, nhưng thật thú vị xem huấn luyện thêm sẽ tạo ra thay đổi gì

  • Giá mà có mã huấn luyện hoặc tinh chỉnh. Với sử dụng thương mại, tinh chỉnh giọng nói có vẻ là yêu cầu then chốt

  • Có phải chỉ mình tôi thấy kém tin tưởng hơn hẳn khi README của repo GitHub có cái biểu đồ xu hướng sao ngớ ngẩn đó không?

    • Cái đó hơi lạ. Người ta có thể tự hào về công việc của mình mà
  • demo nào cho thấy hiệu năng không?