Trong các bài viết trước, chúng ta đã tìm hiểu cách thực hiện phân loại ý định nâng cao, được cung cấp bởi BERT, tự động trong Python. Chúng ta cũng đã tìm hiểu cách tự động điền dữ liệu vào Google Sheets trong Python. Liệu có thú vị nếu chúng ta có thể thực hiện phân loại ý định trực tiếp trong Google Sheets không? Đó chính xác là điều chúng ta sẽ làm ở đây!
Giới thiệu Google Apps Script
Một hạn chế của các chức năng tích hợp sẵn trong Google Sheets là nó giới hạn bạn vào hành vi được xác định trước. Tin tốt là nếu bạn có thể viết mã bằng chính mình trong Google Apps Script, bạn có thể định nghĩa các chức năng tùy chỉnh với hành vi mới. Google Apps Script dựa trên JavaScript và cung cấp các chức năng bổ sung giúp tương tác với Sheets, Docs và các ứng dụng Google khác. Chúng ta sẽ định nghĩa một chức năng tùy chỉnh mới có tên fetchPrediction, chức năng này sẽ lấy các từ khóa từ các ô trong Google Sheet và chạy chúng qua một mô hình dự đoán được cung cấp bởi BERT để lấy ý định của người dùng tìm kiếm. Đây là kế hoạch hành động của chúng ta:
– Học cách xem xét và cập nhật giá trị trong Google Sheets từ Apps Script.
– Thực hành lấy kết quả từ một API và điền giá trị đã lấy vào một sheet.
– Huấn luyện mô hình dự đoán sử dụng BERT bằng Ludwig của Uber.
– Sử dụng Ludwig để cung cấp một API mà chúng ta có thể gọi từ Apps Script.
– Tìm hiểu một số công cụ và khái niệm mới giúp chúng ta kết nối hai dịch vụ này với nhau.
Hãy bắt đầu thôi!
Lấy dữ liệu từ khóa từ Google Sheets
Trong bài tập đầu tiên, chúng ta sẽ đọc và in ra 10 từ khóa đầu tiên từ cột A.
Đi tới Tools > Script Editor để bắt đầu. Đây là một môi trường phát triển tích hợp sẵn (IDE) cho Google Sheets. Chúng ta sẽ viết một hàm JavaScript đơn giản có tên logKeywords, hàm này sẽ đọc tất cả các từ khóa trong sheet của chúng ta và ghi chúng vào console. Vui lòng tham khảo tài liệu chính thức tại đây. Hãy đi qua từng bước trong hàm này.
Trước tiên, chúng ta lấy một tham chiếu đến sheet hiện tại, trong trường hợp này là Sheet1. Nếu bạn so sánh mã này với mã chúng ta viết trong Python, bạn sẽ thấy một số ưu điểm:
– Chúng ta không cần xác thực.
– Chúng ta không cần mở spreadsheet.
Đi tới View > Stackdriver logging. Ở đó, bạn sẽ nhận được liên kết đến Bảng điều khiển Apps Script. Nhấp vào đó để xem log console.
Để tiện theo dõi, bạn nên giữ trang này trong một tab khác vì bạn sẽ tham khảo nó thường xuyên khi viết và kiểm thử mã của mình.
Bạn sẽ thấy thông tin log mới nhất ở đầu danh sách. Nhấp vào nó và bạn sẽ thấy một cái gì đó giống như ảnh chụp màn hình ở trên.
Bây giờ, chúng ta đã in ra hơn 100 dòng, việc này mất một chút thời gian. Khi bạn viết và kiểm thử mã của mình, nên làm việc với danh sách nhỏ hơn.
Chúng ta có thể thay đổi đơn giản trong vòng lặp để khắc phục vấn đề đó. Lưu ý rằng tôi đã cố định giá trị 10 là giới hạn và để lại một comment với mã đúng.
Tôi thích comment lại thay vì xóa mã vì sẽ dễ dàng hơn để quay lại khi tôi sẵn sàng để sử dụng sản xuất.
Khi bạn chạy mã này, nó không chỉ chạy nhanh hơn mà kiểm tra log cũng nhanh hơn rất nhiều.
Thêm một cột với ID từ khóa
Tiếp theo, hãy tìm hiểu cách thêm dữ liệu vào sheet. Chúng ta sẽ viết một chức năng mới có tên addIDtoKeywords. Nó tạo một cột với một ID số cho mỗi từ khóa. Việc này không có nhiều giá trị, nhưng nó sẽ giúp bạn kiểm tra kỹ thuật với một cái gì đó rất đơn giản. Đây là mã để thực hiện điều đó. Hãy chọn chức năng này trong danh sách và nhấp vào nút chạy.
Bạn sẽ nhận được một cột mới trong sheet với các số tăng dần.
Chúng ta cũng có thể thêm một tiêu đề cột in đậm có tên là Keyword ID bằng mã sau.
Đây là giao diện cập nhật đã được cập nhật.
Đây là một mã rất tương tự. Hãy xem xét các thay đổi.
Tôi đã thêm một mảng JavaScript có tên values để giữ các ID từ khóa.
Trong quá trình lặp, tôi đã thêm một dòng để thêm mỗi ID được tạo ra trong vòng lặp vào mảng.
Tôi đã in độ dài của mảng giá trị ở cuối vòng lặp để đảm bảo số lượng ID được tạo ra đúng.
Cuối cùng, tôi cần lấy các giá trị để đưa vào sheet.
Mã này chọn các ô chính xác để điền và sau đó tôi chỉ cần đặt giá trị cho chúng bằng danh sách tôi đã tạo ra.
Nó không thể đơn giản hơn thế này!
Lấy kết quả API từ Apps Script
Trong bài tập tiếp theo, chúng ta sẽ tìm hiểu cách thực hiện yêu cầu API từ Apps Script. Tôi khuyến nghị bạn làm theo codelab này từ Google để làm quen với một số khái niệm nâng cao hơn. Thay vì lấy sách, chúng ta sẽ dịch các từ khóa bằng cách sử dụng Google Translate API. Bây giờ, chúng ta bắt đầu viết mã hữu ích hơn! Đây là một hàm mới có tên fetchTranslation dựa trên mã đã được thích nghi từ bước 11. Hàm này lấy một văn bản đầu vào, mã hóa nó và chèn vào một URL API để gọi dịch vụ Google Translate. Có một khóa API chúng ta cần lấy và chúng ta cũng cần kích hoạt dịch vụ Dịch. Tôi cũng khuyến nghị hạn chế API chỉ cho địa chỉ IP bạn sử dụng để kiểm thử trong quá trình phát triển.
Sau khi chúng ta có URL API để gọi, việc gọi mã này cũng đơn giản như việc gọi mã này.
Các dòng tiếp theo lấy cho chúng ta phản hồi dưới dạng JSON và sau một chút điều hướng trong cây JSON, chúng ta nhận được văn bản đã dịch.
Như bạn có thể thấy trong mã của tôi, tôi thích ghi log gần như mọi bước trong mã vào console để xác nhận nó đang thực hiện như tôi mong đợi.
Đây là một ví dụ về cách tôi đã tìm ra chuỗi JSON đúng.
Bạn có thể nhìn thấy sự tiến triển trong log ở đây, bao gồm đầu ra cuối cùng.
Dịch các từ khóa
Khi chúng ta đã kiểm tra hàm và nó hoạt động, chúng ta có thể tiếp tục tạo một hàm khác để lấy và dịch các từ khóa từ sheet. Chúng ta sẽ xây dựng từ những gì chúng ta đã học cho đến nay. Chúng ta sẽ gọi hàm này với tên rất độc đáo là TranslateKeywords! Mã trong hàm này rất giống với mã chúng ta đã sử dụng để đặt Keyword IDs. Sự khác biệt chính là chúng ta truyền từ khóa vào hàm fetchTranslation mới của chúng tôi và cập nhật một ô đơn với kết quả. Đây là những gì nó trông như với từ khóa ví dụ của chúng ta. Như bạn có thể thấy, không có vòng lặp, vì vậy điều này chỉ cập nhật một dòng/từ khóa duy nhất. Dòng đầu tiên.
Bạn có thể thấy, không có vòng lặp, vì vậy điều này chỉ cập nhật một dòng/từ khóa duy nhất. Dòng đầu tiên. Hãy hoàn thành vòng lặp để lấy bản dịch cho tất cả các từ khóa như một bài tập làm bài tập nhà.
Xây dựng một mô hình phân loại ý định
Hãy chuyển sang xây dựng dịch vụ phân loại ý định của chúng ta mà chúng ta sẽ gọi để điền các ý định từ khóa. Trong các bài viết học sâu trước đó của tôi, tôi đã đề cập đến Ludwig, bộ công cụ AI của Uber. Tôi thích Ludwig rất nhiều vì nó cho phép bạn xây dựng các mô hình học sâu tiên tiến mà không cần viết một dòng mã nào. Nó cũng rất thuận tiện để chạy trên Google Colab. Chúng ta sẽ tuân theo các bước tương tự mà tôi đã mô tả trong bài viết này, điều này sẽ mang lại cho chúng ta một mô hình dự đoán ý định mạnh mẽ dựa trên BERT. Đây là một tóm tắt nhanh về các bước bạn cần sao chép vào Google Colab (hãy chắc chọn GPU runtime!).
Vui lòng tham khảo bài viết của tôi để biết thêm thông tin:
Sau khi hoàn thành các bước này trong Google Colab, chúng ta sẽ có một mô hình dự đoán độ chính xác cao cho ý định tìm kiếm. Chúng ta có thể xác minh các dự đoán với mã này. Chúng ta nhận được một khung dữ liệu như thế này. Các ý định dự đoán không phải là những ý định mà bạn thường mong đợi: điều hướng, giao dịch, thông tin, nhưng chúng đủ tốt để minh họa khái niệm.
Hãy kiểm tra một bài viết tuyệt vời của Kristin Tynski giải thích cách mở rộng khái niệm này để có được các ý định tìm kiếm thực sự.
Biến mô hình thành dịch vụ API
Ludwig có một tính năng vô cùng tuyệt vời cho phép bạn cung cấp các mô hình trực tiếp dưới dạng dịch vụ API. Lệnh để làm điều này là Ludwig serve. Tôi đã cố gắng hoàn thành cùng một việc theo một con đường phức tạp vì tôi không kiểm tra rằng đã có một cái như vậy từ trước. 🤦 Nó không được cài đặt mặc định, chúng ta cần cài đặt nó bằng lệnh này.
Chúng ta có thể kiểm tra các tùy chọn dòng lệnh bằng:
Tạo một API từ mô hình của chúng ta cũng đơn giản như chạy lệnh này. Vì chúng ta đang chạy mã này trong notebook, chúng ta cần sử dụng một mẹo nhỏ để đẩy quá trình này vào nền (một luồng riêng biệt). Lệnh ma thuật %%bash –bg chạy mã shell trong một luồng riêng biệt trả lại quyền kiểm soát cho notebook để chúng ta có thể chạy mã có thể tương tác với dịch vụ. Tôi thấy đây là một mẹo tuyệt vời và có giá trị. Tôi cũng giới thiệu thêm mẹo shell nữa mà tôi đã học mấy năm trước. Lệnh nohup ngăn quá trình bị giết khi tiến trình cha chết. Nó là tùy chọn ở đây. Mã 2>&1 chuyển hướng lỗi tiêu chuẩn vào đầu vào tiêu chuẩn và cả hai đều được gửi vào tệp debug.log. Bạn có thể tìm hiểu thêm về kỹ thuật này tại đây. Chúng ta có thể theo dõi tiến trình của quá trình nền bằng lệnh này. Sau khi bạn thấy thông báo này, bạn có thể tiếp tục bước tiếp theo. Hãy gửi một yêu cầu API thử nghiệm bằng cURL để xem dịch vụ có hoạt động không. Bạn sẽ nhận được phản hồi như sau.
Phơi bày Dịch vụ Của Chúng Tôi Sử Dụng Ngrok
Vậy, chúng ta đã có một API mới có thể dự đoán ý định, nhưng một vấn đề lớn là nó chỉ có thể truy cập từ bên trong Colab notebook của chúng ta. Hãy để tôi giới thiệu cho bạn một dịch vụ tuyệt vời khác mà tôi thường sử dụng, Ngrok. Ngrok giúp bạn tạo URL có thể truy cập công khai được kết nối với một dịch vụ cục bộ như dịch vụ chúng ta vừa tạo. Tôi không khuyến nghị làm điều này cho việc sử dụng sản xuất, nhưng nó rất tiện dụng trong quá trình phát triển và kiểm thử. Bạn không cần tạo một tài khoản, nhưng cá nhân tôi làm vì tôi có thể thiết lập một tên miền phụ tùy chỉnh mà tôi sử dụng rất thường xuyên. Đây là các bước để cung cấp cho API của chúng ta một URL công khai để gọi từ App Script. Trước tiên, chúng ta tải xuống và giải nén ngrok. Mã trên cho ngrok kết nối với dịch vụ cục bộ trên cổng 8000. Đó là tất cả những gì chúng ta cần làm. Bạn có thể xác nhận nó hoạt động bằng cách lặp lại cuộc gọi curl, nhưng gọi URL công khai. Bạn nên nhận được kết quả tương tự. Nếu bạn không muốn thiết lập một tên miền tùy chỉnh, bạn có thể sử dụng mã này thay vào đó. Điều này sẽ tạo ra một URL công khai ngẫu nhiên và bạn có thể lấy nó bằng mã này. Bây giờ, chúng ta quay lại bước cuối cùng.
Lấy dự đoán Ý định
Chúng ta sẽ điều chỉnh mã chúng ta đã sử dụng để thực hiện yêu cầu API Google Translate để chúng ta có thể thực hiện yêu cầu dự đoán ý định. Một sự khác biệt lớn giữa hai dịch vụ API này là chúng ta cần thực hiện yêu cầu HTTP POST thay vì yêu cầu HTTP GET đơn giản hơn. Hãy xem làm thế nào điều này thay đổi mã của chúng tôi và tìm hiểu thêm về HTTP trong quá trình này. Hàm fetchPrediction gọi dịch vụ API chúng ta đã tạo và trả về ý định được dự đoán. Nó thực hiện tương tự như cuộc gọi curl chúng ta đã thực hiện trên Colab, nhưng trong Apps Script. Tôi đã làm nổi bật một số thay đổi quan trọng trong mã. Hãy xem xét chúng.
Một sự khác biệt chính giữa yêu cầu GET và POST là trong yêu cầu GET, dữ liệu được truyền trong URL dưới dạng tham số. Trong yêu cầu POST, dữ liệu được truyền trong phần thân của yêu cầu. Chúng ta cần định dạng dữ liệu trước khi chúng ta truyền vào phần thân và chúng ta cũng cần thiết lập loại nội dung chính xác để máy chủ biết cách giải mã nó. Dòng này mã hóa câu hỏi chúng ta đang truyền. Đây là một ví dụ về dạng TEXT đã được mã hóa. Loại nội dung chính xác cho việc mã hóa này là application/x-www-form-urlencoded. Đây là phương pháp mã hóa được đề xuất cho dữ liệu biểu mẫu HTML.
Chúng ta tạo một cấu trúc dữ liệu tùy chọn trong đó chúng ta chỉ định các thiết lập này và loại yêu cầu chính xác và chúng ta đã sẵn sàng.
Chọn chức năng fetchPrediction từ menu rồi nhấp vào nút chạy.
Bạn sẽ thấy đầu vào đã được mã hóa và ý định được dự đoán trong log.
Làm thế nào chúng ta có ý định cho tất cả các từ khóa trong sheet?
Bạn có thể nghĩ rằng chúng ta sẽ tạo một chức năng khác sẽ đọc các từ khóa trong một vòng lặp và điền ý định. Nhưng không phải! Chúng ta chỉ cần gọi chính xác hàm này từ sheet! Tuyệt quá phải không?
Tài nguyên để Tìm hiểu thêm
Kết hợp các chức năng App Script đơn giản với các backend API mạnh mẽ mà bạn có thể viết bằng bất kỳ ngôn ngữ nào mở ra cánh cửa cho vô số công cụ tăng năng suất. Dưới đây là một số tài nguyên mà tôi đã đọc khi tạo bài viết này.
– Hướng dẫn App Script
– Hướng dẫn nhanh về App Script
– Các chức năng tùy chỉnh
– App Script Codelab
– Codelab dịch văn bản
– Cập nhật hàng loạt trong Google Sheets
Cuối cùng, hãy nhấn mạnh một dự án quan trọng và có giá trị mà JR Oakes đã bắt đầu. Đó là một kho lưu trữ tuyệt vời cho các dự án Python và JavaScript từ các lập trình viên trong cộng đồng SEO. Tôi dự định tìm thời gian để tải lên các đoạn mã của mình, vui lòng đóng góp của bạn.
Vì một lý do nào đó, vấn đề không quan trọng này vẫn xuất hiện trong luồng Twitter của tôi. Tôi sẽ để tweet này ở đây như một lời nhắc nhỏ thân thiện. ✌️
Chỉ là một lời nhắc nhỏ thân thiện. #SEOs lập trình không hề “tốt hơn” so với những người không lập trình. Những #SEOs thông minh nhất mà tôi biết👇🏼hợp tác tuyệt vời với những người lập trình. Giao tiếp hiệu quả là một kỹ năng vô cùng quý giá và khó có được. Chúng ta nên hoan nghênh những kỹ năng đa dạng trong cộng đồng của chúng ta. 💪🏼
Thêm tài nguyên:
– Phân loại ý định tự động bằng học sâu
– Phân loại ý định tự động bằng học sâu (Phần 2)
– 6 nhiệm vụ SEO tự động hóa với Python
Hình ảnh được ghi nhận bởi tác giả, tháng 3 năm 2020
Tìm hiểu thêm về chúng tôi tại: TRANHUNG Digital
Nguồn tham khảo: https://www.searchenginejournal.com/automated-intent-classification-using-deep-learning-google-sheets/353910/