Các phương pháp hay nhất cho kỹ sư học máy
Martin Zinkevich
Tài liệu này nhằm giúp những người có kiến thức cơ bản về công nghệ học máy tận dụng các phương pháp hay nhất của Google trong lĩnh vực học máy. Tài liệu này trình bày một phong cách cho việc học máy, tương tự như Hướng dẫn về quy tắc lập trình C++ của Google và các hướng dẫn phổ biến khác về lập trình thực tế. Nếu đã tham gia một lớp học về máy học hoặc đã xây dựng hoặc làm việc trên một mô hình máy học, thì bạn có nền tảng cần thiết để đọc tài liệu này.
Thuật ngữ
Các thuật ngữ sau đây sẽ xuất hiện nhiều lần trong phần thảo luận về việc học máy hiệu quả:
- Phiên bản: Đối tượng mà bạn muốn dự đoán. Ví dụ: thực thể có thể là một trang web mà bạn muốn phân loại là "về mèo" hoặc "không phải về mèo".
- Nhãn: Câu trả lời cho một nhiệm vụ dự đoán – câu trả lời do hệ thống học máy tạo ra hoặc câu trả lời đúng được cung cấp trong dữ liệu huấn luyện. Ví dụ: nhãn cho một trang web có thể là "về mèo".
- Tính năng: Một thuộc tính của một thực thể được dùng trong một tác vụ dự đoán. Ví dụ: một trang web có thể có một đặc điểm là "chứa từ "mèo"".
- Cột tính năng: Một tập hợp các tính năng có liên quan, chẳng hạn như tập hợp tất cả các quốc gia có thể là nơi người dùng sinh sống. Một ví dụ có thể có một hoặc nhiều tính năng xuất hiện trong cột tính năng. "Cột tính năng" là thuật ngữ dành riêng cho Google. Cột tính năng được gọi là "không gian tên" trong hệ thống VW (tại Yahoo/Microsoft) hoặc trường.
- Ví dụ: Một thực thể (có các tính năng) và một nhãn.
- Mô hình: Biểu diễn thống kê của một tác vụ dự đoán. Bạn huấn luyện một mô hình trên các ví dụ, sau đó sử dụng mô hình đó để đưa ra dự đoán.
- Chỉ số: Một con số mà bạn quan tâm. Có thể được tối ưu hoá trực tiếp hoặc không.
- Mục tiêu: Một chỉ số mà thuật toán của bạn đang cố gắng tối ưu hoá.
- Quy trình: Cơ sở hạ tầng xung quanh thuật toán học máy. Bao gồm việc thu thập dữ liệu từ giao diện người dùng, đưa dữ liệu đó vào các tệp dữ liệu huấn luyện, huấn luyện một hoặc nhiều mô hình và xuất các mô hình đó sang môi trường sản xuất.
- Tỷ lệ nhấp Tỷ lệ phần trăm số khách truy cập vào một trang web đã nhấp vào một đường liên kết trong quảng cáo.
Tổng quan
Cách tạo ra sản phẩm chất lượng:
làm công nghệ học máy như một kỹ sư giỏi, chứ không phải như một chuyên gia học máy giỏi.
Trên thực tế, hầu hết các vấn đề bạn gặp phải đều là vấn đề kỹ thuật. Ngay cả khi có tất cả tài nguyên của một chuyên gia học máy giỏi, hầu hết lợi ích đều đến từ các tính năng tuyệt vời chứ không phải thuật toán học máy tuyệt vời. Vì vậy, phương pháp cơ bản là:
- Đảm bảo quy trình của bạn hoàn chỉnh từ đầu đến cuối.
- Bắt đầu bằng một mục tiêu hợp lý.
- Thêm các tính năng hợp lý theo cách đơn giản.
- Đảm bảo quy trình của bạn luôn ổn định.
Phương pháp này sẽ hoạt động hiệu quả trong một khoảng thời gian dài. Chỉ chuyển hướng khỏi phương pháp này khi không còn các mẹo đơn giản nào để giúp bạn tiến xa hơn. Việc tăng độ phức tạp sẽ làm chậm các bản phát hành trong tương lai.
Sau khi bạn đã sử dụng hết các thủ thuật đơn giản, công nghệ học máy tiên tiến có thể sẽ là công cụ bạn sử dụng trong tương lai. Xem phần về dự án máy học Giai đoạn III.
Tài liệu này được sắp xếp như sau:
- Phần đầu tiên sẽ giúp bạn hiểu liệu đã đến lúc xây dựng hệ thống học máy hay chưa.
- Phần thứ hai sẽ hướng dẫn bạn triển khai quy trình đầu tiên.
- Phần ba nói về việc khởi chạy và lặp lại trong khi thêm các tính năng mới vào quy trình, cách đánh giá mô hình và độ lệch khi phân phát hoạt động huấn luyện.
- Phần cuối cùng sẽ hướng dẫn bạn những việc cần làm khi đạt đến điểm bão hoà.
- Sau đó, bạn sẽ thấy danh sách công việc liên quan và một phụ lục có một số thông tin cơ bản về các hệ thống thường được dùng làm ví dụ trong tài liệu này.
Trước khi học máy
Quy tắc số 1: Đừng ngại ra mắt sản phẩm mà không cần đến công nghệ học máy.
Công nghệ học máy rất thú vị, nhưng cần có dữ liệu. Về lý thuyết, bạn có thể lấy dữ liệu từ một vấn đề khác rồi điều chỉnh mô hình cho một sản phẩm mới, nhưng điều này có thể hoạt động kém hơn so với phương pháp phỏng đoán cơ bản. Nếu bạn cho rằng công nghệ học máy sẽ giúp bạn tăng hiệu suất lên 100%, thì phương pháp phỏng đoán sẽ giúp bạn tăng hiệu suất lên 50%.
Ví dụ: nếu đang xếp hạng các ứng dụng trong một trang web thương mại ứng dụng, bạn có thể sử dụng tỷ lệ cài đặt hoặc số lượt cài đặt làm giá trị phỏng đoán. Nếu bạn đang phát hiện nội dung rác, hãy lọc ra những nhà xuất bản từng gửi nội dung rác. Đừng ngại sử dụng tính năng biên tập của con người. Nếu bạn cần xếp hạng danh bạ, hãy xếp hạng người liên hệ được sử dụng gần đây nhất ở vị trí cao nhất (hoặc thậm chí xếp hạng theo thứ tự bảng chữ cái). Nếu sản phẩm của bạn không bắt buộc phải sử dụng công nghệ học máy, thì đừng sử dụng công nghệ này cho đến khi bạn có dữ liệu.
Quy tắc số 2: Trước tiên, hãy thiết kế và triển khai các chỉ số.
Trước khi chính thức hoá những việc mà hệ thống học máy sẽ làm, hãy theo dõi nhiều nhất có thể trong hệ thống hiện tại. Hãy làm như vậy vì những lý do sau:
- Việc xin phép người dùng hệ thống từ sớm sẽ dễ dàng hơn.
- Nếu bạn cho rằng có thể sẽ có vấn đề trong tương lai, thì tốt hơn là bạn nên tải dữ liệu trong quá khứ ngay bây giờ.
- Nếu bạn thiết kế hệ thống của mình với tính năng đo lường chỉ số, mọi thứ sẽ diễn ra tốt hơn trong tương lai. Cụ thể, bạn không muốn phải tìm kiếm các chuỗi trong nhật ký để đo lường các chỉ số của mình!
- Bạn sẽ nhận thấy những gì thay đổi và những gì giữ nguyên. Ví dụ: giả sử bạn muốn trực tiếp tối ưu hoá số người dùng hoạt động trong một ngày. Tuy nhiên, trong quá trình thao tác ban đầu với hệ thống, bạn có thể nhận thấy rằng những thay đổi đáng kể về trải nghiệm người dùng không làm thay đổi đáng kể chỉ số này.
Nhóm Google Plus đo lường số lượt chia sẻ lại trên mỗi lượt đọc, số lượt chia sẻ lại trên mỗi lượt đọc, số lượt +1 trên mỗi lượt đọc, số lượt bình luận/lượt đọc, số lượt bình luận trên mỗi người dùng, số lượt chia sẻ lại trên mỗi người dùng, v.v. để tính toán mức độ hiệu quả của một bài đăng tại thời điểm phân phát. Ngoài ra, hãy lưu ý rằng khung thử nghiệm (trong đó bạn có thể nhóm người dùng thành các nhóm và tổng hợp số liệu thống kê theo thử nghiệm) là rất quan trọng. Xem Quy tắc #12.
Bằng cách thu thập chỉ số một cách linh hoạt hơn, bạn có thể nắm được bức tranh tổng thể hơn về hệ thống của mình. Bạn nhận thấy vấn đề? Hãy thêm một chỉ số để theo dõi chỉ số đó! Bạn có hào hứng với một số thay đổi về số lượng trong bản phát hành gần đây không? Hãy thêm một chỉ số để theo dõi chỉ số đó!
Quy tắc #3: Chọn công nghệ học máy thay vì phương pháp phỏng đoán phức tạp.
Một phương pháp phỏng đoán đơn giản có thể giúp sản phẩm của bạn ra mắt. Không thể duy trì phương pháp phỏng đoán phức tạp. Sau khi bạn có dữ liệu và ý tưởng cơ bản về những gì bạn đang cố gắng hoàn thành, hãy chuyển sang học máy. Như trong hầu hết các nhiệm vụ kỹ thuật phần mềm, bạn sẽ muốn liên tục cập nhật phương pháp của mình, cho dù đó là phương pháp phỏng đoán hay mô hình học máy, và bạn sẽ thấy rằng mô hình học máy dễ cập nhật và duy trì hơn (xem Quy tắc số 16).
Giai đoạn 1 của học máy: Quy trình đầu tiên
Tập trung vào cơ sở hạ tầng hệ thống cho quy trình đầu tiên. Mặc dù rất thú vị khi nghĩ về tất cả các ứng dụng học máy đầy trí tưởng tượng mà bạn sắp thực hiện, nhưng sẽ rất khó để tìm hiểu điều gì đang xảy ra nếu trước tiên bạn không tin tưởng quy trình của mình.
Quy tắc 4: Giữ cho mô hình đầu tiên đơn giản và xây dựng cơ sở hạ tầng phù hợp.
Mô hình đầu tiên mang lại hiệu quả lớn nhất cho sản phẩm của bạn, vì vậy, mô hình này không cần phải quá cầu kỳ. Tuy nhiên, bạn sẽ gặp nhiều vấn đề về cơ sở hạ tầng hơn dự kiến. Trước khi bất kỳ ai có thể sử dụng hệ thống học máy mới và hiện đại của bạn, bạn phải xác định:
- Cách cung cấp ví dụ cho thuật toán học của bạn.
- Một bước đầu tiên để xác định ý nghĩa của "tốt" và "xấu" đối với hệ thống của bạn.
- Cách tích hợp mô hình vào ứng dụng. Bạn có thể áp dụng mô hình trực tiếp hoặc tính toán trước mô hình trên các ví dụ ngoại tuyến và lưu trữ kết quả trong một bảng. Ví dụ: bạn có thể muốn phân loại trước các trang web và lưu trữ kết quả trong một bảng, nhưng bạn có thể muốn phân loại tin nhắn trò chuyện trực tiếp.
Việc chọn các tính năng đơn giản giúp bạn dễ dàng đảm bảo rằng:
- Các tính năng này tiếp cận đúng thuật toán học của bạn.
- Mô hình sẽ học được các trọng số hợp lý.
- Các tính năng đã đến đúng mô hình của bạn trong máy chủ.
Khi có một hệ thống thực hiện ba việc này một cách đáng tin cậy, bạn đã hoàn thành phần lớn công việc. Mô hình đơn giản của bạn cung cấp cho bạn các chỉ số cơ sở và hành vi cơ sở mà bạn có thể sử dụng để kiểm thử các mô hình phức tạp hơn. Một số nhóm nhắm đến việc ra mắt lần đầu "trung lập": một lần ra mắt lần đầu ưu tiên rõ ràng các lợi ích của công nghệ học máy để tránh bị phân tâm.
Quy tắc #5: Kiểm thử cơ sở hạ tầng độc lập với công nghệ học máy.
Đảm bảo rằng cơ sở hạ tầng có thể kiểm thử và các phần học của hệ thống được đóng gói để bạn có thể kiểm thử mọi thứ xung quanh. Cụ thể:
- Kiểm thử việc đưa dữ liệu vào thuật toán. Kiểm tra để đảm bảo rằng các cột tính năng cần được điền sẵn đã được điền sẵn. Trong trường hợp quyền riêng tư cho phép, hãy kiểm tra thủ công dữ liệu đầu vào cho thuật toán huấn luyện. Nếu có thể, hãy kiểm tra thống kê trong quy trình của bạn so với thống kê cho cùng một dữ liệu được xử lý ở nơi khác.
- Kiểm thử việc lấy mô hình ra khỏi thuật toán huấn luyện. Đảm bảo rằng mô hình trong môi trường huấn luyện của bạn cho điểm giống với mô hình trong môi trường phân phát (xem Quy tắc #37).
Công nghệ học máy có một phần không thể dự đoán được, vì vậy, hãy đảm bảo rằng bạn có các bài kiểm thử cho mã để tạo ví dụ trong quá trình huấn luyện và phân phát, cũng như bạn có thể tải và sử dụng một mô hình cố định trong quá trình phân phát. Ngoài ra, bạn cũng cần hiểu rõ dữ liệu của mình: hãy xem bài viết Mẹo thực tế để phân tích các tập dữ liệu lớn, phức tạp.
Quy tắc #6: Hãy cẩn thận với dữ liệu bị loại bỏ khi sao chép quy trình.
Thường thì chúng ta tạo một quy trình bằng cách sao chép một quy trình hiện có (tức là lập trình theo kiểu cargo cult) và quy trình cũ sẽ loại bỏ dữ liệu mà chúng ta cần cho quy trình mới. Ví dụ: quy trình cho tính năng Nổi bật trên Google Plus sẽ xoá các bài đăng cũ (vì quy trình này đang cố gắng xếp hạng các bài đăng mới). Quy trình này được sao chép để sử dụng cho Luồng Google Plus, nơi các bài đăng cũ vẫn có ý nghĩa, nhưng quy trình này vẫn đang loại bỏ các bài đăng cũ. Một mẫu phổ biến khác là chỉ ghi lại dữ liệu mà người dùng đã xem. Do đó, dữ liệu này sẽ vô ích nếu chúng ta muốn lập mô hình lý do người dùng không xem một bài đăng cụ thể, vì tất cả các ví dụ tiêu cực đã bị loại bỏ. Một vấn đề tương tự cũng xảy ra trong Play. Trong khi làm việc trên Trang chủ ứng dụng của Play, một quy trình mới cũng được tạo ra, trong đó có các ví dụ từ trang đích của Play Games mà không có bất kỳ tính năng nào để phân biệt nguồn gốc của từng ví dụ.
Quy tắc #7: Chuyển quy trình phỏng đoán thành tính năng hoặc xử lý các quy trình đó bên ngoài.
Thông thường, các vấn đề mà công nghệ học máy đang cố gắng giải quyết không hoàn toàn mới. Hiện có một hệ thống để xếp hạng, phân loại hoặc giải quyết bất kỳ vấn đề nào mà bạn đang cố gắng giải quyết. Điều này có nghĩa là có một loạt quy tắc và phương pháp phỏng đoán. Những phương pháp phỏng đoán này cũng có thể giúp bạn nâng cao hiệu suất khi được điều chỉnh bằng công nghệ học máy. Bạn nên khai thác thông tin phỏng đoán cho bất kỳ thông tin nào mà chúng có, vì hai lý do. Thứ nhất, quá trình chuyển đổi sang hệ thống học máy sẽ suôn sẻ hơn. Thứ hai, thường thì các quy tắc đó chứa nhiều thông tin trực quan về hệ thống mà bạn không muốn loại bỏ. Có 4 cách để bạn có thể sử dụng một phương pháp phỏng đoán hiện có:
- Xử lý trước bằng phương pháp phỏng đoán. Nếu tính năng này cực kỳ tuyệt vời, thì đây là một lựa chọn. Ví dụ: nếu trong bộ lọc thư rác, người gửi đã bị đưa vào danh sách đen, đừng cố gắng tìm hiểu lại ý nghĩa của "danh sách đen". Chặn thư. Phương pháp này phù hợp nhất trong các nhiệm vụ phân loại nhị phân.
- Tạo một tính năng. Tạo trực tiếp một tính năng từ phương pháp phỏng đoán là một điều tuyệt vời. Ví dụ: nếu sử dụng phương pháp phỏng đoán để tính điểm liên quan cho một kết quả truy vấn, bạn có thể đưa điểm số đó vào làm giá trị của một tính năng. Sau này, bạn có thể sử dụng các kỹ thuật học máy để điều chỉnh giá trị (ví dụ: chuyển đổi giá trị thành một trong số các tập hợp giá trị rời rạc hữu hạn hoặc kết hợp giá trị đó với các tính năng khác), nhưng hãy bắt đầu bằng cách sử dụng giá trị thô do phương pháp phỏng đoán tạo ra.
- Khai thác dữ liệu đầu vào thô của phương pháp phỏng đoán. Nếu có một phương pháp phỏng đoán cho ứng dụng kết hợp số lượt cài đặt, số ký tự trong văn bản và ngày trong tuần, hãy cân nhắc tách riêng các phần này và đưa các dữ liệu đầu vào này vào quá trình học một cách riêng biệt. Một số kỹ thuật áp dụng cho các nhóm nhạc cũng áp dụng ở đây (xem Quy tắc #40).
- Sửa đổi nhãn. Đây là một tuỳ chọn khi bạn cảm thấy phương thức tìm kiếm phỏng đoán thu thập thông tin hiện không có trong nhãn. Ví dụ: nếu bạn đang cố gắng tăng tối đa số lượt tải xuống, nhưng cũng muốn có nội dung chất lượng, thì có thể giải pháp là nhân nhãn đó với số sao trung bình mà ứng dụng nhận được. Bạn có rất nhiều lựa chọn ở đây. Xem phần "Mục tiêu đầu tiên của bạn".
Hãy lưu ý đến độ phức tạp gia tăng khi sử dụng phương pháp phỏng đoán trong hệ thống học máy. Việc sử dụng các phương pháp phỏng đoán cũ trong thuật toán học máy mới có thể giúp tạo ra quá trình chuyển đổi suôn sẻ, nhưng hãy cân nhắc xem có cách nào đơn giản hơn để đạt được hiệu quả tương tự hay không.
Giám sát
Nhìn chung, hãy thực hành các biện pháp vệ sinh cảnh báo hiệu quả, chẳng hạn như tạo cảnh báo có thể hành động và có trang tổng quan.
Quy tắc số 8: Tìm hiểu các yêu cầu về độ mới của hệ thống.
Hiệu suất sẽ giảm bao nhiêu nếu bạn có một mô hình đã tồn tại một ngày? Một tuần tuổi? Một quý tuổi? Thông tin này có thể giúp bạn hiểu rõ các mức độ ưu tiên của hoạt động giám sát. Nếu bạn mất chất lượng sản phẩm đáng kể nếu không cập nhật mô hình trong một ngày, thì bạn nên có một kỹ sư liên tục theo dõi mô hình đó. Hầu hết các hệ thống phân phát quảng cáo đều có quảng cáo mới để xử lý mỗi ngày và phải cập nhật hằng ngày. Ví dụ: nếu không cập nhật mô hình học máy cho Google Play Tìm kiếm, thì mô hình này có thể gây ảnh hưởng tiêu cực trong vòng chưa đầy một tháng. Một số mô hình cho nội dung Nổi bật trong Google Plus không có giá trị nhận dạng bài đăng trong mô hình, vì vậy, các mô hình này có thể xuất không thường xuyên. Các mô hình khác có giá trị nhận dạng bài đăng được cập nhật thường xuyên hơn nhiều. Ngoài ra, hãy lưu ý rằng độ mới có thể thay đổi theo thời gian, đặc biệt là khi bạn thêm hoặc xoá các cột đặc điểm khỏi mô hình.
Quy tắc số 9: Phát hiện vấn đề trước khi xuất mô hình.
Nhiều hệ thống học máy có một giai đoạn mà bạn xuất mô hình để phân phát. Nếu có vấn đề với mô hình đã xuất, thì đó là vấn đề mà người dùng phải đối mặt.
Kiểm tra tính hợp lệ ngay trước khi xuất mô hình. Cụ thể, hãy đảm bảo hiệu suất của mô hình là hợp lý trên dữ liệu được giữ lại. Hoặc nếu bạn vẫn còn thắc mắc về dữ liệu, đừng xuất mô hình. Nhiều nhóm liên tục triển khai các mô hình kiểm tra khu vực bên dưới đường cong ROC (hoặc AUC) trước khi xuất. Các vấn đề về mô hình chưa được xuất sẽ yêu cầu thông báo qua email, nhưng các vấn đề về mô hình mà người dùng nhìn thấy có thể yêu cầu một trang. Vì vậy, tốt hơn là bạn nên chờ và chắc chắn trước khi ảnh hưởng đến người dùng.
Quy tắc số 10: Cảnh giác với các lỗi thầm lặng.
Đây là vấn đề thường xảy ra với các hệ thống học máy hơn là các loại hệ thống khác. Giả sử một bảng cụ thể đang được nối không còn được cập nhật nữa. Hệ thống học máy sẽ điều chỉnh và hành vi sẽ tiếp tục ở mức hợp lý, giảm dần. Đôi khi, bạn sẽ thấy các bảng đã lỗi thời nhiều tháng và một lần làm mới đơn giản sẽ cải thiện hiệu suất nhiều hơn bất kỳ lần phát hành nào khác trong quý đó! Phạm vi của một tính năng có thể thay đổi do các thay đổi về cách triển khai: ví dụ: cột tính năng có thể được điền sẵn trong 90% số ví dụ và đột nhiên giảm xuống còn 60% số ví dụ. Play từng có một bảng đã lỗi thời trong 6 tháng và chỉ việc làm mới bảng này đã giúp tăng tỷ lệ cài đặt thêm 2%. Nếu theo dõi số liệu thống kê của dữ liệu cũng như kiểm tra dữ liệu theo cách thủ công trong một số trường hợp, bạn có thể giảm thiểu các loại lỗi này.
Quy tắc #11: Cung cấp tài liệu và chủ sở hữu cho các cột tính năng.
Nếu hệ thống lớn và có nhiều cột tính năng, hãy biết người đã tạo hoặc đang duy trì từng cột tính năng. Nếu bạn thấy người hiểu rõ về một cột tính năng sắp rời khỏi nhóm, hãy đảm bảo rằng có người nắm được thông tin. Mặc dù nhiều cột tính năng có tên mô tả, nhưng bạn nên có nội dung mô tả chi tiết hơn về tính năng đó, nguồn gốc của tính năng và cách tính năng đó dự kiến sẽ giúp ích.
Mục tiêu đầu tiên của bạn
Bạn có nhiều chỉ số hoặc phép đo lường về hệ thống mà bạn quan tâm, nhưng thuật toán học máy thường sẽ yêu cầu một mục tiêu duy nhất, một con số mà thuật toán của bạn đang "cố gắng" tối ưu hoá. Ở đây, tôi phân biệt giữa mục tiêu và chỉ số: chỉ số là bất kỳ con số nào mà hệ thống của bạn báo cáo, có thể quan trọng hoặc không quan trọng. Xem thêm Quy tắc số 2.
Quy tắc 12: Đừng suy nghĩ quá nhiều về việc bạn chọn mục tiêu nào để trực tiếp tối ưu hoá.
Bạn muốn kiếm tiền, làm hài lòng người dùng và xây dựng một thế giới tốt đẹp hơn. Có rất nhiều chỉ số mà bạn quan tâm và bạn nên đo lường tất cả các chỉ số đó (xem Quy tắc số 2). Tuy nhiên, ở giai đoạn đầu của quy trình học máy, bạn sẽ nhận thấy tất cả các chỉ số này đều tăng lên, ngay cả những chỉ số mà bạn không trực tiếp tối ưu hoá. Ví dụ: giả sử bạn quan tâm đến số lượt nhấp và thời gian người dùng dành cho trang web. Nếu tối ưu hoá cho số lượt nhấp, bạn có thể thấy thời gian người dùng dành ra tăng lên.
Vì vậy, hãy đơn giản hoá và đừng suy nghĩ quá nhiều về việc cân bằng các chỉ số khác nhau khi bạn vẫn có thể dễ dàng tăng tất cả các chỉ số. Tuy nhiên, đừng quá lạm dụng quy tắc này: đừng nhầm lẫn mục tiêu của bạn với tình trạng tổng thể của hệ thống (xem Quy tắc #39). Ngoài ra, nếu bạn nhận thấy chỉ số được tối ưu hoá trực tiếp đang tăng lên nhưng quyết định không chạy, thì có thể bạn sẽ phải sửa đổi một số mục tiêu.
Quy tắc #13: Chọn một chỉ số đơn giản, có thể quan sát và phân bổ cho mục tiêu đầu tiên.
Thông thường, bạn không biết mục tiêu thực sự là gì. Bạn nghĩ rằng bạn biết, nhưng sau khi nhìn chăm chú vào dữ liệu và phân tích song song hệ thống cũ và hệ thống học máy mới, bạn nhận ra rằng bạn muốn điều chỉnh mục tiêu. Hơn nữa, các thành viên trong nhóm thường không thể thống nhất về mục tiêu thực sự. Mục tiêu của mô hình học máy phải là một mục tiêu dễ đo lường và là đại diện cho mục tiêu "thực". Thực tế, thường không có mục tiêu "thực sự" (xem Quy tắc#39). Vì vậy, hãy huấn luyện theo mục tiêu đơn giản của học máy và cân nhắc việc có một "lớp chính sách" ở trên cùng cho phép bạn thêm logic bổ sung (hy vọng là logic rất đơn giản) để thực hiện việc xếp hạng cuối cùng.
Điều dễ dàng nhất để lập mô hình là hành vi của người dùng được quan sát trực tiếp và có thể phân bổ cho một hành động của hệ thống:
- Có người nhấp vào đường liên kết được xếp hạng này không?
- Đối tượng được xếp hạng này đã được tải xuống chưa?
- Đối tượng được xếp hạng này có được chuyển tiếp/trả lời/gửi qua email không?
- Đối tượng được xếp hạng này có được xếp hạng không?
- Đối tượng được hiển thị này có bị đánh dấu là nội dung rác/nội dung khiêu dâm/nội dung phản cảm không?
Ban đầu, hãy tránh lập mô hình các hiệu ứng gián tiếp:
- Người dùng có truy cập vào ngày tiếp theo không?
- Người dùng đã truy cập vào trang web trong bao lâu?
- Số người dùng hoạt động hằng ngày là bao nhiêu?
Hiệu ứng gián tiếp tạo ra các chỉ số tuyệt vời và có thể được sử dụng trong quá trình thử nghiệm A/B cũng như trong các quyết định ra mắt.
Cuối cùng, đừng cố gắng để công nghệ học máy tìm hiểu:
- Người dùng có hài lòng khi sử dụng sản phẩm không?
- Người dùng có hài lòng với trải nghiệm này không?
- Sản phẩm có cải thiện tổng thể sức khoẻ của người dùng không?
- Điều này sẽ ảnh hưởng như thế nào đến tình hình tổng thể của công ty?
Đây đều là những yếu tố quan trọng, nhưng cũng rất khó đo lường. Thay vào đó, hãy sử dụng proxy: nếu hài lòng, người dùng sẽ ở lại trang web lâu hơn. Nếu hài lòng, người dùng sẽ truy cập lại vào ngày mai. Đối với vấn đề liên quan đến phúc lợi và tình hình tài chính của công ty, con người cần phải đưa ra quyết định để kết nối mọi mục tiêu học được bằng máy với bản chất của sản phẩm bạn đang bán và kế hoạch kinh doanh của bạn.
Quy tắc #14: Bắt đầu bằng một mô hình có thể diễn giải giúp gỡ lỗi dễ dàng hơn.
Mô hình hồi quy tuyến tính, hồi quy logistic và hồi quy Poisson được thúc đẩy trực tiếp bởi mô hình xác suất. Mỗi kết quả dự đoán có thể được diễn giải là một xác suất hoặc một giá trị dự kiến. Điều này giúp dễ dàng gỡ lỗi hơn so với các mô hình sử dụng mục tiêu (lỗ hổng 0-1, nhiều lỗ hổng bản lề, v.v.) cố gắng trực tiếp tối ưu hoá độ chính xác phân loại hoặc hiệu suất xếp hạng. Ví dụ: nếu xác suất trong quá trình huấn luyện khác với xác suất được dự đoán trong quá trình song song hoặc bằng cách kiểm tra hệ thống sản xuất, thì sự khác biệt này có thể cho thấy một vấn đề.
Ví dụ: trong hồi quy tuyến tính, hồi quy logistic hoặc hồi quy Poisson, có các tập hợp con của dữ liệu trong đó giá trị dự đoán trung bình bằng nhãn trung bình (đã được điều chỉnh theo thời điểm 1 hoặc chỉ được điều chỉnh). Điều này đúng giả sử rằng bạn không có quy trình chuẩn hoá và thuật toán của bạn đã hội tụ, và nói chung, điều này gần đúng. Nếu bạn có một tính năng là 1 hoặc 0 cho mỗi ví dụ, thì nhóm 3 ví dụ mà tính năng đó là 1 sẽ được hiệu chỉnh. Ngoài ra, nếu bạn có một tính năng là 1 cho mỗi ví dụ, thì tập hợp tất cả các ví dụ sẽ được hiệu chỉnh.
Với các mô hình đơn giản, bạn sẽ dễ dàng xử lý các vòng phản hồi hơn (xem Quy tắc #36). Thông thường, chúng ta sử dụng các dự đoán có xác suất này để đưa ra quyết định: ví dụ: xếp hạng bài đăng theo thứ tự giảm dần giá trị dự kiến (tức là xác suất nhấp/tải xuống/v.v.). Tuy nhiên, hãy nhớ rằng khi đến lúc chọn mô hình để sử dụng, quyết định quan trọng hơn xác suất dữ liệu được đưa vào mô hình (xem Quy tắc #27).
Quy tắc #15: Tách biệt tính năng Lọc nội dung rác và Xếp hạng chất lượng trong một Lớp chính sách.
Xếp hạng chất lượng là một nghệ thuật, nhưng lọc nội dung rác là một cuộc chiến. Những tín hiệu mà bạn sử dụng để xác định bài đăng chất lượng cao sẽ trở nên rõ ràng đối với những người sử dụng hệ thống của bạn và họ sẽ điều chỉnh bài đăng của mình để có những thuộc tính này. Do đó, thứ hạng chất lượng của bạn nên tập trung vào việc xếp hạng nội dung được đăng một cách thiện chí. Bạn không nên đánh giá thấp trình tự học xếp hạng chất lượng vì xếp hạng nội dung rác ở mức cao. Tương tự, nội dung "nhạy cảm" phải được xử lý riêng biệt với thứ hạng dựa trên chất lượng. Việc lọc thư rác lại là một chuyện khác. Bạn phải dự kiến rằng các tính năng mà bạn cần tạo sẽ liên tục thay đổi. Thông thường, bạn sẽ đưa vào hệ thống các quy tắc rõ ràng (nếu một bài đăng có nhiều hơn 3 lượt bình chọn nội dung rác, thì đừng truy xuất bài đăng đó, v.v.). Mọi mô hình đã học đều phải được cập nhật hằng ngày, nếu không thì phải nhanh hơn. Danh tiếng của nhà sáng tạo nội dung sẽ đóng vai trò rất quan trọng.
Ở một mức độ nào đó, bạn sẽ phải tích hợp kết quả của hai hệ thống này. Xin lưu ý rằng việc lọc nội dung rác trong kết quả tìm kiếm có thể phải nghiêm ngặt hơn so với việc lọc nội dung rác trong thư. Ngoài ra, bạn nên xoá nội dung rác khỏi dữ liệu huấn luyện cho bộ phân loại chất lượng.
Giai đoạn II của công nghệ học máy: Kỹ thuật trích xuất tính năng
Trong giai đoạn đầu của vòng đời hệ thống học máy, các vấn đề quan trọng là đưa dữ liệu huấn luyện vào hệ thống học, đo lường mọi chỉ số quan tâm và tạo cơ sở hạ tầng phân phát. Sau khi bạn có một hệ thống hoạt động toàn diện với các bài kiểm thử đơn vị và hệ thống được đo lường, Phase II (Giai đoạn II) sẽ bắt đầu.
Trong giai đoạn thứ hai, có rất nhiều quả chín. Có nhiều tính năng rõ ràng có thể được đưa vào hệ thống. Do đó, giai đoạn thứ hai của quá trình học máy là thu thập càng nhiều tính năng càng tốt và kết hợp các tính năng đó theo cách trực quan. Trong giai đoạn này, tất cả các chỉ số vẫn sẽ tăng lên. Sẽ có rất nhiều lần ra mắt và đây là thời điểm tuyệt vời để thu hút nhiều kỹ sư có thể kết hợp tất cả dữ liệu mà bạn cần để tạo ra một hệ thống học tập thực sự tuyệt vời.
Quy tắc số 16: Lập kế hoạch ra mắt và lặp lại.
Đừng mong đợi rằng mô hình bạn đang làm việc sẽ là mô hình cuối cùng mà bạn sẽ ra mắt, hoặc thậm chí bạn sẽ ngừng ra mắt mô hình. Do đó, hãy cân nhắc xem độ phức tạp mà bạn thêm vào lần phát hành này có làm chậm các lần phát hành trong tương lai hay không. Nhiều nhóm đã ra mắt một mô hình mỗi quý hoặc nhiều hơn trong nhiều năm. Có 3 lý do cơ bản để ra mắt mô hình mới:
- Bạn đang phát triển các tính năng mới.
- Bạn đang điều chỉnh quá trình chuẩn hoá và kết hợp các tính năng cũ theo những cách mới.
- Bạn đang điều chỉnh mục tiêu.
Dù sao, bạn cũng nên dành chút thời gian để chăm sóc mô hình: việc xem xét dữ liệu được đưa vào ví dụ có thể giúp tìm thấy các tín hiệu mới cũng như các tín hiệu cũ, bị hỏng. Vì vậy, khi xây dựng mô hình, hãy cân nhắc xem bạn có thể dễ dàng thêm, xoá hoặc kết hợp lại các tính năng hay không. Hãy nghĩ đến việc tạo một bản sao mới của quy trình và xác minh tính chính xác của quy trình đó dễ dàng như thế nào. Hãy suy nghĩ xem có thể chạy song song hai hoặc ba bản sao hay không. Cuối cùng, đừng lo lắng về việc tính năng 16 trong số 35 tính năng có được đưa vào phiên bản quy trình này hay không. Bạn sẽ nhận được khoản thanh toán này vào quý tới.
Quy tắc #17: Bắt đầu với các tính năng được quan sát và báo cáo trực tiếp thay vì các tính năng được học.
Đây có thể là một điểm gây tranh cãi, nhưng giúp tránh được nhiều cạm bẫy. Trước tiên, hãy mô tả tính năng đã học là gì. Tính năng đã học là tính năng do hệ thống bên ngoài (chẳng hạn như hệ thống phân cụm không giám sát) hoặc chính trình học tạo ra (ví dụ: thông qua mô hình được phân tích hoặc học sâu). Cả hai phương thức này đều có thể hữu ích, nhưng có thể gặp nhiều vấn đề, vì vậy, bạn không nên sử dụng trong mô hình đầu tiên.
Nếu bạn sử dụng một hệ thống bên ngoài để tạo một tính năng, hãy nhớ rằng hệ thống bên ngoài đó có mục tiêu riêng. Mục tiêu của hệ thống bên ngoài có thể chỉ có mối tương quan yếu với mục tiêu hiện tại của bạn. Nếu bạn chụp ảnh nhanh hệ thống bên ngoài, thì ảnh đó có thể đã lỗi thời. Nếu bạn cập nhật các tính năng từ hệ thống bên ngoài, thì ý nghĩa có thể thay đổi. Nếu bạn sử dụng một hệ thống bên ngoài để cung cấp một tính năng, hãy lưu ý rằng phương pháp này đòi hỏi bạn phải cẩn thận.
Vấn đề chính với các mô hình được phân tích và mô hình sâu là các mô hình này không phải là mô hình lồi. Do đó, không có gì đảm bảo rằng bạn có thể ước tính hoặc tìm thấy giải pháp tối ưu, và các giá trị cực tiểu cục bộ được tìm thấy trên mỗi lần lặp lại có thể khác nhau. Sự biến thiên này khiến bạn khó đánh giá liệu tác động của một thay đổi đối với hệ thống có ý nghĩa hay ngẫu nhiên. Bằng cách tạo một mô hình không có tính năng sâu, bạn có thể đạt được hiệu suất cơ sở tuyệt vời. Sau khi đạt được đường cơ sở này, bạn có thể thử các phương pháp phức tạp hơn.
Quy tắc #18: Khám phá bằng các tính năng của nội dung khái quát trên nhiều ngữ cảnh.
Thông thường, hệ thống học máy chỉ là một phần nhỏ trong một bức tranh lớn hơn nhiều. Ví dụ: nếu bạn tưởng tượng một bài đăng có thể được sử dụng trong phần Nổi bật, thì nhiều người sẽ nhấn nút Thêm một, chia sẻ lại hoặc bình luận về bài đăng đó trước khi bài đăng đó xuất hiện trong phần Nổi bật. Nếu bạn cung cấp những số liệu thống kê đó cho trình học, thì trình học có thể quảng bá các bài đăng mới mà không có dữ liệu trong ngữ cảnh mà trình học đang tối ưu hoá. Danh sách phát Tiếp theo trên YouTube có thể sử dụng số lượt xem hoặc số lượt xem cùng lúc (tính số lần một video được xem sau khi một video khác được xem) từ kết quả tìm kiếm trên YouTube. Bạn cũng có thể sử dụng điểm xếp hạng rõ ràng của người dùng. Cuối cùng, nếu bạn có một hành động của người dùng mà bạn đang sử dụng làm nhãn, thì việc xem hành động đó trên tài liệu trong một ngữ cảnh khác có thể là một tính năng tuyệt vời. Tất cả các tính năng này đều giúp bạn đưa nội dung mới vào bối cảnh. Xin lưu ý rằng đây không phải là việc cá nhân hoá: trước tiên, hãy tìm hiểu xem liệu có ai thích nội dung trong bối cảnh này hay không, sau đó tìm hiểu xem ai thích nội dung đó hơn hoặc ít hơn.
Quy tắc #19: Sử dụng các tính năng rất cụ thể khi có thể.
Với hàng tấn dữ liệu, việc tìm hiểu hàng triệu tính năng đơn giản sẽ đơn giản hơn so với việc tìm hiểu một vài tính năng phức tạp. Giá trị nhận dạng của tài liệu đang được truy xuất và các cụm từ tìm kiếm được chuẩn hoá không cung cấp nhiều thông tin tổng quát, nhưng giúp bạn điều chỉnh thứ hạng với nhãn trên các cụm từ tìm kiếm chính. Do đó, đừng ngại sử dụng các nhóm tính năng trong đó mỗi tính năng chỉ áp dụng cho một phần rất nhỏ dữ liệu của bạn, nhưng mức độ phù hợp tổng thể lại trên 90%. Bạn có thể sử dụng quy trình chuẩn hoá để loại bỏ các đặc điểm chỉ áp dụng cho quá ít ví dụ.
Quy tắc #20: Kết hợp và sửa đổi các tính năng hiện có để tạo các tính năng mới theo cách dễ hiểu.
Có nhiều cách để kết hợp và sửa đổi các tính năng. Các hệ thống học máy như TensorFlow cho phép bạn xử lý trước dữ liệu thông qua các biến đổi. Hai phương pháp chuẩn nhất là "discretizations" (số liệu rời rạc) và "crosses" (giá trị chéo).
Quá trình discretisation bao gồm việc lấy một đặc điểm liên tục và tạo nhiều đặc điểm rời rạc từ đặc điểm đó. Cân nhắc một đặc điểm liên tục như độ tuổi. Bạn có thể tạo một đặc điểm là 1 khi độ tuổi dưới 18, một đặc điểm khác là 1 khi độ tuổi từ 18 đến 35, v.v. Đừng suy nghĩ quá nhiều về ranh giới của các biểu đồ này: các phân vị cơ bản sẽ cho bạn thấy phần lớn tác động.
Biểu đồ chéo kết hợp hai hoặc nhiều cột đặc điểm. Cột đặc điểm, theo thuật ngữ của TensorFlow, là một tập hợp các đặc điểm đồng nhất (ví dụ: {male, female}, {US, Canada, Mexico}, v.v.). Một dấu thập là một cột tính năng mới có các tính năng trong đó, ví dụ: {male, female} × {US,Canada, Mexico}. Cột tính năng mới này sẽ chứa tính năng (nam, Canada). Nếu bạn đang sử dụng TensorFlow và bạn yêu cầu TensorFlow tạo giá trị chéo này cho bạn, thì tính năng (nam, Canada) này sẽ xuất hiện trong các ví dụ đại diện cho người Canada là nam. Xin lưu ý rằng bạn cần có một lượng lớn dữ liệu để học các mô hình có giao nhau giữa 3, 4 hoặc nhiều cột đặc điểm cơ sở.
Các phép lai tạo ra cột đặc điểm rất lớn có thể bị phù hợp quá mức. Ví dụ: giả sử bạn đang tìm kiếm một số nội dung và có một cột đặc điểm chứa các từ trong cụm từ tìm kiếm, đồng thời có một cột đặc điểm chứa các từ trong tài liệu. Bạn có thể kết hợp các tính năng này với một dấu thập, nhưng cuối cùng bạn sẽ có rất nhiều tính năng (xem Quy tắc #21).
Khi làm việc với văn bản, bạn có hai lựa chọn. Nghiêm ngặt nhất là tích vô hướng. Sản phẩm nội suy ở dạng đơn giản nhất chỉ tính số lượng từ chung giữa truy vấn và tài liệu. Sau đó, bạn có thể discretize tính năng này. Một phương pháp khác là giao nhau: do đó, chúng ta sẽ có một đặc điểm xuất hiện nếu và chỉ khi từ "pony" có trong cả tài liệu và truy vấn, và một đặc điểm khác xuất hiện nếu và chỉ khi từ "the" có trong cả tài liệu và truy vấn.
Quy tắc #21: Số trọng số đặc điểm mà bạn có thể học trong mô hình tuyến tính gần như tỷ lệ thuận với lượng dữ liệu bạn có.
Có những kết quả lý thuyết học thống kê thú vị liên quan đến mức độ phức tạp phù hợp của một mô hình, nhưng về cơ bản, quy tắc này là tất cả những gì bạn cần biết. Tôi đã có những cuộc trò chuyện trong đó mọi người nghi ngờ rằng có thể học được bất cứ điều gì từ một nghìn ví dụ hoặc bạn sẽ cần nhiều hơn một triệu ví dụ, vì họ bị mắc kẹt trong một phương pháp học tập nhất định. Điều quan trọng là bạn phải mở rộng quy mô học tập theo quy mô dữ liệu:
- Nếu đang làm việc trên một hệ thống xếp hạng tìm kiếm và có hàng triệu từ khác nhau trong tài liệu và cụm từ tìm kiếm, đồng thời bạn có 1.000 ví dụ được gắn nhãn, thì bạn nên sử dụng tích vô hướng giữa các tính năng tài liệu và cụm từ tìm kiếm, TF-IDF và một số tính năng khác được thiết kế thủ công. 1.000 ví dụ, một tá tính năng.
- Nếu bạn có một triệu ví dụ, hãy giao nhau các cột tài liệu và truy vấn tính năng, sử dụng quy trình chuẩn hoá và có thể là lựa chọn tính năng. Phương pháp này sẽ cung cấp cho bạn hàng triệu đặc điểm, nhưng với phương pháp chuẩn hoá, bạn sẽ có ít đặc điểm hơn. 10 triệu ví dụ, có thể là 100 nghìn tính năng.
- Nếu có hàng tỷ hoặc hàng trăm tỷ ví dụ, bạn có thể giao nhau các cột đặc điểm với mã thông báo tài liệu và truy vấn, sử dụng tính năng lựa chọn đặc điểm và chuẩn hoá. Bạn sẽ có một tỷ ví dụ và 10 triệu tính năng. Lý thuyết học thống kê hiếm khi đưa ra các giới hạn chặt chẽ, nhưng lại đưa ra hướng dẫn tuyệt vời cho một điểm xuất phát.
Cuối cùng, hãy sử dụng Quy tắc số 28 để quyết định những tính năng cần sử dụng.
Quy tắc #22: Dọn dẹp các tính năng bạn không còn sử dụng.
Các tính năng không dùng đến sẽ tạo ra nợ kỹ thuật. Nếu bạn nhận thấy mình không sử dụng một tính năng và việc kết hợp tính năng đó với các tính năng khác không hoạt động, hãy loại bỏ tính năng đó khỏi cơ sở hạ tầng của bạn. Bạn muốn giữ cho hạ tầng của mình luôn sạch sẽ để có thể thử nghiệm các tính năng hứa hẹn nhất nhanh nhất có thể. Nếu cần, người khác luôn có thể thêm lại tính năng của bạn.
Hãy lưu ý đến phạm vi cung cấp khi cân nhắc những tính năng cần thêm hoặc giữ lại. Tính năng này bao gồm bao nhiêu ví dụ? Ví dụ: nếu bạn có một số tính năng cá nhân hoá nhưng chỉ 8% người dùng có sử dụng tính năng cá nhân hoá, thì tính năng này sẽ không hiệu quả lắm.
Đồng thời, một số tính năng có thể vượt quá tầm quan trọng của chúng. Ví dụ: nếu bạn có một đặc điểm chỉ bao gồm 1% dữ liệu, nhưng 90% ví dụ có đặc điểm đó là tích cực, thì đó sẽ là một đặc điểm tuyệt vời để thêm vào.
Phân tích hệ thống của con người
Trước khi chuyển sang giai đoạn thứ ba của học máy, điều quan trọng là bạn phải tập trung vào một nội dung không được dạy trong bất kỳ lớp học máy nào: cách xem xét một mô hình hiện có và cải thiện mô hình đó. Đây là một nghệ thuật hơn là một khoa học, tuy nhiên, có một số mẫu đối kháng mà bạn nên tránh.
Quy tắc #23: Bạn không phải là người dùng cuối thông thường.
Đây có lẽ là cách dễ nhất để một nhóm bị sa lầy. Mặc dù có nhiều lợi ích khi sử dụng phương pháp ăn cá (sử dụng nguyên mẫu trong nhóm) và ăn chó (sử dụng nguyên mẫu trong công ty), nhưng nhân viên nên xem xét liệu hiệu suất có chính xác hay không. Mặc dù không nên sử dụng một thay đổi rõ ràng là không tốt, nhưng mọi thay đổi có vẻ hợp lý gần với bản phát hành chính thức đều phải được kiểm thử thêm, bằng cách trả tiền cho người dùng không chuyên để trả lời các câu hỏi trên một nền tảng cộng đồng hoặc thông qua một thử nghiệm trực tiếp trên người dùng thực.
Có hai lý do dẫn đến việc này. Lý do đầu tiên là bạn quá gần với mã. Có thể bạn đang tìm kiếm một khía cạnh cụ thể của các bài đăng hoặc bạn chỉ quá cảm xúc (ví dụ: thiên kiến xác nhận). Lý do thứ hai là thời gian của bạn quá quý giá. Hãy cân nhắc chi phí của 9 kỹ sư ngồi trong một cuộc họp kéo dài một giờ và suy nghĩ về số lượng nhãn do con người ký hợp đồng mua trên một nền tảng cộng đồng.
Nếu bạn thực sự muốn nhận ý kiến phản hồi của người dùng, hãy sử dụng các phương pháp nghiên cứu trải nghiệm người dùng. Tạo hồ sơ người dùng (có một nội dung mô tả trong cuốn Sketching User Experiences (Vẽ phác thảo trải nghiệm người dùng) của Bill Buxton) ở giai đoạn đầu của quy trình và kiểm thử khả năng hữu dụng (có một nội dung mô tả trong cuốn Don’t Make Me Think (Đừng bắt tôi phải suy nghĩ) của Steve Krug) ở giai đoạn sau. Chân dung người dùng liên quan đến việc tạo một người dùng giả định. Ví dụ: nếu nhóm của bạn toàn là nam giới, bạn nên thiết kế một hồ sơ người dùng nữ 35 tuổi (hoàn chỉnh với các đặc điểm người dùng) và xem kết quả mà hồ sơ này tạo ra thay vì 10 kết quả cho nam giới từ 25 đến 40 tuổi. Việc mời người dùng thực để xem phản ứng của họ đối với trang web (tại chỗ hoặc từ xa) trong quá trình kiểm thử khả năng hữu dụng cũng có thể giúp bạn có được một góc nhìn mới mẻ.
Quy tắc #24: Đo lường delta giữa các mô hình.
Một trong những phép đo dễ dàng nhất và đôi khi hữu ích nhất mà bạn có thể thực hiện trước khi người dùng nào đó xem mô hình mới của bạn là tính toán mức độ khác biệt giữa kết quả mới và kết quả thực tế. Ví dụ: nếu bạn gặp vấn đề về thứ hạng, hãy chạy cả hai mô hình trên một mẫu truy vấn thông qua toàn bộ hệ thống và xem xét kích thước của sự khác biệt đối xứng của các kết quả (được tính trọng số theo vị trí xếp hạng). Nếu sự khác biệt rất nhỏ, thì bạn có thể biết mà không cần chạy thử nghiệm rằng sẽ có ít thay đổi. Nếu sự khác biệt rất lớn, bạn cần đảm bảo rằng thay đổi đó là tốt. Việc xem xét các truy vấn có độ chênh lệch đối xứng cao có thể giúp bạn hiểu được bản chất của sự thay đổi. Tuy nhiên, hãy đảm bảo rằng hệ thống đang hoạt động ổn định. Đảm bảo rằng một mô hình khi so sánh với chính nó có sự khác biệt đối xứng thấp (tốt nhất là bằng 0).
Quy tắc #25: Khi chọn mô hình, hiệu suất hữu dụng sẽ vượt trội so với khả năng dự đoán.
Mô hình của bạn có thể tìm cách dự đoán tỷ lệ nhấp. Tuy nhiên, cuối cùng, câu hỏi chính là bạn sẽ làm gì với thông tin dự đoán đó. Nếu bạn đang sử dụng mô hình này để xếp hạng tài liệu, thì chất lượng của thứ hạng cuối cùng sẽ quan trọng hơn chính kết quả dự đoán. Nếu bạn dự đoán xác suất một tài liệu là nội dung rác và sau đó đặt ngưỡng cho nội dung bị chặn, thì độ chính xác của nội dung được phép sẽ quan trọng hơn. Trong hầu hết trường hợp, hai yếu tố này phải thống nhất với nhau: khi không thống nhất, lợi nhuận có thể sẽ không đáng kể. Do đó, nếu có một số thay đổi giúp cải thiện tổn thất nhật ký nhưng làm giảm hiệu suất của hệ thống, hãy tìm một tính năng khác. Khi điều này bắt đầu xảy ra thường xuyên hơn, bạn nên xem lại mục tiêu của mô hình.
Quy tắc #26: Tìm quy luật trong các lỗi được đo lường và tạo các tính năng mới.
Giả sử bạn thấy một ví dụ huấn luyện mà mô hình đã "sai". Trong một nhiệm vụ phân loại, lỗi này có thể là dương tính giả hoặc âm tính giả. Trong một nhiệm vụ xếp hạng, lỗi có thể là một cặp trong đó giá trị dương được xếp hạng thấp hơn giá trị âm. Điểm quan trọng nhất là đây là ví dụ về việc hệ thống học máy biết rằng nó đã sai và muốn khắc phục nếu có cơ hội. Nếu bạn cung cấp cho mô hình một tính năng cho phép mô hình khắc phục lỗi, thì mô hình sẽ cố gắng sử dụng tính năng đó.
Mặt khác, nếu bạn cố gắng tạo một tính năng dựa trên các ví dụ mà hệ thống không coi là lỗi, thì tính năng đó sẽ bị bỏ qua. Ví dụ: giả sử trong Tìm kiếm ứng dụng trên Play, có người tìm kiếm "trò chơi miễn phí". Giả sử một trong những kết quả hàng đầu là một ứng dụng trò đùa ít liên quan hơn. Vì vậy, bạn tạo một tính năng cho "ứng dụng trò đùa". Tuy nhiên, nếu bạn đang tối đa hoá số lượt cài đặt và mọi người cài đặt một ứng dụng trò đùa khi tìm kiếm trò chơi miễn phí, thì tính năng "ứng dụng trò đùa" sẽ không mang lại hiệu quả như mong muốn.
Sau khi bạn có các ví dụ mà mô hình đã dự đoán sai, hãy tìm các xu hướng nằm ngoài tập hợp tính năng hiện tại của bạn. Ví dụ: nếu hệ thống có vẻ như đang hạ cấp các bài đăng dài hơn, hãy thêm độ dài bài đăng. Đừng quá cụ thể về các tính năng bạn thêm. Nếu bạn định thêm độ dài bài đăng, đừng cố đoán ý nghĩa của từ "dài", chỉ cần thêm một tá tính năng và để mô hình tìm ra việc cần làm với các tính năng đó (xem Quy tắc số 21). Đó là cách dễ nhất để có được những gì bạn muốn.
Quy tắc #27: Cố gắng định lượng hành vi không mong muốn đã quan sát được.
Một số thành viên trong nhóm của bạn sẽ bắt đầu cảm thấy khó chịu với các thuộc tính của hệ thống mà họ không thích và không được hàm mất mát hiện tại ghi nhận. Tại thời điểm này, họ nên làm mọi thứ cần thiết để biến những lời phàn nàn của mình thành con số thực tế. Ví dụ: nếu họ cho rằng có quá nhiều "ứng dụng trò đùa" đang xuất hiện trong Tìm kiếm trên Play, thì họ có thể yêu cầu nhân viên đánh giá xác định các ứng dụng trò đùa. (Bạn có thể sử dụng dữ liệu do con người gắn nhãn trong trường hợp này vì một phần nhỏ các truy vấn chiếm một phần lớn lưu lượng truy cập.) Nếu các vấn đề của bạn có thể đo lường được, thì bạn có thể bắt đầu sử dụng các vấn đề đó làm tính năng, mục tiêu hoặc chỉ số. Quy tắc chung là "đo lường trước, tối ưu hoá sau".
Quy tắc #28: Xin lưu ý rằng hành vi giống hệt nhau trong ngắn hạn không có nghĩa là hành vi giống hệt nhau trong dài hạn.
Hãy tưởng tượng rằng bạn có một hệ thống mới xem xét mọi doc_id và exact_query, sau đó tính toán xác suất nhấp cho mọi tài liệu cho mọi truy vấn. Bạn nhận thấy hành vi của ứng dụng này gần giống với hệ thống hiện tại của bạn ở cả chế độ song song và thử nghiệm A/B. Vì vậy, bạn sẽ chạy ứng dụng này do tính đơn giản của ứng dụng. Tuy nhiên, bạn nhận thấy không có ứng dụng mới nào xuất hiện. Tại sao? Vì hệ thống của bạn chỉ hiển thị một tài liệu dựa trên nhật ký của chính nó với truy vấn đó, nên không có cách nào để biết rằng một tài liệu mới sẽ xuất hiện.
Cách duy nhất để hiểu cách hoạt động lâu dài của một hệ thống như vậy là chỉ cho phép hệ thống đó huấn luyện dựa trên dữ liệu thu được khi mô hình đang hoạt động. Việc này rất khó.
Độ lệch trong quá trình phân phát dữ liệu huấn luyện
Độ lệch trong quá trình huấn luyện và phân phát là sự khác biệt giữa hiệu suất trong quá trình huấn luyện và hiệu suất trong quá trình phân phát. Sự chênh lệch này có thể là do:
- Sự khác biệt giữa cách bạn xử lý dữ liệu trong quy trình huấn luyện và phân phát.
- Sự thay đổi trong dữ liệu giữa thời điểm bạn huấn luyện và thời điểm bạn phân phát.
- Vòng phản hồi giữa mô hình và thuật toán.
Chúng tôi đã quan sát thấy các hệ thống học máy thương mại tại Google có độ lệch trong việc phân phát dữ liệu huấn luyện ảnh hưởng tiêu cực đến hiệu suất. Giải pháp tốt nhất là giám sát rõ ràng để các thay đổi về hệ thống và dữ liệu không gây ra sự chênh lệch mà không được chú ý.
Quy tắc #29: Cách tốt nhất để đảm bảo bạn huấn luyện như cách bạn phân phát là lưu tập hợp các tính năng được sử dụng tại thời điểm phân phát, sau đó chuyển các tính năng đó vào nhật ký để sử dụng tại thời điểm huấn luyện.
Ngay cả khi bạn không thể làm việc này cho mọi ví dụ, hãy làm việc này cho một phần nhỏ, chẳng hạn như để bạn có thể xác minh tính nhất quán giữa việc phân phát và huấn luyện (xem Quy tắc #37). Đôi khi, các nhóm đã thực hiện việc đo lường này tại Google cũng phải ngạc nhiên trước kết quả. Trang chủ YouTube đã chuyển sang các tính năng ghi nhật ký tại thời điểm phân phát, giúp cải thiện đáng kể chất lượng và giảm độ phức tạp của mã. Hiện tại, nhiều nhóm đang chuyển đổi cơ sở hạ tầng của họ.
Quy tắc #30: Dữ liệu được lấy mẫu theo trọng số quan trọng, đừng bỏ qua dữ liệu này một cách tuỳ ý!
Khi có quá nhiều dữ liệu, bạn có thể muốn lấy các tệp từ 1 đến 12 và bỏ qua các tệp từ 13 đến 99. Đây là một sai lầm. Mặc dù bạn có thể loại bỏ dữ liệu chưa bao giờ hiển thị cho người dùng, nhưng cách tốt nhất là sử dụng trọng số theo mức độ quan trọng cho phần còn lại. Tỷ lệ trọng số theo mức độ quan trọng có nghĩa là nếu bạn quyết định sẽ lấy mẫu ví dụ X với xác suất 30%, thì hãy đặt trọng số cho ví dụ đó là 10/3. Với hệ số trọng số theo mức độ quan trọng, tất cả các thuộc tính hiệu chỉnh được thảo luận trong Quy tắc #14 vẫn giữ nguyên.
Quy tắc #31: Hãy lưu ý rằng nếu bạn kết hợp dữ liệu từ một bảng tại thời điểm huấn luyện và phân phát, thì dữ liệu trong bảng có thể thay đổi.
Giả sử bạn kết hợp mã tài liệu với một bảng chứa các tính năng cho các tài liệu đó (chẳng hạn như số lượng nhận xét hoặc lượt nhấp). Trong khoảng thời gian huấn luyện và phân phát, các tính năng trong bảng có thể thay đổi. Do đó, kết quả dự đoán của mô hình cho cùng một tài liệu có thể khác nhau giữa quá trình huấn luyện và phân phát. Cách dễ nhất để tránh loại vấn đề này là ghi nhật ký các tính năng tại thời điểm phân phát (xem Quy tắc #32). Nếu bảng chỉ thay đổi chậm, bạn cũng có thể chụp nhanh bảng theo giờ hoặc hằng ngày để có dữ liệu gần đúng. Xin lưu ý rằng việc này vẫn chưa giải quyết được hoàn toàn vấn đề.
Quy tắc #32: Sử dụng lại mã giữa quy trình huấn luyện và quy trình phân phát bất cứ khi nào có thể.
Xử lý hàng loạt khác với xử lý trực tuyến. Trong quá trình xử lý trực tuyến, bạn phải xử lý từng yêu cầu khi yêu cầu đó đến (ví dụ: bạn phải thực hiện một lượt tra cứu riêng cho mỗi truy vấn), trong khi trong quá trình xử lý hàng loạt, bạn có thể kết hợp các tác vụ (ví dụ: thực hiện một phép nối). Tại thời điểm phân phát, bạn đang xử lý trực tuyến, trong khi đào tạo là một tác vụ xử lý hàng loạt. Tuy nhiên, bạn có thể làm một số việc để sử dụng lại mã. Ví dụ: bạn có thể tạo một đối tượng dành riêng cho hệ thống của mình, trong đó kết quả của mọi truy vấn hoặc mối liên kết đều có thể được lưu trữ theo cách dễ đọc và có thể dễ dàng kiểm thử lỗi. Sau đó, khi đã thu thập tất cả thông tin, trong quá trình phân phát hoặc huấn luyện, bạn sẽ chạy một phương thức phổ biến để kết nối giữa đối tượng mà con người có thể đọc dành riêng cho hệ thống của bạn và bất kỳ định dạng nào mà hệ thống học máy mong đợi. Điều này giúp loại bỏ một nguồn gây ra sự chênh lệch trong việc phân phát dữ liệu huấn luyện. Do đó, hãy cố gắng không sử dụng hai ngôn ngữ lập trình khác nhau giữa quá trình huấn luyện và phân phát. Quyết định đó sẽ khiến bạn gần như không thể chia sẻ mã.
Quy tắc #33: Nếu bạn tạo một mô hình dựa trên dữ liệu cho đến ngày 5 tháng 1, hãy kiểm thử mô hình đó trên dữ liệu từ ngày 6 tháng 1 trở đi.
Nhìn chung, hãy đo lường hiệu suất của mô hình trên dữ liệu được thu thập sau dữ liệu mà bạn đã dùng để huấn luyện mô hình, vì điều này phản ánh rõ hơn những gì hệ thống của bạn sẽ làm trong quá trình sản xuất. Nếu bạn tạo một mô hình dựa trên dữ liệu cho đến ngày 5 tháng 1, hãy kiểm thử mô hình đó trên dữ liệu từ ngày 6 tháng 1. Bạn sẽ thấy hiệu suất không tốt bằng dữ liệu mới, nhưng không quá tệ. Vì có thể có hiệu ứng hằng ngày, nên bạn có thể không dự đoán được tỷ lệ nhấp hoặc tỷ lệ chuyển đổi trung bình, nhưng diện tích dưới đường cong (đại diện cho khả năng cho ví dụ tích cực có điểm cao hơn ví dụ tiêu cực) phải gần như tương đương.
Quy tắc #34: Trong quá trình phân loại nhị phân để lọc (chẳng hạn như phát hiện thư rác hoặc xác định email thú vị), hãy hy sinh một chút hiệu suất ngắn hạn để có dữ liệu rất sạch.
Trong một nhiệm vụ lọc, các ví dụ được đánh dấu là tiêu cực sẽ không hiển thị cho người dùng. Giả sử bạn có một bộ lọc chặn 75% ví dụ tiêu cực trong quá trình phân phát. Bạn có thể muốn lấy thêm dữ liệu huấn luyện từ các thực thể hiển thị cho người dùng. Ví dụ: nếu một người dùng đánh dấu một email là thư rác mà bộ lọc của bạn đã cho phép đi qua, thì bạn nên tìm hiểu từ đó.
Tuy nhiên, phương pháp này sẽ gây ra sự thiên lệch khi lấy mẫu. Bạn có thể thu thập dữ liệu sạch hơn nếu trong quá trình phân phát, bạn gắn nhãn 1% lưu lượng truy cập là "đã loại trừ" và gửi tất cả ví dụ đã loại trừ cho người dùng. Bây giờ, bộ lọc của bạn đang chặn ít nhất 74% ví dụ tiêu cực. Những ví dụ được giữ lại này có thể trở thành dữ liệu huấn luyện của bạn.
Xin lưu ý rằng nếu bộ lọc của bạn chặn 95% ví dụ tiêu cực trở lên, thì phương pháp này sẽ kém hiệu quả. Tuy nhiên, nếu muốn đo lường hiệu suất phân phát, bạn có thể tạo một mẫu nhỏ hơn nữa (ví dụ: 0,1% hoặc 0,001%). Mười nghìn ví dụ là đủ để ước tính hiệu suất khá chính xác.
Quy tắc #35: Cảnh giác với sự chênh lệch vốn có trong các vấn đề về thứ hạng.
Khi chuyển đổi thuật toán xếp hạng một cách triệt để để các kết quả khác nhau xuất hiện, bạn đã thay đổi hiệu quả dữ liệu mà thuật toán của mình sẽ thấy trong tương lai. Loại độ lệch này sẽ xuất hiện và bạn nên thiết kế mô hình của mình xung quanh độ lệch đó. Có nhiều phương pháp khác nhau. Đây là tất cả các phương pháp ưu tiên dữ liệu mà mô hình của bạn đã thấy.
- Có mức độ chuẩn hoá cao hơn đối với các tính năng bao gồm nhiều cụm từ tìm kiếm hơn so với các tính năng chỉ bật cho một cụm từ tìm kiếm. Bằng cách này, mô hình sẽ ưu tiên các tính năng dành riêng cho một hoặc một vài cụm từ tìm kiếm thay vì các tính năng áp dụng chung cho tất cả cụm từ tìm kiếm. Phương pháp này có thể giúp ngăn chặn việc kết quả rất phổ biến bị rò rỉ vào các cụm từ tìm kiếm không liên quan. Xin lưu ý rằng điều này trái ngược với lời khuyên thông thường là cần có nhiều giá trị chuẩn hoá hơn trên các cột đặc điểm với nhiều giá trị riêng biệt hơn.
- Chỉ cho phép các đặc điểm có trọng số dương. Do đó, mọi tính năng tốt sẽ tốt hơn tính năng "không xác định".
- Không có các tính năng chỉ dành cho tài liệu. Đây là phiên bản cực đoan của #1. Ví dụ: ngay cả khi một ứng dụng nhất định là ứng dụng tải xuống phổ biến bất kể truy vấn là gì, bạn cũng không muốn hiển thị ứng dụng đó ở mọi nơi. Việc không có các tính năng chỉ dành cho tài liệu giúp đơn giản hoá việc này. Lý do bạn không muốn hiển thị một ứng dụng phổ biến cụ thể ở mọi nơi liên quan đến tầm quan trọng của việc giúp người dùng truy cập được tất cả ứng dụng mong muốn. Ví dụ: nếu ai đó tìm kiếm "ứng dụng quan sát chim", họ có thể tải "angry birds" xuống, nhưng chắc chắn đó không phải là ý định của họ. Việc hiển thị một ứng dụng như vậy có thể cải thiện tỷ lệ tải xuống, nhưng cuối cùng lại không đáp ứng được nhu cầu của người dùng.
Quy tắc #36: Tránh vòng lặp phản hồi có các tính năng vị trí.
Vị trí của nội dung ảnh hưởng đáng kể đến khả năng người dùng tương tác với nội dung đó. Nếu bạn đặt một ứng dụng ở vị trí đầu tiên, ứng dụng đó sẽ được nhấp vào thường xuyên hơn và bạn sẽ tin rằng ứng dụng đó có nhiều khả năng được nhấp vào hơn. Một cách để giải quyết vấn đề này là thêm các tính năng vị trí, tức là các tính năng về vị trí của nội dung trong trang. Bạn huấn luyện mô hình bằng các đặc điểm vị trí và mô hình sẽ học cách đánh giá trọng số, chẳng hạn như đặc điểm "vị trí thứ nhất". Do đó, mô hình của bạn sẽ giảm trọng số cho các yếu tố khác đối với các ví dụ có "1stposition=true". Sau đó, tại thời điểm phân phát, bạn không cấp cho bất kỳ thực thể nào tính năng vị trí hoặc bạn cấp cho tất cả các thực thể cùng một tính năng mặc định, vì bạn đang tính điểm cho các đề xuất trước khi quyết định thứ tự hiển thị các đề xuất đó.
Xin lưu ý rằng điều quan trọng là phải tách biệt mọi tính năng vị trí với phần còn lại của mô hình do sự không đối xứng này giữa quá trình huấn luyện và kiểm thử. Lý tưởng nhất là mô hình là tổng của một hàm của các đặc điểm vị trí và một hàm của các đặc điểm còn lại. Ví dụ: không kết hợp các tính năng vị trí với bất kỳ tính năng tài liệu nào.
Quy tắc số 37: Đo lường độ lệch trong quá trình huấn luyện/phân phát.
Có một số yếu tố có thể gây ra sự chênh lệch theo nghĩa chung nhất. Hơn nữa, bạn có thể chia thành nhiều phần:
- Sự khác biệt giữa hiệu suất trên dữ liệu huấn luyện và dữ liệu giữ lại. Nói chung, điều này sẽ luôn tồn tại và không phải lúc nào cũng là điều xấu.
- Sự khác biệt giữa hiệu suất trên dữ liệu giữ lại và dữ liệu "ngày tiếp theo". Xin nhắc lại rằng, giá trị này sẽ luôn tồn tại. Bạn nên điều chỉnh quá trình chuẩn hoá để tối đa hoá hiệu suất vào ngày tiếp theo. Tuy nhiên, việc hiệu suất giảm mạnh giữa dữ liệu giữ lại và dữ liệu ngày tiếp theo có thể cho thấy một số tính năng nhạy cảm với thời gian và có thể làm giảm hiệu suất của mô hình.
- Sự khác biệt giữa hiệu suất trên dữ liệu "ngày tiếp theo" và dữ liệu trực tiếp. Nếu bạn áp dụng một mô hình cho một ví dụ trong dữ liệu huấn luyện và cùng một ví dụ khi phân phát, thì mô hình đó sẽ cho bạn kết quả giống hệt nhau (xem Quy tắc #5). Do đó, sự khác biệt ở đây có thể cho thấy một lỗi kỹ thuật.
Giai đoạn III của học máy: Tăng trưởng chậm lại, tinh chỉnh hoạt động tối ưu hoá và mô hình phức tạp
Sẽ có một số dấu hiệu cho thấy giai đoạn thứ hai sắp kết thúc. Trước tiên, lợi nhuận hằng tháng của bạn sẽ bắt đầu giảm. Bạn sẽ bắt đầu phải đánh đổi giữa các chỉ số: bạn sẽ thấy một số chỉ số tăng và một số chỉ số giảm trong một số thử nghiệm. Đây là phần thú vị. Vì lợi ích khó đạt được hơn, nên công nghệ học máy phải trở nên phức tạp hơn. Lưu ý: phần này có nhiều quy tắc chung hơn so với các phần trước. Chúng tôi đã thấy nhiều nhóm trải qua những khoảng thời gian vui vẻ với công nghệ học máy Giai đoạn I và Giai đoạn II. Khi đạt đến Giai đoạn III, các nhóm phải tự tìm đường đi của mình.
Quy tắc số 38: Đừng lãng phí thời gian vào các tính năng mới nếu mục tiêu không phù hợp đã trở thành vấn đề.
Khi kết quả đo lường của bạn đạt đến mức ổn định, nhóm của bạn sẽ bắt đầu xem xét các vấn đề nằm ngoài phạm vi mục tiêu của hệ thống học máy hiện tại. Như đã nêu trước đó, nếu mục tiêu sản phẩm không thuộc phạm vi của mục tiêu dựa trên thuật toán hiện tại, thì bạn cần thay đổi mục tiêu hoặc mục tiêu sản phẩm. Ví dụ: bạn có thể tối ưu hoá lượt nhấp, lượt thích hoặc lượt tải xuống, nhưng đưa ra quyết định ra mắt dựa một phần vào người đánh giá.
Quy tắc #39: Quyết định ra mắt là đại diện cho các mục tiêu sản phẩm dài hạn.
Alice có một ý tưởng về việc giảm tổn thất hậu cần khi dự đoán lượt cài đặt. Cô thêm một tính năng. Mức hao tổn theo quy luật giảm. Khi thực hiện thử nghiệm trực tiếp, cô nhận thấy tỷ lệ cài đặt tăng lên. Tuy nhiên, khi cô tham dự cuộc họp đánh giá việc ra mắt, có người chỉ ra rằng số lượng người dùng hoạt động hằng ngày giảm 5%. Nhóm quyết định không ra mắt mô hình này. Alice thất vọng, nhưng giờ đây, cô nhận ra rằng các quyết định ra mắt phụ thuộc vào nhiều tiêu chí, trong đó chỉ có một số tiêu chí có thể được tối ưu hoá trực tiếp bằng công nghệ học máy.
Sự thật là thế giới thực không phải là trò chơi nhập vai: không có "điểm nhấn" nào xác định tình trạng của sản phẩm. Nhóm nghiên cứu phải sử dụng số liệu thống kê mà họ thu thập được để cố gắng dự đoán hiệu quả của hệ thống trong tương lai. Họ cần quan tâm đến mức độ tương tác, số người dùng hoạt động trong 1 ngày (DAU), số người dùng hoạt động trong 30 ngày, doanh thu và lợi tức đầu tư của nhà quảng cáo. Bản thân các chỉ số này có thể đo lường được trong thử nghiệm A/B chỉ là đại diện cho các mục tiêu dài hạn hơn: làm hài lòng người dùng, tăng số người dùng, làm hài lòng đối tác và lợi nhuận. Ngay cả khi đó, bạn vẫn có thể xem xét các chỉ số này là đại diện cho việc có một sản phẩm hữu ích, chất lượng cao và một công ty phát triển mạnh sau 5 năm nữa.
Những quyết định dễ dàng duy nhất về việc ra mắt là khi tất cả các chỉ số đều tốt hơn (hoặc ít nhất là không xấu đi). Nếu nhóm có thể chọn giữa một thuật toán học máy phức tạp và một thuật toán phỏng đoán đơn giản, thì họ nên chọn thuật toán phỏng đoán nếu thuật toán này hoạt động hiệu quả hơn trên tất cả các chỉ số này. Hơn nữa, không có thứ hạng rõ ràng cho tất cả các giá trị chỉ số có thể có. Cụ thể, hãy xem xét hai trường hợp sau:
Thử nghiệm | Số người dùng hoạt động hàng ngày | Doanh thu/Ngày |
---|---|---|
A | 1 triệu | 4 triệu đô la |
B | 2 triệu | 2 triệu USD |
Nếu hệ thống hiện tại là A, thì nhóm này khó có thể chuyển sang B. Nếu hệ thống hiện tại là B, thì nhóm này sẽ khó có thể chuyển sang A. Điều này có vẻ mâu thuẫn với hành vi hợp lý; tuy nhiên, dự đoán về việc thay đổi các chỉ số có thể thành công hoặc không, do đó, có một rủi ro lớn liên quan đến việc thay đổi. Mỗi chỉ số đề cập đến một số rủi ro mà nhóm quan tâm.
Hơn nữa, không có chỉ số nào giải quyết được mối lo ngại lớn nhất của nhóm, đó là "sản phẩm của tôi sẽ ở đâu sau 5 năm nữa"?
Mặt khác, các cá nhân có xu hướng ưu tiên một mục tiêu mà họ có thể trực tiếp tối ưu hoá. Hầu hết các công cụ học máy đều ưu tiên môi trường như vậy. Một kỹ sư phát triển tính năng mới có thể liên tục ra mắt sản phẩm trong môi trường như vậy. Có một loại học máy, học đa mục tiêu, bắt đầu giải quyết vấn đề này. Ví dụ: bạn có thể lập công thức cho một vấn đề về việc thoả mãn quy tắc ràng buộc có giới hạn thấp hơn trên mỗi chỉ số và tối ưu hoá một số tổ hợp tuyến tính của các chỉ số. Tuy nhiên, ngay cả khi đó, không phải tất cả các chỉ số đều dễ dàng được định dạng dưới dạng mục tiêu học máy: nếu người dùng nhấp vào một tài liệu hoặc cài đặt một ứng dụng, thì đó là do nội dung đã xuất hiện. Tuy nhiên, việc tìm hiểu lý do người dùng truy cập vào trang web của bạn sẽ khó khăn hơn nhiều. Cách dự đoán thành công trong tương lai của một trang web nói chung là AI-complete (trí tuệ nhân tạo hoàn chỉnh): khó như thị giác máy tính hoặc xử lý ngôn ngữ tự nhiên.
Quy tắc #40: Giữ cho tập hợp đơn giản.
Mô hình hợp nhất lấy các tính năng thô và trực tiếp xếp hạng nội dung là mô hình dễ gỡ lỗi và dễ hiểu nhất. Tuy nhiên, một tập hợp mô hình (một "mô hình" kết hợp điểm số của các mô hình khác) có thể hoạt động hiệu quả hơn. Để đơn giản hoá mọi thứ, mỗi mô hình phải là một tập hợp chỉ lấy dữ liệu đầu vào của các mô hình khác hoặc một mô hình cơ sở lấy nhiều tính năng, nhưng không phải cả hai. Nếu bạn có các mô hình trên các mô hình khác được huấn luyện riêng biệt, thì việc kết hợp các mô hình đó có thể dẫn đến hành vi xấu.
Sử dụng một mô hình đơn giản để kết hợp chỉ lấy đầu ra của các mô hình "cơ sở" làm đầu vào. Bạn cũng nên thực thi các thuộc tính trên các mô hình tổng hợp này. Ví dụ: việc tăng điểm số do mô hình cơ sở tạo ra không được làm giảm điểm số của tập hợp. Ngoài ra, tốt nhất là các mô hình sắp tới phải có thể diễn giải ngữ nghĩa (ví dụ: được hiệu chỉnh) để các thay đổi của mô hình cơ bản không làm nhầm lẫn mô hình tổng hợp. Ngoài ra, hãy thực thi việc tăng xác suất dự đoán của một bộ phân loại cơ bản sẽ không làm giảm xác suất dự đoán của tập hợp.
Quy tắc số 41: Khi hiệu suất đạt đến mức ổn định, hãy tìm các nguồn thông tin mới về chất lượng để thêm vào thay vì tinh chỉnh các tín hiệu hiện có.
Bạn đã thêm một số thông tin nhân khẩu học về người dùng. Bạn đã thêm một số thông tin về các từ trong tài liệu. Bạn đã thực hiện quy trình khám phá mẫu và điều chỉnh quy trình chuẩn hoá. Bạn chưa thấy một lần ra mắt nào có mức cải thiện hơn 1% về các chỉ số chính trong vài quý. Bây giờ bạn phải làm gì?
Đã đến lúc bắt đầu xây dựng cơ sở hạ tầng cho các tính năng hoàn toàn khác nhau, chẳng hạn như nhật ký tài liệu mà người dùng này đã truy cập vào ngày, tuần hoặc năm qua, hoặc dữ liệu từ một tài sản khác. Sử dụng các thực thể wikidata hoặc nội dung nội bộ của công ty (chẳng hạn như biểu đồ tri thức của Google). Sử dụng công nghệ học sâu. Bắt đầu điều chỉnh kỳ vọng về lợi tức đầu tư và mở rộng nỗ lực của bạn cho phù hợp. Như trong mọi dự án kỹ thuật, bạn phải cân nhắc lợi ích của việc thêm các tính năng mới so với chi phí tăng thêm độ phức tạp.
Quy tắc số 42: Đừng kỳ vọng sự đa dạng, tính cá nhân hoá hoặc mức độ liên quan có mối tương quan với mức độ phổ biến như bạn nghĩ.
Tính đa dạng trong một tập hợp nội dung có thể có nhiều ý nghĩa, trong đó tính đa dạng của nguồn nội dung là một trong những ý nghĩa phổ biến nhất. Tính năng cá nhân hoá ngụ ý rằng mỗi người dùng sẽ nhận được kết quả riêng. Mức độ liên quan ngụ ý rằng kết quả cho một cụm từ tìm kiếm cụ thể phù hợp hơn với cụm từ tìm kiếm đó so với bất kỳ cụm từ tìm kiếm nào khác. Do đó, cả ba thuộc tính này đều được xác định là khác với thuộc tính thông thường.
Vấn đề là những thứ bình thường thường khó đánh bại.
Xin lưu ý rằng nếu hệ thống của bạn đang đo lường số lượt nhấp, thời gian, lượt xem, lượt đánh dấu +1, lượt chia sẻ lại, v.v., thì bạn đang đo lường mức độ phổ biến của nội dung. Đôi khi, các nhóm cố gắng tìm hiểu một mô hình cá nhân có tính đa dạng. Để cá nhân hoá, họ thêm các tính năng cho phép hệ thống cá nhân hoá (một số tính năng thể hiện mối quan tâm của người dùng) hoặc đa dạng hoá (các tính năng cho biết liệu tài liệu này có tính năng nào chung với các tài liệu khác được trả về hay không, chẳng hạn như tác giả hoặc nội dung) và nhận thấy rằng các tính năng đó có trọng số thấp hơn (hoặc đôi khi có dấu khác) so với dự kiến.
Điều này không có nghĩa là tính đa dạng, tính cá nhân hoá hoặc mức độ liên quan không có giá trị. Như đã chỉ ra trong quy tắc trước, bạn có thể xử lý hậu kỳ để tăng tính đa dạng hoặc mức độ liên quan. Nếu thấy các mục tiêu dài hạn tăng lên, thì bạn có thể khai báo rằng sự đa dạng/mức độ liên quan là có giá trị, ngoài mức độ phổ biến. Sau đó, bạn có thể tiếp tục sử dụng quy trình xử lý hậu kỳ hoặc trực tiếp sửa đổi mục tiêu dựa trên tính đa dạng hoặc mức độ liên quan.
Quy tắc số 43: Bạn bè của bạn thường giống nhau trên nhiều sản phẩm. Mối quan tâm của bạn thường không phải vậy.
Các nhóm tại Google đã nhận được nhiều sự quan tâm khi sử dụng một mô hình dự đoán mức độ gần gũi của một kết nối trong một sản phẩm và giúp mô hình đó hoạt động hiệu quả trên một sản phẩm khác. Bạn bè của bạn là chính họ. Mặt khác, tôi đã chứng kiến một số nhóm phải vật lộn với các tính năng cá nhân hoá trên các sản phẩm. Vâng, có vẻ như sẽ hoạt động. Hiện tại, có vẻ như không. Đôi khi, bạn có thể sử dụng dữ liệu thô từ một tài sản để dự đoán hành vi trên một tài sản khác. Ngoài ra, hãy lưu ý rằng ngay cả khi biết rằng người dùng có nhật ký trên một tài sản khác cũng có thể giúp ích. Ví dụ: sự hiện diện của hoạt động của người dùng trên hai sản phẩm có thể là một chỉ báo.
Công việc liên quan
Có nhiều tài liệu về học máy tại Google cũng như bên ngoài.
- Khoá học học máy ứng dụng: giới thiệu về công nghệ học máy ứng dụng.
- Machine Learning: A Probabilistic Approach (Công nghệ học máy: Phương pháp xác suất) của Kevin Murphy để hiểu rõ lĩnh vực học máy.
- Phân tích dữ liệu hiệu quả: một phương pháp khoa học dữ liệu để suy nghĩ về các tập dữ liệu.
- Deep Learning (Học sâu) của Ian Goodfellow và cộng sự để tìm hiểu các mô hình phi tuyến tính.
- Bài viết của Google về nợ kỹ thuật, trong đó có nhiều lời khuyên chung.
- Tài liệu về Tensorflow.
Lời cảm ơn
Cảm ơn David Westbrook, Peter Brandt, Samuel Ieong, Chenyu Zhao, Li Wei, Michalis Potamias, Evan Rosen, Barry Rosenberg, Christine Robson, James Pine, Tal Shaked, Tushar Chandra, Mustafa Ispir, Jeremiah Harmsen, Konstantinos Katsiapis, Glen Anderson, Dan Duckworth, Shishir Birmiwal, Gal Elidan, Su Lin Wu, Jaihui Liu, Fernando Pereira và Hrishikesh Aradhye đã sửa đổi, đề xuất và cung cấp nhiều ví dụ hữu ích cho tài liệu này. Ngoài ra, cảm ơn Kristen Lefevre, Suddha Basu và Chris Berg đã giúp đỡ với phiên bản trước đó. Mọi lỗi, thiếu sót hoặc (ôi!) ý kiến không phổ biến đều là của riêng tôi.
Phụ lục
Tài liệu này có nhiều nội dung tham chiếu đến các sản phẩm của Google. Để cung cấp thêm ngữ cảnh, tôi sẽ mô tả ngắn gọn về các ví dụ phổ biến nhất bên dưới.
Tổng quan về YouTube
YouTube là một dịch vụ xem video trực tuyến. Cả nhóm Xem video tiếp theo và nhóm Trang chủ của YouTube đều sử dụng các mô hình học máy để xếp hạng video đề xuất. Phần Watch Next đề xuất các video để xem sau video đang phát, còn phần Trang chủ đề xuất các video cho người dùng duyệt xem trang chủ.
Tổng quan về Google Play
Google Play có nhiều mô hình giải quyết nhiều vấn đề. Tìm kiếm trên Play, Đề xuất được cá nhân hoá trên Trang chủ của Play và các ứng dụng "Người dùng cũng đã cài đặt" đều sử dụng công nghệ học máy.
Tổng quan về Google+
Google Plus sử dụng công nghệ học máy trong nhiều trường hợp: xếp hạng bài đăng trong "luồng" bài đăng mà người dùng nhìn thấy, xếp hạng bài đăng "Nội dung thịnh hành" (những bài đăng rất phổ biến hiện nay), xếp hạng những người bạn biết, v.v. Google Plus đã đóng tất cả tài khoản cá nhân vào năm 2019 và được thay thế bằng Google Currents dành cho tài khoản doanh nghiệp vào ngày 6 tháng 7 năm 2020.