Phần 11: NLTK Package phần 1 – Lập trình AI bằng Python

Phần 11: NLTK Package phần 1                        – Lập trình AI bằng Python
Trong bài này, ta sẽ học cách bắt đầu với Natural Language Toolkit Package.

1. Điều kiện tiên quyết :

Nếu như ta muốn xây dựng những ứng dụng với xử lý Ngôn ngữ Tự nhiên thì việc thay đổi ngữ cảnh sẽ gây khó nhất. Yếu tố ngữ cảnh ảnh hưởng tới cách máy hiểu 1 câu chi tiết. Do đó, ta cần phát triển những ứng dụng Ngôn ngữ tự nhiên bằng cách sử dụng những phương pháp tiếp cận máy học để máy móc cũng sẽ có thể hiểu cách con người có thể hiểu ngữ cảnh.
Để xây dựng những ứng dụng như thế, chúng tôi sẽ sử dụng gói Python có tên NLTK (Natural Language Toolkit Package).

2. Importing NLTK :

Cài đặt bằng câu lệnh sau :
pip set up nltk
Nếu như bạn sử dụng conda thì sẽ sử dụng câu lệnh :
conda set up -c anaconda nltk
Hiện tại sau khi bạn cài đặt gói NLTK, ta cần nhập nó qua dấu nhắc lệnh python. Chúng ta sẽ có thể nhập nó bằng cách viết lệnh sau trên dấu nhắc lệnh Python:
&gt&gt&gt import nltk

3. Download dữ liệu NLTK :

Hiện tại sau khi nhập NLTK, ta cần download dữ liệu cần thiết. Nó có thể được bắt đầu với sự giúp đỡ của lệnh sau trên dấu nhắc lệnh Python:
&gt&gt&gt nltk.obtain()

4. Cài đặt các bundle khác :

Để xây dựng những ứng dụng xử lý ngôn ngữ tự nhiên bằng NLTK, ta cần cài đặt các bundle cần thiết. Các bundle như dưới đây:
a. gensim
Nó là 1 thư viện mô hình ngữ nghĩa mạnh mẽ có ích cho nhiều app. Chúng ta sẽ có thể cài đặt nó bằng cách làm lệnh sau:
pip set up gensim
b. sample
Nó được dùng để làm gói gensim hoạt động bình thường. Chúng ta sẽ có thể cài đặt nó bằng cách làm lệnh sau
pip set up sample

5. Khái niệm Tokenization, Stemming, và Lemmatization :

a. Tokenization :

Nó có thể được định nghĩa rằng quá trình phân nhỏ văn bản đã cho, tức là chuỗi ký tự thành các đơn vị nhỏ hơn được gọi là mã thông báo. Các mã có thể là các từ, số hay dấu chấm câu. Nó còn được gọi là phân đoạn từ. Sau đây chính là 1 ví dụ đơn giản về mã hóa –
Input − Mango, banana, pineapple and apple all are fruits.
Output :
Quá trình phá vỡ văn bản đã cho có thể được bắt đầu với sự giúp đỡ của việc xác định các ranh giới từ. Sự kết thúc của 1 từ và sự bắt đầu của 1 từ mới được gọi là ranh giới từ. Hệ thống chữ viết và cấu trúc kiểu chữ của các từ hình ảnh hưởng tới ranh giới.
Trong mô-đun Python NLTK, ta có những gói khác nhau liên quan tới tokenization mà ta sẽ có thể dùng để chia văn bản thành các mã thông báo theo yêu cầu  Những bundle như dưới đây:
sent_tokenize bundle
Như tên gợi ý, gói này sẽ chia văn bản đầu vào thành các câu
from nltk.tokenize import sent_tokenize
word_tokenize bundle
Package này chia văn bản đầu vào thành các từ.
from nltk.tokenize import word_tokenize
WordPunctTokenizer bundle
bundle này chia văn bản đầu vào thành các từ cũng như là các dấu chấm câu
from nltk.tokenize import WordPuncttokenizer

b. Stemming :

Trong khi làm việc với những từ, ta bắt gặp nhiều biến thể do nguyên nhân ngữ pháp. Khái niệm biến thể tại đây nghĩa là ta phải đối phó với những hình thức khác nhau của cùng 1 từ như democracydemocratic và democratization. Nó cần thiết để máy móc hiểu rằng những từ khác nhau này có cùng 1 dạng cơ sở. Với cách này, sẽ rất có ích khi trích xuất các dạng căn bản của các từ trong khi ta phân tích văn bản.
Chúng ta sẽ có thể đạt điều đó bằng cách xuất phát. Theo cách này, ta có thể cho rằng rằng tạo gốc là quá trình tự suy nghĩ để rút ra các dạng cơ sở của từ bằng cách cắt bỏ các đầu của từ.
Trong mô-đun Python NLTK, chúng tôi có những gói khác nhau liên quan tới việc tạo gốc. Những gói này có thể được dùng để lấy các dạng căn bản của từ. Những gói này sử dụng các thuật toán. Những gói như dưới đây:
PorterStemmer bundle :
Package Python này sử dụng thuật toán Porter để trích xuất biểu mẫu cơ sở
from nltk.stem.porter import PorterStemmer
Ví dụ: nếu như ta cung cấp từ ‘writing’ làm đầu vào cho trình tạo gốc này, ta sẽ được nhận từ ‘write’ sau khi tạo gốc.
LancasterStemmer bundle :
Package Python này sẽ sử dụng thuật toán Lancaster để trích xuất biểu mẫu cơ sở
from nltk.stem.lancaster import LancasterStemmer
 SnowballStemmer bundle :
Package Python này sẽ sử dụng thuật toán của quả cầu tuyết để trích xuất dạng cơ sở
from nltk.stem.snowball import SnowballStemmer
Toàn bộ các thuật toán này có mức độ gắt gao khác nhau. Nếu như ta so sánh ba loại stemmers này thì Porter là ít gắt gao nhất và Lancaster là gắt gao nhất. Snowball stemmer sử dụng tốt về tốc độ cũng như là độ chặt chẽ.

c. Lemmatization

Ta cũng sẽ có thể trích xuất dạng cơ sở của từ do lemmatization. Về căn bản, nó thực hiện nhiệm vụ này với việc sử dụng phân tích từ vựng và hình thái của các từ, bình thường chỉ nhằm mục đích xóa bỏ các kết thúc không theo chiều hướng. Dạng cơ sở này của bất kỳ từ nào được gọi là lemma.
Điểm khác biệt chính giữa stemming và lemmatization là việc sử dụng từ vựng và phân tích hình thái của các từ. 1 điểm khác biệt nữa là việc bổ đề thường thu gọn các từ liên quan tới đạo hàm trong khi bổ đề thường chỉ thu gọn các dạng vô hướng khác nhau của 1 bổ đề. Ví dụ: nếu như ta cung cấp từ noticed làm từ ban đầu vào thì việc đặt gốc có thể trả về từ “s” nhưng việc bổ sung thêm sẽ nỗ lực trả lại từ see hay noticed tùy vào việc sử dụng mã thông báo là động từ hay danh từ.
Trong mô-đun Python NLTK, mình có bundle sau liên quan tới quá trình lemmatization mà mình có thể dùng để lấy các dạng căn bản của từ:
WordNetLemmatizer bundle
Package  này sẽ trích xuất dạng cơ sở của từ tùy vào việc nó được dùng như 1 danh từ hay 1 động từ
from nltk.stem import WordNetLemmatizer

6. Chunking: Chia dữ liệu thành các Chunks

Nó là 1 trong các quá trình quan trọng trong xử lý ngôn ngữ tự nhiên. Công việc chính của phân khúc là xác định các phần của lời nói và các cụm từ ngắn như cụm danh từ. Ta đã nghiên cứu quá trình mã hóa, việc tạo nên mã thông báo. Chunking về căn bản là ghi nhãn của những token đó. Nói theo cách khác, phân khúc sẽ cho ta thấy cấu trúc của câu.
tiếp theo, ta sẽ tìm hiểu thêm về những loại Chunking.
Những loại chunking :
Có 2 loại chunking gồm :
a. Chunking up :
Trong quá trình phân chia này, đối tượng, sự vật, v.v … sẽ tổng quát hơn và ngôn ngữ trở nên trừu tượng hơn. Có nhiều cơ hội thỏa thuận hơn. Trong quá trình này, mình sẽ thu nhỏ. Ví dụ, nếu như ta đặt câu hỏi “ô tô dùng cho mục đích gì”?ta sẽ có thể được nhận câu trả lời là “vận chuyển”.
b. Chunking down :
Trong quá trình phân loại này, đối tượng, sự vật, v.v … sẽ chi tiết hơn và ngôn ngữ được xâm nhập nhiều hơn. Cấu trúc sâu hơn sẽ được coi xét khi phân tích. Trong quá trình này, ta sẽ mở rộng thông tin. Ví dụ: nếu như ta rút ngắn câu hỏi “Hãy kể chi tiết về 1 chiếc ô tô”? Ta sẽ được nhận các thông tin nhỏ hơn về chiếc xe.
Ví dụ :
ta sẽ thực hiện phân đoạn Danh từ-Cụm từ, 1 thể loại phân loại sẽ tìm các cụm danh từ trong câu, bằng cách sử dụng mô-đun NLTK trong Python –
Bước 1 : ta cần xác định ngữ pháp để phân khúc. Nó sẽ gồm những quy tắc mà ta cần tuân theo.
Bước 2 : ta cần tạo 1 trình phân tích cú pháp chunk. Nó sẽ phân tích ngữ pháp và đưa ra kết quả.
Bước 3 : đầu ra được tạo nên ở định dạng cây.
Import NLTK :
import nltk
Hiện tại, ta cần xác định câu. Tại đây, DT nghĩa là định thức, VBP nghĩa là động từ, JJ nghĩa là tính từ, IN nghĩa là giới từ và NN nghĩa là danh từ.
sentence=(*1*)
Ta cần đưa ra ngữ pháp. Tại đây, mình sẽ đưa ra ngữ pháp ở dạng biểu thức chính quy
grammar = "NP:{&ltDT&gt?&ltJJ&gt*&ltNN&gt}"
Ta cần xác định 1 trình phân tích cú pháp sẽ phân tích ngữ pháp.
parser_chunking = nltk.RegexpParser(grammar)
Trình phân tích cú pháp phân tích câu như dưới đây:
parser_chunking.parse(sentence)
Tiếp theo,  ta cần lấy đầu ra. Đầu ra được tạo trong biến đơn giản được gọi là output_chunk.
Output_chunk = parser_chunking.parse(sentence)
Khi thực thi đoạn mã sau, ta sẽ có thể vẽ đầu ra của chính mình ở dạng cây.
output.draw()

admin

Leave a Reply

Your email address will not be published. Required fields are marked *