Hoạt động học máy trong Mail.ru Mail

Hoạt động học máy trong Mail.ru Mail

Dựa trên bài phát biểu của tôi tại Highload++ và DataFest Minsk 2019.

Đối với nhiều người ngày nay, thư là một phần không thể thiếu trong cuộc sống trực tuyến. Với sự trợ giúp của nó, chúng tôi tiến hành trao đổi thư từ kinh doanh, lưu trữ tất cả các loại thông tin quan trọng liên quan đến tài chính, đặt phòng khách sạn, đặt hàng và nhiều hơn thế nữa. Vào giữa năm 2018, chúng tôi đã xây dựng chiến lược sản phẩm để phát triển thư. Thư hiện đại nên như thế nào?

Thư phải được thông minh, tức là giúp người dùng điều hướng khối lượng thông tin ngày càng tăng: lọc, cấu trúc và cung cấp nó một cách thuận tiện nhất. Cô ấy phải là hữu ích, cho phép bạn giải quyết các nhiệm vụ khác nhau ngay trong hộp thư của mình, chẳng hạn như trả tiền phạt (rất tiếc, một chức năng mà tôi sử dụng). Và tất nhiên, đồng thời, thư phải cung cấp khả năng bảo vệ thông tin, ngăn chặn thư rác và bảo vệ chống hack, tức là phải an toàn.

Những lĩnh vực này xác định một số vấn đề chính, nhiều vấn đề trong số đó có thể được giải quyết một cách hiệu quả bằng cách sử dụng máy học. Dưới đây là ví dụ về các tính năng hiện có được phát triển như một phần của chiến lược - một tính năng cho mỗi hướng.

  • Trả lời thông minh. Mail có tính năng trả lời thông minh. Mạng lưới thần kinh phân tích văn bản của bức thư, hiểu ý nghĩa và mục đích của nó, từ đó đưa ra ba lựa chọn phản hồi phù hợp nhất: tích cực, tiêu cực và trung tính. Điều này giúp tiết kiệm đáng kể thời gian khi trả lời thư, đồng thời cũng thường trả lời một cách không chuẩn mực và hài hước.
  • Nhóm emailliên quan đến đơn đặt hàng trong các cửa hàng trực tuyến. Chúng tôi thường mua sắm trực tuyến và theo quy định, các cửa hàng có thể gửi nhiều email cho mỗi đơn hàng. Ví dụ: từ AliExpress, dịch vụ lớn nhất, rất nhiều chữ cái được gửi đến cho một đơn hàng và chúng tôi đã tính toán rằng trong trường hợp đầu cuối, số lượng của chúng có thể lên tới 29. Do đó, bằng cách sử dụng mô hình Nhận dạng thực thể được đặt tên, chúng tôi trích xuất số đơn hàng và các thông tin khác từ văn bản và nhóm tất cả các chữ cái trong một chuỗi. Chúng tôi cũng hiển thị thông tin cơ bản về đơn hàng trong một hộp riêng, giúp bạn làm việc với loại email này dễ dàng hơn.

    Hoạt động học máy trong Mail.ru Mail

  • Chống lừa đảo. Lừa đảo trực tuyến là một loại email gian lận đặc biệt nguy hiểm, qua đó những kẻ tấn công cố gắng lấy thông tin tài chính (bao gồm cả thẻ ngân hàng của người dùng) và thông tin đăng nhập. Những bức thư như vậy bắt chước những bức thư thật được gửi bởi dịch vụ, bao gồm cả hình ảnh trực quan. Do đó, với sự trợ giúp của Computer Vision, chúng tôi nhận dạng logo và phong cách thiết kế chữ cái của các công ty lớn (ví dụ: Mail.ru, Sber, Alfa) và tính đến điều này cùng với văn bản và các tính năng khác trong trình phân loại thư rác và lừa đảo của chúng tôi .

Máy học

Một chút về học máy trong email nói chung. Thư là một hệ thống có tải cao: trung bình 1,5 tỷ lá thư mỗi ngày đi qua máy chủ của chúng tôi cho 30 triệu người dùng DAU. Khoảng 30 hệ thống máy học hỗ trợ tất cả các chức năng và tính năng cần thiết.

Mỗi chữ cái đều đi qua toàn bộ hệ thống phân loại. Đầu tiên chúng tôi loại bỏ thư rác và để lại những email tốt. Người dùng thường không chú ý đến công việc của tính năng chống thư rác, vì 95-99% thư rác thậm chí không nằm trong thư mục thích hợp. Nhận dạng thư rác là một phần rất quan trọng trong hệ thống của chúng tôi và là phần khó nhất vì trong lĩnh vực chống thư rác có sự thích ứng liên tục giữa các hệ thống phòng thủ và tấn công, điều này mang lại thách thức kỹ thuật liên tục cho nhóm của chúng tôi.

Tiếp theo, chúng tôi tách các chữ cái khỏi con người và robot. Email từ mọi người là quan trọng nhất nên chúng tôi cung cấp các tính năng như Trả lời thông minh cho họ. Thư từ robot được chia thành hai phần: giao dịch - đây là những thư quan trọng từ các dịch vụ, ví dụ: xác nhận mua hàng hoặc đặt phòng khách sạn, tài chính và thông tin - đây là quảng cáo kinh doanh, giảm giá.

Chúng tôi tin rằng email giao dịch có tầm quan trọng tương đương với thư từ cá nhân. Chúng nên có trong tay vì chúng ta thường cần nhanh chóng tìm kiếm thông tin về đơn hàng hoặc đặt vé máy bay và chúng ta dành thời gian tìm kiếm những bức thư này. Do đó, để thuận tiện, chúng tôi tự động chia chúng thành sáu loại chính: du lịch, đặt hàng, tài chính, vé, đăng ký và cuối cùng là tiền phạt.

Thư thông tin là nhóm lớn nhất và có lẽ ít quan trọng hơn, không yêu cầu phản hồi ngay lập tức, vì sẽ không có gì thay đổi đáng kể trong cuộc sống của người dùng nếu anh ta không đọc một bức thư như vậy. Trong giao diện mới, chúng tôi thu gọn chúng thành hai chuỗi: mạng xã hội và bản tin, do đó xóa hộp thư đến một cách trực quan và chỉ để lại những thư quan trọng.

Hoạt động học máy trong Mail.ru Mail

Khai thác

Một số lượng lớn các hệ thống gây ra rất nhiều khó khăn trong hoạt động. Suy cho cùng, các mô hình xuống cấp theo thời gian, giống như bất kỳ phần mềm nào: tính năng bị hỏng, máy bị lỗi, mã bị sai lệch. Ngoài ra, dữ liệu liên tục thay đổi: dữ liệu mới được thêm vào, mô hình hành vi của người dùng được thay đổi, v.v., do đó, một mô hình không có sự hỗ trợ phù hợp sẽ hoạt động ngày càng kém hơn theo thời gian.

Chúng ta không được quên rằng học máy càng thâm nhập sâu vào cuộc sống của người dùng thì tác động của chúng đối với hệ sinh thái càng lớn và kết quả là người chơi trên thị trường có thể nhận được càng nhiều tổn thất tài chính hoặc lợi nhuận. Do đó, trong ngày càng nhiều lĩnh vực, người chơi đang thích nghi với hoạt động của thuật toán ML (ví dụ điển hình là quảng cáo, tìm kiếm và tính năng chống thư rác đã được đề cập).

Ngoài ra, các tác vụ học máy có một điểm đặc biệt: bất kỳ thay đổi nào, dù là nhỏ, trong hệ thống đều có thể tạo ra nhiều công việc với mô hình: làm việc với dữ liệu, đào tạo lại, triển khai, có thể mất hàng tuần hoặc hàng tháng. Do đó, môi trường mà mô hình của bạn vận hành thay đổi càng nhanh thì càng cần nhiều nỗ lực để duy trì chúng. Một nhóm có thể tạo ra nhiều hệ thống và hài lòng với nó, nhưng sau đó lại dành gần như toàn bộ nguồn lực để duy trì chúng mà không có cơ hội làm bất cứ điều gì mới. Chúng tôi từng gặp phải tình huống như vậy trong nhóm chống thư rác. Và họ đã đưa ra kết luận rõ ràng rằng việc hỗ trợ cần phải được tự động hóa.

Tự động hóa

Những gì có thể được tự động hóa? Thực ra là hầu hết mọi thứ. Tôi đã xác định được bốn lĩnh vực xác định cơ sở hạ tầng máy học:

  • thu thập dữ liệu;
  • luyện tập bổ sung;
  • triển khai;
  • kiểm tra & giám sát.

Nếu môi trường không ổn định và thay đổi liên tục thì toàn bộ cơ sở hạ tầng xung quanh mô hình hóa ra lại quan trọng hơn nhiều so với bản thân mô hình. Nó có thể là một bộ phân loại tuyến tính cũ tốt, nhưng nếu bạn cung cấp cho nó những tính năng phù hợp và nhận được phản hồi tốt từ người dùng, nó sẽ hoạt động tốt hơn nhiều so với các mô hình Hiện đại với tất cả chuông và còi.

Vòng lặp thông tin phản hồi

Chu trình này kết hợp thu thập dữ liệu, đào tạo và triển khai bổ sung - trên thực tế là toàn bộ chu trình cập nhật mô hình. Tại sao nó lại quan trọng? Xem lịch đăng ký trong thư:

Hoạt động học máy trong Mail.ru Mail

Một nhà phát triển máy học đã triển khai mô hình chống bot để ngăn bot đăng ký trong email. Biểu đồ giảm xuống giá trị mà chỉ còn lại người dùng thực. Mọi thứ đều tuyệt vời! Nhưng bốn giờ trôi qua, các bot chỉnh sửa tập lệnh của chúng và mọi thứ trở lại bình thường. Trong quá trình triển khai này, nhà phát triển đã dành một tháng để bổ sung các tính năng và đào tạo lại mô hình, nhưng kẻ gửi thư rác đã có thể thích ứng trong bốn giờ.

Để không quá đau đớn và không phải làm lại mọi thứ sau này, ban đầu chúng ta phải nghĩ xem vòng phản hồi sẽ như thế nào và chúng ta sẽ làm gì nếu môi trường thay đổi. Hãy bắt đầu với việc thu thập dữ liệu - đây là nhiên liệu cho các thuật toán của chúng tôi.

Thu thập dữ liệu

Rõ ràng là đối với các mạng thần kinh hiện đại, càng nhiều dữ liệu thì càng tốt và trên thực tế, chúng được tạo ra bởi người dùng sản phẩm. Người dùng có thể giúp chúng tôi bằng cách đánh dấu dữ liệu, nhưng chúng tôi không thể lạm dụng điều này, vì đến một lúc nào đó người dùng sẽ cảm thấy mệt mỏi khi hoàn thành mô hình của bạn và sẽ chuyển sang sản phẩm khác.

Một trong những lỗi phổ biến nhất (ở đây tôi đề cập đến Andrew Ng) là tập trung quá nhiều vào các số liệu trên tập dữ liệu thử nghiệm mà không tập trung vào phản hồi từ người dùng, đây thực sự là thước đo chính cho chất lượng công việc, vì chúng tôi tạo ra một sản phẩm cho người sử dụng. Nếu người dùng không hiểu hoặc không thích công việc của mô hình thì mọi thứ sẽ bị hủy hoại.

Do đó, người dùng phải luôn có thể bỏ phiếu và phải được cung cấp một công cụ để phản hồi. Nếu chúng tôi nghĩ rằng một lá thư liên quan đến tài chính đã đến hộp thư, chúng tôi cần đánh dấu nó là “tài chính” và vẽ một nút mà người dùng có thể nhấp vào và nói rằng đây không phải là tài chính.

Chất lượng phản hồi

Hãy nói về chất lượng phản hồi của người dùng. Đầu tiên, bạn và người dùng có thể đặt những ý nghĩa khác nhau vào một khái niệm. Ví dụ: bạn và người quản lý sản phẩm của bạn nghĩ rằng “tài chính” có nghĩa là thư từ ngân hàng và người dùng nghĩ rằng thư của bà ngoại về lương hưu của bà cũng đề cập đến tài chính. Thứ hai, có những người dùng thích nhấn nút mà không có bất kỳ logic nào. Thứ ba, người dùng có thể mắc sai lầm sâu sắc trong kết luận của mình. Một ví dụ nổi bật từ thực tiễn của chúng tôi là việc triển khai bộ phân loại thư rác Nigeria, một loại thư rác rất hài hước trong đó người dùng được yêu cầu lấy vài triệu đô la từ một người họ hàng xa bất ngờ được tìm thấy ở Châu Phi. Sau khi triển khai trình phân loại này, chúng tôi đã kiểm tra các lượt nhấp chuột “Không phải thư rác” trên những email này và hóa ra 80% trong số đó là thư rác ở Nigeria, điều này cho thấy rằng người dùng có thể cực kỳ cả tin.

Và đừng quên rằng các nút này không chỉ có thể được nhấp vào bởi mọi người mà còn bởi tất cả các loại bot giả vờ là trình duyệt. Vì vậy, phản hồi thô không tốt cho việc học. Bạn có thể làm gì với thông tin này?

Chúng tôi sử dụng hai cách tiếp cận:

  • Phản hồi từ ML được liên kết. Ví dụ: chúng tôi có một hệ thống chống bot trực tuyến, như tôi đã đề cập, hệ thống này đưa ra quyết định nhanh chóng dựa trên một số dấu hiệu hạn chế. Và có một hệ thống thứ hai, chậm chạp hoạt động sau sự việc. Nó có nhiều dữ liệu hơn về người dùng, hành vi của anh ta, v.v. Kết quả là, quyết định sáng suốt nhất được đưa ra, theo đó, nó có độ chính xác và đầy đủ cao hơn. Bạn có thể hướng sự khác biệt trong hoạt động của các hệ thống này sang hệ thống đầu tiên dưới dạng dữ liệu huấn luyện. Do đó, một hệ thống đơn giản hơn sẽ luôn cố gắng đạt được hiệu suất của một hệ thống phức tạp hơn.
  • Phân loại nhấp chuột. Bạn có thể chỉ cần phân loại từng nhấp chuột của người dùng, đánh giá tính hợp lệ và khả năng sử dụng của nó. Chúng tôi thực hiện việc này trong thư chống thư rác, sử dụng thuộc tính người dùng, lịch sử của người đó, thuộc tính người gửi, chính văn bản và kết quả của bộ phân loại. Kết quả là chúng tôi nhận được một hệ thống tự động xác thực phản hồi của người dùng. Và vì nó cần được đào tạo lại ít thường xuyên hơn nên công việc của nó có thể trở thành nền tảng cho tất cả các hệ thống khác. Ưu tiên chính trong mô hình này là độ chính xác, bởi vì việc đào tạo mô hình trên dữ liệu không chính xác sẽ gây ra nhiều hậu quả.

Trong khi chúng tôi đang làm sạch dữ liệu và đào tạo thêm hệ thống ML của mình, chúng tôi không được quên người dùng, bởi vì đối với chúng tôi, hàng nghìn, hàng triệu lỗi trên biểu đồ là số liệu thống kê và đối với người dùng, mọi lỗi đều là một thảm kịch. Ngoài việc người dùng bằng cách nào đó phải chấp nhận lỗi của bạn trong sản phẩm, sau khi nhận được phản hồi, anh ta hy vọng rằng tình trạng tương tự sẽ được loại bỏ trong tương lai. Do đó, điều luôn đáng giá là mang lại cho người dùng không chỉ cơ hội bỏ phiếu mà còn điều chỉnh hành vi của hệ thống ML, chẳng hạn như tạo ra các chẩn đoán cá nhân cho mỗi lần nhấp phản hồi; trong trường hợp là thư, đây có thể là khả năng lọc những bức thư như vậy theo người gửi và tiêu đề cho người dùng này.

Bạn cũng cần xây dựng mô hình dựa trên một số báo cáo hoặc yêu cầu hỗ trợ ở chế độ bán tự động hoặc thủ công để những người dùng khác không gặp phải vấn đề tương tự.

Heuristic cho việc học

Có hai vấn đề với những phương pháp phỏng đoán và chiếc nạng này. Đầu tiên là số lượng nạng ngày càng tăng rất khó bảo trì chứ đừng nói đến chất lượng và hiệu suất của chúng trong thời gian dài. Vấn đề thứ hai là lỗi có thể không xảy ra thường xuyên và một vài cú nhấp chuột để đào tạo thêm mô hình sẽ không đủ. Có vẻ như hai tác động không liên quan này có thể được vô hiệu hóa đáng kể nếu áp dụng phương pháp sau.

  1. Chúng tôi tạo ra một chiếc nạng tạm thời.
  2. Chúng tôi gửi dữ liệu từ nó đến mô hình, nó thường xuyên tự cập nhật, kể cả dữ liệu nhận được. Tất nhiên, ở đây, điều quan trọng là các phương pháp phỏng đoán phải có độ chính xác cao để không làm giảm chất lượng dữ liệu trong tập huấn luyện.
  3. Sau đó, chúng tôi thiết lập giám sát để kích hoạt nạng và nếu sau một thời gian nạng không còn hoạt động và bị mô hình che phủ hoàn toàn thì bạn có thể tháo nó ra một cách an toàn. Bây giờ vấn đề này khó có thể xảy ra nữa.

Vì thế một đội quân nạng rất hữu ích. Điều chính là dịch vụ của họ là khẩn cấp và không lâu dài.

Luyện tập bổ sung

Đào tạo lại là quá trình thêm dữ liệu mới thu được do phản hồi từ người dùng hoặc các hệ thống khác và đào tạo mô hình hiện có về dữ liệu đó. Có thể có một số vấn đề với việc đào tạo bổ sung:

  1. Đơn giản là mô hình có thể không hỗ trợ đào tạo bổ sung mà chỉ học từ đầu.
  2. Không nơi nào trong cuốn sách tự nhiên viết rằng đào tạo bổ sung chắc chắn sẽ cải thiện chất lượng công việc trong sản xuất. Thường thì điều ngược lại xảy ra, tức là chỉ có thể xảy ra sự suy thoái.
  3. Những thay đổi có thể không thể đoán trước. Đây là một điểm khá tế nhị mà chúng tôi đã tự mình xác định được. Ngay cả khi một mô hình mới trong thử nghiệm A/B cho thấy kết quả tương tự so với mô hình hiện tại thì điều này không có nghĩa là nó sẽ hoạt động giống hệt nhau. Công việc của họ có thể khác nhau chỉ một phần trăm, điều này có thể gây ra lỗi mới hoặc trả lại những lỗi cũ đã được sửa. Cả chúng tôi và người dùng đều đã biết cách đối phó với các lỗi hiện tại và khi phát sinh một số lượng lớn lỗi mới, người dùng cũng có thể không hiểu chuyện gì đang xảy ra vì họ mong đợi hành vi có thể đoán trước được.

Vì vậy, điều quan trọng nhất trong đào tạo bổ sung là đảm bảo mô hình được cải thiện, hoặc ít nhất là không xấu đi.

Điều đầu tiên chúng ta nghĩ đến khi nói về đào tạo bổ sung là phương pháp Học tập Tích cực. Điều đó có nghĩa là gì? Ví dụ: bộ phân loại xác định xem một email có liên quan đến tài chính hay không và xung quanh ranh giới quyết định của nó, chúng tôi thêm một mẫu các ví dụ được gắn nhãn. Điều này hoạt động tốt, chẳng hạn như trong quảng cáo, nơi có nhiều phản hồi và bạn có thể đào tạo mô hình trực tuyến. Và nếu có ít phản hồi, thì chúng ta sẽ nhận được một mẫu có độ sai lệch cao so với phân phối dữ liệu sản xuất, trên cơ sở đó không thể đánh giá hành vi của mô hình trong quá trình vận hành.

Hoạt động học máy trong Mail.ru Mail

Trên thực tế, mục tiêu của chúng tôi là bảo tồn các mẫu cũ, các mẫu đã biết và tiếp thu các mẫu mới. Sự liên tục là quan trọng ở đây. Mô hình mà chúng tôi thường mất nhiều công sức để triển khai, hiện đã hoạt động nên chúng tôi có thể tập trung vào hiệu suất của nó.

Các mô hình khác nhau được sử dụng trong thư: cây, mạng tuyến tính, mạng thần kinh. Đối với mỗi thuật toán, chúng tôi tạo ra thuật toán đào tạo bổ sung của riêng mình. Trong quá trình đào tạo bổ sung, chúng tôi không chỉ nhận được dữ liệu mới mà còn nhận được các tính năng mới mà chúng tôi sẽ tính đến trong tất cả các thuật toán bên dưới.

Mô hình tuyến tính

Giả sử chúng ta có hồi quy logistic. Chúng tôi tạo một mô hình mất mát từ các thành phần sau:

  • LogLoss trên dữ liệu mới;
  • chúng tôi chính thức hóa trọng số của các tính năng mới (chúng tôi không chạm vào những tính năng cũ);
  • chúng ta cũng học hỏi từ dữ liệu cũ để bảo tồn các khuôn mẫu cũ;
  • và có lẽ điều quan trọng nhất: chúng tôi thêm Chính quy hài hòa, đảm bảo rằng các trọng số sẽ không thay đổi nhiều so với mô hình cũ theo tiêu chuẩn.

Vì mỗi thành phần Loss đều có hệ số nên chúng ta có thể chọn các giá trị tối ưu cho tác vụ của mình thông qua xác thực chéo hoặc dựa trên yêu cầu của sản phẩm.

Hoạt động học máy trong Mail.ru Mail

Cây cối

Hãy chuyển sang cây quyết định. Chúng tôi đã biên soạn thuật toán sau để đào tạo thêm cây:

  1. Quá trình sản xuất chạy một rừng 100-300 cây, được huấn luyện trên tập dữ liệu cũ.
  2. Cuối cùng, chúng tôi loại bỏ M = 5 phần và thêm 2M = 10 phần mới, được huấn luyện trên toàn bộ tập dữ liệu, nhưng với trọng số cao đối với dữ liệu mới, điều này đương nhiên đảm bảo sự thay đổi gia tăng trong mô hình.

Rõ ràng, theo thời gian, số lượng cây tăng lên rất nhiều và chúng phải được giảm bớt định kỳ để đáp ứng thời gian. Để làm điều này, chúng tôi sử dụng Công cụ chắt lọc kiến ​​thức (KD) phổ biến hiện nay. Nói ngắn gọn về nguyên lý hoạt động của nó.

  1. Chúng tôi có mô hình "phức tạp" hiện tại. Chúng tôi chạy nó trên tập dữ liệu huấn luyện và nhận được phân bố xác suất của lớp ở đầu ra.
  2. Tiếp theo, chúng tôi huấn luyện mô hình học sinh (mô hình có ít cây hơn trong trường hợp này) để lặp lại kết quả của mô hình bằng cách sử dụng phân bố lớp làm biến mục tiêu.
  3. Điều quan trọng cần lưu ý ở đây là chúng tôi không sử dụng đánh dấu tập dữ liệu theo bất kỳ cách nào và do đó chúng tôi có thể sử dụng dữ liệu tùy ý. Tất nhiên, chúng tôi sử dụng mẫu dữ liệu từ luồng chiến đấu làm mẫu huấn luyện cho mô hình học sinh. Do đó, tập huấn luyện cho phép chúng tôi đảm bảo tính chính xác của mô hình và mẫu luồng đảm bảo hiệu suất tương tự trong phân phối sản xuất, bù đắp cho độ lệch của tập huấn luyện.

Hoạt động học máy trong Mail.ru Mail

Sự kết hợp của hai kỹ thuật này (thêm cây và định kỳ giảm số lượng bằng Chưng cất Kiến thức) đảm bảo đưa ra các mẫu mới và hoàn toàn liên tục.

Với sự trợ giúp của KD, chúng tôi cũng thực hiện các thao tác khác nhau trên các tính năng của mô hình, chẳng hạn như loại bỏ các tính năng và xử lý các khoảng trống. Trong trường hợp của chúng tôi, chúng tôi có một số tính năng thống kê quan trọng (theo người gửi, băm văn bản, URL, v.v.) được lưu trữ trong cơ sở dữ liệu và có xu hướng bị lỗi. Tất nhiên, mô hình chưa sẵn sàng cho sự phát triển của các sự kiện như vậy vì các tình huống lỗi không xảy ra trong tập huấn luyện. Trong những trường hợp như vậy, chúng tôi kết hợp kỹ thuật KD và tăng cường: khi đào tạo một phần dữ liệu, chúng tôi xóa hoặc đặt lại các tính năng cần thiết và chúng tôi lấy nhãn gốc (đầu ra của mô hình hiện tại) và mô hình sinh viên học cách lặp lại phân phối này .

Hoạt động học máy trong Mail.ru Mail

Chúng tôi nhận thấy rằng thao tác mô hình càng nghiêm trọng thì tỷ lệ mẫu luồng được yêu cầu càng lớn.

Loại bỏ tính năng, thao tác đơn giản nhất, chỉ yêu cầu một phần nhỏ của quy trình, vì chỉ có một số tính năng thay đổi và mô hình hiện tại được đào tạo trên cùng một bộ - sự khác biệt là rất nhỏ. Để đơn giản hóa mô hình (giảm số lượng cây nhiều lần), cần có 50 đến 50. Và để loại bỏ các tính năng thống kê quan trọng sẽ ảnh hưởng nghiêm trọng đến hiệu suất của mô hình, thậm chí cần nhiều luồng hơn để san bằng công việc của mô hình. mô hình chống thiếu sót mới trên tất cả các loại chữ cái.

Hoạt động học máy trong Mail.ru Mail

văn bản nhanh

Hãy chuyển sang FastText. Hãy để tôi nhắc bạn rằng cách biểu diễn (Nhúng) của một từ bao gồm tổng số phần nhúng của chính từ đó và tất cả các chữ cái N-gram của nó, thường là bát quái. Vì có thể có khá nhiều bát quái nên Bucket Hashing được sử dụng, tức là chuyển đổi toàn bộ không gian thành một hashmap cố định nhất định. Kết quả là, ma trận trọng số thu được với kích thước của lớp bên trong trên số từ + nhóm.

Với sự đào tạo bổ sung, các dấu hiệu mới sẽ xuất hiện: từ và bát quái. Không có gì đáng kể xảy ra trong quá trình đào tạo theo dõi tiêu chuẩn từ Facebook. Chỉ các trọng số cũ có entropy chéo mới được đào tạo lại trên dữ liệu mới. Do đó, các tính năng mới không được sử dụng, tất nhiên, cách tiếp cận này có tất cả các nhược điểm nêu trên liên quan đến tính khó đoán của mô hình trong sản xuất. Đó là lý do tại sao chúng tôi sửa đổi FastText một chút. Chúng tôi thêm tất cả các trọng số mới (từ và bát quái), mở rộng toàn bộ ma trận với entropy chéo và thêm chính quy hóa hài hòa bằng cách tương tự với mô hình tuyến tính, đảm bảo sự thay đổi không đáng kể trong các trọng số cũ.

Hoạt động học máy trong Mail.ru Mail

CNN

Mạng tích chập phức tạp hơn một chút. Tất nhiên, nếu các lớp cuối cùng được hoàn thành trong CNN thì bạn có thể áp dụng chính quy hóa hài hòa và đảm bảo tính liên tục. Nhưng nếu cần phải đào tạo bổ sung cho toàn bộ mạng thì việc chính quy hóa đó không còn có thể được áp dụng cho tất cả các lớp nữa. Tuy nhiên, có một tùy chọn để huấn luyện các phần nhúng bổ sung thông qua Mất bộ ba (bài báo gốc).

Mất ba lần

Lấy nhiệm vụ chống lừa đảo làm ví dụ, chúng ta hãy xem xét Mất ba lần một cách tổng quát. Chúng tôi lấy logo của mình, cũng như các ví dụ tích cực và tiêu cực về logo của các công ty khác. Chúng tôi giảm thiểu khoảng cách giữa lớp thứ nhất và tối đa hóa khoảng cách giữa lớp thứ hai, chúng tôi thực hiện điều này với một khoảng cách nhỏ để đảm bảo độ nén cao hơn của các lớp.

Hoạt động học máy trong Mail.ru Mail

Nếu chúng ta huấn luyện mạng thêm nữa thì không gian số liệu của chúng ta sẽ thay đổi hoàn toàn và nó sẽ hoàn toàn không tương thích với mạng trước đó. Đây là một vấn đề nghiêm trọng trong các bài toán sử dụng vectơ. Để giải quyết vấn đề này, chúng tôi sẽ kết hợp các phần nhúng cũ trong quá trình đào tạo.

Chúng tôi đã thêm dữ liệu mới vào tập huấn luyện và đang huấn luyện phiên bản thứ hai của mô hình từ đầu. Ở giai đoạn thứ hai, chúng tôi đào tạo thêm mạng của mình (Tinh chỉnh): đầu tiên lớp cuối cùng được hoàn thành và sau đó toàn bộ mạng sẽ không bị đóng băng. Trong quá trình tổng hợp các bộ ba, chúng tôi chỉ tính toán một phần của các phần nhúng bằng cách sử dụng mô hình đã huấn luyện, phần còn lại - sử dụng mô hình cũ. Do đó, trong quá trình đào tạo bổ sung, chúng tôi đảm bảo tính tương thích của không gian số liệu v1 và v2. Một phiên bản độc đáo của chính quy hóa hài hòa.

Hoạt động học máy trong Mail.ru Mail

Toàn bộ kiến ​​trúc

Nếu chúng ta coi toàn bộ hệ thống sử dụng tính năng chống thư rác làm ví dụ, thì các mô hình không bị cô lập mà được lồng vào nhau. Chúng tôi chụp ảnh, văn bản và các tính năng khác, sử dụng CNN và Fast Text, chúng tôi nhận được các phần nhúng. Tiếp theo, các bộ phân loại được áp dụng bên trên các phần nhúng, cung cấp điểm số cho các loại khác nhau (các loại chữ cái, thư rác, sự hiện diện của biểu tượng). Các tín hiệu và dấu hiệu đã đi vào rừng cây để đưa ra quyết định cuối cùng. Các bộ phân loại riêng lẻ trong sơ đồ này giúp diễn giải tốt hơn các kết quả của hệ thống và cụ thể hơn là huấn luyện lại các thành phần trong trường hợp có vấn đề, thay vì đưa tất cả dữ liệu vào cây quyết định ở dạng thô.

Hoạt động học máy trong Mail.ru Mail

Kết quả là, chúng tôi đảm bảo tính liên tục ở mọi cấp độ. Ở cấp độ thấp nhất trong CNN và Fast Text, chúng tôi sử dụng chính quy hóa hài hòa, đối với các bộ phân loại ở giữa, chúng tôi cũng sử dụng chính quy hóa hài hòa và hiệu chỉnh tỷ lệ để đảm bảo tính nhất quán của phân bố xác suất. Chà, việc tăng cường cây được đào tạo tăng dần hoặc sử dụng Chắt lọc kiến ​​thức.

Nói chung, việc duy trì một hệ thống máy học lồng nhau như vậy thường là một điều khó khăn vì bất kỳ thành phần nào ở cấp độ thấp hơn đều dẫn đến bản cập nhật cho toàn bộ hệ thống ở trên. Nhưng vì trong quá trình thiết lập của chúng tôi, mỗi thành phần thay đổi một chút và tương thích với thành phần trước đó nên toàn bộ hệ thống có thể được cập nhật từng phần một mà không cần phải đào tạo lại toàn bộ cấu trúc, điều này cho phép nó được hỗ trợ mà không cần chi phí nghiêm trọng.

Triển khai

Chúng tôi đã thảo luận về việc thu thập dữ liệu và đào tạo bổ sung về các loại mô hình khác nhau, vì vậy chúng tôi đang chuyển sang triển khai chúng vào môi trường sản xuất.

Thử nghiệm A/B

Như tôi đã nói trước đó, trong quá trình thu thập số liệu chúng ta thường lấy mẫu sai lệch, từ đó không thể đánh giá được hiệu quả sản xuất của mô hình. Vì vậy, khi triển khai, mô hình phải được so sánh với phiên bản trước để hiểu mọi thứ thực sự diễn ra như thế nào, tức là tiến hành A/B testing. Trên thực tế, quá trình triển khai và phân tích biểu đồ diễn ra khá thường xuyên và có thể dễ dàng tự động hóa. Chúng tôi triển khai dần dần các mô hình của mình cho 5%, 30%, 50% và 100% người dùng, đồng thời thu thập tất cả các số liệu có sẵn về phản hồi của mô hình và phản hồi của người dùng. Trong trường hợp có một số ngoại lệ nghiêm trọng, chúng tôi sẽ tự động khôi phục mô hình và đối với các trường hợp khác, sau khi thu thập đủ số lần nhấp của người dùng, chúng tôi quyết định tăng tỷ lệ phần trăm. Do đó, chúng tôi đưa mô hình mới đến 50% người dùng hoàn toàn tự động và việc triển khai cho toàn bộ đối tượng sẽ được một người phê duyệt, mặc dù bước này có thể được tự động hóa.

Tuy nhiên, quy trình thử nghiệm A/B có chỗ để tối ưu hóa. Thực tế là bất kỳ thử nghiệm A/B nào cũng khá dài (trong trường hợp của chúng tôi phải mất từ ​​6 đến 24 giờ tùy thuộc vào lượng phản hồi), điều này khiến nó khá tốn kém và nguồn lực hạn chế. Ngoài ra, cần có tỷ lệ lưu lượng đủ cao cho thử nghiệm để tăng tốc về cơ bản thời gian tổng thể của thử nghiệm A/B (việc tuyển dụng một mẫu có ý nghĩa thống kê để đánh giá các số liệu ở một tỷ lệ nhỏ có thể mất một thời gian rất dài), điều này khiến cho số lượng slot A/B cực kỳ hạn chế. Rõ ràng, chúng tôi chỉ cần thử nghiệm những mô hình hứa hẹn nhất, trong đó chúng tôi nhận được khá nhiều trong quá trình đào tạo bổ sung.

Để giải quyết vấn đề này, chúng tôi đã đào tạo một trình phân loại riêng biệt để dự đoán sự thành công của thử nghiệm A/B. Để làm điều này, chúng tôi lấy số liệu thống kê ra quyết định, Độ chính xác, Thu hồi và các số liệu khác trên tập huấn luyện, trên tập bị trì hoãn và trên mẫu từ luồng làm đối tượng địa lý. Chúng tôi cũng so sánh mô hình với mô hình hiện tại đang được sản xuất bằng phương pháp phỏng đoán và tính đến Độ phức tạp của mô hình. Bằng cách sử dụng tất cả các tính năng này, một trình phân loại được đào tạo về lịch sử thử nghiệm sẽ đánh giá các mô hình ứng cử viên, trong trường hợp của chúng tôi đây là những rừng cây và quyết định nên sử dụng mô hình nào trong thử nghiệm A/B.

Hoạt động học máy trong Mail.ru Mail

Tại thời điểm triển khai, phương pháp này cho phép chúng tôi tăng số lượng thử nghiệm A/B thành công lên nhiều lần.

Kiểm tra & Giám sát

Kỳ lạ thay, việc kiểm tra và giám sát không gây hại cho sức khỏe của chúng ta mà ngược lại, chúng còn cải thiện sức khỏe và giúp chúng ta giảm bớt những căng thẳng không cần thiết. Kiểm tra cho phép bạn ngăn ngừa lỗi và việc giám sát cho phép bạn phát hiện kịp thời để giảm tác động đến người dùng.

Điều quan trọng là phải hiểu ở đây rằng sớm hay muộn hệ thống của bạn sẽ luôn mắc lỗi - điều này là do chu kỳ phát triển của bất kỳ phần mềm nào. Khi bắt đầu phát triển hệ thống, luôn có rất nhiều lỗi cho đến khi mọi thứ ổn định và giai đoạn đổi mới chính hoàn thành. Nhưng theo thời gian, entropy sẽ bị ảnh hưởng và các lỗi lại xuất hiện - do sự xuống cấp của các thành phần xung quanh và những thay đổi về dữ liệu, điều mà tôi đã nói ở phần đầu.

Ở đây tôi muốn lưu ý rằng bất kỳ hệ thống máy học nào cũng cần được xem xét từ quan điểm lợi nhuận trong toàn bộ vòng đời của nó. Biểu đồ bên dưới hiển thị ví dụ về cách hệ thống hoạt động để phát hiện một loại thư rác hiếm gặp (đường trong biểu đồ gần bằng XNUMX). Một ngày nọ, do thuộc tính được lưu trong bộ nhớ đệm không chính xác, cô ấy đã phát điên. May mắn thay, không có sự giám sát nào đối với việc kích hoạt bất thường; kết quả là hệ thống bắt đầu lưu các bức thư với số lượng lớn vào thư mục “thư rác” ở ranh giới ra quyết định. Mặc dù đã khắc phục hậu quả nhưng hệ thống đã mắc sai lầm nhiều lần đến mức thậm chí trong XNUMX năm nữa nó sẽ không thể tự đền bù được. Và đây là một thất bại hoàn toàn xét về mặt vòng đời của mô hình.

Hoạt động học máy trong Mail.ru Mail

Do đó, một việc đơn giản như giám sát có thể trở thành chìa khóa trong vòng đời của một mô hình. Ngoài các số liệu tiêu chuẩn và rõ ràng, chúng tôi còn xem xét việc phân phối các phản hồi và điểm số của mô hình cũng như việc phân phối các giá trị tính năng chính. Bằng cách sử dụng phân kỳ KL, chúng tôi có thể so sánh phân phối hiện tại với phân phối lịch sử hoặc các giá trị trong thử nghiệm A/B với phần còn lại của luồng, điều này cho phép chúng tôi nhận thấy những điểm bất thường trong mô hình và khôi phục các thay đổi kịp thời.

Trong hầu hết các trường hợp, chúng tôi khởi chạy các phiên bản hệ thống đầu tiên bằng cách sử dụng các mô hình hoặc phương pháp phỏng đoán đơn giản mà chúng tôi sử dụng làm giám sát trong tương lai. Ví dụ: chúng tôi theo dõi mô hình NER so với mô hình thông thường cho các cửa hàng trực tuyến cụ thể và nếu phạm vi phân loại giảm so với chúng thì chúng tôi hiểu lý do. Một cách sử dụng hữu ích khác của heuristic!

Kết quả

Chúng ta hãy xem lại các ý chính của bài viết một lần nữa.

  • Fibdeck. Chúng tôi luôn nghĩ về người dùng: anh ấy sẽ sống với những lỗi lầm của chúng tôi như thế nào, anh ấy sẽ có thể báo cáo chúng như thế nào. Đừng quên rằng người dùng không phải là nguồn phản hồi thuần túy cho các mô hình đào tạo và nó cần được làm rõ với sự trợ giúp của các hệ thống ML phụ trợ. Nếu không thể thu thập tín hiệu từ người dùng thì chúng tôi sẽ tìm kiếm các nguồn phản hồi thay thế, chẳng hạn như các hệ thống được kết nối.
  • Luyện tập bổ sung. Điều quan trọng ở đây là tính liên tục nên chúng tôi dựa vào mô hình sản xuất hiện tại. Chúng tôi đào tạo các mô hình mới để chúng không khác nhiều so với mô hình trước đó do sự chính quy hóa hài hòa và các thủ thuật tương tự.
  • Triển khai. Tự động triển khai dựa trên số liệu giúp giảm đáng kể thời gian triển khai mô hình. Giám sát số liệu thống kê và phân bổ việc ra quyết định, số lần té ngã của người dùng là điều bắt buộc để bạn có giấc ngủ ngon và cuối tuần làm việc hiệu quả.

Chà, tôi hy vọng điều này sẽ giúp bạn cải thiện hệ thống ML của mình nhanh hơn, đưa chúng ra thị trường nhanh hơn và làm cho chúng trở nên đáng tin cậy hơn và ít căng thẳng hơn.

Nguồn: www.habr.com

Thêm một lời nhận xét