Chuyển đến nội dung chính
Khoa học Dữ liệu

Google Bard cho các dự án khoa học dữ liệu

Tìm hiểu cách tận dụng Google Bard cho lập kế hoạch dự án, tiền xử lý dữ liệu, phân tích dữ liệu khám phá, kỹ thuật đặc trưng, lựa chọn mô hình, tinh chỉnh siêu tham số, kiểm định mô hình, và xây dựng cũng như triển khai ứng dụng web.
Abid Ali Awan's photo
Abid Ali Awan
Đã cập nhật · 13 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Tạo tài khoản miễn phí của bạn

Luyện tập và Lộ trình tiến trình của bạn.

Tiếp Tục Với Google
Bằng cách tiếp tục, bạn chấp nhận Điều khoản sử dụng, Chính sách bảo mật và việc dữ liệu của bạn được lưu trữ tại Hoa Kỳ.

Phiên bản mới nhất của Bard, chạy trên mô hình PaLM 2, mang lại hiệu suất cải thiện về suy luận, viết mã và hỗ trợ đa ngôn ngữ. Khác với ChatGPT, người dùng cần điều chỉnh đầu vào theo Bard để nhận được phản hồi chất lượng cao.

Bài viết này trình bày cách tận dụng Bard mới để xây dựng một dự án khoa học dữ liệu end-to-end. Bạn sẽ học cách soạn các prompt hiệu quả để tạo ý tưởng và mã cho thử nghiệm và phát triển.

Đọc bài Bard và ChatGPT cho khoa học dữ liệu của chúng tôi để xem so sánh chi tiết giữa Google Bard và ChatGPT, bài tổng quan ChatGPT so với Google Bard, và xem hướng dẫn ChatGPT cho các dự án khoa học dữ liệu như một lựa chọn khác.

Lập kế hoạch dự án

Giai đoạn lập kế hoạch là bước then chốt trong mọi dự án, vì nó đặt nền tảng cho thành công. Trong giai đoạn này, chúng ta phân tích kỹ lưỡng các nguồn lực sẵn có và mục tiêu, đồng thời xây dựng kế hoạch dự án phác thảo các bước cần thiết để đạt được mục tiêu.

Để tạo dàn ý cho dự án, chúng ta sẽ soạn một prompt chi tiết cho Bard bao gồm mọi thông tin liên quan đến việc phát triển ứng dụng Phát hiện Tin giả của chúng ta. Prompt sẽ nêu các chi tiết chính như bộ dữ liệu sẽ sử dụng là bộ Fake News Classification từ bài báo WELFake, cũng như mọi chỉ dẫn dự án sẽ định hướng nhóm trong suốt quá trình phát triển.

Prompt: “Hãy đóng vai Quản lý Khoa học Dữ liệu và xây dựng kế hoạch cho một dự án Phát hiện Tin giả end-to-end. Chúng tôi đã có bộ dữ liệu FakeNewsDetection gồm 72.134 dòng và 4 cột: [Unnamed: 0, title, text, và ;abel (0 = fake và 1 = real)].”

Hình ảnh từ Google Bard

Mặc dù dàn ý tổng quát cung cấp nền tảng vững chắc, vẫn thiếu một vài bước quan trọng. Chúng ta có thể bổ sung các bước cần thiết bằng cách viết một prompt tiếp theo.

Prompt tiếp theo: “Hãy thêm các bước như EDA, Lựa chọn mô hình, Tối ưu siêu tham số, Ứng dụng web Streamlit và triển khai trên Streamlit Cloud. Cung cấp một kế hoạch dự án tổng hợp.”

Hình ảnh từ Google Bard

Có vẻ Bard chưa hiểu rằng chúng ta đã có bộ dữ liệu và không cần phần thu thập dữ liệu. Bạn có thể viết prompt tiếp theo để lược bỏ chi tiết này.

Prompt tiếp theo: “Chúng tôi đã có dữ liệu, nên hãy loại bỏ bước Thu thập dữ liệu khỏi kế hoạch dự án.”

Dưới đây là dàn ý cho dự án Phát hiện Tin giả:

  1. Tiền xử lý dữ liệu
  2. Phân tích dữ liệu khám phá (EDA)
  3. Trích xuất đặc trưng
  4. Lựa chọn mô hình
  5. Tối ưu siêu tham số
  6. Huấn luyện và đánh giá mô hình
  7. Ứng dụng Web Streamlit
  8. Triển khai trên Streamlit Cloud

Kế hoạch dự án bao gồm giải thích chi tiết về từng bước để xây dựng ứng dụng Phát hiện Tin giả, cũng như các phương pháp khuyến nghị giúp tối ưu kết quả. Ngoài ra, kế hoạch còn cung cấp lịch trình theo tuần với các nhiệm vụ và cột mốc chính.

Nếu bạn gặp khó khăn khi viết prompt hoặc cảm thấy quá tải, chúng tôi có sẵn tài liệu hỗ trợ. Tải về Cheat Sheet về Prompt Engineering, cung cấp hơn 60 prompt được biên soạn chuyên nghiệp dành riêng cho nhiều tác vụ khoa học dữ liệu.

Bard cho tiền xử lý dữ liệu

Ở bước này, chúng ta sẽ tải, làm sạch và thực hiện kỹ thuật đặc trưng trên bộ dữ liệu.

Tải dữ liệu

Bây giờ bạn cần đổi vai từ Quản lý Dữ liệu sang Nhà khoa học Dữ liệu để viết prompt tải dữ liệu.

Prompt: “Hãy đóng vai Nhà khoa học Dữ liệu chuyên nghiệp và viết mã Python để tải ngẫu nhiên năm nghìn mẫu từ bộ dữ liệu cho dự án trên.”

Lưu ý: chúng ta đang giảm mẫu dữ liệu để huấn luyện và tối ưu mô hình nhanh hơn.

Hình ảnh từ Google Bard

import pandas as pd

# Load the dataset
df = pd.read_csv("fake-news-classification/WELFake_Dataset.csv")

# Get 5 thousand random samples
df = df.sample(n=5000, random_state=42)

# Print the first 5 rows of the data
df.head()

Làm sạch dữ liệu

Để đảm bảo bộ dữ liệu được làm sạch và chuẩn bị kỹ cho phân tích, chúng ta sẽ đưa ra chỉ dẫn cụ thể cho Bard về các hàm làm sạch cần thiết.

Prompt: “Bây giờ, hãy viết một hàm Python để làm sạch bộ dữ liệu. Hàm cần loại bỏ giá trị khuyết, loại bỏ cột "Unnamed: 0", làm sạch văn bản và xóa stopwords.”

Để xử lý mọi lỗi trong mã, chúng ta sẽ yêu cầu Bard khắc phục lỗi stopword. Bard sẽ hiểu sai sót và tạo phiên bản mã đã cải tiến.

Prompt cập nhật: “Khắc phục lỗi liên quan đến stopwords”

import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords

def clean_dataset(df):

  # Drop missing values
  df = df.dropna()
    
  # Drop Unnamed column
  df = df.drop(["Unnamed: 0"], axis=1)

  # Clean text
  df['text'] = df['text'].str.lower()
  df["Text"] = df["Text"].str.replace("[^a-zA-Z]", " ")

  # Remove stopwords
  stopword = set(stopwords.words('english'))
  df['text'] = df['text'].apply(lambda x: ' '.join([word for word in x.split() if word not in stopword]))

  return df

df = clean_dataset(df)
df.head()

Chúng ta đã có một bộ dữ liệu khá sạch.

image6.png

Kỹ thuật đặc trưng

Để Bard tạo ra mã tối ưu, điều quan trọng là đưa ra chỉ dẫn cụ thể thay vì câu hỏi chung chung. Ví dụ, nếu chúng ta yêu cầu Bard thực hiện một chức năng cụ thể như “kết hợp độ dài của cả hai cột văn bản,” Bard sẽ tạo ra mã chất lượng hơn, phù hợp với nhu cầu dự án.

Prompt: “Bây giờ, hãy viết một hàm Python để thực hiện kỹ thuật đặc trưng. Chuyển cột title về chữ thường và kết hợp text với title, kết hợp độ dài của cả hai cột văn bản, đếm số từ duy nhất, và các bước khác.”

def feature_engineering(df):

  # Lower the title column
  df['title'] = df['title'].str.lower()

  # Combine text and title
  df['combined'] = df['title'] + ' ' + df['text']

  # Length of the combined text
  df['combined_length'] = df['combined'].str.len()

  # Count unique words
  df['unique_words'] = df['text'].apply(lambda x: len(set(x.split())))

  return df

# Perform feature engineering
df = feature_engineering(df)

# Print the first few rows of the DataFrame with the new features
df.head()

Chúng ta đã tạo ra ba đặc trưng mới để dùng cho phân tích dữ liệu.

image8.png

Bard cho Phân tích dữ liệu khám phá (EDA)

Trong phần EDA, chúng ta sẽ yêu cầu Bard tạo một số biểu đồ quan trọng cho việc khám phá dữ liệu.

Prompt: “Viết mã Python để thực hiện Phân tích dữ liệu khám phá (EDA) cho dự án trên. Bao gồm biểu đồ histogram cho độ dài tổng hợp của tin giả vs tin thật, phân bố nhãn, và word cloud.”

Chúng ta sẽ viết prompt tiếp theo để thêm biên của bins.

Prompt tiếp theo: “Cập nhật mã EDA với `np.linspace` để tạo biên bins từ 0 đến 200 với độ rộng 40.”

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

bins = np.linspace(0, 200, 40)
# Histogram of the length of fake vs real news articles
plt.hist(df['combined_length'].where(df['label'] == 1),bins, alpha=0.5, label='Real')
plt.hist(df['combined_length'].where(df['label'] == 0),bins, alpha=0.5, label='Fake')
plt.xlabel('Combined Text Length')
plt.ylabel('Number of Articles')
plt.legend()
plt.show()

Có vẻ tin giả có độ dài văn bản lớn hơn tin thật.

image4.png

# Label distribution
plt.pie(df['label'].value_counts(), labels=['Fake', 'Real'], autopct='%1.1f%%')
plt.show()

Phân bố nhãn khá đồng đều, và chúng ta không cần cân bằng lớp.

image14.png

from wordcloud import WordCloud

wc = WordCloud(max_words=100, background_color='white')
wc.generate(' '.join(df[df['label'] == 0]['combined']))
plt.imshow(wc)
plt.axis('off')
plt.title('Word cloud of fake news articles')
plt.show()

image11.png

wc = WordCloud(max_words=100, background_color='white')
wc.generate(' '.join(df[df['label'] == 1]['combined']))
plt.imshow(wc)
plt.axis('off')
plt.title('Word cloud of real news articles')
plt.show()

image10.png

Tin thật có nhiều từ nổi bật hơn như “trump” và “said” so với tin giả.

Trích xuất đặc trưng với Bard

Ở phần này, chúng ta sẽ viết prompt để chuyển cột “text” thành vector và chia bộ dữ liệu thành tập huấn luyện và kiểm tra.

Prompt: “Chuyển đổi cột văn bản thành vector và chia bộ dữ liệu thành tập huấn luyện và tập kiểm tra.”

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split

# Convert the text column into vectors
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df['text'])

# Split the dataset into training and testing datasets
X_train, X_test, y_train, y_test = train_test_split(X, df['label'], test_size=0.25)

Bard cho Lựa chọn mô hình

Khi đã cung cấp đủ thông tin nền, bạn có thể đặt các câu hỏi thẳng vào vấn đề.

Prompt: “Thực hiện lựa chọn mô hình.”

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Train the models
models = [LogisticRegression(), SVC(), DecisionTreeClassifier(), RandomForestClassifier()]
for model in models:
    model.fit(X_train, y_train)

# Evaluate the models
predictions = []
for model in models:
    predictions.append(model.predict(X_test))

# Calculate the accuracy of the models
accuracies = []
for predictions in predictions:
    accuracies.append(accuracy_score(y_test, predictions))

# Print the accuracy of the models
print("Accuracy of LogisticRegression:", accuracies[0])
print("Accuracy of SVC:", accuracies[1])
print("Accuracy of DecisionTreeClassifier:", accuracies[2])
print("Accuracy of RandomForestClassifier:", accuracies[3])
Accuracy of LogisticRegression: 0.9024979854955681
Accuracy of SVC: 0.91941982272361
Accuracy of DecisionTreeClassifier: 0.8767123287671232
Accuracy of RandomForestClassifier: 0.8863819500402901

Dựa trên phân tích, có vẻ tất cả mô hình đều hoạt động tương đối tốt. Tuy nhiên, mô hình Support Vector Classifier (SVC) đạt điểm chính xác cao nhất trong số các mô hình đã thử.

Điều chỉnh siêu tham số với Bard

Chúng ta đã yêu cầu Bard viết mã tối ưu siêu tham số và lưu mô hình tối ưu cùng đối tượng vector để triển khai.

Prompt: ”Viết mã Python để tối ưu siêu tham số cho SVC. Đồng thời lưu mô hình tốt nhất và vectorizer bằng Joblib.”

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score,f1_score, classification_report, confusion_matrix

import joblib

# Create a RandomForestClassifier model
svm = SVC()

# Create the hyperparameter grid
param_grid = {'C': [1, 10, 100], 'gamma': [0.01, 0.1, 1]}

# Create the GridSearchCV object
grid = GridSearchCV(SVC(), param_grid, cv=5)


# Fit the GridSearchCV object to the training data
grid.fit(X_train, y_train)

# Print the best parameters
print(grid.best_params_)
{'C': 10, 'gamma': 0.1}
# Predict the labels of the testing data using the best model
y_pred = grid.predict(X_test)

# Calculate the accuracy of the best model
accuracy = accuracy_score(y_test, y_pred)

# Print the accuracy of the best model
print("Accuracy of the best model:", accuracy)

Độ chính xác đã tăng nhẹ.

Accuracy of the best model: 0.9298952457695407

Mô hình và vector đã lưu sẽ được dùng để suy luận.

# Save the best model
joblib.dump(grid.best_estimator_, 'best_model.pkl')
# Save the TfidfVectorizer
joblib.dump(vectorizer, 'tfidf_vectorizer.pkl')

Đánh giá mô hình với Bard

Độ chính xác là chưa đủ cho bài toán phân loại. Chúng ta cần kiểm tra thêm f1-score, recall, precision và ma trận nhầm lẫn.

Prompt: ”Viết mã Python để đánh giá mô hình. Bao gồm báo cáo phân loại, ma trận nhầm lẫn và f1 score.”

print(classification_report(y_test, y_pred))

Theo báo cáo, mô hình của chúng ta khá ổn định trên tập kiểm tra.

              precision    recall  f1-score   support

           0       0.94      0.92      0.93       620
           1       0.92      0.94      0.93       621

    accuracy                           0.93      1241
   macro avg       0.93      0.93      0.93      1241
weighted avg       0.93      0.93      0.93      1241
# Plot the confusion matrix
print(confusion_matrix(y_test, y_pred))
[[572  65]
 [ 37 567]]
# Calculate the F1 score
f1_score = f1_score(y_test, y_pred, average='weighted')

# Print the F1 score
print("F1 score:", f1_score)
F1 score: 0.9298892365447746

Dùng Bard để tạo ứng dụng Web với Streamlit

Sau khi hài lòng với kết quả, chúng ta sẽ phát triển một ứng dụng chuyển văn bản đầu vào thành vector, đưa qua mô hình và hiển thị kết quả.

Trước đó, chúng ta cần tạo một kho GitHub.

Hình ảnh từ Github

Clone kho và lưu tất cả thành phần thiết yếu của ứng dụng. Bước này không chỉ đảm bảo an toàn mà còn cho phép quản lý phiên bản hiệu quả cho cả ứng dụng và mô hình.

git clone https://github.com/kingabzpro/Fake-News-DataCamp-Project.git

Viết một prompt tổng quát để phát triển ứng dụng dự đoán tin tức là thật hay giả.

Prompt: “Viết một tệp Python riêng để tạo ứng dụng web bằng Streamlit nhằm dự đoán Tin tức (0 = giả hoặc 1 = thật). Chỉ bao gồm phần ứng dụng Streamlit.”

Tiếp theo, hãy tạo tệp app.py và chuyển mã từ Bard vào tệp này. Xong xuôi, bạn có thể chạy ứng dụng bằng lệnh streamlit run app.py.

Lưu ý: đảm bảo bạn đã cài mọi gói Python cần thiết để chạy ứng dụng Streamlit.

Có vẻ Bard chưa tải được vectorizer. Chúng ta có thể viết prompt tiếp theo để khắc phục.

Prompt tiếp theo: “Thêm phần tải Vectorizer và Model trong tệp ứng dụng bằng joblib.”

Ứng dụng chưa hoạt động đúng, nên chúng ta cần thêm nút chạy để khắc phục.

Prompt tiếp theo: “Đồng thời thêm một nút để chạy suy luận.”

import streamlit as st
import joblib

# Load the vectorizer
vectorizer = joblib.load("tfidf_vectorizer.pkl")

# Load the model
model = joblib.load("best_model.pkl")

# Create a title
st.title("Predict Fake News")

# Input text
text = st.text_input("Enter the news article:")

# Button to run inference
if st.button("Predict"):

    # Convert the text to a vector
    vector = vectorizer.transform([text])

    # Predict the label
    label = model.predict(vector)[0]

    # Display the label
    if label == 0:
        st.write("The news article is fake.")
    else:
        st.write("The news article is real.")

Chúng ta đã xây dựng thành công một ứng dụng Streamlit nhận văn bản đầu vào và đưa ra dự đoán về tính xác thực của bài báo.

Gif từ ứng dụng Streamlit - Bộ phân loại Tin giả

Dùng Bard để triển khai trên Streamlit Cloud

Để triển khai ứng dụng lên đám mây, chúng ta sẽ nhờ Bard hỗ trợ. Hóa ra, bạn chỉ cần đẩy mã lên kho GitHub và kết nối với máy chủ Streamlit.

Prompt: “Hãy giúp tôi triển khai ứng dụng trên Streamlit Community Cloud.”

1. Tạo tệp requirements.txt và thêm tất cả gói Python cần thiết như “scikit-learn.”

2. Thêm tệp bằng Git, commit và push lên máy chủ bên ngoài. Đảm bảo bạn đã thêm mô hình, vector, app.py và requirements.txt.

Hình ảnh từ thư mục Repository

3. Truy cập share.streamlit.io, nhấp “New app,” chọn kho GitHub và điền thông tin cần thiết về ứng dụng.

Hình ảnh từ Streamlit

Vậy là xong. Ứng dụng của chúng ta đã được triển khai và công khai tại Streamlit (fake-news-detector.streamlit.app).

Hình ảnh từ ứng dụng phát hiện tin giả

Kết luận

Các công cụ AI như ChatGPT, Bard và Claude giúp chúng ta làm tốt hơn trong các nhiệm vụ khoa học dữ liệu hàng ngày. Tận dụng năng lực của các công cụ này, chúng ta nâng cao hiệu quả và năng lực, từ đó giải quyết các thách thức dữ liệu phức tạp một cách dễ dàng.

Trong bài viết này, chúng ta đã khám phá sức mạnh của phiên bản Bard mới trong việc phát triển các dự án khoa học dữ liệu end-to-end toàn diện. Bạn cũng có thể xem hướng dẫn Sử dụng ChatGPT cho các dự án khoa học dữ liệu hoặc tham gia khóa học ChatGPT toàn diện: Giới thiệu về ChatGPT, và khám phá các thực hành tốt nhất khi viết prompt.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.

Chủ đề
Khoa học Dữ liệu
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem thêm