Intent – Dialogflow nâng cao

1 intent là xem như 1 câu nói có nội dung cụ thể. Vậy một câu chuyện giữa 2 người có rất nhiều câu nói với nội dung khác nhau (nghĩa là sẽ có nhiều intents).

Khi người dùng đề cập về một nội dung nào đó. Dialogflow sẽ tìm hiểu xem nội dung đó có phù hợp với intent nào không. Nếu phù hợp thì intent đó sẽ được kích hoạt

VD:  người dùng: Tôi muốn mua sản phẩm này

Dialogflow: sẽ tìm xem có intent nào chứa nội dung tương tự với câu nói này không? Nếu có thì nó sẽ được kích hoạt

VD Bạn có thể tạo ra một agent thời tiết. Trong đó bạn sẽ có 1 intent với nội dung xoay quanh thời tiết

Khi người dùng hỏi về dự báo thời tiết thì intent này được kích hoạt

Vậy làm sao Dialogflow biết câu nào phù hợp với intent nào. Nó sẽ so sánh câu nói của người dùng với những câu mẫu trong các intent để xác định.

Đối với các chatbot khác thì họ sẽ lấy các từ khoá trong câu người dùng nói và so sánh với các câu mẫu có chứa từ khoá đó để xác định câu nào phù hợp nhất. Họ thực hiện phương pháp như so sánh chuỗi thuần tuý. Để kết quả chính xác thì chúng ta được yêu cầu khai báo thêm một số luật sự xuất hiện của từ khoá trong câu mẫu. Trong câu mẫu phải tồn tại từ khoá hoặc từ khoá sẽ luôn nằm đầu câu mẫu…

Đối với Dialogflow thì thông minh hơn hẵn, nó không phải là phép so sánh đơn thuần như vậy mà có thuật toán riêng để phân tích, kết hợp các câu mẫu để kích hoạt intent phù hợp nhất. Điều này mang đến một sự chính xác rất ấn tượng. Mình không biết bằng cách nào nhưng với những gì mình đã làm trên ngôn ngữ tiếng Việt thì Dialogflow cho kết quả chính xác nhất

Những vấn đề cơ bản của Intent:

  • Training Phrase: Những câu mẫu mà người dùng có khả năng sử dụng được bạn thêm vào sẵn cho máy. Không cần phải liệt kê tất cả các câu vì máy sẽ tự động tìm hiểu các câu tương tự
  • Action: bạn chỉ định một action cho mỗi intent. Khi intent được kích hoạt, Dialogflow sẽ tạo ra một action cho hệ thống của bạn. Bạn dùng action này để thực thi một vấn đề cụ thể nào đó
  • Parameters: Biến chứa từ khoá. Khi 1 intent được kích hoạt lúc nói chuyện, Dialogflow sẽ bóc tách ra các từ khoá có ý nghĩa. Các từ khoá này được lưu vào trong các Parameters
  • Entity Type: là bộ từ khoá có cùng 1 ý nghĩa cụ thể
  • Response: Những gì bạn sẽ hành động khi nghe người kia nói. Có thể là câu trả lời, hoặc phát nhạc…

Hình dưới đây mô tả cuộc trò chuyện giữa người và máy:

Intent phức tạp có thêm các vấn đề sau:

  • Contexts: Khi chúng ta nói chuyện thì đâu phải 1 câu là xong. Câu thứ 2 có liên quan đến câu đầu tiên. Vậy context chính là lưu trữ nội dung của câu đầu tiên. Để đảm bảo các câu sau có thể sử dụng một số thông tin nội dung nói chuyện của câu trước đó để không đi lạc đề
  • Events: events là cách bạn kích hoạt intent khác để tiếp nhận cuộc nói chuyện đó

Training phrases: Mẫu câu huấn luyện

Là những mẫu câu mà người dung có thể nói, bạn cài đặt sẵn cho máy. Khi người dùng nói nó sẽ so sánh với các mẫu câu này. Nếu câu người dùng trùng hoặc gần đúng với câu bạn cài trong intent nào thì intent đó sẽ được kích hoạt

Vd: Khi người dùng muốn mua Pizza thì họ thường nói câu là “ I want Pizza”. Vậy bạn sẽ cài đặt câu này trong training phrase của intent đó

Chúng ta không cần phải liệt kê tất cả câu nói của người dùng có thể nói. Chỉ cần khoảng độ 10 câu mẫu, máy sẽ tự mở rộng việc học để hiểu các câu tương tự

VD bạn muốn intent nhận biết câu nói của người dung liên quan đến màu sắc thì chỉ cần những mẫu câu huấn luyện sau

  • “I like red”
  • “My favorite color is yellow”
  • “black”
  • “Blue is my favorite”

Bóc tách dữ liệu bằng tay

Thực ra khi 1 intent được xác định nội dung câu nói. Nó sẽ được kích hoạt và Dialogflow sẽ tự động bóc tách các từ khoá đó lưu vào các parameters. Từ khoá trong parameter này sẽ được thay thế bởi từ khoá bạn đã khai báo trong entity (Entity là bộ từ khoá mẫu).

Tuy nhiên đôi lúc cách bóc tách không chính xác vì vậy bạn cần xử lý bằng tay

VD câu training là “What is the forecast tomorrow for Tokyo?”. Bạn sẽ tách từ “tomorrow” thuộc Date parameter. Và Tokyo thuộc Location parameter. Như vậy máy sẽ học cách bóc tách để sau này khi người dùng nói “What is the forecast on Friday for Sydney?”, máy sẽ bóc từ khoá Friday thuộc Date và Sydney thuộc Location

Actions và parameters

Action và parameters rất quan trọng trong việc giúp máy hiểu chính xác câu nói và là tham số để chúng ta lập trình. Các thông số này sẽ được gán tự động khi người dùng giao tiếp đúng với một tình huống của một intent cụ

Actions

Action là trường giúp bạn thực thi logic trong giao tiếp. Khi tạo 1 agent, bạn có thể đặt tên Action này tuỳ ý miễn là có ý nghĩa gợi nhớ

Khi 1 intent đúng câu nói và được kích hoạt, Dialogflow cung cấp 1 action đến fulfillment webhook hoặc API tích hợp. Action này có thể dùng để kích hoạt 1 hành động khác trong hệ thống của bạn

Parameters

Khi 1 intent đúng và được kích hoạt, dialogflow sẽ bóc tách các từ khoá từ người dùng và lưu và các parameter tương ứng. Mỗi parameter này thuộc một Entity (nhóm từ khoá).

Trong parameter có các thông số cần lưu ý

  • Required: Nếu check vào ô này, nghĩa là các parameter này buộc phải được đề cập khi người dùng nói chuyện
  • Parameter Name: Tên của một
  • Entity: Tên của nhóm từ khoá. Thông thường Entity sẽ trùng tên với Parameter. Trừ system Entity sẽ là: @sys.date.
  • Value: Nếu xem 1 parameter là 1 biến thì nó có tên và có giá trị của nó. Giá trị được lấy ra bằng cú pháp $TenParameter
  • Is List: Nếu check vào ô list nghĩa là các parameter này thuộc dạng mảng.
  • Prompts: Câu hỏi ngay tức thì được Agent hỏi khi nó thấy thiếu dữ liệu cho parameter này. Chỉ sử dụng trong trường hợp Slot Filling
  • Default value: Giá trị mặc định của parameter khi trong câu nói của người dung không đề cập đến.

List parameters

Khi tạo 1 chatbot trong consle, nếu check vào mục Is List trong intent nghĩa là nó sẽ hiểu các từ khoá chung 1 mảng. Mảng chứa nhiều phần tử (khác với từ đồng nghĩa). Vd bạn tạo một chatbot để xác nhận đơn hàng từ khách. Có thể người dùng sẽ đặt đơn hàng như ví dụ sau

  • “I want apples”
  • “I want apples and oranges”
  • “I want apples, oranges, and bananas”

Parameter values và parameter references

Parameter references là những biến được gán giá trị khi intent chứa nó được kích hoạt

  1. V Khi intent chứa ParameterName được kích hoạt, thì biến này sẽ được gán giá trị là từ khoá mà Dialogflow bóc tách. Bạn có thể dùng cú pháp $ParameterName để lấy giá trị nó mới được chứa

Lấy giá trị của 1 Parameter

Để lấy giá trị trong 1 parameter dùng cú pháp sau:

$parameter-name

VD, Nếu parmeter tên là date, Thì lấy giá trị của nó bằng cách them $ vào trước $date.

Lấy giá trị gốc của parameter

Khi 1 intent được kích hoạt, nó sẽ tìm các từ khoá và gán cho các parameter tương ứng. Nhưng hệ thống sẽ không lấy giá trị người dùng nói mà nó sẽ lấy giá trị tương ứng được khai báo trong Entity để lưu vào parameter. Từ khoá lưu trong parameter có thể khác đôi chút với từ khoá gốc người dùng đề cập. Đôi lúc bạn cần lấy chính xác từ gốc người dùng đề cập thì sử dụng toán tử Original

VD người dùng nói “Apples” máy hiểu là apple. Và sẽ lưu vào biến là Apple. Tuy nhiên bạn muốn trích xuất chính xác từ của người nói thì dùng

$parameter-name.original

VD, Tên của Parameter là date, Giá trị gốc của date được lấy bằng cú pháp $date.original.

Lấy giá trị Parameter từ Entity tổng hợp

Composite entities are entities that contain other sub-entities. To reference the value of a parameter’s sub-entity, use the following format:

Entity (bộ từ khoá) tổng hợp nghĩa là nó bao gồm 2 hoặc nhiều entity đơn. Để trích xuất dữ liệu của 1 Entity đơn trong entity tổng hợp sử dụng cú pháp

$parameter-name.sub-entity-name

VD Entity tổng hợp có tên là move, Nó bao gồm Entity direction, và Entity Steps step, Để lấy giá trị trong entity đơn Direction ta sử dụng cú pháp $move.direction.

Lấy giá trị parameter từ Context đang active

Context dung để lưu trữ các thông số của câu nói trước đó để câu sau ăn nhập. Vì vậy nó chứa các Parameter của câu trước, để lấy giá trị các parameter câu trước sử dụng cú pháp sau:

#context-name.parameter-name

Vd Context tên là reservation và Parameter tên là room, thì giá trị chứa trong parameter sẽ được lấy như sau #reservation.room.

Lấy gía trị Parameter từ Event

Để lấy giá trị parameter từ Event sử dụng cú pháp sau:

#event-name.parameter-name

Vd tên parameter là duration, Tên Event là alarm, Thì lấy giá trị của parameter thông qua câu lệnh sau #alarm.duration.

Slot filling với những Parameter bắt buộc phải có

Đôi lúc trong hội thoại bạn yêu cầu người dung phải cung cấp đủ thông tin để lưu lại xử lý sau này. Điều này gọi là required parameters

Khi 1 intent được kích hoạt. Dialogflow sẽ thu thập các thông tin lưu vào các parameter bắt buộc này. Nếu còn thiếu tham số nào thì nó sẽ tiếp tục hỏi để lấy (bạn cài đặt câu hỏi). Quy trình này gọi là Slot Filling.

Trong quy trình Slot Filling, Dialogflow sẽ không trả bất cứ Request nào cho Webhook cho đến lúc nó kết thúc bằng cách thu thập đủ giá trị cho tất cả các parameter bắt buộc này. Hoặc bị huỷ quy trình thông qua các câu nói gắt gỏng của người dùng

Vì Dialogflow không trả về request nên bạn sẽ phải tạo những câu hỏi trong các required parameter này (trong intent) để thu thập dữ liệu đủ cho nó.

VD bạn cần thu thập các parameter này cho 1 con bot ở cửa hàng quần áo:

  • clothing type
  • quantity
  • size
  • color

Các câu hỏi tức thì Promt để lấy thông tin có thể như sau:

User: I’d like to buy a t-shirt.

Agent: How many do you want?

User: 3

Agent: What color would you like?

User: Black

Agent: What size?

User: Medium

Agent: Got it, that was three black t-shirts in medium

Bạn có thấy các câu hỏi trên cho từng tham số, nhưng người dùng đôi lúc trả lời một lúc 3 tham số “I’d like to buy three black t-shirts” thì Dialogflow sẽ hỏi câu liên quan đến Size để thu thập tham số còn thiếu

Ordering parameters – tham số cần thu thập

Khi tạo bot, đôi lúc bạn yêu cầu người dùng trả lời một số điều để bot thu thập tham số cần thiết Những câu nói mớm để lấy thông tin thường đặt trong chế độ Prompts When building an agent from the console, hovering over a parameter will reveal a reorder icon on the right. You can drag this icon to change the position of the parameter in the list.

Cách lấy giá trị tham số trong chế độ Prompts (nhắc nhở)

VD bạn cần 2 tham số sau color và quantity . Tuy nhiên yêu cầu phải chọn màu áo trước khi chọn số lượng thì sẽ dùng câu mớm sau trong prompts: How many $color t-shirts would you like to buy?

Huỷ slot filling

Đôi lúc người dùng không cung cấp đủ thông tin cho các required parameter, hệ thống cứ tiếp tục hỏi nên người dùng sẽ bực mình. Để thoát khỏi slot filling khi người dùng nói những câu sau “Cancel”, “Stop it”, “That’s enough”, vv., hệ thống sẽ từ động trả lời “Okay, canceled” và xoá context của slot filling, xem như nhiệm vụ không thể hoàn thành.

Responses – Hồi đáp

Các intent được cài sẵn câu trả khi câu nói của người dùng phù hợp với nó. Đặc tính này hỗ trợ tất cả các Static Intent. Mặc dù bạn dialogflow có thể chọn lựa ngẫu nhiên các câu trả lời cài đặt sẵn để bớt nhàm chán. Hoặc bạn có thể sử dụng cơ chế lấy giá trị của parameter để trả lời VD “Okay, I booked a room for you on $date”.

Nhưng nếu bạn Code thì các câu trả lời sẽ hay hơn nhiều. Hoặc kết hợp cả câu trả lời tĩnh và động cùng nhau

Có nhiều cách response khác nhau, đôi lúc không chỉ dùng mỗi text đơn giản, bạn có thể sử dụng trả lời bằng hình ảnh, nút nhấn hay link khi khách yêu cầu. Điều này tuỳ vào platform bạn sử dụng

Nếu bạn có nhiều hơn 1 response trong 1 intent thì hệ thống sẽ sử dụng ngẫu nhiên một trong các response đó. Vì vậy khi tạo intent bạn nên thêm vài response để cuộc trò chuyện thêm phong phú

Khi tạo chatbot, bạn nên xây dựng các response cho từng Intent cụ th. Nếu sử dụng API hoặc Fulfillment, bạn không cần phải tạo response trong console mà sẽ tạo trong hàm. Tuy nhiên việc tạo response trong console sẽ giúp bạn mô phỏng debug dễ dàng hơn

Điều đáng chú ý nhất là response của intent phải trả lời đúng yêu cầu người dùng và nó có thể là câu gợi ý để cuộc nói chuyện hay hơn.

Response platforms – Các nền tảng chat

Mỗi Platform khác nhau sẽ có các response mặc định khác nhau. Vd các platfom được dialogflow tích hợp sẵn như Facebook hoặc Viber… thì có các cách hiển thị text, nút nhấn, hình ảnh, video…

Response đông thông qua fulfillment

Mô hình response động thông qua fulfillment:

  1. Dialogflow sẽ tương tác người dùng thông qua các app tích hợp như Facebook messenger, Viber.
  2. Khi intent phù hợp được kích hoạt với chế độ fulfillment. Dialogflow sẽ gửi 1 webhook request đến hệ thống. Request này bao gồm thông tin của intent được kích hoạt, giá trị các biến, context, action…
  3. Hệ thống của bạn sẽ xử lý những hành động cần thiết như so sánh, ghi vào database hay gửi lại 1 đoạn text.
  4. Hệ thống sẽ gửi lại 1 webhook response đến Dialogflow (những gì bạn muốn truyền ngược lại cho người dùng)
  5. Dialogflow sẽ chuyển response đó cho người dung thông qua App trên.

Chú ý: nếu bạn thiết lập response trong console của intent. Trường hợp webhook không thể trả lời thì response này sẽ được thực thi tự động.

Ký tự đặc biệt

Đôi lúc bạn cần hiển thị một số ký tự đặc biệt. Để sử dụng ký tự $ hoặc # , {}   trong câu trả lời thì cần thêm dấu ngoặc móc {}

VD:

  • ${100} in ra $100
  • ${$number} in ra $100, với $number là biến có chứa gía trị là số 100
  • #{hello} in ra #hello
  • {{hello}} in ra {hello}

Thụ lý các parameter rỗng

Nếu bạn có ý định cho phép một số biến có thể không chứa giá trị khi bóc tách thông tin từ người dùng. Bạn phải tạo 1 response không chứa biến đó

VD intent có 2 biến P1 và P2. Trong đó P1 hoặc P2 Hoặc cả 2 có thể không chứa dữ liệu. Bạn phải thành lập 4 response sau

  • Got it. You said $p1 and $p2.
  • Got it. You said $p1.
  • Got it. You said $p2.
  • Got it.

Ưu tiên của từng Intent

Đôi lúc bạn cần đặt chế độ ưu tiên cho các intent có mô tả gần giống nhau.

Set chế độ ưu tiên cho intent

  1. Click vào intent cụ thể
  2. Click vào nút màu xanh phía trước tên intent.
  3. Chọn mức ưu tiên .

Set intent kết thúc.

Bằng cách nhấn nút này để xác định đây là intent kết thúc khi nó được kích hoạt và response xong. Sau khi kết thúc nó sẽ dọn dẹp tài nguyên của cuộc thoại như reset lại các thông số trong qúa trình hội thoại vd xoá context đã được tạo ra, tắt điện thoại nếu sử dụng google assistant

Cách kích hoạt 1 intent.

Khi người dùng có câu nói tương tự với cấu trúc câu trong traning phrase của 1 intent

Kích hoạt từ code fulfillment thông qua event

1 thought on “Intent – Dialogflow nâng cao”

Leave a Comment