การปรับแต่ง Pipeline และ Policies ของ Rasa: คู่มือสำหรับการสร้างแชทบอทที่ชาญฉลาดขึ้น

Pipeline และ Policies ของ Rasa คือหัวใจสำคัญที่ช่วยให้ระบบสามารถประมวลผลข้อความผู้ใช้ แยกแยะเจตนา (intent) และระบุข้อมูลเฉพาะ (entities) รวมถึงกำหนดการตอบสนองที่เหมาะสมได้ ไม่ว่าคุณจะสร้างแชทบอทเพื่อให้บริการลูกค้า ผู้ช่วยเสมือน หรือ AI สนทนา การเข้าใจการทำงานของ Pipeline และ Policies จะช่วยให้คุณออกแบบแชทบอทที่มีประสิทธิภาพและตอบโจทย์การใช้งานได้ดียิ่งขึ้น

ในบทความนี้ เราจะอธิบายส่วนประกอบของ Pipeline บทบาทของ Policies พร้อมทั้งแสดงภาพประกอบ Mermaid.js diagram เพื่อให้คุณเห็นภาพรวมของกระบวนการทั้งหมด


Rasa Pipeline คืออะไร?

Pipeline ของ Rasa คือชุดกระบวนการที่ประมวลผลข้อความผู้ใช้และเตรียมพร้อมสำหรับการแยกเจตนา (intent classification) และการดึงข้อมูลเฉพาะ (entity recognition) ส่วนประกอบเหล่านี้ช่วยในกระบวนการจัดโครงสร้างข้อความ (structured representation) จากข้อความดิบ

ลองจินตนาการว่า Pipeline เป็น สายพานลำเลียง ที่แต่ละส่วนประกอบจะทำหน้าที่เฉพาะเพื่อประมวลผลข้อความทีละขั้นตอนจนได้ผลลัพธ์ที่พร้อมใช้งาน


ส่วนประกอบสำคัญของ Pipeline

1.Tokenizer

  • ทำหน้าที่แบ่งข้อความของผู้ใช้เป็นหน่วยย่อย เช่น คำหรือตัวอักษร
  • มีความสำคัญมากสำหรับภาษาไทยที่ไม่มีการเว้นวรรคระหว่างคำ

ตัวอย่าง:

- name: "custom_components.thai_tokenizer.ThaiTokenizer"
  model: "newmm"

2.Featurizers

  • แปลงข้อความเป็นตัวเลข (vectors) เพื่อใช้กับโมเดลการเรียนรู้ของเครื่อง (machine learning models)
  • ส่วนประกอบที่นิยม:
    • CountVectorsFeaturizer: ใช้สำหรับ n-grams ระดับคำหรือตัวอักษร
    • RegexFeaturizer: ใช้สำหรับ pattern-based features เช่น หมายเลขโทรศัพท์หรือวันที่

ตัวอย่าง:

- name: CountVectorsFeaturizer
  analyzer: "char_wb"
  min_ngram: 2
  max_ngram: 4

3.Entity Extractors

  • ดึงข้อมูลเฉพาะ เช่น ชื่อ สถานที่ หรือวันที่
  • ส่วนประกอบที่นิยม:
    • DucklingEntityExtractor: ระบุวันที่ เวลา และตัวเลขอัตโนมัติ
    • RegexEntityExtractor: ใช้ regex patterns เพื่อระบุข้อมูลเฉพาะ

ตัวอย่าง:

- name: DucklingEntityExtractor
  dimensions: ["time", "number"]

4. Intent Classifier

  • ระบุเจตนาของข้อความผู้ใช้ และดึงข้อมูลเฉพาะพร้อมกันโดยใช้ DIETClassifier

ตัวอย่าง:

- name: DIETClassifier
  epochs: 100
  entity_recognition: True

5. Fallback Mechanism

  • ใช้ในกรณีที่ความมั่นใจของการคาดเดาต่ำเพื่อหลีกเลี่ยงการตอบผิด

ตัวอย่าง:

- name: FallbackClassifier
  threshold: 0.3

Policies: การควบคุมการตอบสนอง

ในขณะที่ Pipeline ประมวลผลข้อความ Policies จะทำหน้าที่ตัดสินใจว่าบอทควรตอบสนองอย่างไรในบทสนทนา โดย Policies จะกำหนดว่าจะใช้กฎใด ใช้เส้นทางที่เคยเรียนรู้ หรือทั่วไปจากบริบท

Policies ที่พบบ่อยใน Rasa

1. RulePolicy

  • จัดการการสนทนาที่คาดการณ์ได้และ FAQs

ตัวอย่าง:

- name: RulePolicy
  core_fallback_threshold: 0.4
  enable_fallback_prediction: True

2. MemoizationPolicy

  • จำเส้นทางการสนทนาที่ตรงกับการฝึกอบรม

3. TEDPolicy

  • ทั่วไปและคาดการณ์การกระทำถัดไปเมื่อการสนทนาแตกต่างจากเส้นทางที่ฝึกอบรม

ตัวอย่าง:

- name: TEDPolicy
  max_history: 5
  epochs: 100

4. FallbackPolicy

  • เรียกใช้งาน fallback action เมื่อความมั่นใจต่ำ

Pipeline และ Policies ทำงานร่วมกันอย่างไร

ด้านล่างคือ Mermaid.js diagram ที่แสดงการทำงานร่วมกันของ Pipeline และ Policies (ยังคงข้อความภาษาอังกฤษใน diagram)

graph TD
    A[User Input] -->|Raw Text| B[Tokenizer]
    B -->|Tokens| C[Featurizers]
    C -->|Features| D[Entity Extractors]
    C -->|Features| E[Intent Classifier]
    D -->|Entities| F[DIETClassifier]
    E -->|Intent| F[DIETClassifier]
    F -->|Predictions| G[Policy Decision]

    G -->|Follows Rules| H[RulePolicy]
    G -->|Known Paths| I[MemoizationPolicy]
    G -->|Generalized| J[TEDPolicy]
    G -->|Fallback| K[FallbackPolicy]

    H --> L[Bot Action]
    I --> L
    J --> L
    K --> L
    L --> M[Bot Response]

    %% Additional Notes
    subgraph Rasa Pipeline
        B
        C
        D
        E
        F
    end

    subgraph Rasa Policies
        H
        I
        J
        K
    end

ตัวอย่าง: การสร้าง Pipeline สำหรับภาษาไทย

นี่คือตัวอย่าง Pipeline ที่ปรับให้เหมาะสมสำหรับภาษาไทย ซึ่งมีความต้องการเฉพาะในด้านการตัดคำและการดึงข้อมูล

language: th

pipeline:
  - name: "custom_components.thai_tokenizer.ThaiTokenizer"
    model: "newmm"
  - name: RegexFeaturizer
  - name: CountVectorsFeaturizer
    analyzer: "char_wb"
    min_ngram: 2
    max_ngram: 4
  - name: DucklingEntityExtractor
    dimensions: ["time", "number", "amount-of-money"]
  - name: DIETClassifier
    epochs: 100
    entity_recognition: True
  - name: FallbackClassifier
    threshold: 0.3

เคล็ดลับในการปรับแต่ง Pipeline

1.เริ่มต้นแบบเรียบง่าย:

  • ใช้เฉพาะส่วนประกอบที่จำเป็น เช่น Tokenizer, Featurizers, และ DIETClassifier
  • เพิ่มฟีเจอร์ขั้นสูง เช่น LanguageModelFeaturizer หรือส่วนประกอบที่ปรับแต่งเองภายหลัง

2.ตรวจสอบข้อมูล:

  • ใช้คำสั่ง rasa data validate เพื่อตรวจสอบความสอดคล้องของข้อมูลการฝึก

3.ติดตามผลการทำงาน:

  • ใช้คำสั่ง rasa test เพื่อประเมินความแม่นยำของบอทและปรับปรุงตามต้องการ

สรุป

การปรับแต่ง Pipeline และ Policies ของ Rasa เป็นสิ่งสำคัญสำหรับการสร้างแชทบอทที่สามารถประมวลผลข้อความผู้ใช้ได้อย่างมีประสิทธิภาพและตอบสนองได้อย่างชาญฉลาด การรวม Pipeline ที่ออกแบบมาอย่างดีเข้ากับ Policies ที่ชัดเจนช่วยให้บอทของคุณสามารถจัดการสถานการณ์ต่าง ๆ ได้อย่างยอดเยี่ยม

เริ่มต้นด้วยขั้นตอนง่าย ๆ ทดสอบซ้ำ และปรับแต่งตามกรณีการใช้งานเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด

มีคำถามหรืออยากให้ช่วยปรับแต่ง Pipeline ของคุณ? แสดงความคิดเห็นได้เลย! 😊

Related Posts

Articles

Our Products


Related Posts

Articles

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand