Cách tách từ cho Tiếng Việt

w2vvn

Trong bài viết này chúng ta sẽ tìm hiểu về cách tách từ trong Tiếng Việt, bao gồm các nội dung:

  1. Tách từ là gì?
  2. Tại sao phải tách từ trong xử lý ngôn ngữ tự nhiên?
  3. Thực hành tách từ cho Tiếng Việt với công cụ vnTokenizer.

 

1. Đầu tiên, thuật ngữ "tách từ" là gì?

Thuật ngữ "tách từ" trong Tiếng Anh là "word segmentation", dịch ra Tiếng Việt là "tách từ" hoặc "phân đoạn từ". Dùng từ nào cũng được, nhưng chúng tôi dùng từ "tách từ" trong bài viết này.

Tách từ, về mặt biểu hiện, là gom nhóm các từ đơn liền kề thành một cụm từ có ý nghĩa. Ví dụ: "Cách tách từ cho Tiếng Việt." sau khi tách từ thì thành "Cách tách từ cho Tiếng_Việt ." Về hình thức, các từ đơn được gom nhóm với nhau bằng cách nối với nhau bằng ký tự gạch dưới "_", trong trường hợp này là từ Tiếng_Việt. Sau khi thực hiện tách từ thì mỗi từ (token) trong câu được cách nhau bởi một khoảng trắng, trong trường hợp này như "Tiếng_Việt ." thì từ "Tiếng_Việt" cách đấu "." bởi 1 khoảng trắng. Đây là quy ước chung cho tất cả các ngôn ngữ của bài toán tách từ trong xử lý ngôn ngữ tự nhiên. Việc quy ước như vậy là để tạo thành chuẩn chung và để dễ xử lý hơn trong lập trình.

2. Tại sao phải tách từ cho Tiếng Việt?

Về mặt ngữ nghĩa, việc tách từ văn bản đầu vào trước khi đưa vào huấn luyện mô hình máy học là để giải quyết các bài toán liên quan đến ngữ nghĩa của văn bản, tức là kết quả đầu ra mang tính suy luận dựa trên việc hiểu ý nghĩa của văn bản đầu vào. Ví dụ như các dạng bài toán: phát hiện đạo văn, tóm tắt văn bản, hỏi đáp tự động, hỗ trợ khách hàng tự động, phân tích cảm xúc văn bản, dịch máy, trợ lý ảo...

Mục tiêu của việc tách từ văn bản đầu vào là để khử tính nhập nhằng về ngữ nghĩa của văn bản. Tùy vào từng loại ngôn ngữ có những đặc điểm khác nhau mà việc tách từ văn bản cũng có độ khó khăn khác nhau. Đựa theo đặc điểm của ngôn ngữ tự nhiên mà ngôn ngữ được phân thành các loại:

  1. Ngôn ngữ hòa kết (flexional), ví dụ: Đức, Latin, Hi Lạp, Anh, Nga...
  2. Ngôn ngữ chắp dính (agglutinate), ví dụ: Thổ Nhĩ Kỳ, Mông Cổ, Nhật Bản, Triều Tiên,...
  3. Ngôn ngữ đơn lập (isolate), là ngôn ngữ phi hình thái, không biến hình, đơn âm tiết, ví dụ: Việt Nam, Hán,...

Với ngôn ngữ hòa kết như Tiếng Anh, thì việc tách từ khá đơn giản vì ranh giới từ được nhận diện bằng khoảng trắng và dấu câu.

Với ngôn ngữ Tiếng Việt, thuộc loại hình đơn lập, mang đặc điểm là từ Tiếng Việt không biến đổi hình thái, ranh giới từ không được xác định mặc nhiên bằng khoản trắng. Tiếng Việt có đặc điểm là ý nghĩa ngữ pháp nằm ở ngoài từ, phương thức ngữ pháp chủ yếu là trật tự từ và từ hư. Cho nên có trường hợp một câu có thể có nhiều ngữ nghĩa khác nhau tuỳ vào cách ta tách từ như thế nào, gây nhập nhằng về ngữ nghĩa của câu. Ví dụ:

Với câu "Xoài phun thuốc sâu không ăn." có thể được tách từ như sau, với ý nghĩa hoàn toàn khác nhau:

Xoài / phun thuốc / sâu / không / ăn.

Xoài / phun / thuốc sâu / không / ăn.

Với câu "Ăn cơm không được uống rượu.", có thể được tách từ như sau:

Ăn / cơm / không / được / uống / rượu.

Ăn / cơm không / được / uống / rượu.

Với câu "Mẹ vào ca ba con ngủ với dì.", có thể được tách từ như sau:

Mẹ / vào / ca ba / con / ngủ / với / dì.

Mẹ / vào ca / ba con / ngủ / với / dì.

Điều đó cho thấy, công việc tách từ trong Tiếng Việt không phải là chuyện dễ dàng, vì nó tạo ra các câu có ngữ nghĩa hoàn toàn khác nhau, gây ảnh hưởng đến chất lượng huấn luyện mô hình học. Chính vì vậy, công việc tách từ là rất quan trọng đối với xử lý ngôn ngữ Tiếng Việt, nhất là khi giải quyết các bài toán liên quan đến ngữ nghĩa của văn bản.

3. Phần thực hành tách từ Tiếng Việt

Để thực hành tách từ cho văn bản Tiếng Việt, chúng tôi dùng công cụ vnTokenizer được viết bằng ngôn ngữ Java của tác giả Lê Hồng Phương, download source code vnTokenizer tại đây. vnTokenizer cho độ chính xác khoảng 96% - 98%.

Sau khi download bản build bin của vnTokenizer và giải nén. Chúng tôi thường dùng một script bash sau để chạy trên hệ điều hành Ubuntu hoặc CentOS. Các bạn dùng Windows thì chịu khó đọc file hướng dẫn trong tool vnTokenizer để làm tương tự. Nội dung file vnToken.sh như sau:

#!/usr/bin/env bash

WDIR=$(pwd)
TOOL_vnTokenizer=/path/to/folder/vn.hus.nlp.tokenizer-4.1.1-bin

cd $TOOL_vnTokenizer
echo "~~~~~~~~~~~~~~~ run TOOL_vnTokenizer ~~~~~~~~~~~~~~"
echo " * create datatok.txt"
./vnTokenizer.sh -i /path/to/file/dataclean.txt -o /path/to/file/datatok.txt
cd $WDIR
echo "~~~~~~~~~~~~~~~ run complete ~~~~~~~~~~~~~~~"

Trong đó, các bạn cần chỉnh sửa lại các thông tin folder chứa vnTokenizer của biến
TOOL_vnTokenizer = /path/to/folder/vn.hus.nlp.tokenizer-4.1.1-bin.

Và các tham số đầu vào là các file input và output của vnTokenizer:
./vnTokenizer.sh -i /path/to/file/dataclean.txt -o /path/to/file/datatok.txt.

Ở đây, chúng tôi giả thiết rằng dữ liệu văn bản chứa trong file dataclean.txt là văn bản đã được làm sạch, có nghĩa là chứa các câu văn thông thường, không chứa các ký tự điều khiển, không chứa các ký tự rác, hoặc các câu văn không đúng ngữ pháp, hoặc các câu vô nghĩa.

Ngoài cách dùng trên, thì vnTokenizer còn có thể tách từ văn bản Tiếng Việt từ nhiều file được chứa trong một thư mục xác định với phần mở rộng file mặc định là txt.

./vnTokenizer.sh -i /path/to/folder/input -o /path/to/folder/output
                    

Hoặc làm việc với các file có phần mở rộng xác định, ví dụ .xyz như sau:

./vnTokenizer.sh -i /path/to/folder/input -o /path/to/folder/output -e .xyz
                    

Trên đây, chúng tôi đã giới thiệu cho các bạn về ý nghĩa của việc tách từ trong xử lý ngôn ngữ Tiếng Việt, nhất là trong các bài toán liên quan đến phân tích ngữ nghĩa của văn bản. Nó trở thành 1 bước tiền xử lý văn bản quan trọng của hầu hết các hệ thống xử lý ngôn ngữ tự nhiên.

Nếu có thắc mắc hoặc góp ý gì, các bạn có thể để lại bình luận ở bên dưới. Nếu bài viết này có ích cho bạn, thì bạn có thể like và share thoải mái.

Happy coding!!!

02h00AM, 13/02/2018

Our Team