ai python

Xử lý ngôn ngữ tự nhiên (NLP) đề cập đến phương pháp AI giao tiếp với các hệ thống thông minh sử dụng ngôn ngữ tự nhiên như tiếng Anh.

Xử lý ngôn ngữ tự nhiên là cần thiết khi bạn muốn một hệ thống thông minh như robot thực hiện theo hướng dẫn của bạn, khi bạn muốn nghe quyết định từ hệ thống chuyên gia lâm sàng dựa trên hội thoại, v.v.

Lĩnh vực NLP liên quan đến việc làm cho máy tính thực hiện các tác vụ hữu ích bằng ngôn ngữ tự nhiên mà con người sử dụng. Đầu vào và đầu ra của hệ thống NLP có thể là –

  • Lời nói
  • Văn bản viết tay

Các thành phn ca NLP

Trong phần này, chúng ta sẽ tìm hiểu về các thành phần khác nhau của NLP. Có hai thành phần của NLP. Các thành phần được mô tả dưới đây –

Hiu ngôn ng t nhiên (NLU)

Nó liên quan đến các nhiệm vụ sau –

  • Ánh xạ đầu vào đã cho bằng ngôn ngữ tự nhiên thành các biểu diễn hữu ích.
  • Phân tích các khía cạnh khác nhau của ngôn ngữ.

To ngôn ng t nhiên (NLG)

Đó là quá trình tạo ra các cụm từ và câu có ý nghĩa dưới dạng ngôn ngữ tự nhiên từ một số biểu diễn bên trong. Nó liên quan đến –

  • Lập kế hoạch văn bản – Điều này bao gồm truy xuất nội dung có liên quan từ cơ sở tri thức.
  • Lập kế hoạch cho câu − Điều này bao gồm việc chọn các từ cần thiết, tạo thành các cụm từ có nghĩa, thiết lập ngữ điệu của câu.
  • Hiện thực hóa văn bản – Đây là ánh xạ kế hoạch câu thành cấu trúc câu.

Khó khăn ĐHNL

ĐHNL rất phong phú về hình thức, kết cấu; tuy nhiên, nó là mơ hồ. Có thể có các mức độ mơ hồ khác nhau –

mơ h t vng

Nó ở cấp độ rất nguyên thủy chẳng hạn như cấp độ từ. Ví dụ, coi từ “board” là danh từ hay động từ?

Mc độ mơ h ca cú pháp

Một câu có thể được phân tích cú pháp theo nhiều cách khác nhau. Ví dụ: “Anh ấy nhấc con bọ mũ đỏ lên.” – Anh ta dùng nắp để nâng con bọ hay anh ta nhấc con bọ có nắp màu đỏ?

tham chiếu mơ h

Đề cập đến một cái gì đó sử dụng đại từ. Ví dụ, Rima đã đến Gauri. Cô ấy nói, “Tôi mệt.” – Chính xác là ai mệt mỏi?

thut ng NLP

Bây giờ chúng ta hãy xem một số thuật ngữ quan trọng trong thuật ngữ NLP.

  • Âm vị học – Đó là nghiên cứu về tổ chức âm thanh một cách có hệ thống.
  • Hình thái học – Đó là một nghiên cứu về việc xây dựng các từ từ các đơn vị có nghĩa nguyên thủy.
  • Hình vị – Nó là một đơn vị ý nghĩa nguyên thủy trong một ngôn ngữ.
  • Cú pháp – Nó đề cập đến việc sắp xếp các từ để tạo thành một câu. Nó cũng liên quan đến việc xác định vai trò cấu tạo của từ trong câu và trong cụm từ.
  • Ngữ nghĩa – Nó liên quan đến nghĩa của từ và cách kết hợp các từ thành các cụm từ và câu có nghĩa.
  • Ngữ dụng học – Nó liên quan đến việc sử dụng và hiểu các câu trong các tình huống khác nhau và cách giải thích câu bị ảnh hưởng.
  • Diễn ngôn – Nó liên quan đến cách câu ngay trước đó có thể ảnh hưởng đến việc giải thích câu tiếp theo.
  • Kiến thức thế giới – Nó bao gồm kiến ​​thức chung về thế giới.

Các bước trong NLP

Phần này cho thấy các bước khác nhau trong NLP.

Phân tích t vng

Nó liên quan đến việc xác định và phân tích cấu trúc của từ. Từ vựng của một ngôn ngữ có nghĩa là tập hợp các từ và cụm từ trong một ngôn ngữ. Phân tích từ vựng đang chia toàn bộ đoạn văn bản thành các đoạn văn, câu và từ.

Phân tích cú pháp (Phân tích cú pháp)

Nó liên quan đến việc phân tích các từ trong câu về ngữ pháp và sắp xếp các từ theo cách thể hiện mối quan hệ giữa các từ. Câu như “The school go to boy” bị máy phân tích cú pháp tiếng Anh từ chối.

Phân tích ng nghĩa

Nó rút ra nghĩa chính xác hoặc nghĩa từ điển từ văn bản. Văn bản được kiểm tra về ý nghĩa. Nó được thực hiện bằng cách ánh xạ các cấu trúc cú pháp và các đối tượng trong miền nhiệm vụ. Máy phân tích ngữ nghĩa bỏ qua câu như “kem nóng”.

Tích hp din ngôn

Ý nghĩa của bất kỳ câu nào phụ thuộc vào ý nghĩa của câu ngay trước nó. Ngoài ra, nó còn mang ý nghĩa câu liền thành công.

Phân tích thc dng

Trong thời gian này, những gì đã nói được diễn giải lại theo ý nghĩa thực sự của nó. Nó liên quan đến việc rút ra những khía cạnh của ngôn ngữ đòi hỏi kiến ​​​​thức về thế giới thực

AI với Python – Gói NLTK

Trong chương này, chúng ta sẽ tìm hiểu cách bắt đầu với Gói Bộ công cụ Ngôn ngữ Tự nhiên.

Điu kin tiên quyết

Nếu chúng ta muốn xây dựng các ứng dụng với xử lý Ngôn ngữ tự nhiên thì việc thay đổi ngữ cảnh sẽ gây khó khăn nhất. Yếu tố ngữ cảnh ảnh hưởng đến cách máy hiểu một câu cụ thể. Do đó, chúng ta cần phát triển các ứng dụng ngôn ngữ tự nhiên bằng cách sử dụng các phương pháp học máy để máy cũng có thể hiểu cách con người hiểu ngữ cảnh.

Để xây dựng các ứng dụng như vậy, chúng tôi sẽ sử dụng gói Python có tên NLTK (Gói bộ công cụ ngôn ngữ tự nhiên).

Nhp khu NLTK

Chúng ta cần cài đặt NLTK trước khi sử dụng. Nó có thể được cài đặt với sự trợ giúp của lệnh sau –

pip install nltk

Để xây dựng gói conda cho NLTK, hãy sử dụng lệnh sau –

conda install -c anaconda nltk

Bây giờ sau khi cài đặt gói NLTK, chúng ta cần nhập gói đó thông qua dấu nhắc lệnh python. Chúng ta có thể nhập nó bằng cách viết lệnh sau trên dấu nhắc lệnh Python –

>>> import nltk

Ti xung d liu ca NLTK

Bây giờ sau khi nhập NLTK, chúng tôi cần tải xuống dữ liệu cần thiết. Nó có thể được thực hiện với sự trợ giúp của lệnh sau trên dấu nhắc lệnh Python –

>>> nltk.download()

Cài đặt các gói cn thiết khác

Để xây dựng các ứng dụng xử lý ngôn ngữ tự nhiên bằng NLTK, chúng ta cần cài đặt các gói cần thiết. Các gói như sau –

như mt quc gia

Nó là một thư viện mô hình hóa ngữ nghĩa mạnh mẽ, hữu ích cho nhiều ứng dụng. Chúng ta có thể cài đặt nó bằng cách thực hiện lệnh sau –

pip install gensim

mu

Nó được sử dụng để làm cho gói gensim hoạt động bình thường. Chúng ta có thể cài đặt nó bằng cách thực hiện lệnh sau

pip install pattern

Khái nim v Tokenization, Stemming và Lemmatization

Trong phần này, chúng ta sẽ hiểu tokenization, stemming và lemmatization là gì.

Token hóa

Nó có thể được định nghĩa là quá trình chia nhỏ văn bản đã cho, tức là chuỗi ký tự thành các đơn vị nhỏ hơn gọi là mã thông báo. Các mã thông báo có thể là các từ, số hoặc dấu chấm câu. Nó còn được gọi là phân đoạn từ. Sau đây là một ví dụ đơn giản về mã thông báo –Đầu vào − Xoài, chuối, dứa và táo đều là trái cây.

AI với python

Đầu ra –

Quá trình phá vỡ văn bản đã cho có thể được thực hiện với sự trợ giúp của việc định vị các ranh giới từ. Phần cuối của một từ và phần đầu của một từ mới được gọi là ranh giới từ. Hệ thống chữ viết và cấu trúc đánh máy của các từ ảnh hưởng đến ranh giới.

Trong mô-đun NLTK của Python, chúng tôi có các gói khác nhau liên quan đến mã thông báo mà chúng tôi có thể sử dụng để phân chia văn bản thành các mã thông báo theo yêu cầu của chúng tôi. Một số gói như sau –

gói đã gi_tokenize

Như tên gợi ý, gói này sẽ chia văn bản đầu vào thành các câu. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.tokenize import sent_tokenize

gói word_tokenize

Gói này chia văn bản đầu vào thành các từ. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.tokenize import word_tokenize

Gói WordPunctTokenizer

Gói này chia văn bản đầu vào thành các từ cũng như các dấu chấm câu. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.tokenize import WordPuncttokenizer

Nhét đầy

Trong khi làm việc với các từ, chúng ta bắt gặp rất nhiều biến thể vì lý do ngữ pháp. Khái niệm biến thể ở đây có nghĩa là chúng ta phải đối phó với các hình thức khác nhau của cùng một từ như dân chủ, dân chủ và dân chủ hóa . Máy móc rất cần hiểu rằng những từ khác nhau này có cùng một dạng cơ bản. Theo cách này, sẽ rất hữu ích khi trích xuất các dạng cơ bản của các từ trong khi chúng ta đang phân tích văn bản.

Chúng ta có thể đạt được điều này bằng cách bắt nguồn. Theo cách này, chúng ta có thể nói rằng từ gốc là quá trình khám phá để trích xuất các dạng cơ bản của từ bằng cách cắt bỏ phần cuối của từ.

Trong mô-đun NLTK của Python, chúng tôi có các gói khác nhau liên quan đến xuất phát. Các gói này có thể được sử dụng để lấy các dạng cơ sở của từ. Các gói này sử dụng các thuật toán. Một số gói như sau –

Gói PorterStemmer

Gói Python này sử dụng thuật toán của Porter để trích xuất biểu mẫu cơ sở. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.stem.porter import PorterStemmer

Ví dụ: nếu chúng tôi cung cấp từ ‘viết’ làm đầu vào cho trình bắt đầu từ này, chúng tôi sẽ nhận được từ ‘viết’ sau khi bắt đầu từ.

Gói LancasterStemmer

Gói Python này sẽ sử dụng thuật toán của Lancaster để trích xuất biểu mẫu cơ sở. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.stem.lancaster import LancasterStemmer

Ví dụ: nếu chúng tôi cung cấp từ ‘viết’ làm đầu vào cho trình bắt đầu từ này, chúng tôi sẽ nhận được từ ‘viết’ sau khi bắt đầu từ.

Quả cầu tuyết Gói Stemmer

Gói Python này sẽ sử dụng thuật toán quả cầu tuyết để trích xuất biểu mẫu cơ sở. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.stem.snowball import SnowballStemmer

Ví dụ: nếu chúng tôi cung cấp từ ‘viết’ làm đầu vào cho trình bắt đầu từ này, chúng tôi sẽ nhận được từ ‘viết’ sau khi bắt đầu từ.

Tất cả các thuật toán này có mức độ nghiêm ngặt khác nhau. Nếu chúng ta so sánh ba thiết bị gốc này thì thiết bị gốc Porter là ít nghiêm ngặt nhất và Lancaster là nghiêm ngặt nhất. Snowball stemmer là tốt để sử dụng về tốc độ cũng như nghiêm ngặt.

b đề

Chúng ta cũng có thể trích xuất dạng cơ sở của các từ bằng cách bổ sung từ vựng. Về cơ bản, nó thực hiện nhiệm vụ này với việc sử dụng từ vựng và phân tích hình thái của các từ, thường chỉ nhằm mục đích loại bỏ các kết thúc biến tố. Loại hình thức cơ bản này của bất kỳ từ nào được gọi là bổ đề.

Sự khác biệt chính giữa từ gốc và từ vựng là việc sử dụng từ vựng và phân tích hình thái của các từ. Một điểm khác biệt nữa là từ gốc thường thu gọn nhất các từ liên quan đến phái sinh trong khi quá trình bổ đề hóa thường chỉ thu gọn các dạng biến tố khác nhau của một bổ đề. Ví dụ: nếu chúng tôi cung cấp từ saw làm từ đầu vào thì từ gốc có thể trả về từ ‘s’ nhưng từ vựng sẽ cố gắng trả về từ see hoặc saw tùy thuộc vào việc sử dụng mã thông báo là động từ hay danh từ.

Trong mô-đun NLTK của Python, chúng ta có gói sau liên quan đến quy trình từ vựng mà chúng ta có thể sử dụng để lấy các dạng cơ bản của từ –

gói WordNetLemmatizer

Gói Python này sẽ trích xuất dạng cơ bản của từ tùy thuộc vào việc nó được sử dụng như một danh từ hay động từ. Chúng ta có thể nhập gói này với sự trợ giúp của mã Python sau –

from nltk.stem import WordNetLemmatizer

Chunking: Chia d liu thành Chunks

Đây là một trong những quá trình quan trọng trong xử lý ngôn ngữ tự nhiên. Công việc chính của chunking là xác định các phần của bài phát biểu và các cụm từ ngắn như cụm danh từ. Chúng tôi đã nghiên cứu quá trình mã thông báo, tạo mã thông báo. Chunking về cơ bản là ghi nhãn của các mã thông báo đó. Nói cách khác, chunking sẽ cho chúng ta thấy cấu trúc của câu.

Trong phần sau, chúng ta sẽ tìm hiểu về các loại Chunking khác nhau.

Các loi chunking

Có hai loại chunking. Các loại như sau –

chia nh

Trong quá trình phân đoạn này, đối tượng, sự vật, v.v. sẽ trở nên tổng quát hơn và ngôn ngữ trở nên trừu tượng hơn. Có nhiều cơ hội thỏa thuận hơn. Trong quá trình này, chúng tôi thu nhỏ. Ví dụ, nếu chúng ta sẽ chia nhỏ câu hỏi “ô tô là gì”? Chúng ta có thể nhận được câu trả lời là “vận chuyển”.

Chunking xung

Trong quá trình chia nhỏ này, đối tượng, sự vật, v.v. tiến tới cụ thể hơn và ngôn ngữ được thâm nhập nhiều hơn. Cấu trúc sâu hơn sẽ được kiểm tra trong chunking xuống. Trong quá trình này, chúng tôi phóng to. Ví dụ: nếu chúng tôi cắt nhỏ câu hỏi “Hãy kể cụ thể về một chiếc ô tô”? Chúng tôi sẽ nhận được những mẩu thông tin nhỏ hơn về chiếc xe.

Ví dụ

Trong ví dụ này, chúng ta sẽ thực hiện phân đoạn Danh từ-Cụm từ, một loại phân đoạn sẽ tìm các cụm từ danh từ trong câu, bằng cách sử dụng mô-đun NLTK trong Python −

Làm theo các bước sau trong python để triển khai chunking cụm từ danh từ –

Bước 1 – Trong bước này, chúng ta cần xác định ngữ pháp cho chunking. Nó sẽ bao gồm các quy tắc mà chúng ta cần tuân theo.

Bước 2 – Trong bước này, chúng ta cần tạo một trình phân tích cú pháp chunk. Nó sẽ phân tích ngữ pháp và đưa ra kết quả.

Bước 3 – Trong bước cuối cùng này, đầu ra được tạo ở định dạng cây.

Hãy để chúng tôi nhập gói NLTK cần thiết như sau –

import nltk

Bây giờ, chúng ta cần xác định câu. Ở đây, DT có nghĩa là định thức, VBP có nghĩa là động từ, JJ có nghĩa là tính từ, IN có nghĩa là giới từ và NN có nghĩa là danh từ.

sentence=[("a","DT"),("clever","JJ"),("fox","NN"),("was","VBP"),
          ("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

Bây giờ, chúng ta cần đưa ra ngữ pháp. Ở đây, chúng tôi sẽ đưa ra ngữ pháp ở dạng biểu thức chính quy.

grammar = "NP:{<DT>?<JJ>*<NN>}"

Chúng ta cần xác định một trình phân tích cú pháp sẽ phân tích ngữ pháp.

parser_chunking = nltk.RegexpParser(grammar)

Trình phân tích cú pháp phân tích cú pháp câu như sau –

parser_chunking.parse(sentence)

Tiếp theo, chúng ta cần lấy đầu ra. Đầu ra được tạo trong biến đơn giản có tên là output_chunk .

Output_chunk = parser_chunking.parse(sentence)

Khi thực thi đoạn mã sau, chúng ta có thể vẽ đầu ra của mình dưới dạng cây.

output.draw()
AI với python

Mu Túi T (BoW)

Bag of Word (BoW), một mô hình trong xử lý ngôn ngữ tự nhiên, về cơ bản được sử dụng để trích xuất các tính năng từ văn bản để văn bản có thể được sử dụng trong mô hình hóa như vậy trong các thuật toán học máy.

Bây giờ câu hỏi đặt ra là tại sao chúng ta cần trích xuất các tính năng từ văn bản. Đó là bởi vì các thuật toán máy học không thể hoạt động với dữ liệu thô và chúng cần dữ liệu số để có thể trích xuất thông tin có ý nghĩa từ dữ liệu đó. Việc chuyển đổi dữ liệu văn bản thành dữ liệu số được gọi là trích xuất tính năng hoặc mã hóa tính năng.

Làm thế nào nó hot động

Đây là cách tiếp cận rất đơn giản để trích xuất các tính năng từ văn bản. Giả sử chúng ta có một tài liệu văn bản và chúng ta muốn chuyển đổi nó thành dữ liệu số hoặc giả sử muốn trích xuất các tính năng từ nó thì trước hết mô hình này sẽ trích xuất một từ vựng từ tất cả các từ trong tài liệu. Sau đó, bằng cách sử dụng ma trận thuật ngữ tài liệu, nó sẽ xây dựng một mô hình. Theo cách này, BoW chỉ biểu diễn tài liệu dưới dạng một túi từ. Mọi thông tin về thứ tự hoặc cấu trúc của các từ trong tài liệu đều bị loại bỏ.

Khái nim ma trn thi hn tài liu

Thuật toán BoW xây dựng một mô hình bằng cách sử dụng ma trận thuật ngữ tài liệu. Như tên gợi ý, ma trận thuật ngữ tài liệu là ma trận của các số lượng từ khác nhau xuất hiện trong tài liệu. Với sự trợ giúp của ma trận này, tài liệu văn bản có thể được biểu diễn dưới dạng tổ hợp có trọng số của nhiều từ khác nhau. Bằng cách đặt ngưỡng và chọn các từ có ý nghĩa hơn, chúng tôi có thể tạo biểu đồ tần suất của tất cả các từ trong tài liệu có thể được sử dụng làm vectơ đặc trưng. Sau đây là một ví dụ để hiểu khái niệm về ma trận thuật ngữ tài liệu –

Ví dụ

Giả sử chúng ta có hai câu sau –

  • Câu 1 – Chúng tôi đang sử dụng mô hình Bag of Words.
  • Câu 2 – Mô hình Bag of Words được sử dụng để trích xuất các tính năng.

Bây giờ, bằng cách xem xét hai câu này, chúng ta có 13 từ riêng biệt sau đây –

  • chúng tôi
  • sử dụng
  • các
  • cái túi
  • của
  • từ
  • người mẫu
  • đã sử dụng
  • trích xuất
  • đặc trưng

Bây giờ, chúng ta cần xây dựng biểu đồ cho mỗi câu bằng cách sử dụng số từ trong mỗi câu –

  • Câu 1 − [1,1,1,1,1,1,1,1,0,0,0,0,0]
  • Câu 2 − [0,0,0,1,1,1,1,1,1,1,1,1,1]

Theo cách này, chúng ta có các vectơ đặc trưng đã được trích xuất. Mỗi vectơ đặc trưng là 13 chiều vì chúng ta có 13 từ riêng biệt.

Khái nim v thng kê

Khái niệm thống kê được gọi là Tần suất tài liệu nghịch đảo thuật ngữ (tf-idf). Mỗi từ đều quan trọng trong tài liệu. Các số liệu thống kê giúp chúng tôi hiểu tầm quan trọng của mỗi từ.

Tn sut k hn (tf)

Nó là thước đo tần suất mỗi từ xuất hiện trong tài liệu. Nó có thể thu được bằng cách chia số lượng của mỗi từ cho tổng số từ trong một tài liệu nhất định.

Tn s tài liu nghch đảo(idf)

Nó là thước đo mức độ độc đáo của một từ đối với tài liệu này trong bộ tài liệu đã cho. Để tính toán idf và xây dựng một vectơ đặc trưng riêng biệt, chúng ta cần giảm trọng số của các từ thường xuất hiện như the và tăng trọng số cho các từ hiếm gặp.

Xây dng mô hình Túi t trong NLTK

Trong phần này, chúng ta sẽ định nghĩa một tập hợp các chuỗi bằng cách sử dụng CountVectorizer để tạo các vectơ từ các câu này.

Hãy để chúng tôi nhập gói cần thiết –

from sklearn.feature_extraction.text import CountVectorizer

Bây giờ xác định tập hợp các câu

Sentences = ['We are using the Bag of Word model', 'Bag of Word model is
           used for extracting the features.']

vectorizer_count = CountVectorizer()

features_text = vectorizer.fit_transform(Sentences).todense()

print(vectorizer.vocabulary_)

Chương trình trên tạo ra đầu ra như hình dưới đây. Nó cho thấy rằng chúng ta có 13 từ riêng biệt trong hai câu trên –

{'we': 11, 'are': 0, 'using': 10, 'the': 8, 'bag': 1, 'of': 7,
 'word': 12, 'model': 6, 'is': 5, 'used': 9, 'for': 4, 'extracting': 2, 'features': 3}

Đây là các vectơ đặc trưng (dạng văn bản sang dạng số) có thể được sử dụng cho máy học.

Gii quyết các vn đề

Trong phần này, chúng tôi sẽ giải quyết một vài vấn đề liên quan.

Dự đoán danh mục

python voi ai

Trong một bộ văn bản, không chỉ từ ngữ mà thể loại của từ ngữ cũng rất quan trọng; trong thể loại của văn bản một từ cụ thể rơi. Ví dụ: chúng tôi muốn dự đoán xem một câu đã cho có thuộc danh mục email, tin tức, thể thao, máy tính, v.v. Trong ví dụ sau, chúng tôi sẽ sử dụng tf-idf để tạo một vectơ đặc trưng để tìm danh mục tài liệu. Chúng tôi sẽ sử dụng dữ liệu từ 20 tập dữ liệu nhóm tin của sklearn. Chúng ta cần nhập các gói cần thiết

from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer

Xác định bản đồ thể loại. Chúng tôi đang sử dụng năm danh mục khác nhau có tên là Tôn giáo, Ô tô, Thể thao, Điện tử và Không gian.

category_map = {'talk.religion.misc':'Religion','rec.autos''Autos',
   'rec.sport.hockey':'Hockey','sci.electronics':'Electronics', 'sci.space': 'Space'}

Tạo tập huấn luyện

training_data = fetch_20newsgroups(subset = 'train',
   categories = category_map.keys(), shuffle = True, random_state = 5)

Xây dựng bộ đếm véc tơ và trích xuất thuật ngữ đếm

vectorizer_count = CountVectorizer()
train_tc = vectorizer_count.fit_transform(training_data.data)
print("\nDimensions of training data:", train_tc.shape)

Biến áp tf-idf được tạo như sau

tfidf = TfidfTransformer()
train_tfidf = tfidf.fit_transform(train_tc)

Bây giờ, xác định dữ liệu thử nghiệm

input_data = [
   'Discovery was a space shuttle',
   'Hindu, Christian, Sikh all are religions',
   'We must have to drive safely',
   'Puck is a disk made of rubber',
   'Television, Microwave, Refrigrated all uses electricity'
]

Dữ liệu trên sẽ giúp chúng tôi huấn luyện bộ phân loại Đa thức Naive Bayes –

classifier = MultinomialNB().fit(train_tfidf, training_data.target)

Chuyển đổi dữ liệu đầu vào bằng cách sử dụng bộ đếm véc tơ –

input_tc = vectorizer_count.transform(input_data)

Bây giờ, chúng ta sẽ chuyển đổi dữ liệu được vector hóa bằng biến áp tfidf –

input_tfidf = tfidf.transform(input_tc)

Chúng tôi sẽ dự đoán các danh mục đầu ra –

predictions = classifier.predict(input_tfidf)

Đầu ra được tạo như sau –

for sent, category in zip(input_data, predictions):
   print('\nInput Data:', sent, '\n Category:',      \category_map[training_data.target_names[category]])

Công cụ dự đoán danh mục tạo ra đầu ra sau –

Dimensions of training data: (2755, 39297)
Input Data: Discovery was a space shuttle
Category: Space
Input Data: Hindu, Christian, Sikh all are religions
Category: Religion
Input Data: We must have to drive safely
Category: Autos
Input Data: Puck is a disk made of rubber
Category: Hockey
Input Data: Television, Microwave, Refrigrated all uses electricity
Category: Electronics

Trình tìm gii tính

Trong tuyên bố vấn đề này, một bộ phân loại sẽ được đào tạo để tìm giới tính (nam hoặc nữ) bằng cách cung cấp tên. Chúng ta cần sử dụng phương pháp phỏng đoán để xây dựng một vectơ đặc trưng và huấn luyện bộ phân loại. Chúng tôi sẽ sử dụng dữ liệu được gắn nhãn từ gói scikit-learning. Sau đây là mã Python để xây dựng công cụ tìm giới tính – Hãy để chúng tôi nhập các gói cần thiết

import random

from nltk import NaiveBayesClassifier
from nltk.classify import accuracy as nltk_accuracy
from nltk.corpus import names

Bây giờ chúng ta cần trích xuất N chữ cái cuối cùng từ từ đầu vào. Những chữ cái này sẽ hoạt động như các tính năng

def extract_features(word, N = 2):
   last_n_letters = word[-N:]
   return {'feature': last_n_letters.lower()}
	
if __name__=='__main__':

Tạo dữ liệu đào tạo bằng cách sử dụng các tên được gắn nhãn (nam cũng như nữ) có sẵn trong NLTK

male_list = [(name, 'male') for name in names.words('male.txt')]
female_list = [(name, 'female') for name in names.words('female.txt')]
data = (male_list + female_list)

random.seed(5)
random.shuffle(data)

Bây giờ, dữ liệu thử nghiệm sẽ được tạo như sau –

namesInput = ['Rajesh', 'Gaurav', 'Swati', 'Shubha']

Xác định số lượng mẫu được sử dụng để huấn luyện và kiểm tra bằng đoạn mã sau

train_sample = int(0.8 * len(data))

Bây giờ, chúng ta cần lặp qua các độ dài khác nhau để có thể so sánh độ chính xác

for i in range(1, 6):
   print('\nNumber of end letters:', i)
   features = [(extract_features(n, i), gender) for (n, gender) in data]
   train_data, test_data = features[:train_sample],
features[train_sample:]
   classifier = NaiveBayesClassifier.train(train_data)

Độ chính xác của bộ phân loại có thể được tính như sau

accuracy_classifier = round(100 * nltk_accuracy(classifier, test_data), 2)
   print('Accuracy = ' + str(accuracy_classifier) + '%')

Bây giờ, chúng ta có thể dự đoán đầu ra –

for name in namesInput:
   print(name, '==>', classifier.classify(extract_features(name, i)))

Chương trình trên sẽ tạo đầu ra sau

Number of end letters: 1
Accuracy = 74.7%
Rajesh -> female
Gaurav -> male
Swati -> female
Shubha -> female

Number of end letters: 2
Accuracy = 78.79%
Rajesh -> male
Gaurav -> male
Swati -> female
Shubha -> female

Number of end letters: 3
Accuracy = 77.22%
Rajesh -> male
Gaurav -> female
Swati -> female
Shubha -> female

Number of end letters: 4
Accuracy = 69.98%
Rajesh -> female
Gaurav -> female
Swati -> female
Shubha -> female

Number of end letters: 5
Accuracy = 64.63%
Rajesh -> female
Gaurav -> female
Swati -> female
Shubha -> female

Trong đầu ra ở trên, chúng ta có thể thấy rằng độ chính xác trong số lượng ký tự kết thúc tối đa là hai và nó đang giảm dần khi số lượng ký tự kết thúc tăng lên.

Xem thêm : Xác định các mẫu trong dữ liệu văn bản AI với Python

Để lại một bình luận