Showing posts with label Deep Learning. Show all posts
Showing posts with label Deep Learning. Show all posts

Series: Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm: Phần 3

Như đã đề cập trong phần 2 của series “phân tích crime pattern bằng chỉ số trần”. Trong phần 3 này chúng tôi sẽ giới thiệu một phương pháp thường thấy khác trong việc phân tích crime pattern nhằm mục đích phòng chống tội phạm, đó là “phân tích vị trí bằng bản đồ hóa tội phạm.” (Geographic Proximity/ Crime Mapping)

Phần 3: phân tích vị trí bằng bản đồ hóa tội phạm

Phương pháp bản đồ hóa tội phạm này thường được sử dụng để tạo một bản đồ của các hoạt động phạm tội theo từng loại tội phạm hoặc những điểm chung nổi bật, sau đó tiến hành tìm kiếm các điểm nóng (hotspot) về tội phạm theo vị trí diễn ra. Phương pháp này CHỈ thích hợp cho các loại crime pattern có khả năng gom cụm theo vị trí địa lý. Do nhiều crime pattern có thể bao gồm các vụ án không có liên quan nhiều về vị trí địa lý, chính vì vậy nên cũng giống như phương pháp sử dụng chỉ số trần, chúng ta không thể chỉ sử dụng một mình phương pháp này để nắm bắt được toàn bộ các crime pattern mà phải kết hợp nó cùng các phương pháp khác nhằm gia tăng độ hiệu quả trong việc phân tích và phòng chống tội phạm.
1
Hình trên là một bản đồ các vụ đột nhập nhà riêng để trộm cắp. Bằng phương pháp phân tích thủ công, cảnh sát đã khoanh vùng được 3 crime pattern #1, #2 và #3. Tuy nhiên nếu áp dụng phương pháp bản đồ hóa tội phạm (tự động) trong tình huống này thì crime pattern #2 và #3 sẽ dễ dàng bị bỏ qua nếu chương trình tự động sử dụng các tham số không thích hợp (do #2 có vị trí bao quanh hồ, khoảng cách giữa các vụ án khá xa nhau; #3 thì các vụ án xảy ra trên cùng tuyến đường nhưng vị trí cũng cách xa và phân bố không đều). Chính vì thế trong quá trình sử dụng phương pháp này thì việc xác định các tham số và áp dụng các luật tự động là rất quan trọng.
Có khá nhiều các nghiên cứu về tình trạng lặp lại của các vụ phạm tội theo từng khu vực, các dữ liệu thống kê cho thấy nếu một ngôi nhà bị trộm đột nhập, thì xác suất một căn nhà khác gần đó cũng bị trộm viếng thăm trong vòng 2 tuần tới sẽ tăng lên đáng kể. Điều này là vì thủ phạm đã quen thuộc với đường xá quanh đó, cách lựa chọn mục tiêu và tẩu thoát ra sao chẳng hạn.
Một số ý kiến cho rằng chúng ta có thể vẽ một vòng tròn xung quanh địa điểm vừa xảy ra trộm, khu vực đó chính là khu vực sẽ có khả năng xảy ra trộm cao trong tương lai gần. Tuy nhiên điều này không có nhiều tính thực tiễn lắm, các bạn có thể tưởng tượng đến trường hợp một căn nhà gần biển bị đột nhập, chúng ta không thể vẽ một vòng tròn xung quanh rồi cử vài cảnh sát ra biển đề phòng cá mập bẻ khóa ăn trộm thuyền được? Một trường hợp khác là các con đường song song và gần nhau, chúng nó có thể ở trong cùng phạm vi vòng tròn vừa vẽ, tuy đường chim bay cực ngắn nhưng ở đời thực muốn di chuyển từ đường này sang đường kia chúng ta phải đi qua một quãng đường vòng cực dài. Chính vì vậy việc phân tích chỉ dựa trên một điểm là không hợp lý.
Theo một hướng khác thì thủ phạm (trộm cướp…) khi gây án thường là ở những khu vực mà chúng đã biết (tỉ lệ gây án ở nơi xa lạ vẫn có nhưng chỉ là thiểu số). Việc xác định vị trí để gây án là thông qua các hoạt động thường ngày bình thường, chúng vẫn tham gia giao thông, di chuyển từ địa điểm này sang địa điểm kia…Bằng việc làm như thế, chúng có thể tìm ra những vị trí tiềm năng để dễ dàng gây án rồi tẩu thoát. Những khu vực mà chúng có khả năng tìm ra cơ hội gây án từ các hoạt động thường ngày gọi là awareness space (các khu vực bôi đỏ trong hình dưới).
2
Dĩ nhiên các khu vực này chính là những con đường trong thực tế. Những con đường có càng nhiều awereness space, những con đường đông đúc người qua lại, thường sẽ có tỉ lệ tội phạm cao hơn. Vậy chúng ta sẽ tiến hành phân tích vị trí bằng cách dựng các vụ phạm tội lên một bản đồ đường gọi là Betweenness.
Ý tưởng của việc dựng Betweenness là:
  • Đưa toàn bộ các vụ án cùng loại lên bản đồ khu vực, mỗi vụ được xem như một điểm.
  • Chọn một cặp điểm bắt đầu và kết thúc, tìm đường đi ngắn nhất giữa cặp điểm này trên bản đồ.
  • Con đường nào trên bản đồ được đường ngắn nhất giữa một cặp điểm đi qua thì tăng Betweenness của con đường đó lên 1.
  • Duyệt tương tự toàn bộ các cặp điểm.
3
Như hình phía trên các bạn có thể thấy phần đường đỏ nhất là phần có Betweenness lớn nhất, hay như nãy giờ tôi đã đề cập đến, chính là đoạn đường có khả năng lớn nhất xảy ra các tội phạm tương tự trong tương lai gần. Làm thế nào để chứng minh và ủng hộ cho lí thuyết này là đúng? Mời các bạn đến với một bản đồ Betweenness được dựng lên từ Big Data về tội phạm cướp giật, ẩu đả và trộm cắp xe ở khu Camden thuộc London, Anh.
4
Phía tay phải là bản đồ Betweenness được dựng lên từ Big Data tội phạm của sở cảnh sát Camden các đoạn được tô xanh lá và đỏ là những khu vực có Betweenness cao. Bản đồ bên tay trái là những vụ phạm tội xảy ra được thông báo cho cảnh sát qua đầu số 999 (đầu số khẩn cấp ở Anh) được dựng lên một thời gian sau khi bản đồ Betweenness được xây dựng. Các bạn có thể dễ dàng nhận ra phần lớn các vụ phạm tội xảy ra nằm ngay trên hoặc rất gần các tuyến đường có Betweenness cao.
Một số nghiên cứu khác ủng hộ cho Betweenness như Porta et al “Street centrality and densities of retail and services in Bologna, Italy”,… Các bạn có thể tham khảo thêm.
Như vậy, sử dụng Betweenness trong việc bản đồ hóa tội phạm là khá tốt để dự đoán những hoạt động phạm pháp. Mặt khác, chúng ta còn có thể kết hợp kĩ thuật này với các kĩ thuật phân cụm và xác định điểm nóng (hotspot) để tăng thêm độ chính xác và cụ thể cho công tác dự đoán phòng ngừa tội phạm.
Trong phần tiếp theo của series chúng tôi sẽ giới thiệu tiếp cho các bạn về việc sử dụng kĩ thuật phân cụm cho Big Data về tội phạm như thế nào, mời các bạn đón xem.

Series: Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm: Phần 2

Phần 2 trong series Big Data Trong Việc Phân Tích Và Phát Hiện Tội Phạm” sẽ chia sẻ về việc phân tích crime pattern bằng chỉ số trần.
Trong bài đầu tiên chúng tôi đã đề cập đến các hướng đi chính trong việc sử dụng Big Data để phát hiện và phòng chống tội phạm. Trong phần 2 này chúng tôi sẽ đi vào một trend chính là phòng chống và dự đoán tội phạm với Big Data sử dụng phương pháp phân tích crime pattern (từ này dịch ra tiếng Việt thì chuối chết nên để vậy)
big data crime part 2_2
Người ta thường dùng 3 phương pháp sau để phân tích crime pattern là:
big data crime part 2_3
Trong phần này, chúng ta sẽ đi vào phương pháp thứ nhất – Phát hiện dị biệt sử dụng việc phân tích chỉ số trần
big data crime part 2_4
1
Với phương pháp này thì điều kiện tiên kiết phải có là một lượng dữ liệu tội phạm đủ lớn (big data khoảng 6 năm trở lên để đạt được hiệu quả tốt). Việc sử dụng phương pháp này có mục đích chính là tìm ra crime pattern ẩn dựa trên mốc thời gian hoặc địa điểm gây án. Nếu phát hiện được pattern ẩn theo địa điểm gây án thì sẽ kết hợp với phương pháp phân tích vị trí bằng bản đồ hóa tội phạm để đưa ra kết quả tốt nhất.
Phân tích chỉ số trần (threshold) đơn giản là dùng phương pháp thống kê cho big data để xác định được khi nào hoặc ở đâu mà tội ác diễn ra “cao hơn đáng kể so với những thời gian khác hoặc địa điểm khác”. Một kĩ thuật thường được sử dụng cho việc này là ĐỘ LỆCH CHUẨN (STANDARD DEVIATION). Công thức là:
2
Trong đó ∑ là tính tổng,  là giá trị của một data set,  là trung bình cộng của các data set, và  là số các điểm dữ liệu.
Ví dụ đơn giản về áp dụng độ lệch chuẩn cho Big Data như sau:
Giả sử chúng tôi đã có được một bộ Big Data về tội phạm đột nhập vào nhà để trộm cắp trên 4 quận địa bàn Đà Nẵng (Hải Châu, Thanh Khê, Sơn Trà, Ngũ Hành Sơn) trong vòng 5 năm từ 2012 đến 2016. Để bắt đầu phân tích chúng tôi sẽ chuẩn bị và tổ chức dữ liệu theo các thuộc tính là địa điểm và thời gian. Sau đó tiến hành tính toán độ lệch chuẩn cho năm hiện tại.
Đầu tiên chúng tôi sẽ tính độ lệch chuẩn của quận Hải Châu trong vòng 8 năm (chỉ cho tháng 1). Big Data sau khi được tổ chức sẽ có dạng đơn giản như sau:
3
Độ lệch chuẩn của quận Hải Châu trong THÁNG 01 trong vòng 8 năm (2009-2016) sẽ là:
4
Sau khi đã có độ lệch chuẩn từ dữ liệu quá khứ chúng ta có thể tiến hành so sánh với dữ liệu năm nay bằng cách lấy số vụ của 01/2017 trừ đi số vụ trung bình  rồi chia cho độ lệch chuẩn.
5
Tiếp tục với các quận còn lại, ta có thể có một bảng lệch chuẩn đơn giản như sau:
Đột nhập trộm cắp tại 4 quận Đà Nẵng trong tháng 01/2017
6
Nhiều nghiên cứu đã chỉ ra trong điều kiện phân bố bình thường, ngẫu nhiên thì sẽ có khoảng 68% các biến số (ở đây là số vụ trộm) sẽ rơi vào khoảng -0.5 tới +0.5 so với độ lệch chuẩn TB; 95% sẽ rơi vào khoảng -1 tới +1; đến 99.7% sẽ rơi vào khoảng -1.5 đến + 1.5. Như vậy khi áp dụng vào đời thực, ta có thể sử dụng các trạng thái sau cho tình hình trộm cắp:
“Lạnh” – các vụ phạm tội ít hơn 2 SD so với TB
“Mát” – các vụ phạm tội ít hơn từ 1 đến 2 SD so với TB
“Bình thường” – các vụ phạm tội từ ít hơn 1 SD đến nhiều hơn 1 SD so với TB
“Ấm” – các vụ phạm tội nhiều hơn từ 1 đến 2 SD so với TB
“Nóng” – các vụ phạm tội nhiều hơn 2 SD so với TB
Bảng lệch chuẩn trên chỉ dành cho tháng 1, chúng ta sẽ có 12 bảng như vậy cho 12 tháng. Bằng việc sử dụng bảng lệch chuẩn này chúng ta có thể dễ dàng phát hiện ra được những xu hướng tăng giảm của hoạt động tội phạm để có thể tiến hành bố trí resource phòng ngừa thích hợp. Thử nghĩ đến trường hợp nếu trong quý 1, 3 năm liên tiếp từ 2015 đến 2017, tỉ lệ phạm tội ở quận Hải Châu luôn ở trạng thái ấm hoặc nóng thì có khả năng rất cao tỉ lệ này cũng sẽ gia tăng như vậy trong năm tiếp theo. Vì thế việc tăng cường tuần tra, rà quét trong khu vực là cực kì cần thiết để hạn chế tội phạm diễn ra.
7
Có thể các bạn sẽ thấy dự đoán này khá đơn giản và sơ sài nhưng đừng quên ở đây chúng ta chỉ sử dụng duy nhất một thuộc tính thời gian của Big Data tội phạm. Nếu có thể tìm ra những phương pháp kết hợp những thuộc tính khác như địa điểm (sẽ nói trong phần sau), khoảng thời gian diễn ra, tình trạng xung quanh,… thì chúng ta có thể có những suy đoán và cảnh báo chính xác và cụ thể hơn nhiều. Với một lượng lớn dữ liệu từ Big Data chúng ta có thể giới hạn phạm vi dự đoán ở một loại tội phạm hay một khu vực nhỏ (một phường nào đó của quận Hải Châu chẳng hạn) thì việc phân bổ nguồn lực và phân tích cảnh báo sẽ càng hiệu quả hơn nữa.
Một ứng dụng đang dùng phương pháp phân tích crime pattern là PREDPOL, một phần mềm dự đoán thời gian và địa điểm tội phạm sẽ xảy ra, hiện đang được sử dụng bởi sở cảnh sát Los Angeles, USA; PREDPOL chỉ sử dụng 3 thuộc tính là: loại tội phạm, địa điểm phạm tội và thời gian cụ thể mà phần mềm này đã giúp sở cảnh sát LA ngăn chặn hơn 20% số tội phạm được dự đoán trong 3 năm trở lại đây.
8
Trong phần này chúng tôi đã giới thiệu cho các bạn một phương pháp là sử dụng độ lệch trần để phân tích lượng tội phạm tăng giảm nhằm dự đoán xu hướng tội phạm sẽ diễn ra trong tương lai gần. Trong phần tiếp theo chúng tôi sẽ tiếp tục với một phương pháp khác trong việc phân tích crime pattern là “phân tích vị trí bằng bản đồ hóa tội phạm”. Mời các bạn đón xem.

Deep Learning Có Phải Là Chìa Khoá Vạn Năng?

Gần đây, Deep Learning đã nổi lên là một kĩ thuật rất “hot” của Machine Learning. Kĩ thuật này đã gặt hái được nhiều thành công trong các kết qủa nghiên cứu cũng như những ứng dụng thông minh ngoài thực tế đòi hỏi phải có độ chính xác cao, biến những điều dường như chỉ tồn tại trong phim viễn tưởng trở thành hiện thực.
Những năm 90 của thế kỷ trước con người đã cho rằng máy móc không thể làm những việc mang tính sáng tạo thì giờ đây AI đã sáng tác được tiểu thuyết, vẽ tranh.
Trước đây con người nhận định AI không thể chiến thắng được con người trong môn cờ vây với số nước đi gấp nhiều lần số lương nguyên tử trong vũ trụ thì AlphaGo đã đánh bại kỳ thủ cờ vậy số một thế giới Ke Jie với tỷ số 2-0, trước đó cũng đã hạ gục huyền thoại cờ vây của Hàn Quốc Lee Sedol với tỷ số 4-1.
Untitled_2
Còn trong lĩnh vực y học, cỗ máy IBM Watson được đánh giá có khả năng chuẩn đoán giỏi hơn bất kỳ bác sỹ nào trong tất cả các loại bệnh. Gần đây, trí tuệ nhân tạo Watson của IBM đã phát hiện ra một loại bệnh mà các bác sỹ đã bó tay không thể tìm ra ở một nữ bệnh nhân. Bằng cách so sánh bộ gen của người phụ nữ này với hơn 20 triệu kết quả nghiên cứu bệnh khác, Watson đã đưa ra kết quả là một chứng leukemia cực kỳ hiếm gặp chỉ trong 10 phút.
Năm ngoái, Facebook cũng thành lập AI Research Unit, đơn vị nghiên cứu về AI sử dụng deep learning vào việc tạo ra các giải pháp hiệu quả hơn giúp nhận diện khuôn mặt và sự vật trên 350 triệu bức ảnh và video được đăng tải lên Facebook mỗi ngày.
Một ví dụ tiêu biểu khác về deep learning trong thực tế là khả năng nhận diện giọng nói của các trợ lý ảo Google Now và Siri. Dự án xe tự lái của Google hay Apple chuẩn bị đi vào thực tế cũng nhờ kỹ thuật Deep Learning.
Hay câu chuyện về Speech to Text của tiếng Anh. Nó là một bài toán rất khó tuy nhiên khi đưa bộ dữ liệu vào Deep Learning train trong một tuần nhận được model với độ chính xác lên đến 95%. Quá tuyệt!
Chúng đều là những vấn đề từng rất khó khăn với các nhà nghiên cứu AI.
Với những thành công rực rỡ như vậy thì Deep Learning là gì mà thế giới đang phải phát điên vì nó và phải chăng chúng ta đã tìm ra chìa khóa vạn năng cho mọi vấn đề của AI?

Deep Learning là gì?

“Deep learning is a class of machine learning algorithms, Deep learning is the application of artificial neural networks (ANNs) to learning tasks that contain more than one hidden layer.”
Đây là một định nghĩa hình thức của Deep Learning. Tuy nhiên chúng ta có thể hiểu một cách đơn giản Deep learning mô phỏng lại mạng Neural não bộ của con người trong việc học hỏi.

Chìa khóa vạn năng cho AI?

Chúng ta đã nhìn thấy quá nhiều ưu điểm Deep Learning. Kết quả thực nghiệm trong vài năm trở lại đây đã chỉ ra rằng deep learning là thuật toán mạnh mẽ và tốt nhất khi làm việc trên Big Data, nó đã đánh bại nhiều thuật toán dự đoán khác khi thực hiện trên các tập dữ liệu nhiều hơn 100 triệu dòng.
Vậy phải chăng Deep Learning là hoàn hảo và không có nhược điểm gì. Liệu deep learning có làm cho các thuật toán khác trở nên lỗi thời? Hãy nhìn kỹ lại một lần nữa chúng ta sẽ thấy để làm được điều đó thì Deep Learning có một mô hình tính toán rất phức tạp và cần phải được đáp ứng những điều sau:
  • Lượng dữ liệu dồi dào.
  • Tốc độ tính toán của máy tính nhanh.
Với những đặc điểm như vậy của Deep Learning chúng ta cần cân nhắc khi sử dụng trong những trường hợp sau:

Các bài toán đơn giản, lượng dữ liệu không nhiều

Với những bài toán đơn giản, lượng dữ liệu không nhiều thì Deep Learning không hiệu quả.
Tôi đã làm một bài toán ví dụ như sau:
Phân loại hoa Iris dựa vào chiều dài cánh hoa và lá. Bộ dữ liệu là bộ dữ liệu chuẩn kinh điển trong thư viện Machine Learning, bao gồm chiều dài cánh hoa và lá của ba kiểu hoa Iris: Setosa, Versicolour và Virginica.
Cấu hình máy của FSOFT: CPU Intel Core i3, ram 8G DDR3.
Iris
Với thuật toán Xgboost tree máy chạy model trong 1.89s cho ra độ chính xác 96.03%
Với thuật toán Deep Learning với 50 epochs máy chạy trong 11ph 12s cho ra độ chính xác 92.86%
Rõ ràng Deep Learning đã tệ hơn trong bài toán này. Như vậy với các bài toán đơn giản không dại gì mà chúng ra sử dụng “dao mổ trâu để giết gà” vừa tốn công sức mà lại không hiệu quả.
Ngoài ra, tôi cần nhấn mạnh rằng không có một thuật toán Machine Learning nào hoàn hảo cho tất cả các bộ dữ liệu. Ví dụ HMMs sẽ tốt hơn Deep Learning cho nhận dạng tiếng nói và Wavelets sẽ tốt hơn Deep Learning trong xử lý ảnh…

Các bài toán có ngân sách thấp hoặc yêu cầu không cao

Deep Learning là các mô hình rất linh hoạt, với vô số kiến ​​trúc và các kiểu node, thuật toán tối ưu hóa, và các chiến lược regularization. Tùy thuộc vào ứng dụng, mô hình của bạn có thể có các Convolution layer (CNN) Hoặc cấu trúc recurrent (RNN). Nó có thể thực sự sâu (với rất nhiều lớp ẩn) hoặc chỉ với một vài lớp ẩn. Nó có thể sử dụng hàm Linear Activation hoặc Nolinear Activation. Nó có thể hoặc có thể không có dropout. Và các trọng số thường được regularize (l1, l2).
Đây chỉ là một phần danh sách, có rất nhiều loại khác nhau của các node, các connection và các hàm loss để tinh chỉnh. Do đó việc tạo ra một mô hình Deep Learning tốn rất nhiều chi phí về thời gian và resources. Bạn có thể ngạc nhiên vì SVM tuyến tính thực sự là tất cả những gì bạn cần.

Các bài toán mà model hay các feature, các parameter, hyper parameter cần được diễn giải tường minh cho người dùng

Deep Learning là một hộp đen có sức mạnh dự đoán cao nhưng khả năng diễn giải tại sao nó phải như vậy là khó.
Điều này đặc biệt quan trọng khi truyền đạt những suy diễn của model cho những người cần đưa ra quyết định dựa trên chúng. Ví dụ: Các bác sĩ chẳng hạn cần phải kết hợp tất cả các loại dữ liệu khác nhau để đưa ra ra chẩn đoán chứ không chỉ đơn thuần là kết quả chuẩn đoán được đưa ra bởi model.
IBM
Mặt khác, có những trường hợp độ chính xác của mô hình không quan trọng bằng khả năng giải thích tại sao lại làm như vậy. Ví dụ: Nhà hoạch định chính sách có thể muốn biết tác động của một biến số lên tuổi thọ của con người hơn là việc dự đoán tuổi thọ.
Tóm lại, có thể Deep Learning sẽ trở thành thuật toán chủ đạo giống như SVM nhưng Deep Learning không phải là chìa khóa vạn năng. Bạn không nên “ném” bất cứ bài toán Machine Learning nào vào Deep Learning mà hãy bắt đầu bằng các thuật toán đơn giản để xem độ chính xác đã đạt yêu cầu hay chưa.

Xây dựng Open Chatbot bằng Deep Learning

Hiện nay, chúng ta đã quen với những Chatbot được xây dựng dựa trên các Platform có sẵn như IBM Watson Conversation, Luis, API.Ai, Amazon Lex hay FPT.AI. Tuy nhiên các platform chỉ có thể áp dụng cho các Close Chatbot như tổng đài trả lời tự động của ngân hàng, hướng dẫn đăng ký bảo hiểm trực tuyến. Chúng không thể làm được như các Open Chatbot kiểu như Siri của Apple, Cortana của Microsoft, Google Assistant, hay Alexa của Amazon.
Các bạn hãy tưởng tượng thế này, để xây dựng các Open Chatbot bằng các Platform trên thì chúng ta phải tạo ra các Intents các Entities có thể cover hàng tỷ tỷ case sử dụng của người dùng. Điều đó thật sự là bất khả thi!
Vậy các Open Chatbot được xây dựng như thế nào? Thực tế thì có rất nhiều phương pháp, rất nhiều kỹ thuật được sử dụng để tạo nên một Open Chatbot. Trong bài này, tôi muốn chia sẻ với các bạn một phương pháp như một phần cơ bản được sử dụng để tạo ra chúng. Đó là Deep Learning.

Đặt vấn đề

Ở mức high level, công việc của Chatbot là có thể xác định được response tốt nhất cho bất kỳ message nhận được. Bao gồm:
  1. Trả lời câu hỏi của người dùng
  2. Cung cấp thông tin cho người dùng
  3. Hỏi các câu hỏi tiếp theo cho người dùng
  4. Tiếp tục cuộc trò chuyện một cách tự nhiên
Chatbot cần phải hiểu được ý định các message của người dùng, xác định loại thông điệp phản hồi (câu hỏi tiếp theo, phản hồi trực tiếp,…) và phải tuân theo các quy tắc ngữ pháp và từ vựng chính xác trong khi tạo câu trả lời. Deep Learning là một trong những phương pháp hiệu quả nhất trong việc giải quyết những khó khăn này.

Hướng tiếp cận Deep Learning

Sử dụng Deep Learning trong Chatbot là một biến thể của sequence-to-sequence (Seq2Seq) model. Ý tưởng của nó là sử dụng một Recurrent Neural Netword (RNN) để mapping input sequence với một vector số. Sau đó, mapping vector này với target sequence bởi một RNN khác. Trong bài toán Chatbot thì input sequence là các input messages của người dùng còn target sequence là các responses của bot.
DL-01
High Architect
Trong phần ENCODER, một RNN bao gồm các hidden state vectors chứa đựng thông tin của các bước trước. Như trong hình trên, hidden state vector là thể hiện của 3 từ đầu tiên. Theo logic này thì hidden state vector cuối cùng trong phần ENCODER là một thể hiện tương đối chính xác của input message.
Trong phần DECODER, hidden state vector cuối cùng thể hiện các từ mà bot dự đoán sẽ trả lời. Hãy nhìn vào cell đầu tiên của DECODER, nó sẽ dự đoán từ nào trong tập từ vựng là tốt nhất cho từ đầu tiên của câu trả lời. Về mặt toán học, nó tính toán xác suất của tất cả các từ vựng và lấy từ có xác suất cao nhất.
Cell thứ hai sẽ là một hàm của vector đại diện (thought vector) và đầu ra của cell đầu tiên. Mục đích của LSTM là đánh giá xác suất có điều kiện sau:
DL-02
Tại mỗi cell từ được lựa chọn để trả lời là từ làm cho xác suất có điều kiện ở trên là cao nhất.
DL-03
Như trong hình ta sẽ thấy từ đầu tiên trong câu trả lời cho “Are you free tomorrow?” là “No”. Và cứ thế các từ tiếp theo của câu trả lời được sinh ra.

Hướng dẫn Step by step

Bước 1: Data Collection – Thu thập dữ liệu

Đầu tiên chúng ta sẽ thu tập dữ liệu. Dữ liệu để training là những đoạn hội thoại đã được lưu lại. Nguồn dữ liệu ở đây có thể là các Data Set có thể download như Cornell Movie Dialog Corpus, Microsoft’s Social Media Conversation Corpus hay các đoạn hội thoại trên Facebook, Google Hangouts, SMS, LinkedIn, Twitter, Tinder và Slack.
DL-04

Step 2: Data Pre-processing – Tiền xử lý dữ liệu

Tại bước này, các đoạn hội thoại sẽ được trích xuất ra thành các cặp input message/response. Response sẽ là label cho các input message và chúng được dùng để train cho Seq2Seq.
DL-05
Tuy nhiên việc này vẫn chưa đủ để training bởi gì dữ liệu vẫn đang ở dạng text và máy tính vẫn không thể hiểu được. Chúng ta cần làm bước tiếp theo là vector hóa những từ trong các đoạn hội thoại. Để làm điều này chúng ta sử dụng kỹ thuật Word2vec với Deep Learning (đây là một phương pháp rất phổ biến hiện nay để thể hiện một từ vựng bởi một vector số, các bạn có thể tìm hiểu sâu hơn trên Internet).
Sau bước này, chúng ta đã có dữ liệu để training.

Bước 3: Seq2Seq model training

Như trong hình minh họa High Level Architecture đầu bài báo, Seq2Seq model sẽ là mô hình tổng hợp của 2 model: ENCODER và DECODER. ENCODER sẽ tạo ra vector thể hiện của input message còn DECODER sẽ dựa vào vector thể hiện để sinh ra các từ của response.
Mỗi ENCODER, DECODER sẽ là một RNN model (cụ thể là LSTM), output layer của ENCODER là input layer của DECODER.
Chúng ta có thể dùng TensorFlow để xây dựng các model này.
encoderLSTM = tf.nn.rnn_cell.BasicLSTMCell(lstmUnits, state_is_tuple=True)
decoderFinalState = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(encoderInputs, decoderInputs, encoderLSTM)
Sau bước này, chúng ta đã có Seq2Seq model cho Open Chatbot của mình.
Chatbot

Kết luận

Mặc dù trên thực tế việc xây dựng một Open Chatbot bao gồm rất nhiều vấn đề phức tạp chứ không chỉ đơn giản như trên. Tuy nhiên các bước này là xương sống trong việc tạo ra một Open Chatbot, giúp chúng ta hiểu được các Open Chatbot được tao ra như thế nào. Và dựa vào đó, chúng ta đã có thể xây dựng một Open Bot đơn giản cho riêng mình.
Tham khảo

The Ultimate XP Project

  (Bài chia sẻ của tác giả  Ryo Amano ) Trong  bài viết  số này, tôi muốn viết về dự án phát triển phần mềm có áp dụng nguyên tắc phát triển...