Bài viết chuyên sâu

Kỹ thuật gia công chatbot AI với voice Tiếng Việt

Kỹ thuật gia công chatbot AI với voice Tiếng Việt

by Admin Dathoc -
Number of replies: 0

Đặt vấn đề

Bài toán tạo hệ thống hỗ trợ hỏi đáp, chatbot, trả lời theo từng chủ đề riêng biệt đang là phổ biến hiện nay. Việc áp dụng máy học xử lý những từ ngữ, câu chữ phân loại theo mẫu và học sâu để có thể đoán trước cần hỗ trợ giải đáp câu từ gì đã có nhiều giải pháp. 


Bên cạnh những lối mòn đã nhiều năm lỗi thời, nay xuất hiện những xu thế làm cơ chế hỗ trợ hỏi đáp chuyên biệt cho từng ngành nghề. Những xu thế mới này đang dần phổ biến và tối ưu hơn cách làm cũ là: không cần dùng tới lượng lớn mẫu; tốn ít tài nguyên xử lý; có thể tạo ra những api nhanh để giải quyết hỏi đáp qua câu từ (text) và hội thoại nói (voice)

Quy trình xử lý

Cơ thế chatbot seq2seq thông thường - BRNN


H3739wohe7mQeYq-JhDGxw5kiayt_NOT0IUYWRL8DD0hCvP7WEgoAWXdqr5JmmzfpNm_zEiGDw9xfeGmX5dyS29lsIF2nX6tbxltTHdX--ukJGQdgyNvmI1Siqu5o0spFLVgt5QF


Cơ chế chatbot theo entity, intent, domain, story

ITKoQ9GYE6lvGVzl_tyKXrBmtH2HR22amY8XMaDo-MYzmRwX8hRz85zDQnYzxUHZNvNEVwpUhF12nA3EZy0iWKXlmAHeyalECets1R4ENiQO1ig6wfcr_MY7MoWmt19WYVxR7S-N

Kèm voice từ speech to text, text to speech từ FPT OpenAI

rKYwwK_DsYFofdzUb9_04RoMvDsQ_QeYBxoAvvqkYkPPsRAClDWWimLeCNzcRi6n-Or2hbRtPwIwpa0z984qn0zmWb9_Js8HjCljEr37WSTNOA1Az6DhOkdXteXPgPLJe2FWcZOT

Các công nghệ nổi trội hiện tại giải quyết vấn đề

Những hệ cơ sở cho phân tích câu chữ chatbot

BRNN

Tại sao lại BRNN mà không phải là RNN, CNN?

Vì BRNN sẽ tạo mô hình đi từ trên xuống và đi từ dưới lên với từng dữ liệu.


Bắt nguồn từ NMT - Neural Machine Translation (NMT): là cách thức băm nhỏ câu  và bắt chước những cụm dịch trong dịch thuật


K3ZvJWcoH8Cu34YBeetjGjSDivys0jNsMmmUD4_OrZuXBdfsaGb-3kxQdB6sUEj5o6fktGTrg0GeEm7Mw0iYFCE7aOBr-XRBP0tYQEhI0yeurCcnYVIYwcilc-9yUbcQ6qVWuvwv

Cụ thể, trước tiên, đọc câu nguồn bằng cách mã ý nghĩa của câu; sau đó, một bộ giải mã xử lý vectơ câu để phát ra một bản dịch. Theo cách này, NMT giải quyết vấn đề dịch thuật cục bộ theo cách tiếp cận dựa trên cụm từ truyền thống: nó có thể nắm bắt các phụ thuộc trong các ngôn ngữ, ví dụ: ngữ nghĩa; cấu trúc cú pháp; v.v. và tạo ra các bản dịch trôi chảy.


Các mô hình NMT khác nhau về kiến ​​trúc và tính chính xác, ví dụ hệ tuần tự cho dữ liệu là RNN, gồm bộ mã hóa và bộ giải mã. Tuy nhiên, các mô hình RNN khác nhau về: (a) tính định hướng - một chiều hoặc hai chiều; (b) độ sâu - một hoặc nhiều lớp; và (c) loại - thường là RNN vanilla, xử lý hệ nhớ ngắn dài (LSTM - cải tiến hơn RNN) hoặc đơn vị tái phát có kiểm soát (GRU). 


Khi xem xét như các ví dụ về RNN nhiều lớp sâu, là đơn hướng và sử dụng LSTM làm đơn vị định kỳ. 

juBEINt_7tbi2DDnx2aKSv28dBhgZstN2Kjc9oix3-_9Aak1F4jCkmaZiaPqYJ3sl9i-EPEaAsfTIFboowMqijgFR_LemiNdOJubO9XlslkDeRXOJ8iccNFE0Gp7cQJmJK-ygbfM

Trong ví dụ này, để xây dựng một mô hình để dịch một câu nguồn "Tôi là một học sinh" thành "Je suis étudiant". Ở mức cao, mô hình NMT bao gồm hai mạng RNN: bộ mã hóa RNN chỉ đơn giản mã các từ nguồn đầu vào mà không đưa ra bất kỳ dự đoán nào; mặt khác, bộ giải mã xử lý câu đích trong khi dự đoán các từ tiếp theo.


RNN nhận bộ mã hóa và giải mã nhận làm đầu vào như sau: đầu tiên, câu nguồn, sau đó là một dấu mốc ranh giới "<s>" chỉ ra sự chuyển đổi từ chế độ mã hóa sang chế độ giải mã và câu đích. Để training gồm định dạng chính theo thời gian và chứa các chỉ mục từ:


encoder_inputs [max_encoder_time, batch_size]: source input words.

decoder_inputs [max_decoder_time, batch_size]: target input words.

decoder_outputs [max_decoder_time, batch_size]: target output 


Tương tự như vậy, chúng ta có thể xây dựng embeding_decoder và decoder_emb_inp. Lưu ý rằng người ta có thể chọn khởi tạo các trọng số nhúng với các cách biểu thị từ được xử lý trước như vectơ word2vec.


Sau khi được truy xuất, các từ nhúng sau đó được đưa vào làm đầu vào RNN, bao gồm hai RNN - một bộ mã hóa cho ngôn ngữ nguồn và bộ giải mã cho ngôn ngữ đích. Hai RNN này, về nguyên tắc, có thể chia sẻ cùng một trọng số; tuy nhiên, trong thực tế, chúng ta thường sử dụng hai tham số RNN khác nhau (các mô hình như vậy thực hiện công việc tốt hơn khi phù hợp với các bộ dữ liệu đào tạo lớn)

# Build RNN cell

encoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)


# Run Dynamic RNN

#   encoder_outputs: [max_time, batch_size, num_units]

#   encoder_state: [batch_size, num_units]

encoder_outputs, encoder_state = tf.nn.dynamic_rnn(

    encoder_cell, encoder_emb_inp,

    sequence_length=source_sequence_length, time_major=True)


Lưu ý rằng các câu có độ dài khác nhau để tránh lãng phí tính toán, set Dynamic_rnn độ dài câu nguồn chính xác thông qua source_ resultence_length.


Khi giải mã cũng cần truy cập vào thông tin nguồn và với  encoder_state. Như dưới đây, chúng ta chuyển trạng thái ẩn ở từ nguồn "student" sang phía bộ giải mã.


# Build RNN cell

decoder_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units)

# Helper

helper = tf.contrib.seq2seq.TrainingHelper(

    decoder_emb_inp, decoder_lengths, time_major=True)

# Decoder

decoder = tf.contrib.seq2seq.BasicDecoder(

    decoder_cell, helper, encoder_state,

    output_layer=projection_layer)

# Dynamic decoding

outputs, _ = tf.contrib.seq2seq.dynamic_decode(decoder, ...)

logits = outputs.rnn_output


Ở đây, phần cốt lõi của việc giải mã này là đối tượng BasicDecoder, bộ giải mã, nhận decoder_cell (tương tự encoder_cell), và encoder_state trước đó làm đầu vào. Bằng cách tách biệt các bộ giải mã và trình trợ giúp, chúng ta có thể sử dụng lại các cơ sở mã khác nhau.


Mã nguồn tạo NMT: https://github.com/tensorflow/nmt

Từ ngữ vector theo ngôn ngữ:https://github.com/Kyubyong/wordvectors

4GB câu thoại Tiếng Việt qua film ảnh: https://1drv.ms/u/s!AoMt1NVPO04zg7cQxokSMeSE6ZrJpw?e=4JB76h 






Những hệ cải tiến, tối ưu hơn cho chatbot chuyên ngành

https://rasa.com/


Đã phân định rõ ràng và cụ thể cho người tạo ra tài nguyên chat, với việc ít coding nhất.

Đã tạo ra cụ thể: intent, story, domain. Lưu các entity qua memory slot. Có hỗ trợ gọi api từ bên ngoài.

# intent:news

- Share some latest news around the [world](category)?

- Share some latest news in [sports](category)?

- What is going on in [technology](category)?

- Tell me some news about [fashion](category)

- Tell me some news about [business](category)

- Tell me some news about [arts](category)

- What is going on in [arts](category)

- What is cooking in [food](category)

- [movies](category)


## intent:thanks

- Thanks

- Thank you so much


## intent:bye

- No, I am good as of now. Bye

- Bye

- Bbye


Domain

intents:

  - greet

  - goodbye

  - affirm

  - deny

  - mood_great

  - mood_unhappy


actions:

- utter_greet

- utter_cheer_up

- utter_did_that_help

- utter_happy

- utter_goodbye


templates:

  utter_greet:

  - text: "Hey! How are you?"


  utter_cheer_up:

  - text: "Here is something to cheer you up:"

    image: "https://i.imgur.com/nGF1K8f.jpg"



Đặt ra rõ ràng lịch sử và training lại lịch sử để dự đoán chatting tiếp theo.


Có dynamic phần thuật toán lẫn model từ bên ngoài, và có thể cải tiến năng lực phản hồi chat

pipeline:

- name: "MitieNLP"

  model: "data/total_word_feature_extractor.dat"

- name: "MitieTokenizer"

- name: "MitieEntityExtractor"

- name: "EntitySynonymMapper"

- name: "RegexFeaturizer"

- name: "MitieFeaturizer"

- name: "SklearnIntentClassifier"



Load api bên ngoài kèm câu chat

from rasa_core_sdk import Action

import requests

import json

class ActionGetNewst(Action):

    def name(self):

        return 'action_get_news'

    def run(self, dispatcher, tracker, domain):

        category = tracker.get_slot('category')

        print(category)

        url = 'https://api.nytimes.com/svc/news/v3/content/all/{category}.json'.format(category=category)

        params = {'api-key': "YwFABCbVPDGGaM7aNgXuPdlPt2DuEK6I", 'limit': 5}

        response = requests.get(url, params).text

        json_data = json.loads(response)['results']

        i = 0

        for results in json_data:

            i = i+1

            message = str(i) + "." + results['abstract']

            dispatcher.utter_message(message)

        return[]



Dễ tạo GUi kèm, và kết hợp với ngôn ngữ đầu cuối, ví dụ ReactJS:



https://wit.ai/ & Google https://dialogflow.com/

<tương tự RASA>



Các trở ngại khó khăn

Các công ty startup AI về text

  • Chatbot bán rất nhiều trên thị trường, tính cạnh tranh cao

  • Chatbot chuyên ngành, chuyên sâu một nghề lại hiếm

  • Chatbot bán nhiều, xong chưa thấy bán lẻ, giáo dục, y tế, cộng đồng sử dụng bằng Tiếng Việt: có những khó khăn trong xử lý Tiếng Việt vùng miền

Người mới làm: thực tập sinh

  • Rất sợ khi bị cho đi luyện chat với bot, vì công việc hết sức nhàm chán

  • Thu thập dữ liệu để chat, đôi khi bị negative: toàn câu thô tục, toàn câu negative và đưa và lịch sử training dẫn tới sai hướng trong training

Người làm có kinh nghiệm 1-2 năm:

  • Tạo những cơ sở tài nguyên riêng, xong không update hoặc tạo những tài nguyên mới theo xu thế, khiến bot không cập nhật theo câu nói, phong cách ứng xử mới

Ngành nghề cần kỹ sư, chuyên gia tại Việt Nam và Thế Giới

Nghề training câu chữ chatbot cho chuyên ngành

  • Lương có thể lên 10-15 triệu. Công việc đơn giản

Nghề áp dụng và vận hành chatbot sang các tổ chức ngành nghề dịch vụ: bán lẻ, y tế, báo chí, giáo dục

  • Lương có thể lên 20-25 triệu. Thường là kỹ sư biết sâu về cơ chế chatbot thịnh hành RASA, WIT. Có thể tạo giao diện chat thân quen với người dùng. Tạo đầu cuối api tiện dụng cho câu chữ chat và voice.

Kết luận

Quy trình và các framework mới cho việc tạo ra một hệ thống hỗ trợ trả lời hỏi đáp - chatbot, không còn xa lạ và trở nên phổ biến cho từng ngành nghề. Hệ thống từ vựng, hỏi đáp chuyên ngành đã có. Xong cái cần là bạn áp dụng và xử lý cho chuyên sâu với ngành nghề đó như thế nào thôi. Data cho câu hỏi và trả lời dạng text đã có đủ, xong việc voice với cụm từ chuyên ngành đang còn thiếu. Google, Microsoft chưa đủ chín muồi để hỗ trợ Tiếng Việt cho chuyên ngành riêng biệt. Các hãng thứ 3 nhe nhói cho việc thay thế voice chuyên biệt đã trỗi dậy. Vậy cái cần ở bạn là sự thu thập, tự khai phá và training dữ liệu cho riêng mình. Như thế những sản phẩm chatbot từ bạn mới hiệu quả và giúp ích nhiều cho đời sống và ngành nghề như ý được.