Dấn thân

Dấn thân

Mình thường nói với mấy anh em đồng nghiệp: cách để phát triển nhanh nhất, học nhanh nhất chỉ nằm trong 2 từ đơn giản: dấn thân. Khi ta dốc trái tim ta, đổ hết nỗ lực của ta vào để hoàn thành một điều gì đó, ta sẽ học được rất nhiều và trưởng thành từ đó - bất chấp kết quả thành công hay thất bại.

Mình chia sẻ cho mọi người một chút xíu những trải nghiệm của mình từ việc dấn thân xây dựng "English Vui" gần đây để minh họa một góc nhỏ của quá trình này.

Từ ban đầu, thật sự mình chỉ muốn dùng English Vui để thử nghiệm một số công nghệ liên quan đến Agentic workflow. Vì bà xã mình dạy tiếng Anh, nên mình nghĩ đến việc dùng agentic workflow để giúp vợ mình tạo ngữ liệu tốt hơn để dạy cho các bạn nhỏ ở quê. Phiên bản demo đầu tiên của mình cho bà xã là một file "markdown" show lên ở mode preview trên VS Code. Nội dung file chỉ có đoạn hội thoại đơn giản, các từ ngữ quan trọng mà dân bản xứ họ hay nói, và link để nghe câu chuyện. Xem xong, bà xã mình nói: mấy câu chuyện này nên làm nó vui hơn, chứ từ vựng em thấy ok - rất hữu ích.

"Làm cho những câu chuyện vui hơn" -> nghe đơn giản, nhưng khó. Vì để AI tự tạo nội dung câu chuyện thường nó sẽ dần trở nên nhàm chán và không có cốt truyện tự nhiên. Thế là mình nghiên cứu về những kho truyện cười trên thế giới, tải về, xử lý dữ liệu, dùng AI để lọc lại những câu chuyện cười phù hợp. Trong quá trình này, mình cũng học khá nhiều thứ: từ sử dụng AI tool kết hợp với browser automation để tự download nội dung truyện (khá tốn LLM token), hay dùng Copilot để viết những crawler rất nhanh để tự tải nội dung ... Cũng kha khá thứ để vọc.

"Làm sao để mình ít tốn chi phí nhất có thể" - vì dự án này ban đầu mình cũng ko đặt nặng vấn đề tiền bạc. Mình áp dụng những giải pháp từ cache full html content trên CDN, đến serverless technology (vốn là những thứ mình đã vọc qua rất nhiều rồi thành quen).

Tuy nhiên, data thì lưu ở đâu? Làm sao ít tốn tiền nhất? Mình tự đặt lại những câu hỏi dù nghe rất ngớ ngẩn: có thật sự cần DB không? toàn bộ dữ liệu của người dùng sau khi login mình đưa xuống lưu trữ ở IndexDB trên browser, và chỉ cần sync dữ liệu khi nó out of date hoặc cần sync. Vậy DB có cần thiết không? hay chỉ cần lưu dữ liệu của user ở dạng JSON trên file? Khi sync thì ghi vào file là xong. Mình thử nghiệm giải pháp và nhận ra rằng, đánh đổi của giải pháp này là Lambda function sẽ cần nhiều memory hơn để đọc file JSON lên ở những thao tác cần load file và ghi lại. Mọi thứ đều có cái giá của nó. Rồi cuối cùng mình chuyển lại giải pháp sử dụng AWS Dynamo DB. Cost của Dynamo DB khá rẻ, và với free tier của AWS thì cũng đã xài khá ok rồi.

"Làm sao để giúp user luyện phát âm (mà chi phí vẫn phải rẻ)" -> Bà xã mình nói: học tiếng Anh phải có tương tác, phải đọc nhiều lần thì mới nhớ lâu. Thế là mình thử sử dụng Web Speech API protocol. Dù hiện tại đôi khi nó nhận dạng phát âm vẫn chưa hoàn thiện lắm, nhưng vẫn chấp nhận được. Sử dụng protocol sẵn có này thì chi phí = 0. Tuy nhiên, thời gian tới mình đang nghiên cứu một số công nghệ có thể giúp phân tích phát âm và chỉ ra được lỗi sai trong phát âm một cách chi tiết hơn. Khi nào hoàn chỉnh tính năng này mình sẽ cập nhật sau.

Khi bay vào giải bài toán phân tích phát âm, mình mới phát hiện ra có rất nhiều khái niệm liên quan trong bài toán này mà mình ko biết. Trong giảng dạy thực tế, người ta dùng IPA là bộ kí hiệu phiên âm quốc tế chuẩn. Tuy nhiên, đối với bài toán xử lý nhận dạng phát âm, người ta dùng ARPABET để xử lý dễ hơn. Vậy là phải convert những âm vị từ ARPABET sang hệ thống IPA để người dùng mới hiểu được ...

"Làm sao để tạo ra nội dung file với giọng đọc của native speaker tự nhiên nhất" -> Hiện tại mình đang sử dụng dịch vụ của ElevenLabs. Tuy nhiên, Google, Microsoft vẫn có những giải pháp với giọng đọc khá hay và vẫn avail ở free tier, nên mình cũng thử trải nghiệm để tìm ra thêm những giải pháp cân bằng về chi phí, chất lượng.

Rồi mình lại nghĩ: nếu trong một câu chuyện, có nhiều người tham gia, thì việc đọc có khi lại không hay bằng việc tạo ra nhiều giọng thoại. Vậy làm sao để nó tự nhiên nhất có thể? Thế là mình lại lao vào đọc và thử nghiệm giải pháp.

Google họ công bố thử nghiệm mô hình multi speakers này: https://cloud.google.com/text-to-speech/docs/create-dialogue-with-multispeakers

Tuy nhiên, chạy vô làm thiệt mới biết - feature này mình phải liên hệ với Google mới có thể được enable (mà cũng rất hên xui). Mình lại tức mình, lại mò mẫm. Rồi cuối cùng cũng ra được một giải pháp tương đối ưng ý mà không cần dùng đến feature multi speakers của Google. Demo cho một output mà mình vừa tạo được sáng nay (10-May-2025)

audio-thumbnail
Demo 2 person dialogs
0:00
/56.472

(Thường khi mình làm gì đó không được, mình hay bị ám ảnh. Sáng nay tầm 4h sáng thì thức dậy, và tự nhiên lóe lên vài ý tưởng. Thế là ngồi code từ 4:30 đến tầm 8h thì ra được cái demo nhỏ này. Mình kì vọng nó chỉ bằng 80% của NotebookLM là đã ok rồi. Dù sẽ cần improve thêm nhiều)

Vậy đó, dấn thân vô làm thì tự nhiên mình sẽ có được rất nhiều trải nghiệm. Có thể có người bảo mình ngu: ý tưởng ông làm có tạo được lợi nhuận đâu? đã có ai sẵn sàng trả tiền đâu? làm chi cho phí công, phí của?

Thật ra đối với mình, tiền cũng cần đó vì làm sao sống được mà không có tiền. Mà đời thì có nhiều cách kiếm tiền. Chỉ có làm điều gì đó mình cảm thấy có ý nghĩa mới khó. Và để làm điều đó thì cũng chỉ có một cách: dấn thân!

Viết trải lòng nhân một giây phút Eureka vào buổi sáng!