Chunking trong xử lý ngôn ngữ tự nhiên là gì?

Nút nguồn: 1878431

Gởi bạn đọc,

Trong blog này, tôi sẽ thảo luận về phân khúc cả về mặt lý thuyết và thực tế bằng Python.

Vì vậy, hãy bắt đầu…

LƯU Ý: Để triển khai, tốt hơn hết bạn nên sử dụng Python IDLE vì đầu ra là một bản vẽ của một cái cây bật lên trong một cửa sổ riêng biệt.

Lịch trình sự kiện

  • Chunking là gì?
  • Chunking được sử dụng ở đâu?
  • Các loại chunking
  • Thực hiện phân khúc trong Python
  • Kết quả

Chunking là gì?

Chunking được định nghĩa là quá trình xử lý ngôn ngữ tự nhiên được sử dụng để xác định các phần của lời nói và các cụm từ ngắn có trong một câu nhất định.

Nhớ lại các lớp học ngữ pháp tiếng Anh cũ của chúng ta ở trường học, hãy lưu ý rằng có tám phần của bài nói là danh từ, động từ, tính từ, trạng từ, giới từ, liên kết, đại từ và thán từ. Ngoài ra, trong định nghĩa ở trên về chunking, các cụm từ ngắn đề cập đến các cụm từ được hình thành bằng cách bao gồm bất kỳ phần nào trong số các phần này của bài phát biểu.

Ví dụ, phân khúc có thể được thực hiện để xác định và do đó nhóm các cụm danh từ hoặc danh từ riêng, tính từ hoặc cụm tính từ, v.v. Hãy xem xét câu dưới đây:

"Tôi đã ăn bánh mì kẹp thịt và bánh ngọt cho bữa sáng."

Trong trường hợp này, nếu chúng ta muốn nhóm hoặc chia nhỏ các cụm danh từ, chúng ta sẽ nhận được “bánh mì kẹp thịt”, “bánh ngọt” và “bữa trưa” là các danh từ hoặc nhóm danh từ của câu.

Chunking được sử dụng ở đâu?

Tại sao chúng ta muốn học một cái gì đó mà không biết nó được sử dụng rộng rãi ở đâu ?! Nhìn vào các ứng dụng được thảo luận trong phần này của blog sẽ giúp bạn tò mò cho đến cuối cùng!

Chunking được sử dụng để lấy các cụm từ cần thiết từ một câu nhất định. Tuy nhiên, gắn thẻ POS chỉ có thể được sử dụng để phát hiện các phần của bài phát biểu mà mỗi từ của câu đều thuộc.

Khi chúng tôi có vô số mô tả hoặc sửa đổi xung quanh một từ cụ thể hoặc cụm từ mà chúng tôi quan tâm, chúng tôi sử dụng phân khúc để lấy cụm từ được yêu cầu một mình, bỏ qua phần còn lại xung quanh nó. Do đó, phân khúc mở ra một cách để nhóm các cụm từ bắt buộc và loại trừ tất cả các bổ ngữ xung quanh chúng mà không cần thiết cho phân tích của chúng tôi. Tổng hợp, phân khúc giúp chúng ta trích xuất các từ quan trọng một mình từ các mô tả dài dòng. Vì vậy, phân khúc là một bước trong khai thác thông tin.

Điều thú vị là quá trình phân khúc trong NLP này được mở rộng sang nhiều ứng dụng khác; chẳng hạn, để nhóm trái cây của một danh mục cụ thể, chẳng hạn như trái cây giàu protein vào một nhóm, trái cây giàu vitamin là một nhóm khác, v.v. Bên cạnh đó, phân khúc cũng có thể được sử dụng để nhóm những chiếc xe tương tự, chẳng hạn như những chiếc xe hỗ trợ hộp số tự động thành một nhóm và những chiếc khác hỗ trợ hộp số tay thành một nhóm khác, v.v.

Các loại Chunking

Nói chung, có hai loại phân khúc:

  • Chunking lên
  • Chunking xuống

Chunking lên:

Ở đây, chúng tôi không lặn sâu; thay vào đó, chúng tôi hài lòng với chỉ một cái nhìn tổng quan về thông tin. Nó chỉ giúp chúng tôi có được một ý tưởng ngắn gọn về dữ liệu đã cho.

Chunking xuống:

Không giống như kiểu phân khúc trước đây, phân khúc giúp chúng ta có được thông tin chi tiết.

Vì vậy, nếu bạn chỉ muốn có một cái nhìn sâu sắc, hãy xem xét "phân tích", nếu không hãy thích "phân tích".

Thực hiện phân khúc trong Python

Hãy tưởng tượng một tình huống mà bạn muốn trích xuất tất cả các động từ từ văn bản đã cho để phân tích. Vì vậy, trong trường hợp này, chúng ta phải xem xét việc chia nhỏ các cụm động từ. Điều này là do mục tiêu của chúng tôi là trích xuất tất cả các cụm động từ từ đoạn văn bản nhất định. Chunking được thực hiện với sự trợ giúp của các biểu thức chính quy.

Đừng lo lắng nếu đây là lần đầu tiên bạn bắt gặp thuật ngữ “cụm từ thông dụng”. Bảng dưới đây là ở đây, giải cứu cho bạn:

Ý nghĩa

Ví dụ

*

Ký tự đứng trước có thể xuất hiện không hoặc nhiều lần có nghĩa là ký tự đứng trước có thể có hoặc không.

ab * khớp với tất cả các đầu vào bắt đầu bằng ab và sau đó là không hoặc nhiều hơn số b. Mẫu sẽ khớp với ab, abb, abbb, v.v.

+

Ký tự đứng trước phải xuất hiện ít nhất một lần.

a + khớp với a, aa, aaa, v.v.

?

Ký tự đứng trước có thể hoàn toàn không xuất hiện hoặc chỉ xảy ra một lần nghĩa là ký tự đứng trước là tùy chọn.

ab? đối sánh ab, abb nhưng không đối sánh abbb, v.v.

Bảng trên bao gồm các cụm từ thông dụng phổ biến nhất được sử dụng. Biểu thức chính quy rất hữu ích trong dòng lệnh, đặc biệt là khi xóa, định vị, đổi tên hoặc di chuyển tệp.

Dù sao, đối với việc triển khai này, chúng tôi sẽ chỉ sử dụng *. Vui lòng nhìn vào bảng trên để làm quen với ký hiệu!

Chúng tôi sẽ thực hiện phân đoạn bằng nltk, thư viện NLP phổ biến nhất. Vì vậy, trước tiên chúng ta hãy nhập nó.

nhập nltk

Hãy xem xét văn bản mẫu dưới đây mà tôi đã tự tạo. Vui lòng thay thế phần bên dưới bằng bất kỳ văn bản mẫu nào bạn muốn để triển khai phân khúc!

sample_text = "" "Rama đã giết Ravana để cứu Sita khỏi Lanka. Truyền thuyết về Ramayan là sử thi Ấn Độ nổi tiếng nhất. Rất nhiều bộ phim và phần tiếp theo đã được quay bằng một số ngôn ngữ ở Ấn Độ dựa trên Ramayana." ""

Rõ ràng, dữ liệu phải được mã hóa câu và sau đó được mã hóa từ trước khi chúng tôi tiếp tục. Token hóa không gì khác ngoài quá trình chia nhỏ đoạn văn bản đã cho thành các đơn vị nhỏ hơn như câu, trong trường hợp mã hóa câu và từ, trong trường hợp mã hóa từ.

Tiếp theo là mã hóa, gắn thẻ POS (part-of-speech) được thực hiện cho mỗi từ, trong đó phần lời nói của mỗi từ sẽ được xác định. Bây giờ, chúng tôi chỉ quan tâm đến phần động từ của lời nói và muốn trích xuất tương tự.

Do đó, hãy chỉ định phần phát biểu mà chúng tôi quan tâm bằng cách sử dụng cụm từ thông dụng bắt buộc như sau:

văn bản: {}

tokenized = nltk.sent_tokenize (sample_text) for i in tokenized: words = nltk.word_tokenize (i) # print (words) tagged_words = nltk.pos_tag (words) # print (tagged_words) chunkGram = r "" "VB: {}" "" chunkParser = nltk.RegexpParser (chunkGram) chunked = chunkParser.parse (tagged_words) chunked.draw ()

Biểu thức chính quy (RE) được đặt trong dấu ngoặc nhọn (), lần lượt được đặt trong dấu ngoặc nhọn ({và}).

LƯU Ý: Chỉ định RE theo POS yêu cầu

VB là viết tắt của động từ POS. Dấu chấm nối tiếp VB có nghĩa là khớp với bất kỳ ký tự nào theo sau VB. Dấu chấm hỏi sau dấu chấm chỉ định rằng bất kỳ ký tự nào sau B chỉ được xuất hiện một lần hoặc hoàn toàn không được xuất hiện. Tuy nhiên, từ bảng mà chúng ta đã thấy trước đó, ký tự này là tùy chọn. Chúng tôi đã định khung cụm từ thông dụng theo cách này bởi vì, trong NLTK, các cụm động từ bao gồm các thẻ POS sau:

POS

Ý nghĩa

VB

Động từ ở dạng cơ sở của nó

VBĐD

động từ ở thì quá khứ của nó

GBV

động từ ở thì hiện tại của nó

VBN

động từ ở dạng quá khứ phân từ

VBP

Động từ ở thì hiện tại nhưng không ở ngôi thứ ba số ít

VBZ

Động từ ở thì hiện tại và ở ngôi thứ ba số ít

Do đó, các cụm động từ có thể thuộc bất kỳ POS nào ở trên. Đó là lý do tại sao biểu thức chính quy được đóng khung là VB.? trong đó bao gồm tất cả các loại trên. Gói RegexpParser được sử dụng để kiểm tra xem một máy POS có đáp ứng mô hình yêu cầu của chúng tôi mà chúng tôi đã đề cập bằng cách sử dụng RE trước đó hay không.

Toàn bộ mã có thể được nhìn thấy như sau:

import nltk nltk.download ('Averageged_perceptron_tagger') sample_text = "" "Rama đã giết Ravana để cứu Sita khỏi Lanka. Truyền thuyết về Ramayan là sử thi nổi tiếng nhất của Ấn Độ. Rất nhiều bộ phim và phần tiếp theo đã được quay bằng nhiều thứ tiếng ở đây ở Ấn Độ dựa trên Ramayana. "" "tokenized = nltk.sent_tokenize (sample_text) for i in tokenized: words = nltk.word_tokenize (i) # print (words) tagged_words = nltk.pos_tag (words) # print (tagged_words) chunkGram = r "" "VB: {}" "" chunkParser = nltk.RegexpParser (chunkGram) chunked = chunkParser.parse (tagged_words) chunked.draw ()

Kết quả

kết quả phân khúc
kết quả phân khúc

Cuối cùng, chúng ta có được một dạng cây của POS của các từ cùng với các từ có POS khớp với RE đã cho. Ảnh chụp nhanh của kết quả thu được cho văn bản mẫu mà chúng tôi chuyển qua có thể được nhìn thấy trong các hình trên.

Quan sát rằng các từ đáp ứng RE cho riêng cụm động từ của chúng ta được đánh dấu rõ ràng trong đầu ra. Do đó, việc phân chia các cụm động từ đã được thực hiện thành công.

Hy vọng bạn thấy bài viết của tôi hữu ích.

Cảm ơn bạn!

dự án

1. Triển khai phân khúc bằng Python

2. Lý thuyết đằng sau phân khúc

3. Danh sách đầy đủ các POS có sẵn trong NLP

Về tôi

Tôi là Nithyashree V, sinh viên năm cuối Khoa học máy tính và Kỹ thuật BTech. Tôi thích học những công nghệ tuyệt vời như vậy và áp dụng chúng vào thực tế, đặc biệt là quan sát cách chúng giúp chúng tôi giải quyết các vấn đề thách thức của xã hội. Các lĩnh vực tôi quan tâm bao gồm Trí tuệ nhân tạo, Khoa học dữ liệu và Xử lý ngôn ngữ tự nhiên.

Đây là hồ sơ LinkedIn của tôi: LinkedIn của tôi

Bạn có thể đọc các bài viết khác của tôi về Analytics Vidhya từ tại đây.

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định riêng của Tác giả.

Nguồn: https://www.analyticsvidhya.com/blog/2021/10/what-is-chunking-in-natural-language-processing/

Dấu thời gian:

Thêm từ Phân tích Vidhya