Khi sự cường điệu xung quanh các công nghệ AI như chatbot, mô hình ngôn ngữ lớn (LLM) và phi công phụ bắt đầu sau khi ChatGPT phát hành, nhiều trường hợp sử dụng khác đã sớm xuất hiện.
Tôi không nói về những thứ phổ biến nhất như trợ lý viết, trình tạo hình ảnh hoặc chatbot được đào tạo trên dữ liệu của bạn. Tôi đang nói về nhiều trường hợp sử dụng thích hợp hơn như hình đại diện nói chuyện thực tế, trình chỉnh sửa video hoặc tổng hợp giọng nói.
Trong bài viết này, chúng ta sẽ khám phá một trong những trường hợp sử dụng đó – một ứng dụng chuyển đổi mà bạn có thể sử dụng với podcast hoặc video YouTube . Nó sẽ có giá trị lớn nếu bạn từng muốn sử dụng API GPT-3 hoặc xem bản demo OpenAI Whisper đang hoạt động.
Đối với phần 1 của hướng dẫn này, chúng ta sẽ tìm hiểu mọi thứ cần thiết để thiết lập và bắt đầu phát triển ứng dụng.
Và sau đó trong phần 2, chúng ta sẽ tải mã hoạt động của mình lên đám mây và làm cho giao diện người dùng hoạt động để những người khác có thể xem kết quả và tương tác với ứng dụng.
Bây giờ, hãy thắt dây an toàn vì chúng ta sẽ bắt tay vào xây dựng một số mã Python này.
Để xây dựng điều này, chúng ta sẽ trải qua 3 màn.
Trong phần đầu tiên, chúng ta sẽ thấy mọi thứ chúng ta cần để sẵn sàng cho cuộc hành trình phía trước.
Trong phần thứ hai, chúng tôi sẽ xây dựng một nguyên mẫu cục bộ và tìm hiểu những công cụ nào có thể hỗ trợ chúng tôi trong quá trình này.
Và trong phần cuối cùng, chúng tôi sẽ tải mọi thứ chúng tôi đã xây dựng lên đám mây để những người khác cũng có thể dùng thử.
Âm thanh tốt?
Được rồi, bắt đầu thôi!
Trước tiên, hãy xem tổng quan sơ bộ về quy trình chúng tôi sẽ thực hiện là trích xuất thông tin chúng tôi muốn ghi lại và sau đó cung cấp thông tin đó cho
Từ đó, chúng tôi sẽ lấy đầu ra và thực hiện một số xử lý hậu kỳ trên đó trước khi hiển thị nó trong ứng dụng giao diện người dùng để người khác xem và có thể tương tác với nó.
Quá trình này sẽ mất thêm một vài bước nếu chúng tôi thực hiện thủ công. May mắn thay, OpenAI đã có sẵn
Ở đây bạn sẽ phải quyết định nên đi con đường nào.
Chọn đường đi của bạn trước và sau đó chúng ta sẽ tiếp tục.
Tiếp theo, chúng ta sẽ cần khóa API từ OpenAI để truy cập vào mô hình GPT-3.5 Turbo (về cơ bản là mô hình hỗ trợ ChatGPT).
Nếu bạn không biết cách lấy một cái, hãy làm theo các bước sau:
Sau khi bạn có chìa khóa đó, chúng ta sẽ tìm mảnh ghép tiếp theo, Whisper.
Bạn có thể tải xuống và cài đặt phiên bản Whisper mới nhất trên máy của mình bằng cách chạy lệnh sau:
pip install -U openai-whisper
Ngoài ra, bạn có thể cài đặt cam kết mới nhất từ Git với các phần phụ thuộc của nó bằng lệnh này:
pip install git+https://github.com/openai/whisper.git
Điều này giúp bạn có nhiều quyền kiểm soát hơn đối với phiên bản bạn đang cài đặt (và đó là lệnh bạn sẽ muốn chạy nếu đang thử lệnh này từ sổ tay Colab.)
Lưu ý: Bạn sẽ cần cài đặt 'ffmpeg' nếu muốn chạy Whisper từ dòng lệnh.
Với Whisper đã được cài đặt, tất cả những gì chúng ta cần bây giờ là các tệp thực tế mà chúng ta muốn ghi lại. Chúng tôi có thể cung cấp cho nó một số loại tệp phương tiện như 'mp3', 'mp4', 'mpeg', 'wav', v.v.
Hạn chế duy nhất ở đây là kích thước của tệp, sẽ mất nhiều thời gian hơn với một video dài 10 phút so với một podcast dài 20 phút.
Bây giờ, đây là ngã ba đường tiếp theo.
Bạn sẽ phải chọn xem bạn muốn chép lại video hay âm thanh .
Để đơn giản hóa trong ví dụ này, chúng ta sẽ sử dụng các tệp âm thanh từ podcast.
Và ở đây, câu hỏi có thể xuất hiện trong đầu bạn là “ Tôi tải các tập podcast từ đâu? ”.
Có 2 cách mà tôi biết.
Cách đầu tiên là sử dụng một trang web như ListenNotes, chọn bất kỳ podcast nào bạn thích và xem từng tập riêng lẻ.
Điều đáng lưu ý là bạn sẽ phải tạo một tài khoản để có thể truy cập từng tập và tệp âm thanh tương ứng của chúng.
Từ đó, bạn sẽ phải nhấp vào nút có 3 dấu chấm để mở tab “thêm” và sau đó bạn sẽ thấy tùy chọn tải xuống âm thanh.
Đây là giao diện của nó:
Tùy chọn thứ 2 là sử dụng Podchaser thay thế. Bạn sẽ làm theo quy trình tương tự để tìm podcast, xem qua danh sách các tập và chọn một podcast cụ thể.
Sau khi truy cập trang của từng tập, bạn sẽ thấy một cột ở phía bên phải có nút phát và các tùy chọn khác bên dưới.
Nếu cuộn xuống, bạn sẽ thấy thông tin về podcast, các tùy chọn chia sẻ trên mạng xã hội và một phần nhỏ có tùy chọn tải xuống tệp âm thanh.
Đây là giao diện của nó:
Chọn bất kỳ tùy chọn nào bạn thích và tải xuống một vài tập có độ dài khác nhau để bạn có thể kiểm tra cách hoạt động của quá trình phiên âm.
Lời khuyên của tôi là bạn nên chọn những tập phim có thời lượng ngắn hơn 30 phút.
Lý do cho điều này là vì nếu bạn chọn một thời gian dài hơn, Whisper có thể mất nhiều thời gian để xử lý và bạn có thể gặp phải vấn đề về thời gian chờ (Đặc biệt nếu bạn đang sử dụng môi trường Colab).
Một tập phim dài 20-30 phút có thể mất từ 4 đến 8 phút để chép lời.
Điểm nghẽn chính ở đây là khoảng thời gian của quá trình sao chép trước khi chúng tôi nhận được kết quả mà chúng tôi có thể sử dụng cho công việc tiếp theo.
Bây giờ chúng ta đã hoàn thành tất cả các yêu cầu và quá trình thiết lập đã hoàn tất.
Đã đến lúc chúng ta chuyển sang phần tiếp theo của cuộc hành trình.
Chúng tôi đang tiến vào lãnh thổ lập trình sâu hơn.
Chúng ta sẽ sử dụng Whisper thông qua Python vì điều đó thuận tiện hơn. Và chúng ta không cần làm gì đặc biệt cho việc phiên âm, chỉ cần chuyển file âm thanh vào model và chờ phiên âm là xong.
Vì vậy, chúng ta hãy đi qua từng dòng quá trình đó.
import whisper model = whisper.load_model("base")
Ở đây chúng tôi tải phiên bản 'cơ sở' của mô hình Whisper. Có một số phiên bản (hoặc “kích thước”) mà OpenAI đã phát hành và chúng khác nhau về số lượng tham số, tài nguyên mà chúng tiêu thụ cũng như thời gian cần thiết để thực hiện phiên mã.
Đây là một biểu đồ tiện dụng để tham khảo.
Bạn có thể tiếp tục và thử tất cả chúng để biết kích thước (ý định chơi chữ) nếu muốn.
Hãy nhớ rằng nếu bạn sử dụng mô hình lớn hơn, bạn sẽ cần nhiều tài nguyên hơn để chạy mô hình đó (chẳng hạn như GPU).
Vì vậy, nếu đang chạy lệnh này trong Colab, bạn có thể sử dụng lệnh này để thay thế.
model = whisper.load_model('medium', device='cuda')
Bạn chuyển vào tham số của thiết bị mà bạn muốn nó chạy trên đó.
Sau khi chọn kích thước của mô hình, bạn có thể chuyển tệp âm thanh bạn muốn chép lại vào, như sau:
result = model.transcribe(“path-to-where-the-file-is”)
Sau đó, bạn có thể in nội dung để xác minh việc phiên âm đã hoạt động. (Nhưng bạn có thể chỉ muốn xem qua khoảng 1000 ký tự đầu tiên thay vì in ra toàn bộ nội dung.)
podcast_transcript = result['text'] podcast_transcript[:1000]
Nếu điều đó diễn ra tốt đẹp thì bây giờ bạn đã lưu kết quả của quá trình sao chép vào một biến. Cái chúng tôi sẽ sử dụng để xử lý hậu kỳ.
Điều đó đủ dễ dàng. Nhưng giả sử rằng chúng ta muốn có một cách để biết những gì đã được thảo luận trong podcast ngoài những gì chúng ta tìm thấy trong phần mô tả tập.
Chúng ta có thể tạo một hàm lấy toàn bộ bản ghi và cung cấp cho chúng ta một “bản tóm tắt điều hành”. Một bản tóm tắt mà chúng tôi cũng có thể chia sẻ với những người bận rộn không có thời gian để xem toàn bộ nội dung và xem liệu nó có xứng đáng với thời gian của họ hay không.
Hãy tiếp tục và làm điều đó.
Bạn có dự đoán gì về những gì chúng tôi sẽ sử dụng để thực hiện bản tóm tắt đó không?
Gợi ý: Chúng tôi đã có khóa API cho nó.
Đúng, bạn hiểu rồi.
Chúng tôi sẽ sử dụng mô hình `get-3.5-turbo` để tạo bản tóm tắt này bằng cách cung cấp cho nó bản ghi của podcast.
Chúng ta có thể thực hiện lệnh gọi trực tiếp tới API, nhưng sẽ thuận tiện hơn nhiều khi sử dụng gói OpenAI cho nó (được đặt tên phù hợp là 'openai' 😆).
Chúng tôi cũng sẽ cần thư viện mã thông báo từ OpenAI để biết số lượng mã thông báo mà chúng tôi sẽ gửi đến mô hình.
Và chúng ta có thể cài đặt cả hai thứ đó bằng cách chạy…
pip install openai pip install tiktoken
Bây giờ, chúng ta cần lưu khóa API ở đâu đó trước khi thực hiện lệnh gọi tới GPT-3.
Bạn có thể lưu nó dưới dạng biến môi trường và sau đó chuẩn bị sẵn sàng để sử dụng trong mã như thế này.
openai.api_key = os.environ["OPENAI"]
Hoặc nếu đang sử dụng môi trường Colab, bạn có thể làm những việc như thế này.
import openai from getpass import getpass openai.api_key = getpass("Enter your key here: ")
Và sau đó, khi bạn chạy lệnh đó, nó sẽ hiển thị một ô nhập nơi bạn có thể dán khóa.
Bây giờ, bạn có thể xác nhận rằng khóa hoạt động bằng cách liệt kê các mẫu hiện có sẵn với đoạn mã này.
models = openai.Model.list() for model in models['data]: print(model['root'])
Khi khóa của chúng tôi hoạt động chính xác, chúng tôi có thể tiếp tục và thực hiện lệnh gọi tới API GPT-3.
Nhưng có một điều quan trọng mà chúng ta phải tính đến trước tiên. Và điều đó liên quan đến những gì tôi đã đề cập trước đó về “mã thông báo”.
Vì ý tưởng là chuyển bản ghi podcast sang mô hình AI và lấy lại bản tóm tắt về nó nên chúng ta cần biết nó có khả năng chấp nhận bao nhiêu “mã thông báo”.
AI không đếm từ hoặc ký tự mà thay vào đó sử dụng mã thông báo. Đó là lý do tại sao khái niệm “cửa sổ ngữ cảnh” tồn tại.
Nếu chúng tôi vượt quá độ dài của cửa sổ ngữ cảnh, bản ghi của chúng tôi có thể bị cắt bớt và chúng tôi sẽ nhận được bản tóm tắt từ dữ liệu không đầy đủ. (Một lý do khác để chọn một tập podcast không quá dài.)
May mắn thay, có 2 phiên bản của mẫu GPT-3. Cái truyền thống và cái khác có cửa sổ ngữ cảnh mở rộng.
Nếu bạn kiểm tra tài liệu OpenAI, bạn có thể thấy sự khác biệt giữa chúng.
Và đó chính là mục đích của thư viện `tiktoken`. Nó sẽ giúp chúng tôi biết có bao nhiêu mã thông báo trong bản ghi, bằng cách đó chúng tôi biết nên sử dụng mô hình nào cho bản tóm tắt.
Chúng ta có thể thực hiện phép tính đó bằng đoạn mã sau.
import tiktoken enc = tiktoken.encoding_for_model(“gpt-3.5-turbo”) print(“Number of tokens in the input ”, len(enc.encode(podcast_transcript)))
Nếu số lượng mã thông báo trong kết quả lớn hơn 4.097 thì chúng tôi sẽ phải sử dụng phiên bản '16k' của mô hình.
Sau khi biết điều này, cuối cùng chúng ta cũng có thể thực hiện lệnh gọi API bằng cách sử dụng mô hình phù hợp cho tình huống đó.
Trước tiên, hãy lưu lời nhắc mà chúng tôi sẽ gửi đến mô hình dưới dạng một biến. Bạn có thể thử nghiệm lời nhắc của riêng mình, nhưng đây là một ví dụ:
prompt = """ You are an expert marketer responsible for the growth of several popular podcasts. You are now tasked with summarizing an episode in a way that is concise and covers the main points of the episode for others to understand. The transcript of the episode is provided below. """ request = prompt + podcast_transcript
Bây giờ, hãy thực hiện lệnh gọi API bằng đoạn mã sau.
chatOutput = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k", messages=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": request} ] )
Và sau đó hãy kiểm tra phản hồi từ API.
chatOutput.choices[0].messages.content
Ở đó bạn có nó! Bản tóm tắt về tập podcast dựa trên bản ghi mà chúng tôi đã tạo bằng Whisper.
Bạn có thể sử dụng quy trình tương tự này để trích xuất những điểm nổi bật chính của tập. Giống như một cách để cung cấp cho người nghe tiềm năng cái nhìn thoáng qua về cuộc trò chuyện.
Cách để làm điều này rất giống nhau. Phần duy nhất thay đổi là lời nhắc mà mô hình sẽ nhận được. Thay vì yêu cầu tóm tắt, bạn có thể yêu cầu trích xuất những điểm quan trọng nhất trong định dạng danh sách. Kết quả phụ thuộc vào sự sáng tạo của bạn với các gợi ý.
Bây giờ chúng ta biết điều này hoạt động, chúng ta có thể đặt tất cả mã vào một hàm để chạy cục bộ.
Vì vậy, hãy tiếp tục và tạo hàm đó.
def transcribe_podcast(file_path): print("Starting podcast transcription") # Load the Whisper model import os import Whisper print("Loading the Whisper model") model = whisper.load_model("medium") print(model.device) # Do the transcription print("Starting the transcription") result = model.transcribe(file_path) # Return the transcribed text print("Transcription completed, returning results...") return result
Bạn có thể gọi hàm đó, gửi cho nó đường dẫn của tệp âm thanh và nhận lại bản ghi âm.
Đây là một ví dụ về cách bạn sẽ làm điều đó.
output = transcribe_podcast('path_to_audio_file')
Và sau đó xem qua nội dung của bản ghi.
output[text][:1000]
Được rồi, cho đến nay rất tốt.
Giờ đây, tính năng này đã hoạt động cục bộ, sẽ thật tuyệt nếu tải nó lên đám mây để bạn có thể hiển thị cho người khác và gây ấn tượng với bạn bè và gia đình bằng kỹ năng mã hóa l33t h4xx0r của mình. 😆
Nhưng thực ra không, triển khai nó lên một dịch vụ trực tuyến để những người khác có thể dùng thử là một lựa chọn tốt.
Và chúng ta sẽ làm điều đó trong phần 2. Tạo một hàm đám mây có thể chấp nhận các yêu cầu và thực hiện giao diện người dùng nhanh chóng để trực quan hóa kết quả của hàm đó (chẳng hạn như phần tóm tắt và điểm nổi bật của các tập podcast).
Bây giờ chúng ta sẽ để nó ở đó.
Cho đến nay, bạn đã có ứng dụng hoạt động cục bộ và bạn có thể thử nghiệm nó với các tập có độ dài khác nhau và xem khoảng thời gian trung bình mà Whisper cần để thực hiện phiên âm.
Cảm ơn bạn đã đọc đến đây.
Và tôi hy vọng sẽ gặp lại bạn ở Phần 2.
Đừng quên đăng ký theo dõi tôi trên Hackernoon để không bỏ lỡ các bài viết sắp tới.