Lập trình

7 library/tool nên biết khi bắt đầu Machine Learning/Deep Learning trên Python


Bạn đọc thân mến, những dòng dưới đây được tôi cố công dịch lại từ series 「Pythonで始める機械学習入門」(tạm dịch là: Getting Started with Machine Learning by Python), do đó lời văn, từ ngữ sẽ có đôi chỗ khó hiểu, mà vì chính tôi cũng đang học tập bộ môn này, nên sẽ có những thuật ngữ mà bây giờ tôi tạm thời chưa hiểu nó là gì. Dẫu sao thì việc dịch lại, hiệu đính cũng sẽ khắc thêm một lần nhớ cho tôi, nên mong bạn đọc rộng lòng lượng thứ.

Ngôn ngữ lập trình Python được sử dụng một cách rộng rãi trong lĩnh vực Machine Learning, và gần đây, do sự thịnh hành của Machine Learning/Deep Learning mà số lượng người dùng cũng tăng lên. Tuy nhiên, cũng có nhiều người, mặc dù có hứng thú với lĩnh vực này, và cũng muốn tự mình thử nhưng không biết sẽ cần bắt đầu từ đâu. Vì vậy mà trong loạt bài này, tôi sẽ giới thiệu với các bạn những library/tool quan trọng để thực hành machine learning bằng Python.

Dưới đây là 7 library/tool quan trọng mà tôi muốn giới thiệu:

  1. Numpy/Scipy: thư viện tính toán số học cơ bản.
  2. Matplotlib: thư viện dùng để vẽ đồ thị, biểu đồ, v.v…
  3. Jupyter Notebook: Web editor, có thể vừa thực thi vừa confirm kết quả.
  4. Pandas: thư viện xử lý lượng lớn data nhanh chóng.
  5. Scikit-Learn: thư viện chuẩn dành cho Machine Learning của Python.
  6. Gensim: thư viện xử lý ngôn ngữ tự nhiên chuyên biệt về topic model.
  7. TensorFlow: engine/library được phát triển bởi Google dành cho Deep Learning.

Trong bài viết này, tôi chỉ giới thiệu sơ lượt về những library/tool này, trong bài tiếp theo, tôi sẽ giới thiệu kỹ thuật sử dụng cho từng library. Những library nói ở đây không phải là toàn bộ, mà chỉ là những cái thường được dùng nhất, ngoài ra còn có nhiều library khác nữa.

Source code sẽ sử dụng Python 3.x làm nền tảng, nhưng cũng có thể chạy được trên cả Python 2.x. Ngoài ra, tiền đề của bài viết là bạn đã có kiến thức về Python.

Numpy/Scipy – Thư viện tính toán số học cơ bản

scipy_2-lg
SciPy ecosystem

Website: https://www.scipy.org/

Numpy/Scipy là thư viện tính toán số học cơ bản. Các library Scikit-Learn và TensorFlow mà tôi nói ở trên cũng được tạo ra bằng việc sử dụng Numpy/Scipy.

Numpy rất quan trọng trong tính toán với vector/ma trận và mảng (array). Ngoài ra, nó cũng cung cấp chức năng tính toán đại số toán tính và toán học.

Scipy thì ở một level cao hơn một chút so với Numpy, tuy nhiên chúng đều cung cấp chức năng quan trọng và common trong tính toán khoa học. Scipy cung cấp chức năng tính toán ma trận thưa (Sparse matrix) và các phép toán với nó như tính toán, tích phân, nội suy, thống kê, biến đổi Fourier, xử lý tín hiệu và tối ưu hóa số trị, v.v…

Numpy và Scipy là các library khác nhau, tuy nhiên, cả hai đều rất quan trọng khi thực hiện tính toán khoa học, và cả các library mà liên quan đến máy học thì đều cần sử dụng đến 2 library này. Vì vậy mà dưới đây sẽ viết liền là Numpy/Scipy.

Trong trường hợp sử dụng thư viện Scikit-Learn sẽ đề cập dưới đây, thì cũng không nhất thiết phải biết phải biết các kỹ năng tính toán số học phức tạp sử dụng Numpy/Scipy,  nhưng ít nhất thì cũng phải nắm được data format được input vào libray và thao tác đối với chúng.

Matplotlib – Thư viện vẽ đồ thị, biểu đồ, v.v…

loga_pvw_legin_ge_1-5sle_20130101

Website: http://matplotlib.org/

Matplotlib là thư viện dùng để vẽ đồ thị (graph). Nó cung cấp chức năng vẽ biểu đồ phân tán, đồ thị đường gấp khúc, đồ thị thanh, biểu đồ, biểu đồ hình tròn, v.v… Cũng có thể vẽ biểu đồ ba chiều (three-dimensional graph). Thêm nữa, có thể thêm các hiệu ứng vào đồ thị.

Để có thể hình dung khả năng của Matplotlib, tôi nghĩ bạn nên nhìn vào gallery được cung cấp ở website của nó, hơn là đọc giải thích bằng văn bản. Ngoài ra, bạn cũng có thể kết hợp với Jupyter Notebook dưới đây để trình diễn các hiệu ứng thị giác.

Mặc dù việc vẽ đồ thị không liên quan lắm đến các task của machine learning, tuy nhiên thông qua việc trực quan hóa dữ liệu bằng graph, có thể thu được các gợi ý về việc điều chỉnh giải thuật của machine learning. Nó cũng rất tiện lợi trong việc trình bày các kết quả phân tích. Do đó, bạn nên có hiểu biết ở mức độ nào đó cách sử dụng Matplotlib.

Jupyter Notebook – Web editor, cho phép vừa thực thi vừa confirm kết quả

example-notebook
Một ví dụ về việc sử dụng Jupyter Notebook

Website: http://jupyter.org/

Jupyter Notebook là môi trường có thể trực quan hóa và confirm kết quả thực thi trong khi thực thi mã lệnh. Trước đây nó được gọi là IPython Notebook, tuy nhiên do cũng support cả các ngôn ngữ khác ngoài Python, vì vậy mà đã trở thành Jupyter Notebook như ngày nay.

Khi khởi động Jupyter Notebook, thì sẽ khởi động một server có thể được truy cập từ web browser. Thông qua Web browser, nó cung cấp các API trực quan mà có thể thực thi Python code. Nó phù hợp để thử nghiệm code, cho phép lưu lại kết quả lỗi khi chạy thử. Ngoài ra, bạn cũng có thể chèn văn bản theo định dạng Markdown, do đó rất phù hợp để trình bày văn bản trộn lẫn với code và kết quả thực thi.

Pandas – thư viện xử lý lượng data lớn với tốc độ cao

pandas_logo

Website: http://pandas.pydata.org/

Pandas là thư viện xử lý dữ liệu quy mô lớn. Khi sử dụng trong xử lý machine learning, nó phát huy chủ yếu ở giai đoạn tiền xử lý dữ liệu. Một số định dạng data có thể được đọc, sau đó xử lý ở tốc độ cao.

Pandas có 2 kiểu dữ liệu cơ bản là Series và DataFrame và specification của những kiểu này khá đặc trưng. Series và DataFrame là mảng 1 chiều và 2 chiều, nhưng được index, do đó có thể truy cập nhanh theo index. Ngoài ra, DataFrame cũng có thể xử lý như SQL, có thể sử dụng các hàm tổng hợp và engine Group-by tốc độ cao.

Scikit-Learn – thư viện chuẩn dành cho Machine Learning của Python

scikit-learn-logo

Website: scikit-learn.org

Scikit-Learn là thư viện dùng cho Machine Learning tiêu chuẩn của Python. Những thứ quan trọng được implemented bằng các giải thuật machine learning. Nó cung cấp các giải thuật về các task như là phân loại, hồi quy, clustering, v.v… thêm nữa, cung cấp các phương tiện tiện lợi trong việc đánh giá hyperparameter grid search, cross-validation, v.v…

Ngoài ra, nó cũng có đặc trưng là cung cấp interface thống nhất cho các thuật toán khác nhau. Nó cũng dễ dàng cho phép bạn đối ứng trường hợp muốn thay đổi thuật toán về sau. Những interface nhất quán này, cũng được dùng trong các machine learning library khác ngoài Scikit-Learn như là một khuôn mẫu.

Bộ tài liệu của Scikit-Learn không chỉ cung cấp cách sử dụng các API, mà còn giải thích cơ cấu, tổ chức của các giải thuật, tôi nghĩ đó là một nguồn tài liệu bổ trợ bổ ích cho việc học machine learning.

Gensim – thư viện xử lý ngôn ngữ tự nhiên

gensim-python

Website: https://radimrehurek.com/gensim/

Gensim là một library xử lý ngôn ngữ tự nhiên. Nó cung cấp công cụ xử lý text, các thuật toán điển hình như TF-IDF(Term Frequency-Inverse Document Frequency), LSA(Latent Semantic Analysis), LDA(Linear Discriminant Analysis), word2vec.

Về lĩnh vực xử lý ngôn ngữ tự nhiên thì có thư viện NLTK (Natural Language Toolkit) nổi tiếng, tuy nhiên trong khi NLTK là API chung chung, thì Gensim nhấn mạnh vào topic model, phù hợp trong việc phân loại đoạn văn, v.v… Trong series này, tôi sẽ giới thiệu use-case cho việc dùng Gensim sau.

TensorFlow – thư viện dùng trong DeepLearning do Google phát triển

markblogtensorflow

Website: https://www.tensorflow.org/

TensorFlow là một engine dành cho neuron network (Deep Learning) được Google phát triển. Việc sử dụng TensorFlow theo flow là định nghĩa graph biểu thị flow tính toán mà sử dụng TensorFlow, rồi thực thi việc tính toán đó. Khi thực thi, có thể lựa chọn thực thi bằng CPU hay GPU. Do cấu trúc network được compile trước nên tốc độ khá nhanh.

Có khá nhiều library cho Deep Learning có thể dùng trên Python, nhưng ở series này thì tôi lựa chọn TensorFlow. Lý do là tính linh hoạt cao, đầy đủ tài liệu và ví dụ thực tế. Trong tài liệu chính thức của TensorFlow, các ví dụ như nhận dạng hình ảnh, word2vec, v.v… được giải thích cùng với chi tiết thuật toán.

Như vậy, đến đây là hết phần giới thiệu về các library thường được sử dụng trong machine learning, ở các bài tiếp theo thì sẽ đi sâu vào ví dụ thực tế hơn.

Hoàng Hải (lược dịch)

Bình luận về bài viết này

Trang web này sử dụng Akismet để lọc thư rác. Tìm hiểu cách xử lý bình luận của bạn.