Hướng dẫn convert text to vector python - chuyển đổi văn bản sang vector python

Cập nhật lần cuối vào ngày 28 tháng 6 năm 2020

Dữ liệu văn bản yêu cầu chuẩn bị đặc biệt trước khi bạn có thể bắt đầu sử dụng nó để mô hình hóa dự đoán.

Văn bản phải được phân tích cú pháp để xóa các từ, được gọi là mã thông báo. Sau đó, các từ cần được mã hóa dưới dạng số nguyên hoặc giá trị điểm nổi để sử dụng làm đầu vào cho thuật toán học máy, được gọi là trích xuất tính năng (hoặc vector hóa).

Thư viện Scikit-LEARN cung cấp các công cụ dễ sử dụng để thực hiện cả mã thông báo và trích xuất tính năng dữ liệu văn bản của bạn.

Trong hướng dẫn này, bạn sẽ khám phá chính xác cách bạn có thể chuẩn bị dữ liệu văn bản của mình để mô hình hóa dự đoán trong Python với Scikit-learn.

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết:

  • Cách chuyển đổi văn bản thành các vectơ đếm từ với Countvectorizer.
  • Cách chuyển đổi văn bản thành các vectơ tần số từ với tfidfvectorizer.
  • Làm thế nào để chuyển đổi văn bản thành các số nguyên độc đáo với HasHingVectorizer.

Bắt đầu dự án của bạn với cuốn sách mới của tôi Deep Learning để xử lý ngôn ngữ tự nhiên, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ. with my new book Deep Learning for Natural Language Processing, including step-by-step tutorials and the Python source code files for all examples.

Bắt đầu nào.

Hướng dẫn convert text to vector python - chuyển đổi văn bản sang vector python

Cách chuẩn bị dữ liệu văn bản cho việc học máy với Scikit-Learnphoto của Martin Kelly, một số quyền được bảo lưu.
Photo by Martin Kelly, some rights reserved.

Mô hình túi của từ

Chúng tôi không thể làm việc với văn bản trực tiếp khi sử dụng thuật toán học máy.

Thay vào đó, chúng ta cần chuyển đổi văn bản thành các số.

Chúng tôi có thể muốn thực hiện phân loại các tài liệu, vì vậy mỗi tài liệu là một đầu vào của Google và một nhãn lớp là đầu ra của các loại đầu ra cho thuật toán dự đoán của chúng tôi. Các thuật toán lấy các vectơ số làm đầu vào, do đó chúng ta cần chuyển đổi tài liệu thành các vectơ có độ dài cố định của số.

Một mô hình đơn giản và hiệu quả để suy nghĩ về các tài liệu văn bản trong học máy được gọi là mô hình túi, hoặc cung.Bag-of-Words Model, or BoW.

Mô hình đơn giản ở chỗ nó vứt bỏ tất cả các thông tin đặt hàng trong các từ và tập trung vào sự xuất hiện của các từ trong một tài liệu.

Điều này có thể được thực hiện bằng cách gán cho mỗi từ một số duy nhất. Sau đó, bất kỳ tài liệu nào chúng ta thấy có thể được mã hóa dưới dạng một vectơ có độ dài cố định với độ dài của từ vựng của các từ đã biết. Giá trị trong mỗi vị trí trong vectơ có thể được lấp đầy bằng một số đếm hoặc tần số của mỗi từ trong tài liệu được mã hóa.

Đây là mô hình túi từ, nơi chúng tôi chỉ quan tâm đến các sơ đồ mã hóa đại diện cho những từ có mặt hoặc mức độ mà chúng có trong các tài liệu được mã hóa mà không có bất kỳ thông tin nào về trật tự.

Để biết thêm về mô hình túi từ, xem hướng dẫn:

  • Giới thiệu nhẹ nhàng về mô hình túi của các từ

Có nhiều cách để mở rộng phương pháp đơn giản này, cả bằng cách làm rõ rõ hơn về một từ ngữ là gì và trong việc xác định những gì sẽ mã hóa về từng từ trong vectơ.

Thư viện Scikit-learn cung cấp 3 sơ đồ khác nhau mà chúng tôi có thể sử dụng và chúng tôi sẽ xem xét ngắn gọn từng sơ đồ.

Cần trợ giúp về việc học sâu cho dữ liệu văn bản?

Tham gia khóa học gặp sự cố email 7 ngày miễn phí của tôi ngay bây giờ (với mã).

Nhấp để đăng ký và cũng nhận được phiên bản Ebook PDF miễn phí của khóa học.

Số lượng từ với Countvectorizer

CountVectorizer cung cấp một cách đơn giản để cả hai token hóa một bộ sưu tập các tài liệu văn bản và xây dựng một từ vựng của các từ đã biết, nhưng cũng để mã hóa các tài liệu mới bằng cách sử dụng từ vựng đó.

Bạn có thể sử dụng nó như sau:

  1. Tạo một thể hiện của lớp CountVectorizer.
  2. Gọi hàm FIT () để học từ vựng từ một hoặc nhiều tài liệu.
  3. Gọi hàm Transform () trên một hoặc nhiều tài liệu khi cần thiết để mã hóa mỗi tài liệu dưới dạng vectơ.

Một vectơ được mã hóa được trả về với chiều dài của toàn bộ từ vựng và số nguyên cho số lần mỗi từ xuất hiện trong tài liệu.

Bởi vì các vectơ này sẽ chứa rất nhiều số không, chúng tôi gọi chúng là thưa thớt. Python cung cấp một cách hiệu quả để xử lý các vectơ thưa thớt trong gói scipy.sparse.

Các vectơ được trả về từ một cuộc gọi đến Transform () sẽ là các vectơ thưa thớt và bạn có thể chuyển đổi chúng trở lại các mảng numpy để xem và hiểu rõ hơn những gì đang diễn ra bằng cách gọi hàm torray ().

Dưới đây là một ví dụ về việc sử dụng CountVectorizer để mã hóa, xây dựng từ vựng và sau đó mã hóa một tài liệu.

từ sklearn.feature_extraction.text nhập Countvectorizersklearn.feature_extraction.text import CountVectorizer

# Danh sách các tài liệu văn bản

Text = ["Con cáo màu nâu nhanh đã nhảy qua con chó lười biếng."]=["The quick brown fox jumped over the lazy dog."]

# Tạo biến đổi

vectorizer=CountVectorizer()= CountVectorizer()

# tokenize và xây dựng từ vựng

vectorizer.fit(text).fit(text)

# Tóm tắt

print(vectorizer.vocabulary_)(vectorizer.vocabulary_)

# mã hóa tài liệu

vector=vectorizer.transform(text)= vectorizer.transform(text)

# Tóm tắt vectơ được mã hóa

print(vector.shape)(vector.shape)

print(type(vector))(type(vector))

print(vector.toarray())(vector.toarray())

Ở trên, bạn có thể thấy rằng chúng tôi truy cập từ vựng để xem chính xác những gì đã được mã hóa bằng cách gọi:

print(vectorizer.vocabulary_)(vectorizer.vocabulary_)

Chúng ta có thể thấy rằng tất cả các từ đã được tạo ra theo mặc định theo mặc định và dấu câu đã bị bỏ qua. Những điều này và các khía cạnh khác của mã thông báo có thể được cấu hình và tôi khuyến khích bạn xem xét tất cả các tùy chọn trong tài liệu API.

Chạy ví dụ đầu tiên in từ vựng, sau đó hình dạng của tài liệu được mã hóa. Chúng ta có thể thấy rằng có 8 từ trong từ vựng, và do đó các vectơ được mã hóa có độ dài 8.

Sau đó chúng ta có thể thấy rằng vectơ được mã hóa là một ma trận thưa thớt. Cuối cùng, chúng ta có thể thấy một phiên bản mảng của vectơ được mã hóa hiển thị số lượng 1 lần xuất hiện cho mỗi từ ngoại trừ (ID và ID 7) có sự xuất hiện là 2.

{'Dog': 1, 'Fox': 2, 'Over': 5, 'Brown': 0, 'Quick': 6, 'The': 7, 'Lazy': 4, 'nhảy': 3}

(1, 8)

[[1 1 1 1 1 1 1 2]]

Điều quan trọng, cùng một vectorizer có thể được sử dụng trên các tài liệu có chứa các từ không có trong từ vựng. Những từ này bị bỏ qua và không có số lượng nào được đưa ra trong vectơ kết quả.

Ví dụ: bên dưới là một ví dụ về việc sử dụng vectorizer ở trên để mã hóa một tài liệu có một từ trong từ vựng và một từ không.

# mã hóa một tài liệu khác

Text2 = ["Con chó con"]=["the puppy"]

vector=vectorizer.transform(text2)=vectorizer.transform(text2)

print(vector.toarray())(vector.toarray())

Chạy ví dụ này in phiên bản mảng của vectơ thưa thớt được mã hóa hiển thị một lần xuất hiện của một từ trong từ vựng và từ còn lại không có trong từ vựng hoàn toàn bị bỏ qua.

Các vectơ được mã hóa sau đó có thể được sử dụng trực tiếp với thuật toán học máy.

Tần số từ với tfidfvector

Số lượng từ là một điểm khởi đầu tốt, nhưng rất cơ bản.

Một vấn đề với số lượng đơn giản là một số từ như là The The The The sẽ xuất hiện nhiều lần và số lượng lớn của chúng sẽ không có ý nghĩa rất có ý nghĩa trong các vectơ được mã hóa.

Một giải pháp thay thế là tính toán các tần số từ và cho đến nay, phương pháp phổ biến nhất được gọi là TF-idf. Đây là một từ viết tắt hơn là viết tắt của tần số thuật ngữ của người Viking - Tần số tài liệu nghịch đảo là các thành phần của điểm số kết quả được gán cho mỗi từ.

  • Tần suất thuật ngữ: Điều này tóm tắt tần suất một từ nhất định xuất hiện trong một tài liệu.: This summarizes how often a given word appears within a document.
  • Tần suất tài liệu nghịch đảo: Các từ thu hẹp này xuất hiện rất nhiều trên các tài liệu.: This downscales words that appear a lot across documents.

Không đi vào toán học, TF-idf là điểm số tần số từ cố gắng làm nổi bật các từ thú vị hơn, ví dụ: Thường xuyên trong một tài liệu nhưng không phải trên các tài liệu.

TfidFvectorizer sẽ mã hóa các tài liệu, tìm hiểu các trọng số tần số từ vựng và tài liệu nghịch đảo và cho phép bạn mã hóa các tài liệu mới. Thay phiên, nếu bạn đã có một Countvectorer đã học, bạn có thể sử dụng nó với Tfidftransformer để chỉ tính toán tần số tài liệu nghịch đảo và bắt đầu mã hóa tài liệu.

Quá trình tạo, phù hợp và biến đổi tương tự được sử dụng như với CountVectorizer.

Dưới đây là một ví dụ về việc sử dụng tfidfvectorizer để học từ vựng và tần số tài liệu nghịch đảo trên 3 tài liệu nhỏ và sau đó mã hóa một trong những tài liệu đó.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

từ sklearn.feature_extraction.text nhập tfidfvectorizersklearn.feature_extraction.text import TfidfVectorizer

# Danh sách các tài liệu văn bản

Text = ["Con cáo nâu nhanh đã nhảy qua con chó lười biếng.",=["The quick brown fox jumped over the lazy dog.",

"Con chó.",,

"Con cáo"]]

# Tạo biến đổi

vectorizer=TfidfVectorizer()=TfidfVectorizer()

# tokenize và xây dựng từ vựng

vectorizer.fit(text).fit(text)

# Tóm tắt

print(vectorizer.vocabulary_)(vectorizer.vocabulary_)

print(vectorizer.idf_)(vectorizer.idf_)

# mã hóa tài liệu

vector=vectorizer.transform([text[0]])=vectorizer.transform([text[0]])

# Tóm tắt vectơ được mã hóa

print(vector.shape)(vector.shape)

print(vector.toarray())(vector.toarray())

Một từ vựng gồm 8 từ được học từ các tài liệu và mỗi từ được gán một chỉ số số nguyên duy nhất trong vectơ đầu ra.

Các tần số tài liệu nghịch đảo được tính toán cho mỗi từ trong từ vựng, gán điểm thấp nhất là 1,0 cho từ được quan sát thường xuyên nhất: Hồi The The at Index 7.

Cuối cùng, tài liệu đầu tiên được mã hóa dưới dạng một mảng thưa thớt 8 phần tử và chúng ta có thể xem lại các điểm cuối cùng của từng từ với các giá trị khác nhau cho các trò chơi, Fox Fox, và Chó Dog Dog từ các từ khác trong từ vựng.

{'Fox': 2, 'lười biếng': 4, 'chó': 1, 'nhanh': 6, 'the': 7, 'over': 5, 'brown': 0, 'nhảy': 3}

[1.69314718 1.28768207 1.28768207 1.69314718 1.69314718 1.69314718

1.69314718 1.]

(1, 8)

[[0.36388646 0.27674503 0.27674503 0.36388646 0.36388646 0.36388646

0.36388646 0.42983441]]]

Điểm số được chuẩn hóa thành các giá trị từ 0 đến 1 và các vectơ tài liệu được mã hóa sau đó có thể được sử dụng trực tiếp với hầu hết các thuật toán học máy.

Băm với băm

Số lượng và tần số có thể rất hữu ích, nhưng một hạn chế của các phương pháp này là từ vựng có thể trở nên rất lớn.

Điều này, đến lượt nó, sẽ yêu cầu các vectơ lớn để mã hóa các tài liệu và áp đặt các yêu cầu lớn lên bộ nhớ và làm chậm các thuật toán.

Một công việc thông minh xung quanh là sử dụng một hàm băm một cách để chuyển đổi chúng thành số nguyên. Phần thông minh là không cần từ vựng và bạn có thể chọn một vectơ có độ dài cố định dài tùy ý. Một nhược điểm là hàm băm là hàm một chiều nên không có cách nào để chuyển đổi mã hóa trở lại một từ (điều này có thể không quan trọng đối với nhiều nhiệm vụ học tập được giám sát).

Lớp Hash Breathvector thực hiện phương pháp này có thể được sử dụng để liên tục băm các từ, sau đó mã hóa và mã hóa các tài liệu khi cần thiết.

Ví dụ dưới đây cho thấy Hashingvectorizer để mã hóa một tài liệu duy nhất.

Một kích thước vectơ có độ dài cố định tùy ý là 20 đã được chọn. Điều này tương ứng với phạm vi của hàm băm, trong đó các giá trị nhỏ (như 20) có thể dẫn đến va chạm băm. Nhớ lại các lớp CompSci, tôi tin rằng có những heuristic mà bạn có thể sử dụng để chọn độ dài băm và xác suất va chạm dựa trên kích thước từ vựng ước tính.

Lưu ý rằng vectorizer này không yêu cầu một cuộc gọi để phù hợp với các tài liệu dữ liệu đào tạo. Thay vào đó, sau khi khởi tạo, nó có thể được sử dụng trực tiếp để bắt đầu mã hóa tài liệu.

từ sklearn.feature_extraction.text nhập bvekingvectorizersklearn.feature_extraction.text import HashingVectorizer

# Danh sách các tài liệu văn bản

Text = ["Con cáo màu nâu nhanh đã nhảy qua con chó lười biếng."]=["The quick brown fox jumped over the lazy dog."]

# Tạo biến đổi

vectorizer=HashingVectorizer(n_features=20)= HashingVectorizer(n_features=20)

# mã hóa tài liệu

vector=vectorizer.transform(text)=vectorizer.transform(text)

# Tóm tắt vectơ được mã hóa

print(vector.shape)(vector.shape)

print(vector.toarray())(vector.toarray())

Chạy ví dụ mã hóa tài liệu mẫu dưới dạng mảng thưa thớt 20 yếu tố.

Các giá trị của tài liệu được mã hóa tương ứng với số từ được chuẩn hóa theo mặc định trong phạm vi từ -1 đến 1, nhưng có thể được thực hiện số nguyên đơn giản bằng cách thay đổi cấu hình mặc định.

(1, 20)

[[0. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 0.33333333

0. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; -0.33333333 & nbsp; & nbsp; 0.33333333 ; & nbsp; & nbsp; 0.3333333333

0. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; -0.33333333 & nbsp; & nbsp; 0. & nbsp; & nbsp; & nbsp; & nbsp;

-0.66666667  0.        ]]

Đọc thêm

Phần này cung cấp nhiều tài nguyên hơn về chủ đề nếu bạn đang tìm kiếm sâu hơn.

Xử lý ngôn ngữ tự nhiên

  • Mô hình túi của Wikipedia
  • Mã thông báo trên Wikipedia
  • TF-IDF trên Wikipedia

sciki-learn

  • Mục 4.2. Khai thác tính năng, Hướng dẫn sử dụng Scikit-Learn
  • API trích xuất tính năng sckit-learn
  • Làm việc với dữ liệu văn bản, hướng dẫn Scikit-learn

API lớp

  • CountVectorizer Scikit-Learn API
  • Tfidfvectorizer scikit-learn API
  • Tfidftransformer Scikit-LEARN API
  • API HasHingVectorizer API-LEARN

Bản tóm tắt

Trong hướng dẫn này, bạn đã phát hiện ra cách chuẩn bị các tài liệu văn bản cho việc học máy với Scikit-learn.

Chúng tôi chỉ làm trầy xước bề mặt trong các ví dụ này và tôi muốn nhấn mạnh rằng có nhiều chi tiết cấu hình để các lớp này ảnh hưởng đến việc kiểm tra các tài liệu đáng để khám phá.

Bạn có câu hỏi nào không? Đặt câu hỏi của bạn trong các ý kiến ​​dưới đây và tôi sẽ cố gắng hết sức để trả lời.
Ask your questions in the comments below and I will do my best to answer.

Phát triển các mô hình học tập sâu cho dữ liệu văn bản ngày hôm nay!

Hướng dẫn convert text to vector python - chuyển đổi văn bản sang vector python

Phát triển các mô hình văn bản của riêng bạn trong vài phút

... Chỉ với một vài dòng mã Python

Khám phá cách trong ebook mới của tôi: Học sâu để xử lý ngôn ngữ tự nhiên
Deep Learning for Natural Language Processing

Nó cung cấp các hướng dẫn tự nghiên cứu về các chủ đề như: các từ, nhúng từ, mô hình ngôn ngữ, tạo chú thích, dịch văn bản và nhiều hơn nữa ...self-study tutorials on topics like:
Bag-of-Words, Word Embedding, Language Models, Caption Generation, Text Translation and much more...

Cuối cùng mang lại học tập sâu cho các dự án xử lý ngôn ngữ tự nhiên của bạn

Bỏ qua các học giả. Chỉ là kết quả.

Xem những gì bên trong

Làm thế nào để bạn vectorize văn bản?

Vectơ văn bản là quá trình chuyển đổi văn bản thành biểu diễn số ...
Tần số thuật ngữ nhị phân ..
Túi từ (cung) tần số thời hạn ..
(L1) Tần số thời hạn chuẩn hóa ..
(L2) TF-idf được chuẩn hóa ..
Word2Vec..

Làm cách nào để vectorize văn bản trong NLP?

Word nhúng hoặc vector từ là một phương pháp trong NLP để ánh xạ các từ hoặc cụm từ từ từ vựng đến một vectơ tương ứng của các số thực được sử dụng để tìm dự đoán từ, tương tự từ/ngữ nghĩa.Quá trình chuyển đổi từ thành các số được gọi là vector hóa. which used to find word predictions, word similarities/semantics. The process of converting words into numbers are called Vectorization.

Tại sao chúng ta vector hóa dữ liệu văn bản?

Để chuyển đổi dữ liệu văn bản thành dữ liệu số, chúng ta cần một số cách thông minh được gọi là vector hóa hoặc trong thế giới NLP, nó được gọi là từ nhúng.Do đó, vector hóa hoặc nhúng từ là quá trình chuyển đổi dữ liệu văn bản thành các vectơ số., we need some smart ways which are known as vectorization, or in the NLP world, it is known as Word embeddings. Therefore, Vectorization or word embedding is the process of converting text data to numerical vectors.

Làm thế nào để bạn vector hóa văn bản trong một khung dữ liệu cho các tác vụ NLP?

Mô hình cần được tải xuống từ TFHUB.Tiếp theo, chạy Cleaned_Text thông qua mô hình để tạo các vectơ.Sử dụng cùng một kỹ thuật từ ví dụ DOC2VEC, chuyển đổi các vectơ từ một mảng numpy thành một danh sách các danh sách.Từ đó, thật dễ dàng để thêm các vectơ vào DataFrame.run the cleaned_text through the model to generate the vectors. Using the same technique from the Doc2Vec example, transform the vectors from a numpy array into a list of lists. From there, it is easy to add the vectors to the dataframe.