Chiến lược học tập và thiết lập

Chiến lược học tập và thiết lập

bet88 soi keo nha cai

Trợ lý đối thoại Rasa (2): Hỗ trợ tiếng Trung

Ngày cập nhật: 10/04/2024 | Lượt đọc: 13718 | Số từ: 1913 | Phân loại: AI
Tìm kiếm

Sau khi cài đặt Rasa, mặc định hệ thống không hỗ trợ ngôn ngữ tiếng Trung. Nếu bạn muốn xây dựng một trợ lý ảo có khả năng hiểu và phản hồi bằng tiếng Trung, bạn cần phải cấu hình lại một số phần trong pipeline của nó.

Trên thực tế, các ví dụ về pipeline cho Rasa thường rất khác nhau. Không trực tiếp thử nghiệm thì khó có thể biết được cái nào tốt hơn hay phù hợp hơn với nhu cầu của mình. Vì vậy, hãy bắt đầu từ một cấu hình đơn giản nhất mà vẫn chạy được. Một gợi ý là sử dụng pipeline tiếng Trung được đề xuất trong cuốn sách “Rasa Thực chiến: Xây dựng trợ lý đối thoại mở nguồn”. Trong đó có ví dụ về NLU (Natural Language Understanding) dành cho robot y tế. Tuy nhiên, ví dụ này chỉ bao gồm phần nhận diện ý định và thực thể, chưa có phần xử lý câu trả lời.

Hiệu quả đạt được

![](
Robot đối thoại tiếng Trung dựa trên thành phần web socket của Rasa.

Cấu hình tiếng Trung đơn giản nhất

Mở tệp config.yml ở thư mục gốc của dự án và chỉnh sửa như sau:

1
2
3
4
5
6
7
8
recipe: default.v1
language: zh
pipeline:
 - name: JiebaTokenizer
 - name: LanguageModelFeaturizer
   model_name: "bert"
   model_weight: "bert-base-chinese"
 - name: "DIETClassifier"
  • Đặt giá trị language thành zh để kích hoạt hỗ trợ tiếng Trung.
  • Pipeline có thể tham khảo danh sách các thành phần NLU của Rasa do tôi tổng hợp.
  • Về chức năng và sự khác biệt của từng thành phần, bạn có thể xem bài viết giải thích chi tiết về JiebaTokenizer, LanguageModelFeaturizer và DIETClassifier trong Rasa.

NLU là gì?

NLU là viết tắt của Natural Language Understanding – tức là hiểu ngôn ngữ tự nhiên. Trong Rasa, mô-đun NLU có nhiệm vụ phân tích dữ liệu đầu vào của người dùng, xác định các thực thể và ý định quan trọng, đồng thời cũng có thể tích hợp thêm các chức năng như phân tích cảm xúc tùy chỉnh.

Thiết lập tệp nlu.yml

Chỉnh sửa tệp data/nlu.yml, bổ sung thêm các mẫu hội thoại tiếng Trung bên cạnh các mẫu tiếng Anh hiện có:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
version: "3.1"
nlu:
- intent: greet
  examples: |
    - hey
    - hello
    - hi
    - hello there
    - good morning
    - good evening
    - moin
    - hey there
    - let's go
    - hey dude
    - goodmorning
    - goodevening
    - good afternoon
    - 你好!
    - 您好!
    - 在么!
    - 在吗!
    - 喂!

- intent: goodbye
  examples: |
    - cu
    - good by
    - cee you later
    - good night
    - bye
    - goodbye
    - have a nice day
    - see you around
    - bye bye
    - see you later
    - 拜拜!
    - 再见!
    - 拜!
    - 退出。
    - 结束。
    - exit

- intent: affirm
  examples: |
    - yes
    - y
    - indeed
    - of course
    - that sounds good
    - correct
    - 是的
    - 是

- intent: deny
  examples: |
    - no
    - n
    - never
    - I don't think so
    - don't like that
    - no way
    - not really
    - 不
    - 不是的
    - 不是

Huấn luyện lại mô hình

Dữ liệu huấn luyện được lưu trữ trong các tệp .yml trong thư mục data. Để huấn luyện lại mô hình NLU, bạn có thể chạy lệnh sau:

1
rasa train nlu

Quá trình huấn luyện sẽ tải xuống một file tf_model.h5 có dung lượng khoảng 1.88GB. Điều này là do việc sử dụng mô hình BERT đã được tiền huấn luyện. Tuy nhiên, mô hình cuối cùng sau khi huấn luyện lại chỉ có kích thước khoảng 20MB.

1
2
3
4
5
> ls -lah models/
tổng cộng 44M
drwxrwxrwx 1 zhongwei zhongwei 4.0K Apr 7 10:35 ./
drwxrwxrwx 1 zhongwei zhongwei 4.0K Apr 7 10:03 ../
-rwxrwxrwx 1 zhongwei zhongwei 20M Apr 7 10:35 nlu-20230407-100759-obtuse-rack.tar.gz*

Kiểm tra kết quả:

1
rasa shell nlu

Kiểm tra hiệu quả

Ý định chào hỏi (greet):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Next message:
你好
{
 "text": "你好",
 "intent": {
  "name": "greet",
  "confidence": 0.9999979734420776
 },
 ...
}

Ý định tạm biệt (goodbye):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Next message:
再见
{
 "text": "再见",
 "intent": {
  "name": "goodbye",
  "confidence": 0.9999972581863403
 },
 ...
}

Hai trường hợp trên là hoàn toàn mong đợi, cho thấy hệ thống đã hỗ trợ tiếng Trung. Khi còn ở chế độ mặc định là tiếng Anh, nếu nhập tiếng Trung thì sẽ không có phản hồi.

Điều khiến tôi bất ngờ là khả năng nhận diện ý định phủ nhận (deny):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Next message:
我拒绝
{
 "text": "我拒绝",
 "intent": {
  "name": "deny",
  "confidence": 0.9226003289222717
 },
 ...
}

Tôi chưa từng đưa từ “拒绝” (từ chối) vào dữ liệu huấn luyện, nhưng hệ thống vẫn nhận diện chính xác. Có vẻ như mô hình ngôn ngữ tiếng Trung đã được áp dụng, nhưng vẫn chưa rõ là thành phần nào trong pipeline đảm trách điều này. Tôi sẽ tìm hiểu kỹ hơn sau.

Tuy nhiên, vẫn còn một số điểm chưa hài lòng:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Next message:
你好啊
{
 "text": "你好啊",
 "intent": {
  "name": "affirm",
  "confidence": 0.4897577464580536
 },
 ...
}

Thực ra, ý định đúng nên là greet, nhưng hệ thống lại nhận thành affirm. Dù vậy, đây vẫn là kết quả chấp nhận được với mức độ chính xác cơ bản.

Hỗ trợ phản hồi tiếng Trung

Các bước trước chỉ giúp hệ thống hiểu được tiếng Trung, nhưng chưa hỗ trợ phản hồi bằng tiếng Trung. Bạn cần thêm nội dung tiếng Trung vào tệp domain.yml như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3.1"
intents:
 - greet
 - goodbye
 - affirm
 - deny
 - mood_great
 - mood_unhappy
 - bot_challenge
responses:
 utter_greet:
 - text: "你好!吃了么?"
 utter_cheer_up:
 - text: "Here is something to cheer you up:"
  image: "
 utter_did_that_help:
 - text: "Did that help you?"
 utter_happy:
 - text: "Great, carry on!"
 utter_goodbye:
 - text: "再见"
 utter_iamabot:
 - text: "我是一个机器人,你可以叫我小远子"
session_config:
 session_expiration_time: 60
 carry_over_slots_to_new_session: true

Huấn luyện lại mô hình đầy đủ

Vì trước đó bạn chỉ huấn luyện NLU, chưa bao gồm logic phản hồi, nên cần huấn luyện lại toàn bộ mô hình. Lưu ý không thêm tham số nlu:

1
> rasa train

Thông tin log:

1
2
3
The configuration for policies was chosen automatically. It was written into the config file at 'config.yml'.
...
Your Rasa model is trained and saved at 'models/20230408-094308-burning-dessert.tar.gz'.

Kích thước file tăng lên:

1
2
3
4
5
> ls -lah models/
drwxrwxrwx 1 zhongwei zhongwei 4.0K Apr 8 09:44 ./
drwxrwxrwx 1 zhongwei zhongwei 4.0K Apr 7 17:28 ../
-rwxrwxrwx 1 zhongwei zhongwei 24M Apr 8 09:44 20230408-094308-burning-dessert.tar.gz*
-rwxrwxrwx 1 zhongwei zhongwei 20M Apr 7 10:35 nlu-20230407-100759-obtuse-rack.tar.gz*

Khởi động lại Rasa shell

Tiếp tục khởi động shell Rasa để kiểm tra:

1
2
3
> rasa shell
...
Bot loaded. Type a message and press enter (use '/stop' to exit):

Kiểm tra giao tiếp tiếng Trung

1
2
3
4
5
6
Your input -> 你好
你好!吃了么?
Your input -> 你是机器人么
我是一个机器人,你可以叫我小远子
Your input -> 你是谁
我是一个机器人,你可以叫我小远子

Hiện tại, hệ thống đã hỗ trợ đầy đủ cả tiếng Trung!

Lỗi khi huấn luyện NLU

Nếu gặp lỗi:

rasa.engine.exceptions.GraphSchemaValidationException: Component ‘JiebaTokenizer’ requires the following packages which are currently not installed: jieba.

Giải pháp:

1
pip3 install jieba

Nếu gặp lỗi:

rasa.engine.exceptions.GraphSchemaValidationException: Component ‘LanguageModelFeaturizer’ requires the following packages which are currently not installed: transformers.

Giải pháp:

1
pip3 install transformers

Cách khắc phục không truy cập được HuggingFace

Ở Việt Nam, đôi khi bạn sẽ không thể tải mô hình từ HuggingFace. Tham khảo hướng dẫn này để khắc phục:

Tài liệu

Danh sách bài viết liên quan

📖 Hướng dẫn Rasa đối thoại bằng tiếng Trung

comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy