Chú ý, đối thoại và học tập các mẫu tái sử dụng

Rasa Core là một hệ thống đối thoại dựa trên máy học mã nguồn mở để xây dựng các trợ lý AI theo ngữ cảnh cấp 3. Trong phiên bản 0.11, chúng tôi đã đưa ra chính sách nhúng mới (REDP), điều này tốt hơn nhiều trong việc giao dịch với người dùng không hợp tác so với LSTM tiêu chuẩn của chúng tôi (người dùng Rasa sẽ biết điều này là KerasPolicy). Chúng tôi đã trình bày một bài báo về nó tại NeurIPS, và bài đăng này giải thích vấn đề mà REDP giải quyết và cách thức hoạt động của nó.

Mô hình đối thoại mới của chúng tôi (REDP) vượt trội hơn các chính sách LSTM tiêu chuẩn của chúng tôi trong việc đối phó với người dùng không hợp tác. Những mảnh đất được giải thích chi tiết hơn dưới đây.

Người dùng không hợp tác làm cho một nhà phát triển khó khăn trong cuộc sống

Điều khó khăn trong việc xây dựng một trợ lý AI giỏi là đối phó với những cách vô hạn mà người dùng của bạn đi lạc khỏi con đường hạnh phúc. REDP, chính sách đối thoại mới của chúng tôi, có hai lợi ích: (1) nó tốt hơn rất nhiều khi học cách đối phó với hành vi bất hợp tác và (2) nó có thể sử dụng lại thông tin này khi học một nhiệm vụ mới.

Chúng ta có ý nghĩa gì bởi hành vi bất hợp tác? Để chỉ ra vấn đề, chúng tôi sẽ lấy ví dụ về đề xuất nhà hàng luôn phổ biến, nhưng áp dụng tương tự cho việc xây dựng trợ lý khắc phục sự cố CNTT, hỗ trợ khách hàng hoặc bất cứ điều gì khác. Giả sử bạn cần 3 mẩu thông tin từ người dùng để giới thiệu địa điểm ăn uống. Cách tiếp cận rõ ràng là viết một vòng lặp while để yêu cầu 3 điều này. Thật không may, cuộc đối thoại thực sự không đơn giản và người dùng đã thắng luôn luôn cung cấp cho bạn thông tin bạn yêu cầu (ít nhất là không ngay lập tức).

Khi chúng tôi hỏi một người dùng, bạn đang tìm kiếm phạm vi giá nào?, Họ có thể trả lời:

  • Tại sao bạn cần phải biết điều đó?
  • Bạn có thể chỉ cho tôi một số nhà hàng được không?
  • Thực tế không có tôi muốn thực phẩm Trung Quốc
  • Tôi có lẽ nên nấu ăn cho mình nhiều hơn nữa (chitchat)

Chúng tôi gọi tất cả các hành vi bất hợp tác này. Có nhiều cách khác mà người dùng có thể phản hồi, nhưng trong bài báo của chúng tôi, chúng tôi nghiên cứu bốn loại khác nhau này. Ở đây, một cuộc trò chuyện ví dụ:

Trong mỗi trường hợp, trợ lý phải trả lời một cách hữu ích cho tin nhắn của người dùng (không hợp tác), và sau đó điều khiển cuộc trò chuyện trở lại đúng hướng. Để làm điều này một cách chính xác, bạn phải tính đến các loại bối cảnh khác nhau. Cuộc hội thoại của bạn phải tính đến trạng thái dài hạn của cuộc hội thoại, những gì người dùng vừa nói, những gì trợ lý vừa nói, kết quả của các cuộc gọi API là gì và hơn thế nữa. Chúng tôi mô tả điều này chi tiết hơn trong bài viết này.

Sử dụng Quy tắc để xử lý hành vi bất hợp tác trở nên lộn xộn nhanh chóng

Nếu bạn đã xây dựng một vài trợ lý AI hoặc chatbot, bạn có thể nhận ra đây là vấn đề đau đầu và có thể bỏ qua phần tiếp theo. Nhưng hãy để Keith thử và đưa ra một số quy tắc cho một trong những câu trả lời không hợp tác đơn giản và phổ biến nhất: Tôi không biết. Để giúp người dùng tìm thấy trường hợp nhà hàng, chúng tôi có thể hỏi về ẩm thực, địa điểm, số lượng người và phạm vi giá. API mà chúng tôi truy vấn yêu cầu một món ăn, địa điểm và số lượng người, nhưng phạm vi giá là tùy chọn.

Chúng tôi muốn trợ lý của mình hành xử như thế này: nếu người dùng không biết câu trả lời cho câu hỏi tùy chọn, hãy chuyển sang câu hỏi tiếp theo. Nếu câu hỏi không phải là tùy chọn, hãy gửi tin nhắn để giúp họ tìm ra câu hỏi và sau đó cho họ một cơ hội khác để trả lời. Cho đến nay, rất đơn giản.

Nhưng nếu người dùng nói tôi không biết hai lần liên tiếp, bạn nên leo thang (ví dụ: giao cho một đặc vụ của con người, hoặc ít nhất là thừa nhận rằng cuộc trò chuyện này sẽ diễn ra rất tốt). Tất nhiên, ngoại trừ nếu một trong những người mà tôi không biết thì đó là câu trả lời cho câu hỏi không bắt buộc.

Bạn có thể xử lý logic này khá tốt với một vài câu lệnh if lồng nhau. Nhưng để đối phó với người dùng thực, bạn sẽ cần xử lý nhiều loại hành vi bất hợp tác và trong mọi mục tiêu người dùng mà trợ lý của bạn hỗ trợ. Đối với một con người, nó rõ ràng điều đúng đắn cần làm là gì, nhưng nó không dễ viết và duy trì một bộ quy tắc nhất quán khiến nó trở nên như vậy. Điều gì xảy ra nếu chúng ta có thể xây dựng một mô hình có thể tìm ra các mẫu đối thoại này và sử dụng lại chúng trong bối cảnh mới?

REDP sử dụng sự chú ý để xử lý đối thoại bất hợp tác

Chú ý là một trong những ý tưởng quan trọng nhất trong việc học sâu từ vài năm trước. Ý tưởng chính là, ngoài việc học cách diễn giải dữ liệu đầu vào, một mạng thần kinh còn có thể tìm hiểu phần nào của dữ liệu đầu vào để diễn giải. Ví dụ, một bộ phân loại hình ảnh có thể phát hiện các động vật khác nhau có thể học cách bỏ qua bầu trời xanh trong nền (không có nhiều thông tin) và chú ý chủ yếu đến hình dạng của con vật, cho dù nó có chân và hình dạng của đầu .

Chúng tôi đã sử dụng cùng một ý tưởng để đối phó với người dùng không hợp tác. Sau khi trả lời chính xác thông điệp không hợp tác của người dùng, người trợ lý sẽ quay lại nhiệm vụ ban đầu và có thể tiếp tục như thể sự sai lệch không bao giờ xảy ra. REDP đạt được điều này bằng cách thêm một cơ chế chú ý vào mạng lưới thần kinh, cho phép nó bỏ qua các phần không liên quan trong lịch sử đối thoại. Hình ảnh dưới đây là một minh họa về kiến ​​trúc REDP (một mô tả đầy đủ có trong bài báo). Cơ chế chú ý dựa trên một phiên bản sửa đổi của Máy tạo nơ ron thần kinh và thay vì phân loại, chúng tôi sử dụng phương pháp nhúng và xếp hạng giống như trong đường ống nhúng Rasa NLU.

Sự chú ý đã được sử dụng trong nghiên cứu đối thoại trước đây, nhưng chính sách nhúng là mô hình đầu tiên sử dụng sự chú ý đặc biệt để xử lý hành vi bất hợp tác và cũng để sử dụng lại kiến ​​thức đó trong một nhiệm vụ khác.

REDP học khi KHÔNG chú ý

Trong hình bên dưới, chúng tôi hiển thị một câu chuyện Rasa Core ở giữa và một cuộc trò chuyện tương ứng ở bên phải. Bên trái là biểu đồ thanh hiển thị mức độ chú ý của mô hình của chúng tôi đối với các phần khác nhau của lịch sử hội thoại khi chọn hành động cuối cùng (utter_ask_price). Lưu ý rằng mô hình hoàn toàn bỏ qua các thông báo người dùng không hợp tác trước đó (không có thanh bên cạnh chitchat, chính xác, giải thích, v.v.). Chính sách nhúng tốt hơn cho vấn đề này bởi vì sau khi trả lời câu hỏi của người dùng, nó có thể tiếp tục với nhiệm vụ trong tay và bỏ qua rằng sự sai lệch đã từng xảy ra. Các thanh nở và rắn hiển thị trọng lượng chú ý trên các thông điệp người dùng và hành động hệ thống tương ứng.

REDP tốt hơn nhiều so với Trình phân loại LSTM khi xử lý người dùng không hợp tác

Cốt truyện này so sánh hiệu suất của REDP và Rasa Core LSTM tiêu chuẩn (người dùng Rasa sẽ biết điều này là KerasPolicy). Chúng tôi đang vẽ sơ đồ số lượng các cuộc đối thoại trong tập kiểm tra trong đó mọi hành động đơn lẻ được dự đoán chính xác, khi chúng tôi thêm ngày càng nhiều dữ liệu huấn luyện. Chúng tôi chạy hai phiên bản hơi khác nhau của LSTM (để biết chi tiết, đọc bài viết).

Sử dụng lại các mẫu trên các tác vụ

Chúng tôi đã chỉ muốn xem REDP có thể đối phó với những người dùng không hợp tác tốt như thế nào, nhưng cũng để xem liệu nó có thể sử dụng lại thông tin đó trong bối cảnh mới hay không. Ví dụ: giả sử trợ lý Rasa của bạn đã có sẵn một loạt dữ liệu đào tạo từ người dùng thực (không hợp tác, vì chúng luôn luôn là ). Bây giờ bạn muốn thêm hỗ trợ cho mục tiêu người dùng mới. Trợ lý của bạn có thể xử lý những sai lệch như thế nào từ con đường hạnh phúc, ngay cả khi nó không bao giờ thấy hành vi bất hợp tác trong nhiệm vụ này trước đây?

Để kiểm tra điều này, chúng tôi đã tạo ra một cuộc đối thoại thử nghiệm xe lửa cho một nhiệm vụ đặt phòng khách sạn (chứa một loạt các hành vi bất hợp tác), và so sánh hiệu suất với và không bao gồm dữ liệu đào tạo từ một nhiệm vụ khác (đặt nhà hàng).

V1 của REDP cho thấy một lợi ích lớn từ việc học chuyển

Cốt truyện trên cho thấy một số kết quả cho một phiên bản đầu tiên của REDP (không phải là phiên bản cuối cùng, chúng tôi sẽ hiển thị tiếp theo). Bộ thử nghiệm là trong lĩnh vực khách sạn. Các hình vuông cho thấy hiệu suất cải thiện như thế nào khi chúng tôi cũng bao gồm dữ liệu đào tạo từ miền nhà hàng. Có một bước nhảy lớn trong hiệu suất, cho thấy REDP có thể sử dụng lại kiến ​​thức từ một nhiệm vụ khác! Điều này cũng được gọi là học chuyển. Đây là cốt truyện tương tự cho LSTM. Có một số bằng chứng về việc học chuyển nhượng, nhưng nó nhỏ hơn nhiều so với REDP:

V2 của REDP Giải quyết công việc rất nhanh

Cốt truyện này cho thấy kết quả cho phiên bản RED cuối cùng của REDP, được mô tả trong bài báo và được triển khai trong Rasa Core. Hiệu suất tốt hơn nhiều so với V1. Chỉ với một nửa dữ liệu, REDP đạt độ chính xác kiểm tra gần như 100%. Chúng tôi vẫn thấy được lợi ích từ việc học chuyển nhượng, nhưng không có nhiều cơ hội để cải thiện khi thêm dữ liệu đào tạo nhà hàng.

Bước tiếp theo

Chúng tôi thực sự hào hứng với chính sách nhúng và có thêm một loạt các thử nghiệm đang chạy để thể hiện những gì nó có thể làm. Nó tạo ra rất ít nhiệm vụ đầu tiên mà chúng tôi đã thực hiện, vì vậy chúng tôi đã ném nó vào một số vấn đề thậm chí còn khó hơn để nghiên cứu việc học chuyển giao trong tự nhiên.

Đi và thử REDP trên tập dữ liệu của bạn! Mã và dữ liệu cho bài báo có sẵn ở đây. Hãy chia sẻ kết quả của bạn trong chủ đề này trên diễn đàn Rasa.

Có rất nhiều nỗ lực phía trước để biến 5 cấp độ trợ lý AI thành hiện thực, vì vậy nếu bạn muốn giải quyết những vấn đề này và gửi giải pháp vào một cơ sở mã được sử dụng bởi hàng ngàn nhà phát triển trên toàn thế giới, hãy tham gia cùng chúng tôi! Chúng tôi tuyển dụng.

Được xuất bản lần đầu tại blog.rasa.com vào ngày 29 tháng 11 năm 2018.