Bắt nguồn và bổ ngữ trong Python NLTK với các ví dụ

⚡ Tóm tắt thông minh

Stemming và Lemmatization là các kỹ thuật chuẩn hóa văn bản trong Python NLTK (Non-Low-Left Language Techniques) giảm thiểu các biến thể từ ngữ về một gốc từ chung, trong đó quá trình rút gọn từ (stemm) loại bỏ hậu tố nhanh chóng mà không cần ngữ cảnh, còn quá trình chuẩn hóa từ (lemmatization) trả về một từ đúng nghĩa trong từ điển.

  • 🌱 Nhét đầy: Công cụ PorterStemmer cắt bỏ các hậu tố để tìm ra gốc từ, ngay cả khi đó không phải là một từ có thật.
  • 📚 Bổ sung: WordNetLemmatizer trả về dạng cơ bản của từ điển, được gọi là lemma.
  • ⚖️ Sự khác biệt: Phương pháp rút gọn từ (stemming) nhanh hơn, phương pháp chuẩn hóa từ (lemmatization) chậm hơn nhưng chính xác hơn và có tính đến ngữ cảnh.
  • 🔤 Bình thường hóa: Cả hai đều làm giảm mật độ từ để máy móc coi các biến thể là một đặc điểm duy nhất.
  • 🏷️ Thẻ POS: Việc truyền thẻ loại từ giúp bộ phân tích từ gốc chính xác hơn nhiều.
  • 🤖 Lợi ích của AI: Văn bản được chuẩn hóa và làm sạch hơn sẽ tạo ra các đặc trưng và mô hình học máy mạnh mẽ hơn.

Bắt nguồn và bổ ngữ trong Python NLTK

Bắt nguồn và bổ ngữ trong Python NLTK?

Lập trình và bổ sung in Python NLTK là các kỹ thuật chuẩn hóa văn bản dành cho Xử lý Ngôn ngữ Tự nhiên. Các kỹ thuật này được sử dụng rộng rãi trong tiền xử lý văn bản. Sự khác biệt giữa stemming và lemmatization là stemming nhanh hơn vì nó cắt các từ mà không cần biết ngữ cảnh, trong khi lemmatization chậm hơn vì nó biết ngữ cảnh của từ trước khi xử lý.

Xuất phát là gì?

Xuất phát là một phương pháp chuẩn hóa từ trong Xử lý ngôn ngữ tự nhiênĐây là một kỹ thuật trong đó một tập hợp các từ trong câu được chuyển đổi thành một chuỗi để rút ngắn quá trình tra cứu. Trong phương pháp này, các từ có cùng nghĩa nhưng có một số biến thể tùy thuộc vào ngữ cảnh hoặc câu được chuẩn hóa. Nói cách khác, có một từ gốc, nhưng có nhiều biến thể của cùng một từ. Ví dụ, từ gốc là “eat” và các biến thể của nó là “eats”, “eating”, “eated”, v.v. Tương tự như vậy, với sự trợ giúp của Stemming trong... PythonChúng ta có thể tìm ra từ gốc của bất kỳ biến thể nào.

Ví dụ:

He was riding.
He was taking the ride.

Trong hai câu trên, nghĩa của chúng đều giống nhau, tức là một hoạt động cưỡi ngựa trong quá khứ. Con người có thể dễ dàng hiểu rằng cả hai nghĩa đều giống nhau. Nhưng đối với máy móc, cả hai câu đều khác nhau. Do đó, việc chuyển đổi chúng thành cùng một hàng dữ liệu trở nên khó khăn. Nếu chúng ta không cung cấp cùng một tập dữ liệu, thì máy sẽ không thể dự đoán được. Vì vậy, cần phải phân biệt nghĩa của từng từ để chuẩn bị tập dữ liệu cho máy học. Ở đây, phương pháp rút gọn từ (stemming) được sử dụng để phân loại các dữ liệu cùng loại bằng cách lấy từ gốc của chúng.

Chúng ta hãy thực hiện điều này bằng một Python chương trình. NLTK có một thuật toán tên là PorterStemmerThuật toán này chấp nhận danh sách các từ đã được phân tách thành các từ nhỏ (tokenized words) và rút gọn chúng thành các từ gốc (root words).

Chương trình tìm hiểu về gốc cây

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Đầu ra:

wait
wait
wait
wait

Code Giải thích:

  • Trong NLTK có một mô-đun xử lý gốc từ cần được nhập khẩu. Nếu nhập khẩu toàn bộ mô-đun, chương trình sẽ trở nên nặng nề vì nó chứa hàng nghìn dòng mã. Vì vậy, từ toàn bộ mô-đun xử lý gốc từ, chúng ta chỉ nhập khẩu "PorterStemmer".
  • Chúng tôi đã chuẩn bị một danh sách giả về dữ liệu biến thể của cùng một từ.
  • Một đối tượng được tạo ra thuộc về lớp nltk.stem.porter.PorterStemmer.
  • Chúng tôi đã chuyển từng từ một vào PorterStemmer bằng vòng lặp “for”. Cuối cùng, chúng tôi nhận được từ gốc của mỗi từ được đề cập trong danh sách.

Như đã trình bày ở trên, việc rút gọn từ (stemming) là một bước tiền xử lý quan trọng vì nó loại bỏ sự dư thừa và các biến thể trong cùng một từ. Kết quả là dữ liệu được lọc, giúp ích cho việc huấn luyện máy tốt hơn. Bây giờ chúng ta sẽ đưa vào một câu hoàn chỉnh và kiểm tra kết quả đầu ra.

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Đầu ra:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code Giải thích:

  • Gói PorterStemmer được nhập từ mô-đun stem.
  • Các gói dùng để phân tách câu và từ được nhập khẩu.
  • Một câu được viết sẽ được mã hóa trong bước tiếp theo.
  • Một đối tượng cho PorterStemmer được tạo ở đây.
  • Một vòng lặp được chạy và quá trình rút gọn từ (stemming) của mỗi từ được thực hiện bằng cách sử dụng đối tượng được tạo ở dòng mã số 5.

Tóm lại, stemming là một mô-đun tiền xử lý dữ liệu. Tiếng Anh có nhiều biến thể của cùng một từ, tạo ra sự mơ hồ trong quá trình huấn luyện và dự đoán của máy học. Để xây dựng một mô hình thành công, việc lọc các từ như vậy vào cùng một chuỗi dữ liệu bằng cách sử dụng stemming là rất quan trọng. Điều này cũng được gọi là chuẩn hóa.

Lemmatization là gì?

Bổ sung Trong NLTK, quá trình tìm kiếm từ gốc (lemma) dựa trên nghĩa và ngữ cảnh của từ được gọi là lemma. Lemmatization thường đề cập đến phân tích hình thái học của từ, nhằm mục đích loại bỏ các hậu tố biến tố. Nó giúp trả về dạng gốc hoặc dạng từ điển của một từ, được gọi là lemma. Phương pháp Lemmatization của NLTK dựa trên hàm morph tích hợp sẵn của WordNet. Xử lý trước văn bản bao gồm cả stemming và lemmatization. Nhiều người thấy hai thuật ngữ này dễ gây nhầm lẫn. Một số người coi chúng là giống nhau, nhưng thực tế có sự khác biệt giữa stemming và lemmatization. Lemmatization được ưu tiên hơn so với stemming vì lý do dưới đây.

Tại sao Lemmatization tốt hơn Stemming?

Thuật toán rút gọn từ (stemming) hoạt động bằng cách cắt bỏ hậu tố khỏi từ. Nói rộng hơn, nó cắt bỏ phần đầu hoặc phần cuối của từ. Ngược lại, phép chuẩn hóa từ (lemmatization) là một thao tác mạnh mẽ hơn, nó xem xét đến phân tích hình thái học của từ. Nó trả về dạng gốc (lemma), là dạng cơ bản của tất cả các dạng biến thể của từ. Kiến thức ngôn ngữ học chuyên sâu là cần thiết để tạo ra từ điển và tìm kiếm dạng đúng của từ. Rút gọn từ là một thao tác tổng quát, trong khi chuẩn hóa từ là một thao tác thông minh, trong đó dạng đúng được tra cứu trong từ điển. Do đó, chuẩn hóa từ giúp hình thành từ điển tốt hơn. học máy tính năng.

Code để phân biệt giữa Lemmatization và Stemming

Xuất phát Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

Đầu ra:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Bổ sung Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

Đầu ra:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Thảo luận về đầu ra

Nếu bạn xem xét việc rút gọn từ (stemming) cho "studies" và "studying", kết quả đầu ra là giống nhau (studi), nhưng bộ phân tích từ gốc NLTK lại cung cấp một từ gốc khác nhau cho cả hai từ: "study" cho "studies" và "studying" cho "studying". Vì vậy, khi cần tạo một tập hợp đặc trưng để huấn luyện máy, sẽ rất tốt nếu việc phân tích từ gốc được ưu tiên hơn.

Trường hợp sử dụng Lemmatizer

Công cụ Lemmatizer giảm thiểu sự mơ hồ trong văn bản. Các từ như bicycle hoặc bicycles được chuyển đổi thành từ gốc bicycle. Nó chuyển đổi tất cả các từ có cùng nghĩa nhưng cách viết khác nhau về dạng gốc, giảm mật độ từ và giúp...ping Chuẩn bị các đặc trưng chính xác để huấn luyện máy. Dữ liệu càng sạch, mô hình học máy của bạn càng chính xác. Công cụ NLTK Lemmatizer cũng giúp tiết kiệm bộ nhớ và chi phí tính toán.

Ví dụ thực tế minh họa việc sử dụng tính năng chuẩn hóa từ gốc (Lemmatization) và gắn thẻ từ loại (POS Tagging) của WordNet trong... Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Đầu ra:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code Giải thích:

  • Công cụ đọc ngữ liệu wordnet được nhập khẩu, và WordNetLemmatizer được nhập khẩu từ wordnet.
  • Việc phân tách từ và gắn thẻ từ loại được nhập từ nltk, còn từ điển mặc định được lấy từ các bộ sưu tập.
  • Một từ điển được tạo ra trong đó chữ cái đầu tiên của pos_tag là khóa, được ánh xạ tới giá trị từ từ điển wordnet.
  • Văn bản được viết và phân tách thành các từ, và đối tượng lemma_function được tạo ra để sử dụng bên trong vòng lặp.
  • Vòng lặp được chạy và hàm lemmatize nhận hai đối số: token và một map.ping của pos_tag với giá trị wordnet.

Python Việc chuẩn hóa thành từ vựng có mối liên hệ mật thiết với... Từ điển WordNetVì vậy, việc nghiên cứu chủ đề đó tiếp theo là rất cần thiết.

Câu Hỏi Thường Gặp

Bộ lọc gốc từ Porter là lớp PorterStemmer của NLTK. Nó áp dụng thao tác loại bỏ hậu tố.ping Các quy tắc từ thuật toán năm 1980 của Martin Porter nhằm rút gọn các từ tiếng Anh về dạng gốc, vì vậy “waiting,” “waited,” và “waits” đều trở thành “wait.”

Hãy sử dụng phương pháp rút gọn từ (stemming) khi tốc độ và sự đơn giản quan trọng hơn khả năng đọc hiểu, chẳng hạn như lập chỉ mục tìm kiếm, phân tích cảm xúc quy mô lớn hoặc giảm số lượng đặc trưng. Chọn phương pháp chuẩn hóa từ (lemmatization) khi kết quả đầu ra phải là một từ hợp lệ, dễ đọc đối với con người.

Chuẩn hóa văn bản chuyển đổi các dạng khác nhau của một từ thành một dạng biểu diễn chung. Rút gọn từ và chuẩn hóa từ là hai kỹ thuật chuẩn hóa giúp giảm mật độ từ, sao cho mô hình coi các biến thể như “study” và “studies” là một đặc điểm duy nhất.

NLTK cung cấp PorterStemmer (và các công cụ rút gọn từ khác như Snowball) để rút gọn từ, và WordNetLemmatizer để chuẩn hóa từ. Công cụ chuẩn hóa từ dựa vào từ điển WordNet để trả về dạng gốc chính xác của mỗi từ.

Chúng loại bỏ các biến thể từ ngữ dư thừa, nhờ đó mô hình học máy sẽ thấy được các đặc trưng rõ ràng hơn, có chiều thấp hơn. Ít từ ngữ trùng lặp hơn đồng nghĩa với việc giảm thiểu sự mơ hồ trong quá trình huấn luyện và dự đoán chính xác hơn trên văn bản chưa từng thấy.

Các mô hình AI hiện đại tự động suy luận ngữ cảnh, nhưng WordNetLemmatizer của NLTK cần một thẻ từ loại để phân biệt nghĩa. Việc cung cấp thẻ đó cho phép nó chọn đúng từ gốc, ví dụ như chuyển "learning" thành "learn" khi được gắn thẻ là động từ.

Một từ có thể là danh từ hoặc động từ với các dạng gốc khác nhau. Nếu không có thẻ loại từ, WordNetLemmatizer sẽ mặc định đó là danh từ. Khi cung cấp thẻ chính xác, chẳng hạn như động từ hoặc tính từ, sẽ cho ra dạng gốc phù hợp.

Không. Việc rút gọn từ chỉ cắt bỏ hậu tố, vì vậy “studies” trở thành “studi” và “cries” trở thành “cri,” những từ này không hợp lệ. Ngược lại, việc chuẩn hóa từ luôn trả về một từ có nghĩa trong từ điển, ví dụ như “tudy.”

Tóm tắt bài viết này với: