Python https://dongthoigian.net/phan-mem/python/ Khám phá những thủ thuật máy tính Mon, 08 Jan 2024 11:27:34 +0000 vi hourly 1 https://wordpress.org/?v=6.7 https://dongthoigian.net/wp-content/uploads/2021/07/cropped-logo-dongthoigian-32x32.png Python https://dongthoigian.net/phan-mem/python/ 32 32 AI với Python – Học sâu https://dongthoigian.net/ai-voi-python-hoc-sau/ https://dongthoigian.net/ai-voi-python-hoc-sau/#respond Fri, 11 Aug 2023 11:48:21 +0000 https://dongthoigian.net/?p=16728 Bạn sẽ tìm hiểu thêm về Deep Learning, một cách tiếp cận của AI.

The post AI với Python – Học sâu appeared first on Dongthoigian.

]]>
Mạng thần kinh nhân tạo (ANN) nó là một hệ thống máy tính hiệu quả, có chủ đề trung tâm được mượn từ sự tương tự của mạng thần kinh sinh học. Mạng lưới thần kinh là một loại mô hình cho máy học. Vào giữa những năm 1980 và đầu những năm 1990, nhiều tiến bộ kiến ​​trúc quan trọng đã được thực hiện trong các mạng thần kinh. Trong chương này, bạn sẽ tìm hiểu thêm về Deep Learning, một cách tiếp cận của AI.

Học sâu nổi lên từ sự phát triển bùng nổ của điện toán trong một thập kỷ với tư cách là một đối thủ nặng ký trong lĩnh vực này. Do đó, học sâu là một loại học máy đặc biệt có thuật toán được lấy cảm hứng từ cấu trúc và chức năng của bộ não con người.

Hc máy v/s Hc sâu

Học sâu là kỹ thuật học máy mạnh mẽ nhất hiện nay. Nó rất mạnh mẽ bởi vì họ học cách tốt nhất để trình bày vấn đề trong khi học cách giải quyết vấn đề. So sánh giữa Học sâu và Học máy được đưa ra dưới đây

Ph thuc d liu

Điểm khác biệt đầu tiên dựa trên hiệu suất của DL và ML khi quy mô dữ liệu tăng lên. Khi dữ liệu lớn, các thuật toán học sâu hoạt động rất tốt.

Máy ph thuc

Các thuật toán học sâu cần máy cao cấp để hoạt động hoàn hảo. Mặt khác, các thuật toán học máy cũng có thể hoạt động trên các máy cấp thấp.

Khai thác tính năng

Các thuật toán học sâu có thể trích xuất các tính năng cấp cao và cố gắng học hỏi từ các tính năng tương tự. Mặt khác, cần có một chuyên gia để xác định hầu hết các tính năng được máy học trích xuất.

Thi gian thc hin

Thời gian thực hiện phụ thuộc vào nhiều tham số được sử dụng trong thuật toán. Học sâu có nhiều tham số hơn thuật toán học máy. Do đó, thời gian thực hiện của các thuật toán DL, đặc biệt là thời gian đào tạo, nhiều hơn nhiều so với các thuật toán ML. Nhưng thời gian thử nghiệm của các thuật toán DL ít hơn các thuật toán ML.

Phương pháp gii quyết vn đề

Học sâu giải quyết vấn đề từ đầu đến cuối trong khi học máy sử dụng cách giải quyết vấn đề truyền thống, tức là chia nhỏ vấn đề thành nhiều phần.

Mng thn kinh tích chp (CNN)

Mạng nơ-ron tích chập cũng giống như mạng nơ-ron thông thường vì chúng cũng được tạo thành từ các nơ-ron có trọng số và độ lệch có thể học được. Các mạng thần kinh thông thường bỏ qua cấu trúc của dữ liệu đầu vào và tất cả dữ liệu được chuyển đổi thành mảng 1-D trước khi đưa nó vào mạng. Quá trình này phù hợp với dữ liệu thông thường, tuy nhiên nếu dữ liệu chứa hình ảnh, quá trình này có thể phức tạp.

CNN giải quyết vấn đề này một cách dễ dàng. Nó tính đến cấu trúc 2D của hình ảnh khi chúng xử lý chúng, điều này cho phép chúng trích xuất các thuộc tính dành riêng cho hình ảnh. Theo cách này, mục tiêu chính của CNN là chuyển từ dữ liệu hình ảnh thô trong lớp đầu vào sang đúng lớp trong lớp đầu ra. Sự khác biệt duy nhất giữa NN thông thường và CNN là cách xử lý dữ liệu đầu vào và loại lớp.

Tng quan v kiến ​​trúc ca CNN

Về mặt kiến ​​trúc, các mạng thần kinh thông thường nhận đầu vào và biến đổi nó thông qua một loạt các lớp ẩn. Mỗi lớp được kết nối với lớp khác với sự trợ giúp của các nơ-ron. Nhược điểm chính của các mạng thần kinh thông thường là chúng không thể mở rộng tốt đến hình ảnh đầy đủ.

Kiến trúc của CNN có các nơ-ron được sắp xếp theo 3 chiều được gọi là chiều rộng, chiều cao và chiều sâu. Mỗi nơ-ron trong lớp hiện tại được kết nối với một bản vá nhỏ của đầu ra từ lớp trước. Nó tương tự như phủ một bộ lọc 𝑵×𝑵 lên ảnh đầu vào. Nó sử dụng các bộ lọc M để đảm bảo nhận được tất cả các chi tiết. Các bộ lọc M này là các bộ trích xuất tính năng trích xuất các tính năng như cạnh, góc, v.v.

Các lp được s dng để xây dng CNN

Các lớp sau được sử dụng để xây dựng CNN –

  • Lớp đầu vào – Nó lấy dữ liệu hình ảnh thô như hiện tại.
  • Lớp kết hợp − Lớp này là khối xây dựng cốt lõi của CNN thực hiện hầu hết các tính toán. Lớp này tính toán các kết cấu giữa các nơ-ron và các bản vá khác nhau trong đầu vào.
  • Lớp đơn vị tuyến tính đã chỉnh lưu − Nó áp dụng chức năng kích hoạt cho đầu ra của lớp trước đó. Nó thêm tính phi tuyến tính vào mạng để nó có thể khái quát hóa tốt cho bất kỳ loại chức năng nào.
  • Lớp tổng hợp – Tổng hợp giúp chúng tôi chỉ giữ lại những phần quan trọng khi chúng tôi tiến hành trong mạng. Lớp tổng hợp hoạt động độc lập trên mọi lát cắt độ sâu của đầu vào và thay đổi kích thước của nó theo không gian. Nó sử dụng chức năng MAX.
  • Lớp được kết nối đầy đủ/Lớp đầu ra − Lớp này tính điểm đầu ra ở lớp cuối cùng. Kết quả đầu ra có kích thước 𝟏×𝟏×𝑳 , trong đó L là các lớp tập dữ liệu huấn luyện số.

Cài đặt các gói Python hu ích

Bạn có thể sử dụng Keras , một API mạng thần kinh cấp cao, được viết bằng Python và có khả năng chạy trên TensorFlow, CNTK hoặc Theno. Nó tương thích với Python 2.7-3.6. Bạn có thể tìm hiểu thêm về nó từ https://keras.io/ 

Sử dụng các lệnh sau để cài đặt máy ảnh – pip install keras

Trên môi trường conda , bạn có thể sử dụng lệnh sau –

conda install –c conda-forge keras

Xây dng hi quy tuyến tính bng ANN

Trong phần này, bạn sẽ tìm hiểu cách xây dựng một biến hồi quy tuyến tính bằng cách sử dụng mạng thần kinh nhân tạo. Bạn có thể sử dụng KerasRegressor để đạt được điều này. Trong ví dụ này, chúng tôi đang sử dụng bộ dữ liệu giá nhà ở Boston với 13 số cho các tài sản ở Boston. Mã Python cho cùng được hiển thị ở đây – Nhập tất cả các gói cần thiết như được hiển thị

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold

Bây giờ, tải tập dữ liệu của chúng tôi được lưu trong thư mục cục bộ.

dataframe = pandas.read_csv("/Usrrs/admin/data.csv", delim_whitespace = True, header = None)
dataset = dataframe.values

Bây giờ, hãy chia dữ liệu thành các biến đầu vào và đầu ra, tức là X và Y

X = dataset[:,0:13]
Y = dataset[:,13]

Vì chúng tôi sử dụng các mạng thần kinh cơ bản, hãy xác định mô hình

def baseline_model():
Bây giờ, tạo mô hình như sau 
model_regressor = Sequential()
model_regressor.add(Dense(13, input_dim = 13, kernel_initializer = 'normal', 
   activation = 'relu'))
model_regressor.add(Dense(1, kernel_initializer = 'normal'))

Tiếp theo, biên dịch mô hình

model_regressor.compile(loss='mean_squared_error', optimizer='adam')
return model_regressor
Bây giờ, hãy sửa hạt giống ngẫu nhiên để có khả năng tái tạo như sau
seed = 7
numpy.random.seed(seed)

Đối tượng bao bọc Keras để sử dụng trong scikit-learning làm công cụ ước tính hồi quy được gọi là KerasRegressor . Trong phần này, chúng ta sẽ đánh giá mô hình này với bộ dữ liệu chuẩn hóa.

estimator = KerasRegressor(build_fn = baseline_model, nb_epoch = 100, batch_size = 5, verbose = 0)
kfold = KFold(n_splits = 10, random_state = seed)
baseline_result = cross_val_score(estimator, X, Y, cv = kfold)
print("Baseline: %.2f (%.2f) MSE" % (Baseline_result.mean(),Baseline_result.std()))

Đầu ra của mã được hiển thị ở trên sẽ là ước tính hiệu suất của mô hình đối với vấn đề đối với dữ liệu không nhìn thấy. Đó sẽ là lỗi bình phương trung bình, bao gồm độ lệch trung bình và độ lệch chuẩn trên tất cả 10 lần đánh giá xác thực chéo.

Image Classifier: Mt ng dng ca Deep Learning

Mạng thần kinh chuyển đổi (CNN) giải quyết vấn đề phân loại hình ảnh, tức là hình ảnh đầu vào thuộc về lớp nào. Bạn có thể sử dụng thư viện học sâu Keras. Lưu ý rằng chúng tôi đang sử dụng bộ dữ liệu đào tạo và kiểm tra hình ảnh của chó và mèo từ liên kết sau https://www.kaggle.com/c/dogs-vs-cats/data .

Nhập các gói và thư viện máy ảnh quan trọng như được hiển thị –

Gói sau có tên là tuần tự sẽ khởi tạo các mạng thần kinh dưới dạng mạng tuần tự.

from keras.models import Sequential

Gói sau có tên Conv2D được sử dụng để thực hiện thao tác tích chập, bước đầu tiên của CNN.

from keras.layers import Conv2D

Gói sau có tên MaxPoling2D được sử dụng để thực hiện thao tác tổng hợp, bước thứ hai của CNN.

from keras.layers import MaxPooling2D

Gói sau có tên Flatten là quá trình chuyển đổi tất cả các mảng 2D kết quả thành một vectơ tuyến tính dài liên tục duy nhất.

from keras.layers import Flatten

Gói dưới đây có tên là Dense được sử dụng để thực hiện kết nối đầy đủ mạng thần kinh, bước thứ tư của CNN.

from keras.layers import Dense

Bây giờ, hãy tạo một đối tượng của lớp tuần tự.

S_classifier = Sequential()

Bây giờ, bước tiếp theo là mã hóa phần tích chập.

S_classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

Ở đây relu là chức năng chỉnh lưu.

Bây giờ, bước tiếp theo của CNN là thao tác tổng hợp trên các bản đồ đặc trưng kết quả sau phần tích chập.

S-classifier.add(MaxPooling2D(pool_size = (2, 2)))

Bây giờ, chuyển đổi tất cả các hình ảnh gộp thành một vectơ liên tục bằng cách sử dụng kỹ thuật tâng bốc –

S_classifier.add(Flatten())

Tiếp theo, tạo một lớp được kết nối đầy đủ.

S_classifier.add(Dense(units = 128, activation = 'relu'))

Ở đây, 128 là số đơn vị ẩn. Thông thường người ta định nghĩa số đơn vị ẩn là lũy thừa của 2.

Bây giờ, hãy khởi tạo lớp đầu ra như sau –

S_classifier.add(Dense(units = 1, activation = 'sigmoid'))

Bây giờ, biên dịch CNN, chúng tôi đã xây dựng –

S_classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

Ở đây, tham số trình tối ưu hóa là chọn thuật toán giảm độ dốc ngẫu nhiên, tham số loss là để chọn hàm mất mát và tham số metric là chọn chỉ số hiệu suất. Bây giờ, thực hiện tăng cường hình ảnh và sau đó khớp hình ảnh với mạng thần kinh

train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = 
   train_datagen.flow_from_directory(”/Users/admin/training_set”,target_size = 
      (64, 64),batch_size = 32,class_mode = 'binary')

test_set = 
   test_datagen.flow_from_directory('test_set',target_size = 
      (64, 64),batch_size = 32,class_mode = 'binary')

Bây giờ, khớp dữ liệu với mô hình mà chúng ta đã tạo

classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs = 
25,validation_data = test_set,validation_steps = 2000)

Ở đây, các bước_per_epoch có số lượng hình ảnh đào tạo. Bây giờ khi mô hình đã được đào tạo, chúng ta có thể sử dụng nó để dự đoán như sau

Ở đây, các bước_per_epoch có số lượng hình ảnh đào tạo.
Bây giờ khi mô hình đã được đào tạo, chúng ta có thể sử dụng nó để dự đoán như sau -
from keras.preprocessing import image

test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', 
target_size = (64, 64))

test_image = image.img_to_array(test_image)

test_image = np.expand_dims(test_image, axis = 0)

result = classifier.predict(test_image)

training_set.class_indices

if result[0][0] == 1:
prediction = 'dog'

else:
   prediction = 'cat'

The post AI với Python – Học sâu appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-hoc-sau/feed/ 0
Trí tuệ nhân tạo với Python – Thị giác máy tính https://dongthoigian.net/tri-tue-nhan-tao-voi-python-thi-giac-may-tinh/ https://dongthoigian.net/tri-tue-nhan-tao-voi-python-thi-giac-may-tinh/#respond Fri, 11 Aug 2023 04:45:19 +0000 https://dongthoigian.net/?p=16715 Thị giác máy tính là một môn học nghiên cứu cách tái tạo, làm gián đoạn và hiểu cảnh 3d từ hình ảnh 2d

The post Trí tuệ nhân tạo với Python – Thị giác máy tính appeared first on Dongthoigian.

]]>
Thị giác máy tính liên quan đến việc mô hình hóa và tái tạo tầm nhìn của con người bằng phần mềm và phần cứng máy tính. Trong chương này, bạn sẽ tìm hiểu chi tiết về điều này.

Tm nhìn máy tính

Thị giác máy tính là một môn học nghiên cứu cách tái tạo, làm gián đoạn và hiểu cảnh 3d từ hình ảnh 2d của nó, về các thuộc tính của cấu trúc có trong cảnh.

H thng phân cp th giác máy tính

Thị giác máy tính được chia thành ba loại cơ bản như sau –

  • Tầm nhìn cấp thấp – Nó bao gồm hình ảnh quy trình để trích xuất tính năng.
  • Tầm nhìn cấp độ trung cấp – Nó bao gồm nhận dạng đối tượng và diễn giải cảnh 3D
  • Tầm nhìn cấp cao – Nó bao gồm mô tả khái niệm về một cảnh như hoạt động, ý định và hành vi.

Th giác máy tính Vs X lý hình nh

Xử lý ảnh nghiên cứu chuyển đổi ảnh thành ảnh. Đầu vào và đầu ra của xử lý ảnh đều là ảnh.

Thị giác máy tính là việc xây dựng các mô tả rõ ràng, có ý nghĩa về các đối tượng vật lý từ hình ảnh của chúng. Đầu ra của thị giác máy tính là một mô tả hoặc giải thích các cấu trúc trong cảnh 3D.

Các ng dng

Thị giác máy tính tìm các ứng dụng trong các trường sau –

người máy

  • Bản địa hóa-xác định vị trí robot tự động
  • dẫn đường
  • tránh chướng ngại vật
  • Lắp ráp (chốt lỗ, hàn, sơn)
  • Thao tác (ví dụ: bộ điều khiển robot PUMA)
  • Human Robot Interaction (HRI): Robot thông minh để tương tác và phục vụ con người

Thuốc

  • Phân loại và phát hiện (ví dụ: phân loại tổn thương hoặc tế bào và phát hiện khối u)
  • phân đoạn 2D/3D
  • Tái tạo nội tạng người 3D (MRI hoặc siêu âm)
  • Phẫu thuật robot điều khiển bằng thị giác

Bảo vệ

  • Sinh trắc học (mống mắt, vân tay, nhận dạng khuôn mặt)
  • Giám sát-phát hiện một số hoạt động hoặc hành vi đáng ngờ

Vận tải

  • xe tự hành
  • An toàn, ví dụ, giám sát cảnh giác lái xe

Ứng dụng tự động hóa công nghiệp

  • Giám định công nghiệp (phát hiện khuyết tật)
  • Cuộc họp
  • Đọc mã vạch và nhãn gói
  • sắp xếp đối tượng
  • Hiểu tài liệu (ví dụ: OCR)

Cài đặt các gói hu ích

Đối với Thị giác máy tính với Python, bạn có thể sử dụng thư viện phổ biến có tên OpenCV (Open Source Computer Vision). Nó là một thư viện các chức năng lập trình chủ yếu nhằm vào thị giác máy tính thời gian thực. Nó được viết bằng C++ và giao diện chính của nó là C++. Bạn có thể cài đặt gói này với sự trợ giúp của lệnh sau – pip install opencv_python-X.X-cp36-cp36m-winX.whl

Ở đây X đại diện cho phiên bản Python được cài đặt trên máy của bạn cũng như win32 hoặc 64 bit mà bạn đang có.

Nếu bạn đang sử dụng môi trường anaconda , hãy sử dụng lệnh sau để cài đặt OpenCV – conda install -c conda-forge opencv

Đọc, Viết và Hin th mt Hình nh

Hầu hết các ứng dụng CV đều cần lấy hình ảnh làm đầu vào và tạo ra hình ảnh làm đầu ra. Trong phần này, bạn sẽ học cách đọc và ghi tệp hình ảnh với sự trợ giúp của các chức năng do OpenCV cung cấp.

Các hàm OpenCV để đọc, hin th, ghi tp hình nh

OpenCV cung cấp các chức năng sau cho mục đích này –

  • Hàm imread() − Đây là hàm đọc ảnh. OpenCV imread() hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.
  • imshow() function − Đây là chức năng hiển thị hình ảnh trong cửa sổ. Cửa sổ tự động khớp với kích thước hình ảnh. OpenCV imshow() hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.
  • Hàm imwrite() − Đây là hàm để viết một hình ảnh. OpenCV imwrite() hỗ trợ nhiều định dạng hình ảnh khác nhau như PNG, JPEG, JPG, TIFF, v.v.

Ví d

Ví dụ này cho thấy mã Python để đọc một hình ảnh ở một định dạng – hiển thị nó trong một cửa sổ và viết cùng một hình ảnh ở định dạng khác. Xem xét các bước được hiển thị bên dưới –

Nhập gói OpenCV như được hiển thị – import cv2

Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread() –

image = cv2.imread(‘image_flower.jpg’)

Để hiển thị hình ảnh, hãy sử dụng hàm imshow() . Tên của cửa sổ mà bạn có thể nhìn thấy hình ảnh sẽ là image_flower .

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()
trí tuệ nhân tạo hình 3d

Bây giờ, chúng ta có thể ghi cùng một hình ảnh sang định dạng khác, chẳng hạn như .png bằng cách sử dụng hàm imwrite() −

cv2.imwrite(‘image_flower.png’,image)

Đầu ra True có nghĩa là hình ảnh đã được ghi thành công dưới dạng tệp .png trong cùng một thư mục. True

Lưu ý – Hàm destroyallWindows() chỉ đơn giản là hủy tất cả các cửa sổ mà chúng ta đã tạo.

Chuyn đổi không gian màu

Trong OpenCV, các hình ảnh không được lưu trữ bằng cách sử dụng màu RGB thông thường, thay vào đó chúng được lưu trữ theo thứ tự ngược lại tức là theo thứ tự BGR. Do đó, mã màu mặc định khi đọc hình ảnh là BGR. Hàm chuyển đổi màu cvtColor() dùng để chuyển đổi hình ảnh từ mã màu này sang mã màu khác.

Ví d

Xem xét ví dụ này để chuyển đổi hình ảnh từ BGR sang thang độ xám.

Nhập gói OpenCV như được hiển thị –

import cv2

Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread() –

image = cv2.imread(‘image_flower.jpg’)

Bây giờ, nếu chúng ta thấy hình ảnh này bằng hàm imshow() , thì chúng ta có thể thấy rằng hình ảnh này ở định dạng BGR. cv2.imshow(‘BGR_Penguins’,image)

trí tuệ nhân tạo

Bây giờ, hãy sử dụng hàm cvtColor() để chuyển đổi hình ảnh này thành thang độ xám

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)
trí tue nhan tao

Phát hin cnh

Con người sau khi nhìn thấy một bản phác thảo sơ bộ có thể dễ dàng nhận ra nhiều loại đối tượng và tư thế của chúng. Đó là lý do tại sao các cạnh đóng một vai trò quan trọng trong cuộc sống của con người cũng như trong các ứng dụng của thị giác máy tính. OpenCV cung cấp chức năng rất đơn giản và hữu ích được gọi là Canny() để phát hiện các cạnh.

Ví d

Ví dụ sau đây cho thấy việc xác định rõ ràng các cạnh.

Nhập gói OpenCV như được hiển thị –

import cv2import numpy as np

Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread() .

image = cv2.imread(‘Penguins.jpg’)

Bây giờ, hãy sử dụng hàm Canny() để phát hiện các cạnh của hình ảnh đã được đọc. cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

Bây giờ, để hiển thị hình ảnh có cạnh, hãy sử dụng hàm imshow().

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

Chương trình Python này sẽ tạo một hình ảnh có tên là edge_penguins.jpg với tính năng phát hiện cạnh.

trí tuệ nhân tạo

Phát hin khuôn mt

Nhận diện khuôn mặt là một trong những ứng dụng hấp dẫn của thị giác máy tính giúp nó trở nên thực tế cũng như tương lai hơn. OpenCV có một tiện ích tích hợp sẵn để thực hiện nhận diện khuôn mặt. Chúng tôi sẽ sử dụng bộ phân loại tầng Haar để nhận diện khuôn mặt.

D liu Cascade ca cô y

Chúng tôi cần dữ liệu để sử dụng bộ phân loại tầng Haar. Bạn có thể tìm thấy dữ liệu này trong gói OpenCV của chúng tôi. Sau khi cài đặt OpenCv, bạn có thể thấy tên thư mục haarcascades . Sẽ có các tệp .xml cho các ứng dụng khác nhau. Bây giờ, sao chép tất cả chúng cho các mục đích sử dụng khác nhau và sau đó dán vào một thư mục mới trong dự án hiện tại.

Ví dụ Sau đây là mã Python sử dụng Haar Cascade để phát hiện khuôn mặt của Amitabh Bachan được hiển thị trong hình ảnh sau đây

Nhập gói OpenCV như được hiển thị –

import cv2import numpy as np

Bây giờ, hãy sử dụng HaarCascadeClassifier để phát hiện khuôn mặt –

eye_cascade = cv2.CascadeClassifier(‘D:/ProgramData/cascadeclassifier/haarcascade_eye.xml’)

Bây giờ, để đọc một hình ảnh cụ thể, hãy sử dụng hàm imread()

img = cv2.imread(‘AB_Eye.jpg’)

Bây giờ, hãy chuyển đổi nó thành thang độ xám vì nó sẽ chấp nhận hình ảnh màu xám –

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Bây giờ với sự trợ giúp của eye_cascade.detectMultiScale , hãy thực hiện nhận diện khuôn mặt thực tế eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

Bây giờ, vẽ một hình chữ nhật xung quanh toàn bộ khuôn mặt –

for (ex,ey,ew,eh) in eyes:   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)cv2.imwrite('Eye_AB.jpg',img) 

Chương trình Python này sẽ tạo một hình ảnh có tên Eye_AB.jpg với tính năng phát hiện mắt như hình dưới đây

trí tuệ nhân tạo

Xem thêm : AI với Python – Học sâu

The post Trí tuệ nhân tạo với Python – Thị giác máy tính appeared first on Dongthoigian.

]]>
https://dongthoigian.net/tri-tue-nhan-tao-voi-python-thi-giac-may-tinh/feed/ 0
AI với Python – Thuật toán di truyền https://dongthoigian.net/ai-voi-python-thuat-toan-di-truyen/ https://dongthoigian.net/ai-voi-python-thuat-toan-di-truyen/#respond Thu, 03 Aug 2023 08:48:25 +0000 https://dongthoigian.net/?p=16708 GA là một tập hợp con của một nhánh tính toán lớn hơn nhiều được gọi là Tính toán tiến hóa.

The post AI với Python – Thuật toán di truyền appeared first on Dongthoigian.

]]>
Thut toán di truyn là gì?

Thuật toán di truyền (GA) là các thuật toán tìm kiếm dựa trên các khái niệm về chọn lọc tự nhiên và di truyền. GA là một tập hợp con của một nhánh tính toán lớn hơn nhiều được gọi là Tính toán tiến hóa.

GA được phát triển bởi John Holland cùng các sinh viên và đồng nghiệp của ông tại Đại học Michigan, đáng chú ý nhất là David E. Goldberg. Kể từ đó, nó đã được thử nghiệm trên các bài toán tối ưu hóa khác nhau với mức độ thành công cao.

Trong GA, chúng tôi có một nhóm các giải pháp khả thi cho vấn đề đã cho. Những giải pháp này sau đó trải qua quá trình tái tổ hợp và đột biến (giống như trong di truyền tự nhiên), tạo ra những đứa trẻ mới và quá trình này được lặp lại cho nhiều thế hệ khác nhau. Mỗi cá thể (hoặc giải pháp ứng cử viên) được gán một giá trị phù hợp (dựa trên giá trị hàm mục tiêu của nó) và các cá thể phù hợp hơn có cơ hội cao hơn để giao phối và sinh ra các cá thể phù hợp hơn . Điều này phù hợp với Thuyết sinh tồn của Darwin về loài thích nghi nhất .

Do đó, nó tiếp tục phát triển các cá thể hoặc giải pháp tốt hơn qua nhiều thế hệ, cho đến khi đạt đến điểm dừng.

Các thuật toán di truyền về bản chất là đủ ngẫu nhiên, nhưng chúng hoạt động tốt hơn nhiều so với tìm kiếm cục bộ ngẫu nhiên (nơi chúng tôi chỉ thử các giải pháp ngẫu nhiên, theo dõi các giải pháp tốt nhất cho đến nay), vì chúng cũng khai thác thông tin lịch sử.

Làm cách nào để s dng GA cho các vn đề ti ưu hóa?

Tối ưu hóa là một hành động làm cho thiết kế, tình huống, tài nguyên và hệ thống trở nên hiệu quả nhất có thể. Sơ đồ khối sau đây cho thấy quá trình tối ưu hóa

python for ai

Các giai đon ca cơ chế GA cho quá trình ti ưu hóa

Sau đây là trình tự các bước của cơ chế GA khi được sử dụng để tối ưu hóa các vấn đề.

  • Bước 1 – Tạo dân số ban đầu một cách ngẫu nhiên.
  • Bước 2 – Chọn giải pháp ban đầu với các giá trị phù hợp nhất.
  • Bước 3 – Kết hợp lại các giải pháp đã chọn bằng cách sử dụng toán tử đột biến và chéo.
  • Bước 4 – Đưa một thế hệ con vào quần thể.
  • Bước 5 – Bây giờ, nếu điều kiện dừng được đáp ứng, hãy trả về giải pháp có giá trị phù hợp nhất của chúng. Khác đi đến bước 2.

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

Để giải quyết vấn đề bằng cách sử dụng Thuật toán di truyền trong Python, chúng tôi sẽ sử dụng một gói mạnh mẽ cho GA có tên là DEAP . Nó là một thư viện khung tính toán tiến hóa mới để tạo mẫu nhanh và thử nghiệm các ý tưởng. Chúng ta có thể cài đặt gói này với sự trợ giúp của lệnh sau trên dấu nhắc lệnh –

pip install deap

Nếu bạn đang sử dụng môi trường anaconda , thì có thể sử dụng lệnh sau để cài đặt deap −

conda install -c conda-forge deap

Thc hin các gii pháp bng thut toán di truyn

Phần này giải thích cho bạn cách triển khai các giải pháp bằng thuật toán di truyền.

To các mu bit

Ví dụ sau đây cho bạn thấy cách tạo một chuỗi bit chứa 15 bit, dựa trên bài toán Một Max . Nhập các gói cần thiết như được hiển thị

import random
from deap import base, creator, tools

Định nghĩa hàm đánh giá. Đó là bước đầu tiên để tạo ra một thuật toán di truyền.

def eval_func(individual):
   target_sum = 15
   return len(individual) - abs(sum(individual) - target_sum),

Bây giờ, hãy tạo hộp công cụ với các tham số phù hợp

def create_toolbox(num_bits):
   creator.create("FitnessMax", base.Fitness, weights=(1.0,))
   creator.create("Individual", list, fitness=creator.FitnessMax)

Khởi tạo hộp công cụ

toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual,
   toolbox.attr_bool, num_bits)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

Đăng ký toán tử đánh giá

toolbox.register("evaluate", eval_func)

Bây giờ, hãy đăng ký toán tử chéo

toolbox.register("mate", tools.cxTwoPoint)

Đăng ký một toán tử đột biến –

toolbox.register("mutate", tools.mutFlipBit, indpb = 0.05)

Xác định toán tử để nhân giống –

toolbox.register("select", tools.selTournament, tournsize = 3)
return toolbox
if __name__ == "__main__":
   num_bits = 45
   toolbox = create_toolbox(num_bits)
   random.seed(7)
   population = toolbox.population(n = 500)
   probab_crossing, probab_mutating = 0.5, 0.2
   num_generations = 10
   print('\nEvolution process starts')

Đánh giá toàn bộ dân số

fitnesses = list(map(toolbox.evaluate, population))
for ind, fit in zip(population, fitnesses):
   ind.fitness.values = fit
print('\nEvaluated', len(population), 'individuals')

Tạo và lặp lại qua các thế hệ

for g in range(num_generations):
   print("\n- Generation", g)

Lựa chọn các cá nhân thế hệ tiếp theo

offspring = toolbox.select(population, len(population))

Bây giờ, sao chép các cá nhân đã chọn –

offspring = list(map(toolbox.clone, offspring))

Áp dụng lai ghép và đột biến trên thế hệ con

for child1, child2 in zip(offspring[::2], offspring[1::2]):
   if random.random() < probab_crossing:
   toolbox.mate(child1, child2)

Xóa giá trị thể lực của con

del child1.fitness.values
del child2.fitness.values

Bây giờ, áp dụng đột biến

for mutant in offspring:
   if random.random() < probab_mutating:
   toolbox.mutate(mutant)
   del mutant.fitness.values

Đánh giá các cá nhân có thể lực không hợp lệ

invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
   ind.fitness.values = fit
print('Evaluated', len(invalid_ind), 'individuals')

Bây giờ, thay thế quần thể bằng cá thể thế hệ tiếp theo

population[:] = offsprin

In số liệu thống kê cho các thế hệ hiện tại

fits = [ind.fitness.values[0] for ind in population]
length = len(population)
mean = sum(fits) / length
sum2 = sum(x*x for x in fits)
std = abs(sum2 / length - mean**2)**0.5
print('Min =', min(fits), ', Max =', max(fits))
print('Average =', round(mean, 2), ', Standard deviation =',
round(std, 2))
print("\n- Evolution ends")

In đầu ra cuối cùng

   best_ind = tools.selBest(population, 1)[0]
   print('\nBest individual:\n', best_ind)
   print('\nNumber of ones:', sum(best_ind))
Following would be the output:
Evolution process starts
Evaluated 500 individuals
- Generation 0
Evaluated 295 individuals
Min = 32.0 , Max = 45.0
Average = 40.29 , Standard deviation = 2.61
- Generation 1
Evaluated 292 individuals
Min = 34.0 , Max = 45.0
Average = 42.35 , Standard deviation = 1.91
- Generation 2
Evaluated 277 individuals
Min = 37.0 , Max = 45.0
Average = 43.39 , Standard deviation = 1.46
… … … …
- Generation 9
Evaluated 299 individuals
Min = 40.0 , Max = 45.0
Average = 44.12 , Standard deviation = 1.11
- Evolution ends
Best individual:
[0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 
 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0,
 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1]
Number of ones: 15

Vn đề hi quy ký hiu

Đây là một trong những vấn đề được biết đến nhiều nhất trong lập trình di truyền. Tất cả các vấn đề về hồi quy ký hiệu đều sử dụng phân phối dữ liệu tùy ý và cố gắng điều chỉnh dữ liệu chính xác nhất bằng một công thức ký hiệu. Thông thường, một phép đo như RMSE (Lỗi bình phương trung bình gốc) được sử dụng để đo mức độ phù hợp của một cá nhân. Đây là một bài toán hồi quy cổ điển và ở đây chúng ta đang sử dụng phương trình 5x 3 -6x 2 +8x=1 . Chúng ta cần làm theo tất cả các bước như trong ví dụ trên, nhưng phần chính sẽ là tạo các tập hợp nguyên thủy vì chúng là nền tảng cho các cá nhân để quá trình đánh giá có thể bắt đầu. Ở đây chúng ta sẽ sử dụng tập hợp nguyên thủy cổ điển. Đoạn mã Python sau đây giải thích điều này một cách chi tiết

import operator
import math
import random
import numpy as np
from deap import algorithms, base, creator, tools, gp
def division_operator(numerator, denominator):
   if denominator == 0:
      return 1
   return numerator / denominator
def eval_func(individual, points):
   func = toolbox.compile(expr=individual)
   return math.fsum(mse) / len(points),
def create_toolbox():
   pset = gp.PrimitiveSet("MAIN", 1)
   pset.addPrimitive(operator.add, 2)
   pset.addPrimitive(operator.sub, 2)
   pset.addPrimitive(operator.mul, 2)
   pset.addPrimitive(division_operator, 2)
   pset.addPrimitive(operator.neg, 1)
   pset.addPrimitive(math.cos, 1)
   pset.addPrimitive(math.sin, 1)
   pset.addEphemeralConstant("rand101", lambda: random.randint(-1,1))
   pset.renameArguments(ARG0 = 'x')
   creator.create("FitnessMin", base.Fitness, weights = (-1.0,))
   creator.create("Individual",gp.PrimitiveTree,fitness=creator.FitnessMin)
   toolbox = base.Toolbox()
   toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=1, max_=2)
   toolbox.expr)
   toolbox.register("population",tools.initRepeat,list, toolbox.individual)
   toolbox.register("compile", gp.compile, pset = pset)
   toolbox.register("evaluate", eval_func, points = [x/10. for x in range(-10,10)])
   toolbox.register("select", tools.selTournament, tournsize = 3)
   toolbox.register("mate", gp.cxOnePoint)
   toolbox.register("expr_mut", gp.genFull, min_=0, max_=2)
   toolbox.register("mutate", gp.mutUniform, expr = toolbox.expr_mut, pset = pset)
   toolbox.decorate("mate", gp.staticLimit(key = operator.attrgetter("height"), max_value = 17))
   toolbox.decorate("mutate", gp.staticLimit(key = operator.attrgetter("height"), max_value = 17))
   return toolbox
if __name__ == "__main__":
   random.seed(7)
   toolbox = create_toolbox()
   population = toolbox.population(n = 450)
   hall_of_fame = tools.HallOfFame(1)
   stats_fit = tools.Statistics(lambda x: x.fitness.values)
   stats_size = tools.Statistics(len)
   mstats = tools.MultiStatistics(fitness=stats_fit, size = stats_size)
   mstats.register("avg", np.mean)
   mstats.register("std", np.std)
   mstats.register("min", np.min)
   mstats.register("max", np.max)
   probab_crossover = 0.4
   probab_mutate = 0.2
   number_gen = 10
   population, log = algorithms.eaSimple(population, toolbox,
      probab_crossover, probab_mutate, number_gen,
      stats = mstats, halloffame = hall_of_fame, verbose = True)

Lưu ý rằng tất cả các bước cơ bản giống như được sử dụng khi tạo các mẫu bit. Chương trình này sẽ cho chúng ta kết quả là min, max, std (độ lệch chuẩn) sau 10 số thế hệ.

Xem thêm : Trí tuệ nhân tạo với Python – Thị giác máy tính

The post AI với Python – Thuật toán di truyền appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-thuat-toan-di-truyen/feed/ 0
AI với Python – Học tăng cường https://dongthoigian.net/ai-voi-python-hoc-tang-cuong/ https://dongthoigian.net/ai-voi-python-hoc-tang-cuong/#respond Thu, 03 Aug 2023 08:29:15 +0000 https://dongthoigian.net/?p=16697 Môi trường và Tác nhân là các khối xây dựng chính của việc học tăng cường trong AI

The post AI với Python – Học tăng cường appeared first on Dongthoigian.

]]>
Khái nim cơ bn v hc tăng cường

Loại học tập này được sử dụng để củng cố hoặc tăng cường mạng dựa trên thông tin phê bình. Nghĩa là, một mạng đang được đào tạo theo phương pháp học tăng cường, sẽ nhận được một số phản hồi từ môi trường. Tuy nhiên, thông tin phản hồi là đánh giá và không hướng dẫn như trong trường hợp học tập có giám sát. Dựa trên phản hồi này, mạng thực hiện điều chỉnh các trọng số để thu được thông tin phản biện tốt hơn trong tương lai. Quá trình học tập này tương tự như học tập có giám sát nhưng chúng ta có thể có rất ít thông tin. Hình dưới đây đưa ra sơ đồ khối của việc học tăng cường

AI với Python

Khi xây dng: Môi trường và Tác nhân

Môi trường và Tác nhân là các khối xây dựng chính của việc học tăng cường trong AI. Phần này thảo luận chi tiết về chúng –

Đại lý

Một tác nhân là bất cứ thứ gì có thể cảm nhận được môi trường của nó thông qua các cảm biến và hành động theo môi trường đó thông qua các tác nhân.

  • Một tác nhân con người có các cơ quan cảm giác như mắt, tai, mũi, lưỡi và da song song với các cảm biến và các cơ quan khác như tay, chân, miệng, đối với các cơ quan tác động.
  • Một tác nhân rô-bốt thay thế máy ảnh và công cụ tìm phạm vi hồng ngoại cho cảm biến, đồng thời thay thế các động cơ và bộ truyền động khác nhau cho bộ tạo hiệu ứng.
  • Một tác nhân phần mềm đã mã hóa các chuỗi bit như các chương trình và hành động của nó.

thut ng đại lý

Các thuật ngữ sau được sử dụng thường xuyên hơn trong học tăng cường trong AI –

  • Đo lường hiệu suất của đại lý – Đó là tiêu chí, xác định mức độ thành công của một đại lý.
  • Hành vi của tác nhân – Đó là hành động mà tác nhân thực hiện sau bất kỳ chuỗi nhận thức nhất định nào.
  • Nhận thức – Đó là đầu vào nhận thức của tác nhân tại một trường hợp nhất định.
  • Trình tự nhận thức – Đó là lịch sử của tất cả những gì một tác nhân đã nhận thức được cho đến nay.
  • Chức năng tác nhân – Đó là một bản đồ từ trình tự nguyên tắc đến một hành động.

Môi trường

Một số chương trình hoạt động trong một môi trường hoàn toàn nhân tạo chỉ giới hạn ở đầu vào bàn phím, cơ sở dữ liệu, hệ thống tệp máy tính và đầu ra ký tự trên màn hình.

Ngược lại, một số tác nhân phần mềm, chẳng hạn như robot phần mềm hoặc softbot, tồn tại trong các lĩnh vực softbot phong phú và không giới hạn. Trình mô phỏng có một môi trường rất chi tiết và phức tạp . Tác nhân phần mềm cần chọn từ một loạt dài các hành động trong thời gian thực.

Ví dụ: một softbot được thiết kế để quét các tùy chọn trực tuyến của khách hàng và hiển thị các mặt hàng thú vị cho khách hàng hoạt động trong môi trường thực cũng như nhân tạo .

Thuc tính ca môi trường

Môi trường có các thuộc tính đa dạng như được thảo luận bên dưới –

  • Rời rạc/Liên tục − Nếu có một số giới hạn các trạng thái riêng biệt, được xác định rõ ràng của môi trường, thì môi trường đó là rời rạc, nếu không thì nó là liên tục. Ví dụ, cờ vua là một môi trường rời rạc và lái xe là một môi trường liên tục.
  • Có thể quan sát/Có thể quan sát một phần − Nếu có thể xác định trạng thái hoàn chỉnh của môi trường tại mỗi thời điểm từ các nhận thức, thì nó có thể quan sát được; mặt khác, nó chỉ có thể quan sát được một phần.
  • Tĩnh/Động – Nếu môi trường không thay đổi trong khi tác nhân đang hoạt động, thì môi trường đó là tĩnh; ngược lại nó là động.
  • Một tác nhân/Nhiều tác nhân − Môi trường có thể chứa các tác nhân khác có thể cùng loại hoặc khác loại với tác nhân đó.
  • Có thể truy cập/Không thể truy cập – Nếu bộ máy cảm giác của tác nhân có thể truy cập vào trạng thái hoàn chỉnh của môi trường, thì môi trường đó có thể truy cập được đối với tác nhân đó; nếu không thì nó không thể truy cập được.
  • Xác định/Không xác định − Nếu trạng thái tiếp theo của môi trường được xác định hoàn toàn bởi trạng thái hiện tại và các hành động của tác nhân, thì môi trường đó là xác định; nếu không nó là không xác định.

Tình tiết/Không tình tiết − Trong môi trường tình tiết, mỗi tình tiết bao gồm tác nhân nhận thức và sau đó hành động. Chất lượng hành động của nó chỉ phụ thuộc vào chính tập phim. Các tập tiếp theo không phụ thuộc vào các hành động trong các tập trước. Môi trường nhiều tập đơn giản hơn nhiều vì tác nhân không cần phải suy nghĩ trước.

AI với python

Xây dng môi trường vi Python

Để xây dựng tác nhân học tập tăng cường, chúng tôi sẽ sử dụng gói OpenAI Gym có thể được cài đặt với sự trợ giúp của lệnh sau –

pip install gym

Có nhiều môi trường khác nhau trong phòng tập OpenAI có thể được sử dụng cho nhiều mục đích khác nhau. Một vài trong số đó là Cartpole-v0, Hopper-v1 và MsPacman-v0 . Họ yêu cầu động cơ khác nhau. Bạn có thể tìm thấy tài liệu chi tiết về OpenAI Gym trên https://gym.openai.com/docs/#environments

Đoạn mã sau hiển thị một ví dụ về mã Python cho môi trường cartpole-v0 −

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
   env.render()
   env.step(env.action_space.sample())
python với AI

Bạn có thể xây dựng các môi trường khác theo cách tương tự.

Xây dng mt tác nhân hc tp vi Python

Để xây dựng tác nhân học tăng cường, chúng tôi sẽ sử dụng gói OpenAI Gym như được hiển thị

import gym
env = gym.make('CartPole-v0')
for _ in range(20):
   observation = env.reset()
   for i in range(100):
      env.render()
      print(observation)
      action = env.action_space.sample()
      observation, reward, done, info = env.step(action)
      if done:
         print("Episode finished after {} timesteps".format(i+1))
         break
ai với python

Quan sát rằng xe đẩy có thể tự cân bằng

Xem thêm : AI với Python – Thuật toán di truyền

The post AI với Python – Học tăng cường appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-hoc-tang-cuong/feed/ 0
AI với Python – Chơi game https://dongthoigian.net/ai-voi-python-choi-game/ https://dongthoigian.net/ai-voi-python-choi-game/#respond Sat, 29 Jul 2023 11:39:49 +0000 https://dongthoigian.net/?p=16679 Trò chơi được chơi với một chiến lược. Mọi người chơi hoặc đội sẽ đưa ra chiến lược

The post AI với Python – Chơi game appeared first on Dongthoigian.

]]>
Thut toán tìm kiếm

Bạn sẽ phải xem xét các trò chơi máy tính cũng với chiến lược tương tự như trên. Lưu ý rằng Thuật toán tìm kiếm là thuật toán tìm ra chiến lược trong các trò chơi trên máy tính.

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

Mục tiêu của các thuật toán tìm kiếm là tìm ra tập hợp các nước đi tối ưu để có thể đi đến đích cuối cùng và giành chiến thắng. Các thuật toán này sử dụng tập hợp các điều kiện chiến thắng, khác nhau đối với mỗi trò chơi, để tìm ra các nước đi tốt nhất.

Hình dung một trò chơi máy tính như cái cây. Chúng tôi biết rằng cây có các nút. Bắt đầu từ gốc, chúng ta có thể đi đến nút chiến thắng cuối cùng, nhưng với những nước đi tối ưu. Đó là công việc của thuật toán tìm kiếm. Mỗi nút trong cây như vậy đại diện cho một trạng thái trong tương lai. Các thuật toán tìm kiếm tìm kiếm thông qua cây này để đưa ra quyết định ở mỗi bước hoặc nút của trò chơi.

Tìm kiếm kết hp

Nhược điểm chính của việc sử dụng các thuật toán tìm kiếm là chúng có bản chất toàn diện, đó là lý do tại sao chúng khám phá toàn bộ không gian tìm kiếm để tìm giải pháp dẫn đến lãng phí tài nguyên. Sẽ cồng kềnh hơn nếu các thuật toán này cần tìm kiếm toàn bộ không gian tìm kiếm để tìm giải pháp cuối cùng.

Để loại bỏ loại vấn đề như vậy, chúng ta có thể sử dụng tìm kiếm tổ hợp sử dụng kinh nghiệm để khám phá không gian tìm kiếm và giảm kích thước của nó bằng cách loại bỏ các bước di chuyển sai có thể xảy ra. Do đó, các thuật toán như vậy có thể tiết kiệm tài nguyên. Một số thuật toán sử dụng heuristic để tìm kiếm không gian và tiết kiệm tài nguyên được thảo luận ở đây –

Thuật toán tối thiểu

Đó là chiến lược được sử dụng bởi tìm kiếm tổ hợp sử dụng heuristic để tăng tốc chiến lược tìm kiếm. Khái niệm về chiến lược Minimax có thể được hiểu với ví dụ về trò chơi hai người chơi, trong đó mỗi người chơi cố gắng dự đoán nước đi tiếp theo của đối thủ và cố gắng giảm thiểu chức năng đó. Ngoài ra, để giành chiến thắng, người chơi luôn cố gắng phát huy tối đa chức năng của mình dựa trên tình hình hiện tại.

Heuristic đóng một vai trò quan trọng trong các loại chiến lược như Minimax. Mỗi nút của cây sẽ có một hàm heuristic liên kết với nó. Dựa trên kinh nghiệm đó, nó sẽ đưa ra quyết định di chuyển về phía nút có lợi nhất cho họ.

Ct ta Alpha-Beta

Một vấn đề chính với thuật toán Minimax là nó có thể khám phá những phần không liên quan của cây, dẫn đến lãng phí tài nguyên. Do đó, phải có một chiến lược để quyết định phần nào của cây có liên quan và phần nào không liên quan và để lại phần không liên quan chưa được khám phá. Cắt tỉa Alpha-Beta là một trong những loại chiến lược như vậy.

Mục tiêu chính của thuật toán cắt tỉa Alpha-Beta là để tránh việc tìm kiếm những phần không có lời giải của cây. Khái niệm chính của cắt tỉa Alpha-Beta là sử dụng hai giới hạn có tên Alpha , giới hạn dưới tối đa và Beta , giới hạn trên tối thiểu. Hai tham số này là các giá trị hạn chế tập hợp các giải pháp khả thi. Nó so sánh giá trị của nút hiện tại với giá trị của các tham số alpha và beta, để nó có thể di chuyển đến phần của cây có lời giải và loại bỏ phần còn lại.

Thut toán Negamax

Thuật toán này không khác với thuật toán Minimax, nhưng nó có cách triển khai thanh lịch hơn. Nhược điểm chính của việc sử dụng thuật toán Minimax là chúng ta cần xác định hai hàm heuristic khác nhau. Mối liên hệ giữa các heuristic này là, trạng thái của trò chơi càng tốt đối với một người chơi thì càng tệ đối với người chơi kia. Trong thuật toán Negamax, cùng một công việc của hai hàm heuristic được thực hiện với sự trợ giúp của một hàm heuristic duy nhất.

Xây dng Bot để chơi trò chơi

Để tạo bot chơi trò chơi hai người chơi trong AI, chúng ta cần cài đặt thư viện easyAI . Nó là một khung trí tuệ nhân tạo cung cấp tất cả các chức năng để xây dựng trò chơi hai người chơi. Bạn có thể tải xuống với sự trợ giúp của lệnh sau –

pip install easyAI

Mt Bot để chơi Đồng xu cui cùng

Trong trò chơi này, sẽ có một đống tiền xu. Mỗi người chơi phải lấy một số xu từ đống đó. Mục tiêu của trò chơi là tránh lấy đồng xu cuối cùng trong đống. Chúng tôi sẽ sử dụng lớp LastCoinStanding kế thừa từ lớp TwoPlayersGame của thư viện easyAI . Đoạn mã sau hiển thị mã Python cho trò chơi này – Nhập các gói cần thiết như được hiển thị

from easyAI import TwoPlayersGame, id_solve, Human_Player, AI_Player
from easyAI.AI import TT

Bây giờ, kế thừa lớp từ lớp TwoPlayerGame để xử lý mọi hoạt động của trò chơi

class LastCoin_game(TwoPlayersGame):
   def __init__(self, players):

Bây giờ, xác định người chơi và người chơi sẽ bắt đầu trò chơi

self.players = players
self.nplayer = 1

Bây giờ, hãy xác định số xu trong trò chơi, ở đây chúng tôi đang sử dụng 15 xu cho trò chơi.

self.num_coins = 15

Xác định số xu tối đa mà người chơi có thể nhận được trong một nước đi.

self.max_coins = 4

Bây giờ có một số điều cần xác định như được hiển thị trong đoạn mã sau. Xác định các bước di chuyển có thể.

def possible_moves(self):
   return [str(a) for a in range(1, self.max_coins + 1)]

Xác định việc loại bỏ các đồng tiền

def make_move(self, move):
   self.num_coins -= int(move)

Xác định ai đã lấy đồng xu cuối cùng

def win_game(self):
   return self.num_coins <= 0

Xác định thời điểm dừng trò chơi, đó là khi ai đó thắng

def is_over(self):
   return self.win()

Nêu cách tính điểm.

def score(self):
   return 100 if self.win_game() else 0

Xác định số xu còn lại trong đống

def show(self):
   print(self.num_coins, 'coins left in the pile')
if __name__ == "__main__":
   tt = TT()
   LastCoin_game.ttentry = lambda self: self.num_coins

Giải trò chơi bằng khối mã sau

r, d, m = id_solve(LastCoin_game,
   range(2, 20), win_score=100, tt=tt)
print(r, d, m)

Quyết định ai sẽ bắt đầu trò chơi

game = LastCoin_game([AI_Player(tt), Human_Player()])
game.play()

Bạn có thể tìm thấy đầu ra sau đây và cách chơi đơn giản của trò chơi này

d:2, a:0, m:1
d:3, a:0, m:1
d:4, a:0, m:1
d:5, a:0, m:1
d:6, a:100, m:4
1 6 4
15 coins left in the pile
Move #1: player 1 plays 4 :
11 coins left in the pile
Player 2 what do you play ? 2
Move #2: player 2 plays 2 :
9 coins left in the pile
Move #3: player 1 plays 3 :
6 coins left in the pile
Player 2 what do you play ? 1
Move #4: player 2 plays 1 :
5 coins left in the pile
Move #5: player 1 plays 4 :
1 coins left in the pile
Player 2 what do you play ? 1
Move #6: player 2 plays 1 :
0 coins left in the pile

Bot để chơi Tic Tac Toe

Tic-Tac-Toe rất quen thuộc và là một trong những trò chơi phổ biến nhất. Hãy để chúng tôi tạo trò chơi này bằng cách sử dụng thư viện easyAI trong Python. Đoạn mã sau là mã Python của trò chơi này – Nhập các gói như được hiển thị

from easyAI import TwoPlayersGame, AI_Player, Negamax
from easyAI.Player import Human_Player

Kế thừa lớp từ lớp TwoPlayerGame để xử lý mọi hoạt động của trò chơi −

class TicTacToe_game(TwoPlayersGame):
   def __init__(self, players):

Bây giờ, hãy xác định người chơi và người chơi sẽ bắt đầu trò chơi

self.players = players
self.nplayer = 1

Xác định loại bảng –

self.board = [0] * 9

Bây giờ có một số điều cần xác định như sau –

Xác định các bước di chuyển có thể

def possible_moves(self):
   return [x + 1 for x, y in enumerate(self.board) if y == 0]

Xác định nước đi của một người chơi –

def make_move(self, move):
   self.board[int(move) - 1] = self.nplayer

Để tăng cường AI, hãy xác định thời điểm người chơi di chuyển –

def umake_move(self, move):
   self.board[int(move) - 1] = 0

Xác định điều kiện thua mà đối thủ có ba hàng

def condition_for_lose(self):
   possible_combinations = [[1,2,3], [4,5,6], [7,8,9],
      [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]]
   return any([all([(self.board[z-1] == self.nopponent)
      for z in combination]) for combination in possible_combinations])

Xác định kiểm tra để kết thúc trò chơi

def is_over(self):
   return (self.possible_moves() == []) or self.condition_for_lose()

Hiển thị vị trí hiện tại của người chơi trong trò chơi

def show(self):
   print('\n'+'\n'.join([' '.join([['.', 'O', 'X'][self.board[3*j + i]]
      for i in range(3)]) for j in range(3)]))

Tính điểm.

def scoring(self):
   return -100 if self.condition_for_lose() else 0

Xác định phương thức chính để xác định thuật toán và bắt đầu trò chơi

if __name__ == "__main__":
   algo = Negamax(7)
   TicTacToe_game([Human_Player(), AI_Player(algo)]).play()

Bạn có thể thấy đầu ra sau đây và cách chơi đơn giản của trò chơi này

. . .
. . .
. . .
Player 1 what do you play ? 1
Move #1: player 1 plays 1 :
O . .
. . .
. . .
Move #2: player 2 plays 5 :
O . .
. X .
121
. . .
Player 1 what do you play ? 3
Move #3: player 1 plays 3 :
O . O
. X .
. . .
Move #4: player 2 plays 2 :
O X O
. X .
. . .
Player 1 what do you play ? 4
Move #5: player 1 plays 4 :
O X O
O X .
. . .
Move #6: player 2 plays 8 :
O X O
O X .
. X .

Xem Thêm : AI với Python – Mạng lưới thần kinh

The post AI với Python – Chơi game appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-choi-game/feed/ 0
AI với Python – Tìm kiếm theo kinh nghiệm https://dongthoigian.net/ai-voi-python-tim-kiem-theo-kinh-nghiem/ https://dongthoigian.net/ai-voi-python-tim-kiem-theo-kinh-nghiem/#respond Thu, 27 Jul 2023 11:09:51 +0000 https://dongthoigian.net/?p=16673 Tìm kiếm heuristic đóng một vai trò quan trọng trong trí tuệ nhân tạo.

The post AI với Python – Tìm kiếm theo kinh nghiệm appeared first on Dongthoigian.

]]>
Khái nim tìm kiếm heuristic trong AI

Heuristic là một quy tắc ngón tay cái dẫn chúng ta đến giải pháp có thể xảy ra. Hầu hết các vấn đề trong trí tuệ nhân tạo đều có tính chất cấp số nhân và có nhiều giải pháp khả thi. Bạn không biết chính xác giải pháp nào là đúng và việc kiểm tra tất cả các giải pháp sẽ rất tốn kém.

Do đó, việc sử dụng heuristic thu hẹp việc tìm kiếm giải pháp và loại bỏ các tùy chọn sai. Phương pháp sử dụng heuristic để dẫn tìm kiếm trong không gian tìm kiếm được gọi là Heuristic Search. Các kỹ thuật heuristic rất hữu ích vì tìm kiếm có thể được tăng cường khi bạn sử dụng chúng.

S khác bit gia tìm kiếm không chính xác và tìm kiếm đầy đủ thông tin

Có hai loại chiến lược kiểm soát hoặc kỹ thuật tìm kiếm: không được thông báo và được thông báo. Chúng được giải thích chi tiết như được đưa ra ở đây –

Tìm kiếm không chính xác

Nó còn được gọi là chiến lược tìm kiếm mù hoặc kiểm soát mù. Nó được đặt tên như vậy vì chỉ có thông tin về định nghĩa vấn đề và không có thông tin bổ sung nào khác về các trạng thái. Loại kỹ thuật tìm kiếm này sẽ tìm kiếm toàn bộ không gian trạng thái để tìm lời giải. Tìm kiếm theo chiều rộng (BFS) và Tìm kiếm theo chiều sâu (DFS) là những ví dụ về tìm kiếm không chính xác.

tìm kiếm thông báo

Nó còn được gọi là chiến lược tìm kiếm heuristic hoặc chiến lược điều khiển heuristic. Nó được đặt tên như vậy vì có thêm một số thông tin về các tiểu bang. Thông tin bổ sung này rất hữu ích để tính toán sở thích giữa các nút con để khám phá và mở rộng. Sẽ có một hàm heuristic được liên kết với mỗi nút. Tìm kiếm đầu tiên tốt nhất (BFS), A*, Giá trị trung bình và Phân tích là những ví dụ về tìm kiếm có hiểu biết.

Các vn đề v s hài lòng v ràng buc (CSP)

Hạn chế có nghĩa là hạn chế hoặc giới hạn. Trong AI, các vấn đề thỏa mãn ràng buộc là các vấn đề phải được giải quyết dưới một số ràng buộc. Trọng tâm phải là không vi phạm ràng buộc trong khi giải quyết các vấn đề như vậy. Cuối cùng, khi chúng tôi đạt được giải pháp cuối cùng, CSP phải tuân theo hạn chế.

Vấn đề trong thế giới thực được giải quyết bằng sự thỏa mãn ràng buộc

AI VỚI PYTHON

Các phần trước xử lý việc tạo ra các vấn đề thỏa mãn ràng buộc. Bây giờ, chúng ta hãy áp dụng điều này cho các vấn đề trong thế giới thực. Một số ví dụ về các vấn đề trong thế giới thực được giải quyết bằng sự thỏa mãn ràng buộc như sau –

Gii quan h đại s

Với sự trợ giúp của bài toán thỏa mãn ràng buộc, chúng ta có thể giải quyết các quan hệ đại số. Trong ví dụ này, chúng ta sẽ cố gắng giải một quan hệ đại số đơn giản a*2 = b . Nó sẽ trả về giá trị của a và b trong phạm vi mà chúng ta sẽ xác định.

Sau khi hoàn thành chương trình Python này, bạn sẽ có thể hiểu những kiến ​​thức cơ bản về giải quyết các vấn đề với sự thỏa mãn ràng buộc.

Lưu ý rằng trước khi viết chương trình, chúng ta cần cài đặt gói Python có tên là python-constraint. Bạn có thể cài đặt nó với sự trợ giúp của lệnh sau –

pip install python-constraint

Các bước sau đây cho bạn thấy một chương trình Python để giải quan hệ đại số bằng cách sử dụng sự thỏa mãn ràng buộc –

Nhập gói ràng buộc bằng lệnh sau –

from constraint import *

Bây giờ, hãy tạo một đối tượng của mô-đun có tên là problem() như hình bên dưới –

problem = Problem()

Bây giờ, xác định các biến. Lưu ý rằng ở đây chúng tôi có hai biến a và b và chúng tôi đang xác định 10 là phạm vi của chúng, có nghĩa là chúng tôi đã nhận được giải pháp trong 10 số đầu tiên.

problem.addVariable('a', range(10))
problem.addVariable('b', range(10))

Tiếp theo, xác định ràng buộc cụ thể mà chúng tôi muốn áp dụng cho vấn đề này. Quan sát rằng ở đây chúng tôi đang sử dụng ràng buộc a*2 = b .

problem.addConstraint(lambda a, b: a * 2 == b)

Bây giờ, hãy tạo đối tượng của mô-đun getSolution() bằng lệnh sau –

solutions = problem.getSolutions()

Cuối cùng, in đầu ra bằng lệnh sau –

print (solutions)

Bạn có thể quan sát đầu ra của chương trình trên như sau –

[{'a': 4, 'b': 8}, {'a': 3, 'b': 6}, {'a': 2, 'b': 4}, {'a': 1, 'b': 2}, {'a': 0, 'b': 0}]

Hình vuông ma thut

Hình vuông kỳ diệu là sự sắp xếp các số riêng biệt, thường là số nguyên, trong một lưới ô vuông, trong đó các số trong mỗi hàng và trong mỗi cột và các số trong đường chéo, tất cả cộng lại thành một số được gọi là “hằng số kỳ diệu” .

Sau đây là cách thực thi từng bước mã Python đơn giản để tạo hình vuông ma thuật – Định nghĩa một hàm có tên magic_square , như hình dưới đây

def magic_square(matrix_ms):
   iSize = len(matrix_ms[0])
   sum_list = []

Đoạn mã sau hiển thị mã cho chiều dọc của hình vuông

for col in range(iSize):
   sum_list.append(sum(row[col] for row in matrix_ms))

Đoạn mã sau hiển thị mã cho chiều ngang của hình vuông –

sum_list.extend([sum (lines) for lines in matrix_ms])

Đoạn mã sau hiển thị mã cho chiều ngang của hình vuông

dlResult = 0
for i in range(0,iSize):
   dlResult +=matrix_ms[i][i]
sum_list.append(dlResult)
drResult = 0
for i in range(iSize-1,-1,-1):
   drResult +=matrix_ms[i][i]
sum_list.append(drResult)

if len(set(sum_list))>1:
   return False
return True

Bây giờ, đưa ra giá trị của ma trận và kiểm tra đầu ra –

print(magic_square([[1,2,3], [4,5,6], [7,8,9]]))

Bạn có thể quan sát thấy rằng đầu ra sẽ là Sai vì tổng không bằng một số.

print(magic_square([[3,9,2], [3,5,7], [9,1,6]]))

Bạn có thể quan sát thấy rằng đầu ra sẽ là True vì tổng là cùng một số, ở đây là 15

Xem thêm : AI với Python – Chơi game

The post AI với Python – Tìm kiếm theo kinh nghiệm appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-tim-kiem-theo-kinh-nghiem/feed/ 0
AI với Python – Nhận dạng giọng nói https://dongthoigian.net/ai-voi-python-nhan-dang-giong-noi/ https://dongthoigian.net/ai-voi-python-nhan-dang-giong-noi/#respond Wed, 26 Jul 2023 13:22:46 +0000 https://dongthoigian.net/?p=16663 Trong chương này, chúng ta sẽ tìm hiểu về nhận dạng giọng nói bằng AI với Python.

The post AI với Python – Nhận dạng giọng nói appeared first on Dongthoigian.

]]>
Lời nói là phương tiện giao tiếp cơ bản nhất của con người trưởng thành. Mục tiêu cơ bản của xử lý giọng nói là cung cấp sự tương tác giữa con người và máy móc.

Hệ thống xử lý giọng nói chủ yếu có ba nhiệm vụ –

  • Đầu tiên , nhận dạng giọng nói cho phép máy bắt được các từ, cụm từ và câu mà chúng ta nói
  • Thứ hai , xử lý ngôn ngữ tự nhiên để cho phép máy hiểu những gì chúng ta nói và
  • Thứ ba , tổng hợp giọng nói để cho phép máy nói.

Chương này tập trung vào nhận dạng giọng nói , quá trình hiểu các từ được nói bởi con người. Hãy nhớ rằng các tín hiệu giọng nói được ghi lại với sự trợ giúp của micrô và sau đó hệ thống phải hiểu tín hiệu đó.

Xây dng b nhn dng ging nói

Nhận dạng giọng nói hoặc Nhận dạng giọng nói tự động (ASR) là trung tâm chú ý của các dự án AI như rô-bốt. Không có ASR, không thể tưởng tượng một robot nhận thức tương tác với con người. Tuy nhiên, việc xây dựng một bộ nhận dạng giọng nói không phải là điều dễ dàng.

Khó khăn trong vic phát trin mt h thng nhn dng ging nói

Phát triển một hệ thống nhận dạng giọng nói chất lượng cao thực sự là một bài toán khó. Khó khăn của công nghệ nhận dạng giọng nói có thể được mô tả rộng rãi theo một số khía cạnh như được thảo luận bên dưới –

  • Kích thước của từ vựng – Kích thước của từ vựng ảnh hưởng đến việc dễ dàng phát triển ASR. Hãy xem xét các kích thước từ vựng sau đây để hiểu rõ hơn.
    • Ví dụ, một từ vựng có kích thước nhỏ bao gồm 2-100 từ, như trong hệ thống menu bằng giọng nói
    • Ví dụ, một từ vựng có kích thước trung bình bao gồm vài từ 100 đến 1.000 từ, như trong tác vụ truy xuất cơ sở dữ liệu
    • Một kho từ vựng kích thước lớn bao gồm khoảng 10.000 từ, như trong một nhiệm vụ đọc chính tả chung.

Lưu ý rằng, kích thước từ vựng càng lớn thì việc nhận dạng càng khó thực hiện.

  • Đặc điểm kênh – Chất lượng kênh cũng là một khía cạnh quan trọng. Ví dụ: giọng nói của con người chứa băng thông cao với dải tần số đầy đủ, trong khi giọng nói qua điện thoại bao gồm băng thông thấp với dải tần số hạn chế. Lưu ý rằng nó khó hơn ở phần sau.
  • Chế độ nói – Việc dễ dàng phát triển ASR cũng phụ thuộc vào chế độ nói, đó là liệu bài phát biểu ở chế độ từ riêng biệt hay chế độ từ được kết nối hay ở chế độ phát biểu liên tục. Lưu ý rằng một bài phát biểu liên tục khó nhận ra hơn.
  • Phong cách nói − Một bài phát biểu đã đọc có thể theo phong cách trang trọng, hoặc tự phát và đối thoại theo phong cách thông thường. Cái sau khó nhận ra hơn.
  • Sự phụ thuộc của người nói – Bài phát biểu có thể phụ thuộc vào người nói, thích nghi với người nói hoặc độc lập với người nói. Một loa độc lập là khó xây dựng nhất.
  • Loại tiếng ồn – Tiếng ồn là một yếu tố khác cần xem xét khi phát triển ASR. Tỷ lệ tín hiệu trên tạp âm có thể ở nhiều phạm vi khác nhau, tùy thuộc vào môi trường âm thanh quan sát được ít tiếng ồn xung quanh hơn so với nhiều tiếng ồn xung quanh −
    • Nếu tỷ lệ tín hiệu trên tạp âm lớn hơn 30dB thì được coi là dải cao
    • Nếu tỷ lệ tín hiệu trên nhiễu nằm trong khoảng từ 30dB đến 10db, thì nó được coi là SNR trung bình
    • Nếu tỷ lệ tín hiệu trên tạp âm nhỏ hơn 10dB, nó được coi là phạm vi thấp

Ví dụ: loại tiếng ồn xung quanh như tiếng ồn cố định, tiếng ồn không phải của con người, lời nói xung quanh và nhiễu xuyên âm của những người nói khác cũng góp phần gây khó khăn cho vấn đề.

  • Đặc điểm của micrô − Chất lượng của micrô có thể tốt, trung bình hoặc dưới mức trung bình. Ngoài ra, khoảng cách giữa miệng và micro có thể thay đổi. Những yếu tố này cũng nên được xem xét cho các hệ thống nhận dạng.

Bất chấp những khó khăn này, các nhà nghiên cứu đã nghiên cứu rất nhiều về các khía cạnh khác nhau của lời nói như hiểu tín hiệu lời nói, người nói và xác định trọng âm.

Bạn sẽ phải làm theo các bước dưới đây để xây dựng trình nhận dạng giọng nói –

Trc quan hóa tín hiu âm thanh – Đọc t mt tp và làm vic trên đó

Đây là bước đầu tiên trong việc xây dựng hệ thống nhận dạng giọng nói vì nó mang lại sự hiểu biết về cách cấu trúc tín hiệu âm thanh. Một số bước phổ biến có thể được thực hiện để làm việc với tín hiệu âm thanh như sau –

ghi âm

Lúc đầu, khi bạn phải đọc tín hiệu âm thanh từ một tệp, sau đó ghi lại bằng micrô.

Ly mu

Khi ghi âm bằng micrô, các tín hiệu được lưu trữ ở dạng số hóa. Nhưng để làm việc với nó, máy cần chúng ở dạng số rời rạc. Do đó, chúng ta nên thực hiện lấy mẫu ở một tần số nhất định và chuyển đổi tín hiệu thành dạng số rời rạc. Việc chọn tần số cao để lấy mẫu ngụ ý rằng khi con người nghe tín hiệu, họ cảm thấy đó là tín hiệu âm thanh liên tục.

Ví d

Ví dụ sau đây cho thấy cách tiếp cận từng bước để phân tích tín hiệu âm thanh, sử dụng Python, tín hiệu này được lưu trữ trong một tệp. Tần số của tín hiệu âm thanh này là 44.100 HZ. Nhập các gói cần thiết như được hiển thị ở đây

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

Bây giờ, hãy đọc tệp âm thanh được lưu trữ. Nó sẽ trả về hai giá trị: tần số lấy mẫu và tín hiệu âm thanh. Cung cấp đường dẫn của tệp âm thanh nơi nó được lưu trữ, như được hiển thị ở đây

frequency_sampling, audio_signal = wavfile.read("/Users/admin/audio_file.wav")

Hiển thị các tham số như tần số lấy mẫu của tín hiệu âm thanh, loại dữ liệu của tín hiệu và thời lượng của nó, bằng cách sử dụng các lệnh được hiển thị

print('\nSignal shape:', audio_signal.shape)
print('Signal Datatype:', audio_signal.dtype)
print('Signal duration:', round(audio_signal.shape[0] / 
float(frequency_sampling), 2), 'seconds')

Bước này liên quan đến việc chuẩn hóa tín hiệu như hình bên dưới –

audio_signal = audio_signal / np.power(2, 15)

Trong bước này, chúng tôi đang trích xuất 100 giá trị đầu tiên từ tín hiệu này để trực quan hóa. Sử dụng các lệnh sau cho mục đích này –

audio_signal = audio_signal [:100]
time_axis = 1000 * np.arange(0, len(signal), 1) / float(frequency_sampling)

Bây giờ, trực quan hóa tín hiệu bằng cách sử dụng các lệnh dưới đây

plt.plot(time_axis, signal, color='blue')
plt.xlabel('Time (milliseconds)')
plt.ylabel('Amplitude')
plt.title('Input audio signal')
plt.show()

Bạn có thể xem biểu đồ đầu ra và dữ liệu được trích xuất cho tín hiệu âm thanh ở trên như trong hình ở đây

AI với Python – Nhận dạng giọng nói
Signal shape: (132300,)
Signal Datatype: int16
Signal duration: 3.0 seconds

Đặc trưng cho tín hiu âm thanh: Chuyn đổi sang min tn s

Việc mô tả đặc tính của tín hiệu âm thanh liên quan đến việc chuyển đổi tín hiệu miền thời gian thành miền tần số và hiểu các thành phần tần số của tín hiệu đó. Đây là một bước quan trọng vì nó cung cấp nhiều thông tin về tín hiệu. Bạn có thể sử dụng một công cụ toán học như Biến đổi Fourier để thực hiện phép biến đổi này.

Ví d

Ví dụ sau đây cho thấy, từng bước, cách mô tả tín hiệu, sử dụng Python, được lưu trữ trong một tệp. Lưu ý rằng ở đây chúng tôi đang sử dụng công cụ toán học Biến đổi Fourier để chuyển đổi nó thành miền tần số. Nhập các gói cần thiết, như được hiển thị ở đây

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

Bây giờ, hãy đọc tệp âm thanh được lưu trữ. Nó sẽ trả về hai giá trị: tần số lấy mẫu và tín hiệu âm thanh. Cung cấp đường dẫn của tệp âm thanh nơi nó được lưu trữ như được hiển thị trong lệnh tại đây –

frequency_sampling, audio_signal = wavfile.read("/Users/admin/sample.wav")

Trong bước này, chúng tôi sẽ hiển thị các tham số như tần số lấy mẫu của tín hiệu âm thanh, loại dữ liệu của tín hiệu và thời lượng của nó, bằng cách sử dụng các lệnh được cung cấp bên dưới

print('\nSignal shape:', audio_signal.shape)
print('Signal Datatype:', audio_signal.dtype)
print('Signal duration:', round(audio_signal.shape[0] / 
float(frequency_sampling), 2), 'seconds')

Trong bước này, chúng ta cần chuẩn hóa tín hiệu, như thể hiện trong lệnh sau –

audio_signal = audio_signal / np.power(2, 15)

Bước này liên quan đến việc trích xuất độ dài và một nửa độ dài của tín hiệu. Sử dụng các lệnh sau cho mục đích này –

length_signal = len(audio_signal)
half_length = np.ceil((length_signal + 1) / 2.0).astype(np.int)

Bây giờ, chúng ta cần áp dụng các công cụ toán học để chuyển đổi sang miền tần số. Ở đây chúng tôi đang sử dụng Biến đổi Fourier.

Trong bước này, chúng ta cần chuẩn hóa tín hiệu, như thể hiện trong lệnh sau –

audio_signal = audio_signal / np.power(2, 15)

Bước này liên quan đến việc trích xuất độ dài và một nửa độ dài của tín hiệu. Sử dụng các lệnh sau cho mục đích này –

length_signal = len(audio_signal)
half_length = np.ceil((length_signal + 1) / 2.0).astype(np.int)

Bây giờ, chúng ta cần áp dụng các công cụ toán học để chuyển đổi sang miền tần số. Ở đây chúng tôi đang sử dụng Biến đổi Fourier.

signal_frequency = np.fft.fft(audio_signal)

Bây giờ, hãy chuẩn hóa tín hiệu miền tần số và bình phương nó –

signal_frequency = abs(signal_frequency[0:half_length]) / length_signal
signal_frequency **= 2

Tiếp theo, trích xuất độ dài và một nửa độ dài của tín hiệu được biến đổi tần số –

len_fts = len(signal_frequency)

Lưu ý rằng tín hiệu biến đổi Fourier phải được điều chỉnh cho trường hợp chẵn cũng như trường hợp lẻ.

if length_signal % 2:
   signal_frequency[1:len_fts] *= 2
else:
   signal_frequency[1:len_fts-1] *= 2

Bây giờ, giải nén công suất tính bằng decibal(dB) −

signal_power = 10 * np.log10(signal_frequency)

Điều chỉnh tần số theo kHz cho trục X −

x_axis = np.arange(0, len_half, 1) * (frequency_sampling / length_signal) / 1000.0

Bây giờ, hãy hình dung đặc tính của tín hiệu như sau

plt.figure()
plt.plot(x_axis, signal_power, color='black')
plt.xlabel('Frequency (kHz)')
plt.ylabel('Signal power (dB)')
plt.show()

Bạn có thể quan sát biểu đồ đầu ra của đoạn mã trên như trong hình dưới đây

AI với Python – Nhận dạng giọng nói

To tín hiu âm thanh đơn điu

Hai bước mà bạn đã thấy cho đến bây giờ rất quan trọng để tìm hiểu về các tín hiệu. Bây giờ, bước này sẽ hữu ích nếu bạn muốn tạo tín hiệu âm thanh với một số tham số được xác định trước. Lưu ý rằng bước này sẽ lưu tín hiệu âm thanh trong tệp đầu ra.

Ví d

Trong ví dụ sau, chúng ta sẽ tạo tín hiệu đơn điệu, sử dụng Python, tín hiệu này sẽ được lưu trữ trong một tệp. Đối với điều này, bạn sẽ phải thực hiện các bước sau – Nhập các gói cần thiết như được hiển thị

import numpy as np
import matplotlib.pyplot as plt
from scipy.io.wavfile import write

Cung cấp tệp nơi tệp đầu ra sẽ được lưu

output_file = 'audio_signal_generated.wav'

Bây giờ, chỉ định các tham số bạn chọn, như được hiển thị

duration = 4 # in seconds
frequency_sampling = 44100 # in Hz
frequency_tone = 784
min_val = -4 * np.pi
max_val = 4 * np.pi

Trong bước này, chúng ta có thể tạo tín hiệu âm thanh, như được hiển thị

t = np.linspace(min_val, max_val, duration * frequency_sampling)
audio_signal = np.sin(2 * np.pi * tone_freq * t)

Bây giờ, hãy lưu tệp âm thanh trong tệp đầu ra –

write(output_file, frequency_sampling, signal_scaled)
Trích xuất 100 giá trị đầu tiên cho biểu đồ của chúng tôi, như được hiển thị

audio_signal = audio_signal[:100]
time_axis = 1000 * np.arange(0, len(signal), 1) / float(sampling_freq)

Bây giờ, hãy hình dung tín hiệu âm thanh được tạo như sau

plt.plot(time_axis, signal, color='blue')
plt.xlabel('Time in milliseconds')
plt.ylabel('Amplitude')
plt.title('Generated audio signal')
plt.show()

Bạn có thể quan sát cốt truyện như trong hình được đưa ra ở đây

AI với Python – Nhận dạng giọng nói

Trích xut tính năng t li nói

Đây là bước quan trọng nhất trong việc xây dựng bộ nhận dạng tiếng nói vì sau khi chuyển đổi tín hiệu tiếng nói sang miền tần số, chúng ta phải chuyển đổi nó thành dạng vectơ đặc trưng có thể sử dụng được. Chúng tôi có thể sử dụng các kỹ thuật trích xuất tính năng khác nhau như MFCC, PLP, PLP-RASTA, v.v. cho mục đích này.

Ví dụ

Trong ví dụ sau, chúng tôi sẽ trích xuất các tính năng từ tín hiệu, từng bước, sử dụng Python, bằng cách sử dụng kỹ thuật MFCC. Nhập các gói cần thiết, như được hiển thị ở đây

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from python_speech_features import mfcc, logfbank

Bây giờ, hãy đọc tệp âm thanh được lưu trữ. Nó sẽ trả về hai giá trị – tần số lấy mẫu và tín hiệu âm thanh. Cung cấp đường dẫn của tệp âm thanh nơi nó được lưu trữ.

frequency_sampling, audio_signal = wavfile.read("/Users/admin/audio_file.wav")

Lưu ý rằng ở đây chúng tôi đang lấy 15000 mẫu đầu tiên để phân tích.

audio_signal = audio_signal[:15000]

Sử dụng các kỹ thuật MFCC và thực hiện lệnh sau để trích xuất các tính năng của MFCC –

features_mfcc = mfcc(audio_signal, frequency_sampling)

Bây giờ, in các tham số MFCC, như được hiển thị

print('\nMFCC:\nNumber of windows =', features_mfcc.shape[0])
print('Length of each feature =', features_mfcc.shape[1])

Bây giờ, hãy vẽ đồ thị và trực quan hóa các tính năng của MFCC bằng cách sử dụng các lệnh dưới đây

features_mfcc = features_mfcc.T
plt.matshow(features_mfcc)
plt.title('MFCC')

Trong bước này, chúng tôi làm việc với các tính năng ngân hàng bộ lọc như được hiển thị –

Trích xuất các tính năng ngân hàng bộ lọc –

filterbank_features = logfbank(audio_signal, frequency_sampling)

Bây giờ, in các tham số ngân hàng bộ lọc.

print('\nFilter bank:\nNumber of windows =', filterbank_features.shape[0])
print('Length of each feature =', filterbank_features.shape[1])

Bây giờ, vẽ sơ đồ và trực quan hóa các tính năng của ngân hàng bộ lọc.

filterbank_features = filterbank_features.T
plt.matshow(filterbank_features)
plt.title('Filter bank')
plt.show()

Kết quả của các bước trên, bạn có thể quan sát các đầu ra sau: Hình 1 cho MFCC và Hình 2 cho Ngân hàng Bộ lọc

AI với Python – Nhận dạng giọng nói
AI với Python – Nhận dạng giọng nói

Nhn biết các t được nói

Nhận dạng giọng nói có nghĩa là khi con người đang nói, một chiếc máy sẽ hiểu nó. Ở đây chúng tôi đang sử dụng Google Speech API bằng Python để thực hiện điều đó. Chúng ta cần cài đặt các gói sau cho việc này –

  • Pyaudio – Nó có thể được cài đặt bằng cách sử dụng lệnh pip install Pyaudio .
  • SpeechRecognition − Gói này có thể được cài đặt bằng cách sử dụng pip install SpeechRecognition.
  • Google-Speech-API − Nó có thể được cài đặt bằng cách sử dụng lệnh pip install google-api-python-client .

Ví d

Quan sát ví dụ sau để hiểu về nhận dạng lời nói –

Nhập các gói cần thiết như được hiển thị –

import speech_recognition as sr

Tạo một đối tượng như hình dưới đây –

recording = sr.Recognizer()

Bây giờ, mô-đun Micrô () sẽ lấy giọng nói làm đầu vào

with sr.Microphone() as source: recording.adjust_for_ambient_noise(source)
   print("Please Say something:")
   audio = recording.listen(source)

Giờ đây, API của Google sẽ nhận dạng giọng nói và đưa ra đầu ra.

try:
   print("You said: \n" + recording.recognize_google(audio))
except Exception as e:
print(e)

Bạn có thể thấy đầu ra sau –

Please Say Something:
You said:

Ví dụ: nếu bạn nói dongthoigian.net , thì hệ thống sẽ nhận ra nó một cách chính xác như sau – Dongthoigian.net

Xem thêm : AI với Python – Tìm kiếm theo kinh nghiệm

The post AI với Python – Nhận dạng giọng nói appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-nhan-dang-giong-noi/feed/ 0
Phân tích dữ liệu tuần tự bằng mô hình Markov ẩn (HMM) https://dongthoigian.net/phan-tich-du-lieu-tuan-tu-bang-mo-hinh-markov-an-hmm/ https://dongthoigian.net/phan-tich-du-lieu-tuan-tu-bang-mo-hinh-markov-an-hmm/#respond Wed, 26 Jul 2023 12:51:11 +0000 https://dongthoigian.net/?p=16659 HMM là một mô hình ngẫu nhiên được xây dựng dựa trên khái niệm chuỗi Markov

The post Phân tích dữ liệu tuần tự bằng mô hình Markov ẩn (HMM) appeared first on Dongthoigian.

]]>
HMM là một mô hình thống kê được sử dụng rộng rãi cho dữ liệu có tính liên tục và khả năng mở rộng như phân tích thị trường chứng khoán theo chuỗi thời gian, kiểm tra sức khỏe và nhận dạng giọng nói. Phần này đề cập chi tiết đến việc phân tích dữ liệu tuần tự bằng Mô hình Markov ẩn (HMM).

Mô hình Markov n (HMM)

HMM là một mô hình ngẫu nhiên được xây dựng dựa trên khái niệm chuỗi Markov dựa trên giả định rằng xác suất của các số liệu thống kê trong tương lai chỉ phụ thuộc vào trạng thái quy trình hiện tại chứ không phải bất kỳ trạng thái nào trước nó. Ví dụ, khi tung đồng xu, chúng ta không thể nói rằng kết quả của lần tung thứ năm sẽ là mặt ngửa. Điều này là do một đồng xu không có bất kỳ bộ nhớ nào và kết quả tiếp theo không phụ thuộc vào kết quả trước đó.

Về mặt toán học, HMM bao gồm các biến sau –

K (S)

Nó là một tập hợp các trạng thái ẩn hoặc tiềm ẩn có trong HMM. Nó được ký hiệu là S.

Ký hiu đầu ra (O)

Nó là một tập hợp các ký hiệu đầu ra có thể có trong HMM. Nó được ký hiệu là O.

Ma trn xác sut chuyn trng thái (A)

Đó là xác suất thực hiện quá trình chuyển đổi từ trạng thái này sang từng trạng thái khác. Nó được ký hiệu là A.

Ma trn xác sut phát x quan sát (B)

Đó là xác suất phát ra/quan sát một biểu tượng ở một trạng thái cụ thể. Nó được ký hiệu là B.

Ma trn xác sut trước (Π)

Đó là xác suất bắt đầu tại một trạng thái cụ thể từ các trạng thái khác nhau của hệ thống. Nó được ký hiệu là Π.

Do đó, một HMM có thể được định nghĩa là 𝝀 = (S,O,A,B,𝝅) ,

Ở đâu,

  • S = {s 1 ,s 2 ,…,s N } là tập N trạng thái có thể,
  • O = {o 1 ,o 2 ,…,o M } là tập M ký hiệu quan sát có thể,
  • A là một N𝒙N ma trận xác suất chuyển trạng thái (TPM),
  • B là quan sát N𝒙M hoặc Ma trận xác suất phát thải (EPM),
  • π là một vectơ phân phối xác suất trạng thái ban đầu N chiều.

Ví d: Phân tích d liu Th trường chng khoán

Trong ví dụ này, chúng ta sẽ phân tích dữ liệu của thị trường chứng khoán, từng bước một, để có ý tưởng về cách HMM hoạt động với dữ liệu tuần tự hoặc chuỗi thời gian. Xin lưu ý rằng chúng tôi đang triển khai ví dụ này bằng Python. Nhập các gói cần thiết như hình dưới đây

import datetime
import warnings

Bây giờ, hãy sử dụng dữ liệu thị trường chứng khoán từ gói matpotlib.finance , như được hiển thị ở đây

import numpy as np
from matplotlib import cm, pyplot as plt
from matplotlib.dates import YearLocator, MonthLocator
try:
   from matplotlib.finance import quotes_historical_yahoo_och1
except ImportError:
   from matplotlib.finance import (
      quotes_historical_yahoo as quotes_historical_yahoo_och1)

from hmmlearn.hmm import GaussianHMM

Tải dữ liệu từ ngày bắt đầu và ngày kết thúc, nghĩa là giữa hai ngày cụ thể như được hiển thị ở đây

start_date = datetime.date(1995, 10, 10)
end_date = datetime.date(2015, 4, 25)
quotes = quotes_historical_yahoo_och1('INTC', start_date, end_date)

Trong bước này, chúng tôi sẽ trích xuất các báo giá đóng mỗi ngày. Đối với điều này, sử dụng lệnh sau –

closing_quotes = np.array([quote[2] for quote in quotes])

Bây giờ, chúng tôi sẽ trích xuất khối lượng cổ phiếu được giao dịch mỗi ngày. Đối với điều này, sử dụng lệnh sau –

volumes = np.array([quote[5] for quote in quotes])[1:]

Tại đây, lấy phần trăm chênh lệch của giá cổ phiếu đóng cửa, sử dụng mã hiển thị bên dưới

diff_percentages = 100.0 * np.diff(closing_quotes) / closing_quotes[:-]
dates = np.array([quote[0] for quote in quotes], dtype = np.int)[1:]
training_data = np.column_stack([diff_percentages, volumes])

Trong bước này, hãy tạo và huấn luyện Gaussian HMM. Đối với điều này, sử dụng đoạn mã sau

hmm = GaussianHMM(n_components = 7, covariance_type = 'diag', n_iter = 1000)
with warnings.catch_warnings():
   warnings.simplefilter('ignore')
   hmm.fit(training_data)

Bây giờ, tạo dữ liệu bằng mô hình HMM, sử dụng các lệnh được hiển thị –

num_samples = 300
samples, _ = hmm.sample(num_samples)

Cuối cùng, trong bước này, chúng ta vẽ đồ thị và trực quan hóa phần trăm chênh lệch và khối lượng cổ phiếu được giao dịch dưới dạng đầu ra dưới dạng biểu đồ. Sử dụng đoạn mã sau để vẽ đồ thị và trực quan hóa tỷ lệ phần trăm chênh lệch

plt.figure()
plt.title('Difference percentages')
plt.plot(np.arange(num_samples), samples[:, 0], c = 'black')

Sử dụng đoạn mã sau để vẽ sơ đồ và trực quan hóa khối lượng cổ phiếu được giao dịch

plt.figure()
plt.title('Volume of shares')
plt.plot(np.arange(num_samples), samples[:, 1], c = 'black')
plt.ylim(ymin = 0)
plt.show()

Xem thêm : AI với Python – Nhận dạng giọng nói

The post Phân tích dữ liệu tuần tự bằng mô hình Markov ẩn (HMM) appeared first on Dongthoigian.

]]>
https://dongthoigian.net/phan-tich-du-lieu-tuan-tu-bang-mo-hinh-markov-an-hmm/feed/ 0
Xác định các mẫu trong dữ liệu văn bản AI với Python https://dongthoigian.net/xac-dinh-cac-mau-trong-du-lieu-van-ban-ai-voi-python/ https://dongthoigian.net/xac-dinh-cac-mau-trong-du-lieu-van-ban-ai-voi-python/#respond Thu, 20 Jul 2023 09:50:25 +0000 https://dongthoigian.net/?p=16647 Khái niệm cơ bản về phân tích trình tự hoặc phân tích chuỗi thời gian

The post Xác định các mẫu trong dữ liệu văn bản AI với Python appeared first on Dongthoigian.

]]>
Chúng tôi biết rằng các tài liệu nói chung được nhóm thành các chủ đề. Đôi khi chúng ta cần xác định các mẫu trong văn bản tương ứng với một chủ đề cụ thể. Kỹ thuật làm điều này được gọi là mô hình hóa chủ đề. Nói cách khác, chúng ta có thể nói rằng mô hình hóa chủ đề là một kỹ thuật để khám phá các chủ đề trừu tượng hoặc cấu trúc ẩn trong một bộ tài liệu nhất định.

Chúng ta có thể sử dụng kỹ thuật lập mô hình chủ đề trong các trường hợp sau –

Phân loi văn bn

Với sự trợ giúp của mô hình chủ đề, việc phân loại có thể được cải thiện vì nó nhóm các từ tương tự lại với nhau thay vì sử dụng từng từ riêng biệt làm đặc điểm.

H thng đề xut

Với sự trợ giúp của mô hình chủ đề, chúng ta có thể xây dựng các hệ thống đề xuất bằng cách sử dụng các biện pháp tương tự.

Các thut toán cho mô hình ch đề

Mô hình hóa chủ đề có thể được thực hiện bằng cách sử dụng các thuật toán. Các thuật toán như sau –

Phân b Dirichlet tim n (LDA)

Thuật toán này là phổ biến nhất cho mô hình chủ đề. Nó sử dụng các mô hình đồ họa xác suất để triển khai mô hình chủ đề. Chúng ta cần nhập gói gensim bằng Python để sử dụng LDA slgorithm.

Phân tích ng nghĩa tim n (LDA) hoc Lp ch mc ng nghĩa tim n (LSI)

Thuật toán này dựa trên Đại số tuyến tính. Về cơ bản, nó sử dụng khái niệm SVD (Phân tách giá trị số ít) trên ma trận thuật ngữ tài liệu.

Tha s ma trn không âm (NMF)

Nó cũng dựa trên Đại số tuyến tính.

Tất cả các thuật toán được đề cập ở trên để lập mô hình chủ đề sẽ có số lượng chủ đề làm tham số, Ma trận tài liệu- từ làm đầu vào và WTM (Ma trận chủ đề từ) & TDM (Ma trận tài liệu chủ đề) làm đầu ra.

AI với Python – Phân tích dữ liệu chuỗi thời gian

Dự đoán tiếp theo trong một chuỗi đầu vào nhất định là một khái niệm quan trọng khác trong học máy. Chương này cung cấp cho bạn giải thích chi tiết về phân tích dữ liệu chuỗi thời gian.

Gii thiu

Dữ liệu chuỗi thời gian có nghĩa là dữ liệu nằm trong một chuỗi các khoảng thời gian cụ thể. Nếu chúng ta muốn xây dựng dự đoán trình tự trong học máy, thì chúng ta phải xử lý dữ liệu tuần tự và thời gian. Dữ liệu chuỗi là một bản tóm tắt của dữ liệu tuần tự. Thứ tự dữ liệu là một tính năng quan trọng của dữ liệu tuần tự.

Khái niệm cơ bản về phân tích trình tự hoặc phân tích chuỗi thời gian

Phân tích trình tự hoặc phân tích chuỗi thời gian là dự đoán phần tiếp theo trong một chuỗi đầu vào nhất định dựa trên dữ liệu được quan sát trước đó. Dự đoán có thể là bất cứ thứ gì có thể xảy ra tiếp theo: biểu tượng, số, thời tiết ngày hôm sau, thuật ngữ tiếp theo trong bài phát biểu, v.v. Phân tích trình tự có thể rất hữu ích trong các ứng dụng như phân tích thị trường chứng khoán, dự báo thời tiết và đề xuất sản phẩm.

Ví dụ Xem xét ví dụ sau để hiểu dự đoán trình tự. Ở đây A, B, C, D là các giá trị đã cho và bạn phải dự đoán giá trị E bằng Mô hình dự đoán trình tự.

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

Cài đặt các gói hu ích

Để phân tích dữ liệu chuỗi thời gian bằng Python, chúng ta cần cài đặt các gói sau –

gu trúc

Pandas là một thư viện mã nguồn mở được BSD cấp phép cung cấp các công cụ phân tích dữ liệu và cấu trúc dữ liệu hiệu suất cao, dễ sử dụng cho Python. Bạn có thể cài đặt Pandas với sự trợ giúp của lệnh sau

pip install pandas

Nếu bạn đang sử dụng Anaconda và muốn cài đặt bằng cách sử dụng trình quản lý gói conda , thì bạn có thể sử dụng lệnh sau –

conda install -c anaconda pandas

hmmhc

Nó là một thư viện mã nguồn mở được BSD cấp phép bao gồm các thuật toán và mô hình đơn giản để tìm hiểu các Mô hình Markov ẩn (HMM) trong Python. Bạn có thể cài đặt nó với sự trợ giúp của lệnh sau –

pip install hmmlearn

Nếu bạn đang sử dụng Anaconda và muốn cài đặt bằng cách sử dụng trình quản lý gói conda , thì bạn có thể sử dụng lệnh sau –

conda install -c omnia hmmlearn

PyStruct

Nó là một thư viện học tập và dự đoán có cấu trúc. Các thuật toán học được triển khai trong PyStruct có các tên như trường ngẫu nhiên có điều kiện (CRF), Mạng ngẫu nhiên Markov có lợi nhuận tối đa (M3N) hoặc máy vectơ hỗ trợ cấu trúc. Bạn có thể cài đặt nó với sự trợ giúp của lệnh sau –

pip install pystruct

CVXOPT

Nó được sử dụng để tối ưu hóa lồi dựa trên ngôn ngữ lập trình Python. Nó cũng là một gói phần mềm miễn phí. Bạn có thể cài đặt nó với sự trợ giúp của lệnh sau –

pip install cvxopt

Nếu bạn đang sử dụng Anaconda và muốn cài đặt bằng cách sử dụng trình quản lý gói conda , thì bạn có thể sử dụng lệnh sau –

conda install -c anaconda cvdoxt

Pandas: X lý, ct và trích xut thng kê t d liu chui thi gian

Pandas là một công cụ rất hữu ích nếu bạn phải làm việc với dữ liệu chuỗi thời gian. Với sự trợ giúp của Pandas, bạn có thể thực hiện các thao tác sau –

  • Tạo phạm vi ngày bằng cách sử dụng gói pd.date_range
  • Lập chỉ mục gấu trúc với ngày tháng bằng cách sử dụng gói pd.Series
  • Thực hiện lấy mẫu lại bằng cách sử dụng gói ts.resample
  • Thay đổi tần số

Ví d

Ví dụ sau đây cho thấy bạn xử lý và cắt dữ liệu chuỗi thời gian bằng cách sử dụng Pandas. Lưu ý rằng ở đây chúng tôi đang sử dụng dữ liệu Dao động Bắc cực hàng tháng, dữ liệu này có thể được tải xuống từ (https:// months.ao.index.b50.current.ascii) và có thể được chuyển đổi sang định dạng văn bản để chúng tôi sử dụng.

X lý d liu chui thi gian

Để xử lý dữ liệu chuỗi thời gian, bạn sẽ phải thực hiện các bước sau – Bước đầu tiên liên quan đến việc nhập các gói sau

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Tiếp theo, xác định một hàm sẽ đọc dữ liệu từ tệp đầu vào, như được hiển thị trong đoạn mã dưới đây

def read_data(input_file):
   input_data = np.loadtxt(input_file, delimiter = None)

Bây giờ, hãy chuyển đổi dữ liệu này thành chuỗi thời gian. Đối với điều này, hãy tạo phạm vi ngày của chuỗi thời gian của chúng tôi. Trong ví dụ này, chúng tôi giữ một tháng làm tần suất dữ liệu. Tệp của chúng tôi có dữ liệu bắt đầu từ tháng 1 năm 1950.

dates = pd.date_range('1950-01', periods = input_data.shape[0], freq = 'M')

Trong bước này, chúng tôi tạo dữ liệu chuỗi thời gian với sự trợ giúp của Pandas Series, như được hiển thị bên dưới

output = pd.Series(input_data[:, index], index = dates)	
return output
	
if __name__=='__main__':

Nhập đường dẫn của tệp đầu vào như được hiển thị ở đây

input_file = "/Users/admin/AO.txt"

Bây giờ, chuyển đổi cột thành định dạng chuỗi thời gian, như được hiển thị ở đây –

timeseries = read_data(input_file)

Cuối cùng, vẽ đồ thị và trực quan hóa dữ liệu, sử dụng các lệnh được hiển thị

plt.figure()
timeseries.plot()
plt.show()

Bạn sẽ quan sát các biểu đồ như trong các hình ảnh sau

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

Cắt dữ liệu chuỗi thời gian

Cắt liên quan đến việc chỉ truy xuất một số phần của dữ liệu chuỗi thời gian. Là một phần của ví dụ, chúng tôi chỉ cắt dữ liệu từ năm 1980 đến năm 1990. Quan sát đoạn mã sau thực hiện tác vụ này

timeseries['1980':'1990'].plot()
   <matplotlib.axes._subplots.AxesSubplot at 0xa0e4b00>

plt.show()

Khi bạn chạy mã để cắt dữ liệu chuỗi thời gian, bạn có thể quan sát biểu đồ sau như minh họa trong hình ở đây

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

Trích xut thng kê t d liu chui thi gian

Bạn sẽ phải trích xuất một số thống kê từ một dữ liệu nhất định, trong trường hợp bạn cần rút ra một số kết luận quan trọng. Giá trị trung bình, phương sai, tương quan, giá trị tối đa và giá trị tối thiểu là một số thống kê như vậy. Bạn có thể sử dụng đoạn mã sau nếu muốn trích xuất số liệu thống kê đó từ dữ liệu chuỗi thời gian nhất định –

Nghĩa là

Bạn có thể sử dụng hàm mean() để tìm giá trị trung bình, như được hiển thị ở đây

timeseries.mean()

Sau đó, đầu ra mà bạn sẽ quan sát cho ví dụ được thảo luận là –

-0.11143128165238671

ti đa

Bạn có thể sử dụng hàm max() để tìm giá trị lớn nhất, như được hiển thị ở đây –

timeseries.max()

Sau đó, đầu ra mà bạn sẽ quan sát cho ví dụ được thảo luận là –

3.4952999999999999

ti thiu

Bạn có thể sử dụng hàm min() để tìm giá trị nhỏ nhất, như minh họa ở đây –

timeseries.min()

Sau đó, đầu ra mà bạn sẽ quan sát cho ví dụ được thảo luận là –

-4.2656999999999998

Nhn mi th cùng mt lúc

Nếu bạn muốn tính toán tất cả số liệu thống kê tại một thời điểm, bạn có thể sử dụng hàm description() như được hiển thị ở đây –

timeseries.describe()

Sau đó, đầu ra mà bạn sẽ quan sát cho ví dụ được thảo luận là

count   817.000000
mean     -0.111431
std       1.003151
min      -4.265700
25%      -0.649430
50%      -0.042744
75%       0.475720
max       3.495300
dtype: float64

ly mu li

Bạn có thể lấy mẫu lại dữ liệu theo tần suất thời gian khác. Hai tham số để thực hiện lấy mẫu lại là –

  • khoảng thời gian
  • Phương pháp

Ly mu li vi mean()

Bạn có thể sử dụng đoạn mã sau để lấy mẫu lại dữ liệu bằng phương thức mean(), đây là phương thức mặc định

timeseries_mm = timeseries.resample("A").mean()
timeseries_mm.plot(style = 'g--')
plt.show()

Sau đó, bạn có thể quan sát biểu đồ sau đây dưới dạng đầu ra của quá trình lấy mẫu lại bằng cách sử dụng mean()

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

Ly mu li vi median()

Bạn có thể sử dụng đoạn mã sau để lấy mẫu lại dữ liệu bằng phương thức median()

timeseries_mm = timeseries.resample("A").median()
timeseries_mm.plot()
plt.show()

Sau đó, bạn có thể quan sát biểu đồ sau dưới dạng đầu ra của quá trình lấy mẫu lại với median()

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

trung bình lăn

Bạn có thể sử dụng đoạn mã sau để tính trung bình lăn (di chuyển

timeseries.rolling(window = 12, center = False).mean().plot(style = '-g')
plt.show()

Sau đó, bạn có thể quan sát biểu đồ sau đây là đầu ra của giá trị trung bình lăn (di chuyển)

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

xem thêm : Phân tích dữ liệu tuần tự bằng mô hình Markov ẩn (HMM)

The post Xác định các mẫu trong dữ liệu văn bản AI với Python appeared first on Dongthoigian.

]]>
https://dongthoigian.net/xac-dinh-cac-mau-trong-du-lieu-van-ban-ai-voi-python/feed/ 0
AI với Python – Xử lý ngôn ngữ tự nhiên https://dongthoigian.net/ai-voi-python-xu-ly-ngon-ngu-tu-nhien/ https://dongthoigian.net/ai-voi-python-xu-ly-ngon-ngu-tu-nhien/#respond Tue, 18 Jul 2023 14:55:56 +0000 https://dongthoigian.net/?p=16640 đề cập đến phương pháp AI giao tiếp với các hệ thống thông minh

The post AI với Python – Xử lý ngôn ngữ tự nhiên appeared first on Dongthoigian.

]]>
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

The post AI với Python – Xử lý ngôn ngữ tự nhiên appeared first on Dongthoigian.

]]>
https://dongthoigian.net/ai-voi-python-xu-ly-ngon-ngu-tu-nhien/feed/ 0