Business analyst

Bài học kinh nghiệm: Đào tạo và triển khai mô hình máy biến áp hiện đại ở chữ số

Trong bài đăng trên blog này, chúng tôi muốn cung cấp một cái nhìn sau bức màn về cách chúng tôi trích xuất thông tin bằng Xử lý ngôn ngữ tự nhiên (NLP). Bạn sẽ học cách ứng dụng các mô hình Transformer hiện đại cho vấn đề này và cách chuyển từ ý tưởng mô hình ML sang tích hợp trong ứng dụng Digits. Thông tin Kế hoạch có thể được trích xuất từ ​​văn bản phi cấu trúc thông qua một quá trình được gọi là Nhận dạng Đối tượng Được đặt tên (NER). Khái niệm NLP này đã xuất hiện trong nhiều năm và mục tiêu là phân loại mã thông báo thành các danh mục được xác định trước, ví dụ: ngày tháng, người, địa điểm, thực thể. Ví dụ: các giao dịch bên dưới có thể được chuyển đổi thành định dạng cấu trúc sau: Thông tin kế hoạch của chúng tôi có thể được trích xuất từ ​​văn bản phi cấu trúc thông qua một quy trình được gọi là Nhận dạng đối tượng được đặt tên (NER). Khái niệm NLP này đã xuất hiện trong nhiều năm và mục tiêu của nó là phân loại mã thông báo thành các danh mục được xác định trước, chẳng hạn như ngày, người, địa điểm và thực thể. Ví dụ: giao dịch bên dưới có thể được chuyển đổi thành định dạng có cấu trúc sau: Nhận dạng thực thể được đặt tên trong hoạt động Chúng tôi đã thấy những kết quả nổi bật từ việc triển khai NER được áp dụng cho các ngành khác và chúng tôi mong muốn triển khai mô hình NER liên quan đến ngân hàng của riêng mình. Thay vì áp dụng mô hình NER được đào tạo trước, chúng tôi đã hình dung ra một mô hình được xây dựng với số lượng phụ thuộc tối thiểu. Con đường đó sẽ cho phép chúng tôi liên tục cập nhật mô hình trong khi vẫn kiểm soát được “tất cả các bộ phận chuyển động”. Với ý nghĩ này, chúng tôi đã loại bỏ các công cụ có sẵn như triển khai SpaCy NER hoặc các mô hình HuggingFace cho NER. Chúng tôi đã kết thúc việc xây dựng mô hình NER nội bộ của mình chỉ dựa trên TensorFlow 2.x và thư viện hệ sinh thái TensorFlow Text. Dự án Data Every Machine Learning bắt đầu với dữ liệu và dự án này cũng vậy. Chúng tôi đã quyết định thông tin liên quan mà chúng tôi muốn trích xuất (ví dụ: vị trí, URL trang web, tên bên, v.v.) và, trong trường hợp không có tập dữ liệu công khai hiện có, chúng tôi quyết định tự chú thích dữ liệu. Có một số công cụ thương mại và mã nguồn mở có sẵn để chú thích dữ liệu, bao gồm: Explosion's Prodigy (hoạt động tốt trong kết nối với SpaCy của Python) Label Studio (công cụ mã nguồn mở miễn phí) AWS Mechanical Turk (dịch vụ thương mại xử lý việc tuyển dụng chú thích và xử lý các tác vụ) Quy mô AI (dịch vụ chú thích được quản lý hoàn toàn) Công cụ tối ưu thay đổi theo từng dự án và là câu hỏi về chi phí, tốc độ và giao diện người dùng hữu ích. Đối với dự án này, động lực chính cho việc lựa chọn công cụ của chúng tôi là chất lượng của giao diện người dùng và tốc độ xử lý mẫu, và chúng tôi đã chọn doccano. Ví dụ về chú thích dữ liệu thủ công Ít nhất một người đánh giá là con người sau đó đã đánh giá từng giao dịch đã chọn và người đó sẽ đánh dấu các chuỗi con có liên quan như được hiển thị ở trên. Sản phẩm cuối cùng của bước xử lý này là một tập dữ liệu gồm các giao dịch được chú thích cùng với ký tự đầu và cuối của mỗi thực thể trong chuỗi. Chọn một kiến ​​trúc Trong khi các mô hình NER cũng có thể dựa trên các phương pháp thống kê, chúng tôi đã thiết lập các mô hình NER của mình trên một kiến ​​trúc ML được gọi là Transformers. Quyết định này dựa trên hai yếu tố chính: Máy biến áp cung cấp một cải tiến lớn về NLP khi nói đến khả năng hiểu ngôn ngữ. Thay vì đánh giá từng mã thông báo theo từng câu, theo cách các mạng lặp lại sẽ thực hiện tác vụ này, các máy biến áp sử dụng cơ chế chú ý để đánh giá các kết nối giữa các mã thông báo. mã thông báo đồng thời (với một số đánh giá thậm chí nhiều mã thông báo hơn). Kiến trúc mô hình dựa trên sự chú ý ban đầu là Biểu diễn mã hóa hai chiều từ Máy biến áp (viết tắt là BERT), được xuất bản trong 2019. Trong bài báo gốc của Google AI, tác giả đã nêu bật các ứng dụng tiềm năng cho NER, điều này giúp chúng tôi tin tưởng rằng cách tiếp cận máy biến áp của chúng tôi có thể hoạt động. Giấy BERT gốc làm nổi bật các ứng dụng NER: https://arxiv.org/pdf/1810.04805. pdf Hơn nữa, trước đây chúng tôi đã triển khai nhiều ứng dụng học sâu khác dựa trên kiến ​​trúc BERT và chúng tôi có thể sử dụng lại các thư viện chia sẻ hiện có của mình. Điều này cho phép chúng tôi phát triển một nguyên mẫu trong một khoảng thời gian ngắn. Mô hình BERT có thể được sử dụng làm mô hình được đào tạo trước, được đào tạo ban đầu trên corpi đa ngôn ngữ về hai nhiệm vụ chung: dự đoán mã thông báo mặt nạ và dự đoán nếu câu tiếp theo có kết nối với câu trước. Việc đào tạo chung như vậy tạo ra sự hiểu biết chung về ngôn ngữ trong mô hình. Các mô hình được đào tạo trước được cung cấp bởi nhiều công ty khác nhau, chẳng hạn như Google thông qua TensorFlow Hub. Sau đó, mô hình được đào tạo trước có thể được tinh chỉnh trong giai đoạn đào tạo theo nhiệm vụ cụ thể. Điều này đòi hỏi ít tài nguyên tính toán hơn so với đào tạo một mô hình từ đầu. Kiến trúc BERT có thể tính toán đồng thời tối đa 512 mã thông báo. BERT yêu cầu mã hóa WordP mảnh sẽ chia các từ và câu thành các phần từ thường xuyên. Câu ví dụ sau sẽ được mã hóa như sau: Digits xây dựng một công cụ thời gian thực Có rất nhiều mô hình BERT được đào tạo trước có sẵn trên mạng, nhưng mỗi mô hình có một trọng tâm khác nhau. Một số mô hình dành riêng cho ngôn ngữ (ví dụ: CamemBERT cho tiếng Pháp hoặc Beto cho tiếng Tây Ban Nha) và các mô hình khác đã được giảm kích thước thông qua chưng cất hoặc cắt tỉa mô hình (ví dụ: ALBERT hoặc DistilBERT). Thời gian để Nguyên mẫu Mô hình nguyên mẫu của chúng tôi được thiết kế để phân loại chuỗi mã thông báo đại diện cho giao dịch được đề cập. Chúng tôi đã chuyển đổi dữ liệu được chú thích thành một chuỗi các nhãn phù hợp với số lượng mã thông báo được tạo từ các giao dịch cho khóa đào tạo. Sau đó, chúng tôi đã đào tạo mô hình phân loại từng nhãn mã thông báo: Nguyên mẫu dự đoán danh mục NER cho mỗi mã thông báo Trong hình trên, bạn nhận thấy các mã thông báo “O”. Các mã thông báo như vậy đại diện cho các mã thông báo không liên quan và chúng tôi đã đào tạo trình phân loại để phát hiện chúng. Mô hình nguyên mẫu đã giúp chúng tôi chứng minh sự phù hợp với doanh nghiệp của giải pháp ML trước khi tham gia vào tích hợp mô hình đầy đủ. Tại Digits, chúng tôi phát triển các nguyên mẫu của mình trong các máy tính xách tay Jupyter được hỗ trợ bởi GPU. Quá trình như vậy giúp chúng tôi lặp lại nhanh chóng. Sau đó, khi chúng tôi xác nhận trường hợp sử dụng kinh doanh cho mô hình, chúng tôi tập trung vào tích hợp mô hình và tự động hóa cập nhật phiên bản mô hình thông qua đường ống MLOps của chúng tôi. Chuyển sang Sản xuất Nói chung, chúng tôi sử dụng TensorFlow Extended (TFX) để cập nhật các phiên bản mô hình của chúng tôi. Trong bước này, chúng tôi chuyển đổi mã sổ ghi chép thành TensorFlow Ops và ở đây chúng tôi đã chuyển đổi các bước tiền xử lý dữ liệu nguyên mẫu của chúng tôi thành TensorFlow Transform Ops. Bước bổ sung này cho phép chúng tôi sau này đào tạo các phiên bản mô hình của mình một cách hiệu quả, tránh lệch hướng phục vụ đào tạo và hơn nữa cho phép chúng tôi “nướng” logic kinh doanh nội bộ của mình vào các mô hình ML của chúng tôi. Lợi ích cuối cùng này giúp chúng tôi giảm bớt sự phụ thuộc giữa các mô hình ML và đường ống dữ liệu hoặc tích hợp back-end của chúng tôi. Quy trình kỹ thuật máy học chữ số Chúng tôi đang chạy đường ống TFX của mình trên đường ống Vertex AI của Google Cloud. Dịch vụ được quản lý này giải phóng chúng tôi khỏi việc duy trì một cụm Kubernetes cho Kubeflow Pipelines (mà chúng tôi đã thực hiện trước khi sử dụng Vertex AI). Các mô hình sản xuất của chúng tôi được lưu trữ trong nhóm Google Cloud Storage và TFServing cho phép chúng tôi tải các phiên bản mô hình trực tiếp từ bộ nhớ đám mây. Do tải động của các phiên bản mô hình, chúng tôi không cần tạo vùng chứa tùy chỉnh cho thiết lập phân phát mô hình của mình; chúng ta có thể sử dụng các hình ảnh được tạo sẵn từ nhóm TensorFlow. Đây là một thiết lập tối thiểu để triển khai Kubernetes: apiVersion: apps / v1 kind: Siêu dữ liệu triển khai:… name: tensorflow-serve-deploy spec:… mẫu:… spec: container: – name: tensorflow-serve-container image: tensorflow / serve : 2.5.1 lệnh: – / usr / local / bin / tensorflow_model_server args: – –port = 8500 – –model_config_file = / serve / models / config / models. conf – –file_system_poll_wait_seconds = 120… Lưu ý đối số bổ sung –file_system_poll_wait_seconds trong danh sách trên. Theo mặc định, TFServing sẽ kiểm tra hệ thống tệp cho các phiên bản mô hình mới cứ sau 2 giây. Điều này có thể tạo ra chi phí Lưu trữ trên đám mây lớn vì mỗi lần kiểm tra đều kích hoạt hoạt động của danh sách và chi phí lưu trữ được lập hóa đơn dựa trên dung lượng mạng đã sử dụng. Đối với hầu hết các ứng dụng, bạn có thể giảm kiểm tra hệ thống tệp xuống 2 phút một lần (đặt giá trị thành 120 giây) hoặc tắt hoàn toàn. (đặt giá trị thành 0). Để có thể bảo trì, chúng tôi giữ tất cả các cấu hình dành riêng cho mô hình trong một Sơ đồ cấu hình cụ thể. Tệp được tạo sau đó sẽ được sử dụng bởi TFServing khi khởi động. apiVersion: v1 kind: ConfigMap metadata: namespace: ml-deployments name: -config data: styles.conf: | + model_config_list: {config: {name: “”, base_path: “gs: ///”, model_platform: “tensorflow ”, Model_version_policy: {cụ thể: {phiên bản: 1607628093, phiên bản: 1610301633}} version_labels {key: 'canary ', value: 1610301633} version_labels {key:' release ', value: 1607628093}}} Sau ký tự đầu triển khai, chúng tôi bắt đầu lặp lại để tối ưu hóa kiến ​​trúc mô hình cho kết quả thông lượng cao và độ trễ thấp. Điều này có nghĩa là tối ưu hóa thiết lập triển khai của chúng tôi cho các kiến ​​trúc giống BERT và tối ưu hóa các mô hình BERT đã được đào tạo. Ví dụ: chúng tôi đã tối ưu hóa việc tích hợp giữa các công việc Dataflow xử lý dữ liệu và triển khai ML của chúng tôi, đồng thời chia sẻ cách tiếp cận của chúng tôi trong bài nói chuyện gần đây của chúng tôi tại Apache Beam Summit 2021. Kết quả Mô hình NER được triển khai cho phép chúng tôi trích xuất vô số thông tin từ văn bản không có cấu trúc và cung cấp thông tin đó thông qua Tìm kiếm chữ số. Dưới đây là một số ví dụ về việc trích xuất mô hình NER của chúng tôi: Kết quả trích xuất từ ​​các giao dịch mẫu Sản phẩm cuối cùng là chữ số, một mô hình ML không bao giờ tự nó là sản phẩm cuối cùng. Chúng tôi cố gắng làm hài lòng khách hàng bằng những trải nghiệm được thiết kế tốt được tích hợp chặt chẽ với các mô hình ML và chỉ sau đó chúng tôi mới chứng kiến ​​sản phẩm cuối cùng. Nhiều yếu tố bổ sung phát huy tác dụng: Độ trễ so với độ chính xác Một mô hình được đào tạo trước gần đây hơn (ví dụ: BART hoặc T5) có thể cung cấp độ chính xác của mô hình cao hơn, nhưng nó cũng sẽ làm tăng đáng kể độ trễ của mô hình. Vì chúng tôi đang xử lý hàng triệu giao dịch hàng ngày, nên rõ ràng rằng độ trễ của mô hình là rất quan trọng đối với chúng tôi. Do đó, chúng tôi đã dành một lượng thời gian đáng kể cho việc tối ưu hóa các mô hình được đào tạo của mình. Thiết kế cho các tình huống dương tính giả Sẽ luôn có kết quả dương tính giả, bất kể độ chính xác của mô hình đã được triển khai trước mô hình tuyệt vời như thế nào. Những nỗ lực thiết kế sản phẩm tập trung vào việc truyền đạt kết quả dự đoán ML cho người dùng cuối là rất quan trọng. Tại Digits, điều này đặc biệt quan trọng vì chúng tôi không thể mạo hiểm với niềm tin của khách hàng vào cách Digits xử lý dữ liệu tài chính của họ. Tự động hóa triển khai mô hình Việc đầu tư vào thiết lập triển khai mô hình tự động của chúng tôi đã giúp chúng tôi cung cấp hỗ trợ khôi phục mô hình. Tất cả các thay đổi đối với các mô hình đã triển khai đều được kiểm soát phiên bản và việc triển khai được thực hiện tự động từ hệ thống CI / CD của chúng tôi. Điều này cung cấp quy trình triển khai nhất quán và minh bạch cho nhóm kỹ sư của chúng tôi. Xây dựng chiến lược lập phiên bản cho việc phát hành và khôi phục lại Để hỗ trợ triển khai mô hình suôn sẻ và phân tích định lượng tổng thể trước khi triển khai, chúng tôi triển khai hai phiên bản của cùng một mô hình ML và sử dụng nhãn phiên bản của TFServing (ví dụ: thẻ “phát hành” và “trước khi phát hành”) để phân biệt giữa chúng. Ngoài ra, chúng tôi sử dụng bảng phiên bản hoạt động cho phép khôi phục phiên bản, được thực hiện đơn giản như cập nhật bản ghi cơ sở dữ liệu. Hỗ trợ khách hàng, không xa lánh họ Cuối cùng nhưng không kém phần quan trọng, mục tiêu cho các mô hình ML của chúng tôi phải luôn là hỗ trợ khách hàng trong công việc của họ thay vì xa lánh họ. Điều đó có nghĩa là mục tiêu của chúng tôi không phải là thay thế con người hoặc các chức năng của họ, mà là giúp khách hàng của chúng tôi giải quyết các công việc rườm rà. Thay vì yêu cầu mọi người trích xuất thông tin theo cách thủ công từ mọi giao dịch, chúng tôi sẽ hỗ trợ khách hàng của mình bằng cách điền trước các nhà cung cấp được trích xuất, nhưng họ sẽ luôn kiểm soát. Nếu chúng tôi mắc lỗi, Digits sẽ dễ dàng ghi đè các đề xuất của chúng tôi. Trên thực tế, chúng tôi sẽ học hỏi từ những sai lầm của mình và cập nhật các mô hình ML của chúng tôi cho phù hợp. Đọc thêm Kiểm tra các tài nguyên tuyệt vời này để biết thêm về các mô hình NER và Máy biến áp: Bài báo BERT ban đầu: “BERT: Đào tạo trước về Máy biến áp hai chiều sâu để hiểu ngôn ngữ” TensorFlow 2.xText Tiền xử lý trong mô hình TensorFlowTensorFlow trong sản xuất Giới thiệu về Tác giả Hannes Hapke là Kỹ sư Máy học tại Digits. Với tư cách là Chuyên gia phát triển của Google, Hannes đã đồng tác giả hai ấn phẩm học máy: “NLP in Action” của Manning Publishing và “Xây dựng đường ống học máy” của O'Reilly Media. Tại Digits, anh ấy tập trung vào kỹ thuật ML và áp dụng kinh nghiệm của mình trong NLP để nâng cao yêu cầu của các giao dịch tài chính. Đăng ký nhận bản tin InsideBIGDATA miễn phí. Tham gia với chúng tôi trên Twitter: @ InsideBigData1 – https://twitter.com/InsideBigData1

Back to top button