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

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 cho Xử lý ngôn ngữ tự nhiên. Các kỹ thuật này được sử dụng rộng rãi để xử lý trước 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 biết ngữ cảnh, trong khi lemmatization chậm hơn vì nó biết ngữ cảnh của các 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. Đó 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 việc 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 theo ngữ cảnh hoặc câu sẽ được chuẩn hóa.

Nói cách khác, chỉ 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à “ăn” và các biến thể của nó là “ăn, ăn, ăn và thích như vậy”. Tương tự như vậy, với sự trợ giúp của Stemming in Python, chúng ta có thể tìm thấy 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 đều giống nhau, tức là 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 nó thành cùng một hàng dữ liệu trở nên khó khăn. Trong trường hợp chúng tôi không cung cấp cùng một tập dữ liệu thì máy sẽ không 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ị bộ dữ liệu cho machine learning. Và ở đây, tính từ gốc được sử dụng để phân loại cùng loại dữ liệu bằng cách lấy từ gốc của nó.

Hãy thực hiện điều này với một Python chương trình.NLTK có một thuật toán có tên là “PorterStemmer”. Thuật toán này chấp nhận danh sách từ được mã hóa và chuyển nó thành từ gốc.

Chương trình tìm hiểu về Stemming

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 

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

Giải thích mã:

  • Có một mô-đun gốc trong NLTk được nhập. Nếu bạn nhập mô-đun hoàn chỉnh thì chương trình sẽ trở nên nặng nề vì chứa hàng nghìn dòng mã. Vì vậy, từ toàn bộ mô-đun gốc, chúng tôi chỉ nhập “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 thuộc lớp nltk.stem.porter.PorterStemmer.
  • Hơn nữa, chúng tôi chuyển từng cái một cho PorterStemmer bằng vòng lặp “for”. Cuối cùng, chúng ta nhận được từ gốc đầu ra của từng từ được đề cập trong danh sách.

Từ cách giải thích trên, cũng có thể kết luận rằng bắt nguồn được coi là một bước tiền xử lý quan trọng vì nó loại bỏ sự dư thừa trong dữ liệu và các biến thể trong cùng một từ. Do đó, dữ liệu được lọc sẽ giúp đào tạo máy tốt hơn.

Bây giờ chúng ta chuyển một câu hoàn chỉnh và kiểm tra hành vi của nó dưới dạng đầu ra.

Chương trình:

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	 

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

Giải thích mã:

  • Gói PorterStemer được nhập từ gốc mô-đun
  • Các gói mã thông báo của câu cũng như từ được nhập
  • Một câu được viết sẽ được mã hóa trong bước tiếp theo.
  • Việc từ vựng hóa từ gốc mã thông báo được triển khai trong bước này.
  • Một đối tượng cho PorterStemmer được tạo ở đây.
  • Vòng lặp được chạy và việc cắt gốc mỗi từ được thực hiện bằng cách sử dụng đối tượng được tạo trong dòng mã 5

Kết luận:

Stemming là một mô-đun tiền xử lý dữ liệu. Ngôn ngữ tiếng Anh có nhiều biến thể của một từ. Những biến thể này tạo ra sự mơ hồ trong quá trình đào tạo và dự đoán về học máy. Để tạo một mô hình thành công, điều quan trọng là phải lọc những từ như vậy và chuyển đổi sang cùng loại dữ liệu được sắp xếp theo trình tự bằng cách sử dụng tính năng gốc. Ngoài ra, đây là một kỹ thuật quan trọng để lấy dữ liệu hàng từ một tập hợp câu và loại bỏ dữ liệu dư thừa còn được gọi là chuẩn hóa.

Lemmatization là gì?

Bổ sung trong NLTK là quá trình thuật toán tìm bổ đề của một từ tùy thuộc vào nghĩa và ngữ cảnh của nó. Lemmatization thường đề cập đến việc phân tích hình thái của các từ nhằm mục đích loại bỏ các kết thúc biến cách. Nó giúp trả về dạng cơ sở hoặc từ điển của một từ được gọi là bổ đề.

Phương pháp bổ đề NLTK dựa trên hàm hình thái tích hợp của WorldNet. Quá trình tiền xử lý văn bản bao gồm cả từ gốc cũng như từ vựng. Nhiều người thấy hai thuật ngữ này khó hiểu. Một số coi những điều này là giống nhau, nhưng có sự khác biệt giữa từ gốc và bổ ngữ. Lemmatization được ưa thích hơn trước đây vì lý do dưới đây.

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

Thuật toán bắt nguồn hoạt động bằng cách cắt hậu tố khỏi từ. Theo nghĩa rộng hơn, cắt đầu hoặc cuối của từ.

Ngược lại, Lemmatization là một hoạt động mạnh mẽ hơn và nó tính đến việc phân tích hình thái của các từ. Nó trả về bổ đề là dạng cơ sở của tất cả các dạng biến cách của nó. Cần có kiến ​​thức ngôn ngữ chuyên sâu để tạo từ điển và tìm kiếm dạng thích hợp của từ. Xuất phát là một thao tác chung trong khi từ vựng là một thao tác thông minh trong đó dạng thích hợp sẽ được tìm trong từ điển. Do đó, từ vựng hóa giúp hình thành tốt hơn học máy tính năng.

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

Mã gốc:

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

Mã bổ ngữ:

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 nguồn gốc cho nghiên cứu và nghiên cứu, thì đầu ra là như nhau (studi) nhưng công cụ bổ trợ NLTK cung cấp bổ đề khác nhau cho cả nghiên cứu mã thông báo cho nghiên cứu và nghiên cứu để nghiên cứu. Vì vậy, khi chúng ta cần tạo bộ tính năng cho máy huấn luyện, sẽ thật tuyệt nếu tính từ vựng được ưu tiên.

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

Lemmatizer giảm thiểu sự mơ hồ của văn bản. Các từ ví dụ như xe đạp hoặc xe đạp được chuyển đổi thành từ cơ sở xe đạp. Về cơ bản, nó sẽ chuyển đổi tất cả các từ có cùng nghĩa nhưng có cách biểu diễn khác nhau về dạng cơ sở của chúng. Nó làm giảm mật độ từ trong văn bản nhất định và giúp chuẩn bị các tính năng chính xác cho máy đào tạo. Dữ liệu càng sạch thì mô hình học máy của bạn càng thông minh và chính xác hơn. NLTK Lemmatizer cũng sẽ tiết kiệm bộ nhớ cũng như chi phí tính toán.

Ví dụ thời gian thực cho thấy việc sử dụng Wordnet Lemmatization và POS Tagging 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)

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

Giải thích mã

  • Đầu tiên, mạng từ của trình đọc kho ngữ liệu được nhập.
  • WordNetLemmatizer được nhập từ wordnet.
  • Mã thông báo từ cũng như các phần của thẻ lời nói được nhập từ nltk.
  • Từ điển mặc định được nhập từ bộ sưu tập.
  • Từ điển được tạo ra trong đó pos_tag (chữ cái đầu tiên) là các giá trị khóa có giá trị được ánh xạ với giá trị từ từ điển wordnet. Chúng tôi đã lấy chữ cái đầu tiên duy nhất vì chúng tôi sẽ sử dụng nó sau trong vòng lặp.
  • Văn bản được viết và được mã hóa.
  • Đối tượng lemma_function được tạo sẽ được sử dụng bên trong vòng lặp.
  • Vòng lặp được chạy và lemmatize sẽ lấy hai đối số, một là mã thông báo và đối số còn lại là ánh xạ của pos_tag với giá trị wordnet.

Đầu ra:

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

Python Lemmat hóa có mối quan hệ chặt chẽ với từ điển mạng từ, vì vậy việc nghiên cứu chủ đề này là cần thiết nên chúng tôi giữ nguyên chủ đề này làm chủ đề tiếp theo.

Bản tin Guru99 hàng ngày

Bắt đầu ngày mới của bạn với những tin tức AI mới nhất và quan trọng nhất hiện nay.