GIỚI THIỆU VỀ XỬ LÝ NGÔN NGỮ TỰ NHIÊN VÀ CÁC CÁCH BIỂU DIỄN TỪ NGỮ TRONG XỬ LÝ NGÔN NGỮ TỰ NHIÊN (P.1)

by Tiểu Thành

Vài nét về Xử lý Ngôn ngữ Tự nhiên (Natural Language Processing)

Từ xa xưa, con người ta đã sử dụng ngôn ngữ là hình thức giao tiếp trong cuộc sống hằng ngày. Ngôn ngữ của con người là một hệ thống được xây dựng một cách đặc trưng để chuyển tải ý nghĩa, và không được tạo ra bằng bất cứ loại biểu hiện hình thể nào. Để thể hiện nội dung của mình muốn đề cập đến, chúng ta có thể sử dụng từ ngữ hoặc dấu hiệu để diễn tả, điều đó được thể hiện qua lời nói, chữ viết (một từ, cụm từ) hoặc các tác phẩm hội họa. Dù bằng cách nào đi nữa thì việc thể hiện ngôn ngữ của con người sẽ được thể hiện qua cách sau: Đó là ánh xạ “nội dung, suy nghĩ, ý tưởng”  bằng một hoặc một  nhóm các ký hiệu. 

Với sự phát minh ra máy tính, con người mong muốn bằng cách nào đó có thể dạy cho máy tính hiểu được thứ ngôn ngữ của mình từ đó thực hiện hiệu quả những nhiệm vụ liên quan đến nhiêm vụ của ngôn ngữ của như:  tương tác giữa người và máy, cải thiện hiệu quả giao tiếp giữa con người với con người, hoặc đơn giản là nâng cao hiệu quả xử lý văn bản và lời nói. Với những yêu cầu đó, Xử lý ngôn ngữ Tự nhiên ra đời chuyên tập trung vào các nghiên cứu trên ngôn ngữ của con người.

Có nhiều cấp độ khác nhau trong NLP, từ xử lý lời nói đến giải thích ngữ nghĩa và xử lý diễn ngôn. Mục tiêu của NLP là
có thể thiết kế các thuật toán để cho phép máy tính “hiểu” ngôn ngữ của con người để thực hiện một số nhiệm vụ.Nhiệm vụ có thể ở nhiều mức độ khác nhau. Ví dụ như:

  • Mức độ dễ bao gồm kiểm tra lỗi chính tả, tìm kiếm từ khóa, tìm từ đồng nghĩa,…
  • Mức độ trung bình bao gồm: Phân tích thông tin từ các trang web, tài liệu,…
  • Mức độ khó như dịch máy, phân tích ngữ nghĩa, khuyến nghị, hệ thống hỏi đáp,…

Làm cách nào máy tính có thể hiểu được ý nghĩa của một từ ?

Một thách thức lớn nhất trong Xử lý ngôn ngữ tự nhiên là đó là làm cách nào máy tính có thể hiểu được ý nghĩa của một từ. Không giống như con người, máy tính chỉ có thể đọc được và mã hóa dữ liệu dưới dạng các dãy bit. Vì thế người ta sẽ tìm cách ánh xạ từ một dãy các từ thành các dãy số mà máy tính có thể “hiểu” đươc. Có nhiều kỹ thuật để thực hiện việc chuyển đổi giữa từ thành các vector. Chúng ta có thể tham khảo một số kỹ thuật sau đây :

 One-hot vector

Là một kĩ thuật biểu diễn từ đơn giản nhất. Một từ sẽ được biểu diễn bằng một vector dưới dạng:

mà tại vị trí index của từ đó xuất hiện trong dictionary được gán bằng 1 và tất cả các vị trí index khác sẽ được gán bởi 0 (trong đó |V| chính là số lượng của từ vựng trong dictionary). Để hiểu rõ hơn ta sẽ xem xét ví dụ sau:

Xét một dictionary gồm 5 từ và sắp xếp đúng vị trí như sau dict = { em, gái, đẹp , không, hóa}khi đó từ em và từ không sẽ được biểu diễn như sau:

Trong python có hỗ trợ hàm để thực hiện one-hot vector thông qua hàm LabelBinarizer của sklearn, sau đây là mã thực hiện:

from sklearn.preprocessing import LabelEncoder,LabelBinarizer

# Đánh index cho tập từ vựng
le = LabelEncoder()
words = ['em', 'gái', 'đẹp' , 'không', 'hóa']
index = le.fit_transform(words)

# One-hot vector
oh =LabelBinarizer().fit_transform(index)

#print(oh)

 

Tuy nhiên việc biểu diễn từ bằng one-hot vector sẽ không có khái niệm về sự tương đồng về nghĩa của các từ,  tức là chúng độc lập với nhau không thể hiện mối liên hệ với nhau nhưng trong thực tế thì giữa các từ trong một câu dù ít dù nhiều gì thì chúng cũng có mối quan hệ về ngữ nghĩa. Thứ hai là sự phụ thuộc vào kích thước của bộ từ vựng dẫn đến chi phí tính toán quá lớn nếu như bộ từ vựng quá lớn. Thứ ba là khi chúng ta thêm một từ vựng mới vào dictionary dẫn đến việc thay đổi số chiều của vector biểu diễn, điều đó đòi hỏi chúng ta phải cập nhật lại số chiều và index của từng từ. Với sự bất tiện trong việc lưu trữ, cập nhật và kém hiệu qua, các thuật toán nhúng từ được tạo ra để thiết kế sau cho:

  • Các từ có ý nghĩa gần nhau thì sẽ được biểu diễn gần nhau trong không gian
  • Mỗi từ được biểu diễn bằng một vector có số chiều xác định trước

Có nhiều phương pháp để biểu diễn từ dưới dạng vector nhúng (vectors embedding). Trong đó có các hướng như sau:

  • Frequency-based Embedding:  tf-idf, count vector, Co-occurrence Matrix, Glove,…
  • Prediction-based Embedding:  Word2vec: gồm 2 model chính đó là Continuous Bag of Words ModelSkip-Gram Model, …
  • Các kỹ thuật sử dụng các mạng học sâu như Transformer, BERT, …

Trên đây là các kĩ thuật cơ bản mà mình muốn giới thiệu đến các bạn, trong đó one-hot vector là kỹ thuật cơ bản và dễ hiểu nhất, đối với các kỹ thuật nhúng từ mình xin dành cho bài viết sau.

Tài liệu tham khảo

http://web.stanford.edu/class/cs224n/slides/cs224n-2020-lecture01-wordvecs1.pdf

https://vi.wikipedia.org/wiki/X%E1%BB%AD_l%C3%BD_ng%C3%B4n_ng%E1%BB%AF_t%E1%BB%B1_nhi%C3%AAn

 

 

 

 

 

 

5 bình luận

Đặng Quốc Tiến 6 Tháng Sáu, 2020 - 1:53 chiều

idol TieuThanh

Trả lời
Lê Thạch 3 Tháng Mười Hai, 2020 - 5:05 chiều

My Idol. <3

Trả lời
Thanh Bình 10 Tháng Bảy, 2020 - 3:27 chiều

Bài viết có chiều sâu. Cảm ơn bạn đã chia sẻ

Trả lời
Tiểu Thành 15 Tháng Bảy, 2020 - 2:28 chiều

cảm ơn bạn, mong bạn ủng hộ và góp ý để mình hoàn thiện hơn nhé =)

Trả lời
KNN - một giải thuật siu cơ bản trong Học máy - Blog Lê Thạch 21 Tháng Bảy, 2020 - 8:58 chiều

[…] kĩ thuật one-hot encoding để tiến hành mà hóa, các bạn có thể đọc thêm tại link này. Với kỹ thuật này chúng ta sẽ xem những thuộc tính con của mỗi thuộc mà ta […]

Trả lời

Thêm bình luận