Làm cách nào để xây dựng mô hình học máy để phân biệt đó là con người hay ChatGPT?
Ngày 19/01/2024 - 08:01Hãy thử đoán xem ai đã tạo ra câu hỏi này: Con người hay AI. Với những tiến bộ trong việc tạo ra ngôn ngữ tự nhiên, việc phân biệt sự khác biệt ngày càng trở nên khó khăn hơn. Trong bài viết này, chúng tôi sẽ xây dựng một mô hình học máy để cho biết liệu con người hay ChatGPT đã tạo ra văn bản. Nghe có vẻ thú vị phải không? Bắt đầu nào.
Nguồn: Chủ đề Vine
Trò chuyệnGPT
Tài khoản chat gpt 4 là một hệ thống AI hoặc máy học đàm thoại. Nó lắng nghe, học hỏi và thử thách. Hệ thống này lấy văn bản ngôn ngữ tự nhiên làm đầu vào và cung cấp phản hồi. Giống như bạn đang nói chuyện với một người thông minh hơn bạn, người có thể trả lời hầu hết mọi thắc mắc của bạn. Bạn thậm chí có tưởng tượng rằng chúng ta sẽ có được thứ gì đó như thế này trong tương lai không? ChatGPT này do OpenAI phát triển và ra mắt vào tháng 11 năm 2022. Nó sử dụng một quy trình lặp đi lặp lại xem xét bối cảnh đầu vào của người dùng, lấy từ các cuộc trò chuyện đã xem trước đó và sử dụng hiểu biết chung về các cuộc trò chuyện đó để đưa ra phản hồi mới. Nó sử dụng phản hồi của con người để giảm thiểu các câu trả lời có hại, không trung thực hoặc thiên vị.
Nguồn: Mạng tin tức đầu tư
Bây giờ hãy xem một số ví dụ để hiểu cách ChatGPT này phản hồi.
Người dùng: Bạn nghĩ gì về quả dứa trên pizza?
ChatGPT: Tôi nghĩ dứa trên pizza là sự kết hợp thú vị giữa các hương vị. Một số người có thể thích nó và một số có thể không. Nó phụ thuộc vào sở thích cá nhân.
Người dùng: Tôi thích mèo hơn chó.
ChatGPT: Tôi hiểu rồi. Tại sao bạn thích mèo hơn chó?
Người dùng: Tôi nghĩ biến đổi khí hậu là một vấn đề nghiêm trọng.
ChatGPT: Tôi đồng ý với bạn. Biến đổi khí hậu là một vấn đề nghiêm trọng ảnh hưởng đến tất cả mọi người trên hành tinh này.
Hãy bắt đầu xây dựng mô hình của chúng tôi.
Báo cáo sự cố: Chúng tôi sẽ xây dựng mô hình máy học có thể phân loại văn bản là do con người viết hoặc do ChatGPT tạo. Nó có thể xử lý nhiều loại văn bản như câu hỏi, bài tiểu luận, câu chuyện, truyện cười, mã, v.v.
Mô tả tập dữ liệu
- Đây là liên kết đến tập dữ liệu mà tôi đã sử dụng trong dự án này: Bộ dữ liệu
- Tập dữ liệu này chứa bốn cột: văn bản, diễn giải, danh mục và nguồn.
- Những văn bản này được lấy từ nhiều nguồn khác nhau.
- Mỗi văn bản này được diễn giải để tạo ra thêm năm văn bản nữa.
- Nó có 419197 hàng và 4 cột.
Triển khai mô hình học máy
Hãy bắt đầu bằng cách nhập các thư viện máy học cơ bản cần thiết như numpy và pandas.
Sử dụng gấu trúc để tải tập dữ liệu và tạo khung dữ liệu.
Hãy xem một văn bản và cách diễn giải tương ứng của nó để hiểu tập dữ liệu. Ở đầu ra, chúng ta có thể thấy văn bản là câu hỏi về câu chuyện về viên kim cương Kohinoor. Câu tương tự đã được ChatGPT diễn giải theo năm cách khác nhau.
Tạo một từ điển với các văn bản và các danh mục tương ứng của chúng như xác định xem văn bản đó được tạo ra bởi con người hay ChatGPT. Nó sẽ được phân loại dựa trên việc đó là văn bản hay diễn giải. Nếu đó là văn bản thì đó là do con người tạo ra, nếu đó là một cách diễn giải thì đó là ChatGPT được tạo. Nếu bạn xem danh mục này, bạn sẽ nhận được một từ điển như trong hình.
Chuyển đổi từ điển danh mục này thành khung dữ liệu bằng cách sử dụng pandas. Tạo hai cột dưới dạng văn bản và danh mục trong đó danh mục có hai giá trị duy nhất như con người và ChatGPT. Xáo trộn tất cả các hàng trong khung dữ liệu để tránh trang bị quá mức . Chúng ta sẽ lấy 20000 hàng đầu tiên sau khi xáo trộn để dễ dàng. Hãy xem khung dữ liệu được tạo.
Xem các giá trị độc đáo của con người và ChatGPT. Có 10340 văn bản do con người tạo ra và 9660 văn bản do ChatGPT tạo ra.
Lấy hai biến mảng X và Y. X sẽ có cột văn bản của khung dữ liệu và Y sẽ có cột danh mục của khung dữ liệu. Về cơ bản đây là đầu vào và đầu ra cho mô hình. Chúng ta sẽ đưa X làm đầu vào và nó sẽ dự đoán Y là đầu ra.
X=df['text']
y=df['category']
Chia tập dữ liệu thành tập dữ liệu huấn luyện và tập dữ liệu kiểm tra
Tiếp theo, chia toàn bộ tập dữ liệu bằng cách sử dụng train_test_split thành X_train, X_test, y_train và y_test để xử lý tiếp.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Hãy vector hóa chúng bằng cách sử dụng bộ vector hóa TF-IDF. Đó là một thống kê số phản ánh tầm quan trọng của một từ đối với một tài liệu trong một bộ sưu tập hoặc kho văn bản. Trong việc truy xuất thông tin và khai thác văn bản, nó thường được sử dụng như một hệ số trọng số. Đối với việc nhập này TfidfVectorizer.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X_train_tfidf = vectorizer.fit_transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)
Chọn phân loại tốt nhất
Thay vì lấy một bộ phân loại cụ thể và xây dựng nó, hãy lấy một số bộ phân loại và tính điểm chính xác cũng như điểm f1 của chúng để biết bộ phân loại tốt nhất trong số đó. Ở đây, chúng tôi đã sử dụng hồi quy logistic, trình phân loại vectơ hỗ trợ , trình phân loại cây quyết định, trình phân loại biểu quyết, trình phân loại KNN, Rừng ngẫu nhiên, Cây bổ sung, Adaboost, trình phân loại đóng bao và trình phân loại tăng cường độ dốc.
from sklearn.linear_model import LogisticRegressionfrom sklearn.svm import SVCfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.ensemble import ExtraTreesClassifierfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.ensemble import BaggingClassifierfrom sklearn.ensemble import GradientBoostingClassifier
lg = LogisticRegression(penalty='l1',solver='liblinear')
sv = SVC(kernel='sigmoid',gamma=1.0)
mnb = MultinomialNB()
dtc = DecisionTreeClassifier(max_depth=5)
knn = KNeighborsClassifier()
rfc = RandomForestClassifier(n_estimators=50,random_state=2)
etc = ExtraTreesClassifier(n_estimators=50,random_state=2)
abc = AdaBoostClassifier(n_estimators=50,random_state=2)
bg = BaggingClassifier(n_estimators=50,random_state=2)
gbc = GradientBoostingClassifier(n_estimators=50,random_state=2)
Bây giờ hãy tính điểm chính xác và điểm f1 của các bộ phân loại này.
def prediction(model,X_train,X_test,y_train,y_test): model.fit(X_train,y_train) pr = model.predict(X_test) acc_score = metrics.accuracy_score(y_test,pr) f1= metrics.f1_score(y_test,pr,average="binary", pos_label="chatgpt") return acc_score,f1
acc_score = {}
f1_score={}
clfs= { 'LR':lg, 'SVM':sv, 'DTC':dtc, 'KNN':knn, 'RFC':rfc, 'ETC':etc, 'ABC':abc, 'BG':bg, 'GBC':gbc,
}for name,clf in clfs.items(): acc_score[name],f1_score[name]= prediction(clf,X_train_tfidf,X_test_tfidf,y_train,y_test) #View those scores acc_score f1_score
Nếu so sánh những điểm số này, chúng tôi nhận được điểm cao nhất cho Bộ phân loại ExtraTrees (ETC). Vì vậy, chúng tôi sẽ sử dụng bộ phân loại cây bổ sung này để huấn luyện mô hình và dự đoán tương lai. Để huấn luyện mô hình bằng phương pháp phù hợp.
Mô hình học máy – Trình phân loại cây bổ sung
Trình phân loại cây bổ sung: Trình phân loại cây bổ sung là một loại phương pháp học tập tổng hợp sử dụng nhiều cây quyết định ngẫu nhiên để cải thiện độ chính xác dự đoán và kiểm soát tình trạng quá khớp. Nó còn được gọi là Bộ phân loại cây cực kỳ ngẫu nhiên. Nó khác với cây quyết định cổ điển ở cách chúng được xây dựng. Cây quyết định thông thường có một số nhược điểm như trang bị quá mức và phương sai cao. Vì vậy, để tránh chúng, các phương pháp học tập tổng hợp khác nhau được giới thiệu. Bộ phân loại cây bổ sung là một trong số đó. Thay vì sử dụng các mẫu bootstrap, Trình phân loại cây bổ sung sử dụng toàn bộ tập dữ liệu gốc cho mỗi cây, nhưng lấy mẫu ngẫu nhiên các đặc điểm cho mỗi phần tách. Và cũng thay vì tìm điểm phân chia tối ưu cho từng đối tượng, Trình phân loại cây bổ sung chọn ngẫu nhiên một điểm phân tách từ phân bố đồng đều trong phạm vi của đối tượng địa lý. Đây là một kỹ thuật máy học mạnh mẽ có thể xử lý các vấn đề phân loại phức tạp với độ chính xác cao và mức độ trang bị quá mức thấp.
etc.fit(X_train_tfidf,y_train)
Ma trận hỗn loạn
Dự đoán tập dữ liệu thử nghiệm và nhận được ma trận nhầm lẫn. Ma trận nhầm lẫn này về cơ bản là một bảng xác định hiệu suất của thuật toán. Ở đây đối với bài toán phân loại của chúng ta, nó sẽ cho bốn giá trị. Dương tính giả (FP), Dương tính thực sự (TP), Âm tính giả (FN) và Âm tính thực sự (TN) là bốn giá trị mà nó sẽ cung cấp. Chúng tôi cũng sẽ vẽ sơ đồ ma trận nhầm lẫn này. Đối với điều đó, hãy nhập matplotlib và seaborn để trực quan hóa.
from sklearn.metrics import confusion_matrix
y_pred =etc.predict(X_test_tfidf)
cm = confusion_matrix(y_test, y_pred)
print(cm)import seaborn as snimport matplotlib.pyplot as plt
confusion_matrix = pd.DataFrame(cm, index = [i for i in ["ChatGPT","Human"]], columns = [i for i in ["ChatGPT","Human"]])
plt.figure(figsize = (20,14))
sn.heatmap(confution_matrix, annot=True,cmap="YlGnBu", fmt='g')
Bây giờ hãy xem kết quả dự đoán của mô hình. Ở bước trước chúng ta đã dự đoán và lưu kết quả vào y_pred. Y_pred này là một mảng. Vì vậy, hãy chuyển đổi nó thành khung dữ liệu bằng cách sử dụng gấu trúc và đổi tên cột từ 0 thành 'dự đoán danh mục' và xem nó.
y_preddf=pd.DataFrame(y_pred)
y_preddf.rename(columns={0:'category predicted'},inplace=True)
y_preddf
Bài viết liên quan
26/01/2024
19/01/2024
23/01/2024
06/02/2024
16/02/2024
22/01/2024