Logo Zephyrnet

Hướng dẫn NLP Phần II: Trích xuất tính năng

Ngày:

Bài báo này đã được xuất bản như một phần của Blogathon Khoa học Dữ liệu.

Này mọi người!

Chào mừng bạn đến với loạt bài NLP từ số XNUMX đến nâng cao về phân tích Vidhya, nơi chúng tôi đề cập đến tất cả các chủ đề NLP từ cấp độ sơ cấp đến nâng cao.

Trong bài trước, chúng ta đã xem các kỹ thuật xử lý văn bản khác nhau với các ví dụ. Nếu bạn chưa đọc ở đây là liên kết.

Chúng tôi có thể làm sạch dữ liệu thô và có thể lấy dữ liệu văn bản đã được làm sạch. bây giờ là lúc để thực hiện bước thứ hai.

NLP Tutorials Trích xuất tính năng
                                                                                                 nguồn: Trung bình

Mục lục

  1. Khai thác tính năng
  2. Mô hình Bag of Word
  3. khái niệm về n-gam
  4. Đếm phương pháp Vectorizer
  5. TF-IDF
  6. Nhúng từ với mã python

Tất cả các chủ đề đều được giải thích chi tiết bằng mã và hình ảnh python.

Kỹ thuật tính năng là một phần rất quan trọng của Xử lý ngôn ngữ tự nhiên. như chúng ta đều biết các thuật toán và máy móc không thể hiểu các ký tự hoặc từ hoặc câu, do đó chúng ta cần mã hóa những từ này thành một số dạng số cụ thể để tương tác với các thuật toán hoặc máy móc. chúng tôi không thể cung cấp dữ liệu văn bản có chứa từ / câu / ký tự vào mô hình học máy.

Có nhiều cách khác nhau để thực hiện trích xuất đối tượng địa lý. một số phổ biến và được sử dụng nhiều nhất là: -

  1. Mô hình Bag of Words
  2. TF-IDF

1. Mô hình Bag of Words (BOW)

Đây là mô hình đơn giản nhất, Hình ảnh một câu dưới dạng một túi từ ở đây Ý tưởng là lấy toàn bộ dữ liệu văn bản và đếm tần suất xuất hiện của chúng. và ánh xạ các từ với tần suất của chúng. Phương pháp này không quan tâm đến thứ tự của các từ, nhưng nó quan tâm đến số lần một từ xuất hiện và mô hình túi từ mặc định xử lý tất cả các từ như nhau.

NLP Tutorials Trích xuất tính năng
Nguồn: Tác giả

Vectơ đặc trưng sẽ có cùng độ dài từ. Các từ xuất hiện nhiều lần sẽ có trọng số cao hơn khiến mô hình này bị sai lệch, điều này đã được khắc phục với TF-IDF sẽ được thảo luận thêm.

Triển khai mô hình BOW bằng Python:

sklearn cung cấp tất cả các kỹ thuật trích xuất tính năng cần thiết với việc thực hiện dễ dàng.

! pip install sklearn nhập sklearn từ sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer ()

Nhập khẩu ĐếmVectorizer để thực hiện mô hình Túi từ.

text = ["tôi yêu NLP", "NLP là tương lai", "tôi sẽ học trong 2 tháng"] vectorizer = CountVectorizer () count_matrix = vectorizer.fit_transform (text) count_array = count_matrix.toarray () df = pd.DataFrame ( data = count_array, cột = vectorizer.get_feature_names ()) print (df)
NLP Tutorials Trích xuất tính năng
Nguồn: Tác giả
  • phương pháp fit_transform()trước tiên phù hợp với dữ liệu vào countVectorizer và sau đó chuyển đổi nó thành các tính năng
  • phương pháp get_features_name() trả lại vốn từ vựng của các từ duy nhất.
  • một khi countVectorizer đã được trang bị, nó sẽ không cập nhật Túi từ.
  • stopwords chúng ta có thể chuyển một danh sách các từ dừng hoặc chỉ định tên ngôn ngữ tức là {'english'} để loại trừ các từ dừng khỏi từ vựng.

Sau khi lắp countVectorizer, chúng ta có thể chuyển đổi bất kỳ văn bản nào thành từ vựng phù hợp.

text2 = ['Tôi yêu NLP nhưng không thể học trong 2 tháng'] vectorizer.transform (text2) .toarray ()
Đầu ra
Nguồn: Tác giả

Trong ví dụ trên về mô hình BOW, mỗi từ được coi là một đặc điểm nhưng có một số vấn đề với mô hình này.

Ví dụ: giả sử rằng chúng ta có từ “không tệ” và nếu chúng ta tách từ này thành “không phải” và “xấu” thì nó sẽ mất đi ý nghĩa của nó. "Không tệ" tương tự như "tốt" ở một mức độ nào đó. chúng tôi không muốn tách những từ như vậy sẽ mất ý nghĩa của chúng sau khi tách. đây là ý tưởng về n-gam đi vào hình ảnh

  • Unigrams là những từ duy nhất duy nhất trong một câu
  • Bigrams là sự kết hợp của 2 từ tức là "không tệ", "tắt".
  • Bát quái là sự kết hợp của 3 từ.

trong khi triển khai mô hình BOW bằng CounVectorizer, chúng ta có thể đưa n-gram vào từ vựng bằng cách sử dụng ngram_range tham số.

Thực hiện mô hình BOW với n-gram:

  • ngram_range =(1, 1) chỉ có nghĩa là đơn vị tính,
  • ngram_range = (1, 2) có nghĩa là unigram với bigram
  • ngram_range=(2, 2) có nghĩa là chỉ bigram.
text = ["food was not bad"] vectorizer = CountVectorizer (ngram_range = (1,2)) count_matrix = vectorizer.fit_transform (text) count_array = count_matrix.toarray () df = pd.DataFrame (data = count_array, column = vectorizer .get_feature_names ()) print (df)
Đầu ra 2
Nguồn: Tác giả

2. TF-IDF (Tần suất tài liệu nghịch đảo tần số thuật ngữ)

Mô hình BOW không cho kết quả tốt vì nó có một nhược điểm. Giả sử rằng có một từ cụ thể xuất hiện trong tất cả các tài liệu và nó xuất hiện nhiều lần, cuối cùng, nó sẽ có tần suất xuất hiện cao hơn và nó sẽ có giá trị lớn hơn khiến cho một từ cụ thể có trọng số hơn trong câu. , điều đó không tốt cho phân tích của chúng tôi.

Ý tưởng của TF-IDF là phản ánh tầm quan trọng của một từ đối với tài liệu hoặc câu của nó bằng cách chuẩn hóa các từ thường xuất hiện trong bộ sưu tập tài liệu.

Tần suất thuật ngữ (TF): số lần một thuật ngữ đã xuất hiện trong tài liệu.

Tần suất thuật ngữ là thước đo mức độ thường xuyên hoặc mức độ phổ biến của một từ đối với một câu nhất định.

Tần suất tài liệu nghịch đảo (IDF):

Tần suất tài liệu nghịch đảo (IDF) là thước đo mức độ hiếm của một từ trong tài liệu. Các từ như “the”, “a” hiển thị trong tất cả các tài liệu nhưng các từ hiếm sẽ không xuất hiện trong tất cả các tài liệu của ngữ liệu.

Nếu một từ xuất hiện trong hầu hết mọi tài liệu có nghĩa là từ đó không có ý nghĩa đối với việc phân loại.

IDF của một từ là = log (N / n)

  • N: tổng số tài liệu.
  • n: số lượng tài liệu chứa một thuật ngữ (từ)

TF-IDF Đánh giá mức độ liên quan của một từ với câu của nó trong một tập hợp các câu hoặc tài liệu.

Triển khai TF-IDF với python:

Với Tfidftransformer, bạn sẽ tính toán số lượng từ bằng CountVectorizer và sau đó tính toán các giá trị IDF và chỉ sau đó tính điểm Tf-IDF. Với Tfidfvectorizer, chúng tôi thực hiện tất cả các phép tính trong một bước.

sklearn cung cấp 2 lớp để triển khai TF-IDF:

  • Tfidftransformer trong đó chúng ta cần tính số lượng từ sau đó tính giá trị IDF và sau đó tính điểm TF-IDF.
  • Tfidfvectorizer ở đây tất cả các bước được thực hiện trong một bước duy nhất.

Nhập thư viện :

nhập gấu trúc nhập sklearn dưới dạng pd từ sklearn.feature_extraction.text import TfidfVectorizer

Thực hiện :

text = ["tôi yêu NLP", "NLP là tương lai", "tôi sẽ học NLP"] vectorizer = TfidfVectorizer () matrix = vectorizer.fit_transform (text) count_array = matrix.toarray () df = pd.DataFrame (data = count_array, column = vectorizer.get_feature_names ()) print (df)
Thực hiện
Nguồn: Tác giả

“NLP”, “the” có trong cả ba tài liệu do đó nó có giá trị vectơ nhỏ hơn. "Love" có giá trị vectơ cao hơn vì nó chỉ xuất hiện một lần trong tài liệu.

3. Nhúng từ

Hãy tưởng tượng tôi có 2 từ “love” và “like”, hai từ này có nghĩa gần như tương tự nhau nhưng theo mô hình TF-IDF và BOW thì hai từ này sẽ có giá trị tính năng riêng biệt và 2 từ này sẽ được đối xử hoàn toàn khác nhau.

Mô hình TF-IDF, BOW hoàn toàn phụ thuộc vào tần suất xuất hiện, nó không xem xét nghĩa của từ, do đó các kỹ thuật đã thảo luận ở trên không nắm bắt được ngữ cảnh và ý nghĩa của câu.

"tôi thích bạn"Và"Tôi yêu bạn”Sẽ có các vectơ đặc trưng hoàn toàn khác nhau theo mô hình TF-IDF và BOW, nhưng điều đó không chính xác.

lưu ý: trong khi làm việc với một số nhiệm vụ phân loại, chúng tôi sẽ có dữ liệu thô lớn và nếu chúng tôi tiếp tục coi mọi từ đồng nghĩa là một từ khác nhau, nó sẽ tạo ra một số lượng lớn mã thông báo và điều này sẽ khiến số lượng tính năng vượt ra ngoài tầm kiểm soát.

Nhúng từ là một kỹ thuật học tính năng trong đó các từ được ánh xạ tới vectơ bằng cách sử dụng hệ thống phân cấp theo ngữ cảnh của chúng. các từ tương tự sẽ có các vectơ đặc trưng giống hệt nhau.

Từ nhúng
nguồn

Như bạn nhận thấy, mèokitten được đặt rất chặt chẽ vì chúng có liên quan với nhau.

nhúng từ được đào tạo trên hơn 6 tỷ từ sử dụng mạng nơ ron nông.

word2vec có 2 thuật toán

  • CBOW
  • Bỏ qua Gram

đừng lo lắng, chúng tôi không cần đào tạo word2vec, chúng tôi sẽ sử dụng các vectơ từ đã được đào tạo trước.

Triển khai word2vec bằng python:

Vectơ từ được đào tạo trước là một tệp văn bản chứa hàng tỷ từ với các vectơ của chúng. chúng ta chỉ cần ánh xạ các từ từ dữ liệu của mình với các từ trong vector từ để có được các vectơ.

Triển khai word2vec bằng python
Nguồn: Kaggle

bạn có thể tải xuống tệp vector từ hoặc bạn có thể tạo sổ tay bằng cách sử dụng Link.

Đầu ra 3

Nguồn: Kaggle

Tệp vector từ được đào tạo trước có kích thước (50,100,200,300). ở đây thứ nguyên là độ dài của vectơ của mỗi từ trong không gian vectơ. nhiều thứ nguyên hơn có nghĩa là nhiều thông tin hơn về từ đó nhưng thứ nguyên lớn hơn sẽ mất nhiều thời gian hơn cho việc đào tạo mô hình.

1. Tải nhúng từ găng 100 kích thước vào từ điển:

import numpy as np glove_vectors = dict () file = open ('../ input / glove6b / glove.6B.100d.txt', encoding = 'utf-8') cho dòng trong tệp: giá trị = line.split () word = giá trị [0] vectors = np.asarray (giá trị [1:]) glove_vectors [word] = vectors file.close ()

Từ điển Python giúp ánh xạ dễ dàng do đó việc tải vào từ điển luôn được ưu tiên.

  • chúng ta có thể sử dụng get() phương pháp để glove_vectors để lấy các vectơ
glove_vectors.get ('nhà')
Đầu ra 4 | NLP Tutorials Trích xuất tính năng
Nguồn: Tác giả
Đầu ra 5
Nguồn: Tác giả

chúng tôi chia các vectơ cho số từ trong câu / tài liệu cụ thể đó cho mục đích chuẩn hóa.

2. Tạo một hàm nhận mọi câu và trả về các vectơ từ:

vec_dimension = 100 def get_vec (x): arr = np.zeros (vec_dimension) text = str (x) .split () for t in text: try: vec = glove_vectors.get (t) .astype (float) arr = arr + vec ngoại trừ: pass arr = arr.reshape (1, -1) [0] return (arr / len (text))

tài liệu:

x = ['I love you', "I love NLP và tôi sẽ cố gắng học hỏi", "this is word embedding"] features = get_vec (x) features
Chức năng | NLP Tutorials Trích xuất tính năng
Nguồn: Tác giả

Những con số này là các đặc điểm của tài liệu x, độ dài của các đối tượng là 100 vì chúng tôi đã sử dụng 100 kích thước.

tải xuống noteboo

Ghi chú cuối

Trong bài viết này, chúng ta đã xem các kỹ thuật trích xuất các tính năng khác nhau. chúng tôi đã thảo luận về Ý tưởng của Bag of Words và vấn đề với mô hình BOW, sau đó chúng tôi thấy khái niệm về n-gram và cách sử dụng n-gram trong mô hình BOW trong python. chúng tôi đã thảo luận về mô hình TF-IDF và sau đó thảo luận về Nhúng từ sử dụng các tính năng được đào tạo trước trong python.

Tất cả các kỹ thuật trích xuất tính năng này dễ dàng có sẵn trong gói sklearn. cho từ nhúng, chúng ta có thể sử dụng các tính năng word2vec được đào tạo trước như chúng ta đã thảo luận.

Trong phần tiếp theo, chúng ta sẽ thấy tính năng trích xuất trong action. chúng tôi sẽ đào tạo một mô hình học máy có thể phân loại các email Spam.

Nếu bạn có bất kỳ đề xuất hoặc thắc mắc nào cho tôi, hãy viết thư cho tôi trên Linkedin.

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/2022/01/nlp-tutorials-part-ii-feature-extraction/

tại chỗ_img

Tin tức mới nhất

tại chỗ_img