我透過GPT替我生成幾封垃圾郵件來做測試,並輸入進我們的程式內。
1. Dear valued customer,You have been selected as the lucky winner of an all-expenses-paid trip to Hawaii! This exclusive offer includes:- 5 nights in a luxury hotel- Free round-trip airfare- Access to exclusive island toursAll you have to do is click the link below and claim your prize. Hurry, this offer expires in 24 hours![Click here to claim your FREE vacation]Best regards,The Travel Experts Team*T&C apply. Offer valid for a limited time. Must be 18+ to participate. Charges may apply for additional services.*
2. Dear customer, click the link below to claim your $1,000 gift card now! This is a limited-time offer, don’t miss out. Just verify your account information and enjoy your reward!
可以看到他能夠清楚地辨別是不是垃圾郵件囉~
接著我們也能看到訓練的ROC曲線
AUC 值接近 1,表明該模型在區分正類和負類時非常精確。當 AUC 值為 0.99 時,這意味著模型有 99% 的機率能夠正確區分垃圾郵件和正常郵件。
另外也能測試正常郵件
Hello everyone, here is the agenda for our upcoming weekly meeting. Please review the topics and come prepared with any questions or updates. See you all on Monday at 10 AM.
昨天的程式用到了MultinomialNB
,Multinomial Naive Bayes 是 Naive Bayes 分類器的一種,特別適合處理離散型數據,例如詞頻數據或分類數據,因此在文本分類任務中非常常見,尤其是垃圾郵件分類、情感分析等應用。
Naive Bayes 分類器基於「條件獨立假設」,即假設特徵之間是相互獨立的,這樣可以大大簡化複雜的問題。儘管這個假設在現實中並不總是成立,Naive Bayes 在實踐中通常仍然能產生相當好的結果。
他主要有幾個特點:
而他的公式可以表示如下:
這次我是以Naive Bayes做為演示,而實際上我也有透過RNN建立一個來做操作,而我在測試時以上面的內容的一小部分做為測試資料時發現他們預測的結果是不同的。
Dear valued customer,You have been selected as the lucky winner of an all-expenses-paid trip to Hawaii!
以下為個人猜測
這部份是我的訓練,有興趣的也可以試試看喔~
def train_model():
messages = pd.read_csv('spam.csv', encoding='ISO-8859-1')
messages = messages[['v1', 'v2']].rename(columns={'v1': 'label', 'v2': 'message'})
corpus = [preprocess_text(message) for message in messages['message']]
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(corpus)
X = tokenizer.texts_to_sequences(corpus)
X = pad_sequences(X, maxlen=100)
y = pd.get_dummies(messages['label'], drop_first=True).values.ravel()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = Sequential()
model.add(Embedding(input_dim=5000, output_dim=128, input_length=100))
model.add(LSTM(units=128, return_sequences=False))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_test, y_test))
model.save(MODEL_FILE)
with open(TOKENIZER_FILE, 'wb') as f:
pickle.dump(tokenizer, f)
y_pred = (model.predict(X_test) > 0.5).astype("int32")
accuracy = accuracy_score(y_test, y_pred)
precision, recall, fscore, _ = precision_recall_fscore_support(y_test, y_pred, average='binary')
print(f"Model training completed, accuracy: {accuracy * 100:.2f}%")
print(f"Precision: {precision:.3f}, Recall: {recall:.3f}, F1-Score: {fscore:.3f}")
終於到了最後一天了,希望這30天的分享能夠讓大家對人工智慧有更深入的了解,也能更清楚地知道如何將其應用到實際生活中。這次的鐵人賽,我提前將近兩個月開始準備,但由於中途有一些突發事情,再加上有許多理論是我不太熟悉的,因此花了大量的時間來準備這次的文章,而且寫到最後真的是每天都被推甄跟鐵人賽還有廠商的專案工項轟炸,真的是身心俱疲...,好險我有很扛的隊友阿,先跪了。至於為什麼會選擇這個主題其實也帶有一點個人私心,不僅只是我想更了解這個領域,也是因為我怕推研的面試會被問到AI相關問題,等等被電爆xD
希望大家讀完一系列的文章之後,能更清楚地理解這些理論,這次的介紹連編排介紹順序都花了一番苦心來準備呢。
最後,感謝大家在這30天中的陪伴和支持。這段時間的分享對我來說是一個巨大的挑戰,但也讓我學到了許多新的知識和技能。希望這些內容能對大家有所幫助,並激發你們對人工智慧的興趣和熱情。
如果大家對這次的內容有任何疑問或建議又或是發現我在文章的說明有錯誤的,歡迎隨時在下方留言或是私訊我。我會盡力解答大家的問題,並繼續努力創作更多優質的內容。
謝謝大家,我們不知道會不會下次再見(?