Chuyển đến nội dung chính

Phát hiện Đánh giá Khách sạn Trung thực và Giả mạo bằng Machine Learning

Trong hướng dẫn này, bạn sẽ dùng thuật toán học máy để triển khai một bài toán thực tế bằng Python. Bạn sẽ học cách đọc nhiều tệp văn bản trong Python, trích xuất nhãn, dùng dataframe và nhiều nội dung khác!
Đã cập nhật 5 thg 10, 2026  · 11 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Trong hướng dẫn này, bạn sẽ làm việc với bộ dữ liệu văn bản Deceptive Opinion Spam Corpus làm ví dụ.

Tóm lại, hôm nay bạn sẽ đi qua các nội dung sau:

  • Ban đầu, bạn sẽ được giới thiệu ngắn gọn về bộ dữ liệu Đánh giá Khách sạn rồi nhập tất cả các mô-đun cần thiết,
  • Sau đó bạn sẽ bắt đầu bằng cách hiểu cấu trúc dữ liệu: Lấy tất cả các tệp văn bản từ đường dẫn dữ liệu, trích xuất nhãn từ đó, tạo một dataframe chứa nhãn và đánh giá, cuối cùng là gộp hai dataframe này,
  • Tiếp theo bạn sẽ tiền xử lý dữ liệu: Bằng cách loại bỏ stopword khỏi các đánh giá khách sạn bằng thư viện công cụ xử lý ngôn ngữ tự nhiên và trích xuất loại từ (part of speech) cho mỗi từ trong bộ dữ liệu.
  • Khi đã tiền xử lý xong, bạn sẵn sàng chuẩn bị dữ liệu huấn luyện: Bắt đầu bằng cách chia dữ liệu thành tập huấn luyện và kiểm tra, tìm hiểu về Tfidf, vector hóa dữ liệu huấn luyện và kiểm tra, triển khai mô hình máy vector hỗ trợ (SVM), lưu cả: bộ vector hóa Tfidf cho dữ liệu của bạn và mô hình, rồi tải lại chúng.
  • Cuối cùng, bạn sẽ dự đoán trên dữ liệu kiểm tra: Vẽ ma trận nhầm lẫn, điểm chính xác và ma trận nhầm lẫn để kiểm tra hiệu quả của mô hình, bạn cũng sẽ thử mô hình bằng cách chia dữ liệu huấn luyện/kiểm tra với các random state khác nhau, và sau cùng bạn sẽ dùng hai đánh giá Yelp trực tuyến để kiểm thử mô hình.

Tìm hiểu Bộ dữ liệu Deceptive Opinion Spam

Trước khi tải dữ liệu, sẽ tốt hơn nếu bạn xem qua chính xác bạn sẽ làm việc với cái gì! Bộ dữ liệu đánh giá ý kiến lừa đảo (Deceptive opinion spam) là một corpus gồm các đánh giá khách sạn trung thực và giả mạo của 20 khách sạn ở Chicago. Dữ liệu được mô tả trong hai bài báo theo cảm xúc của đánh giá. Cụ thể, bài viết thảo luận các đánh giá cảm xúc tích cực trong 1 và các đánh giá cảm xúc tiêu cực trong 2, bạn có thể tham khảo các bài báo để hiểu sâu hơn.

Corpus này bao gồm:

  • 400 đánh giá tích cực trung thực từ TripAdvisor
  • 400 đánh giá tích cực giả mạo từ Mechanical Turk
  • 400 đánh giá tiêu cực trung thực từ Expedia, Hotels.com, Orbitz, Priceline, TripAdvisor và Yelp
  • 400 đánh giá tiêu cực giả mạo từ Mechanical Turk

Tổng cộng bạn có 1600 đánh giá, nhiệm vụ của bạn là phân loại các đánh giá khách sạn trung thực và giả mạo bằng một thuật toán học máy.

Bắt đầu thôi!

Nhập tất cả các mô-đun cần thiết

Bạn bắt đầu bằng cách nhập tất cả các mô-đun cần thiết như os, pandas, nltk, regex và quan trọng nhất là Sklearn vì trong hướng dẫn hôm nay bạn sẽ dùng thuật toán học máy Support Vector Machine do thư viện Sklearn cung cấp!

Bạn sẽ cần os để lặp qua các thư mục và thư mục con chứa các tệp văn bản, fnmatch sẽ hữu ích để lọc chỉ các tệp văn bản và bỏ qua những thứ khác trong thư mục, pandas sẽ giúp bạn đưa dữ liệu về dạng hàng và cột và có thể thực hiện nhiều thao tác dữ liệu với pandas. Regex giúp trích xuất dữ liệu dựa trên mẫu bạn chỉ định nên bạn cũng sẽ cần nó! Nltk là bộ công cụ xử lý ngôn ngữ tự nhiên sẽ giúp bạn loại bỏ các stopword mà bạn không muốn mô hình học. Sau cùng và quan trọng nhất, bạn sẽ nhập Sklearn cung cấp cho bạn một loạt thư viện để thao tác dữ liệu, vector hóa dữ liệu, học ranh giới giữa các điểm dữ liệu bằng thuật toán học máy và cuối cùng là vẽ độ chính xác.

import os
import fnmatch
from textblob import TextBlob
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords
from nltk import pos_tag,pos_tag_sents
import regex as re
import operator
from sklearn.svm import SVC, LinearSVC
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix
from sklearn_cross_validation import train_test_split  
from sklearn import metrics
from sklearn import svm
from sklearn.grid_search import GridSearchCV
import pickle
from nltk.corpus import stopwords

Lấy tất cả các tệp văn bản từ đường dẫn, trích xuất nhãn và tạo một dataframe cho nhãn

structure of the data
Hình: Cấu trúc dữ liệu


Sau khi nhập thư viện, nhiệm vụ tiếp theo là trích xuất nhãn của dữ liệu. Các nhãn sẽ giúp mô hình phân biệt giữa các đánh giá, liệu một đánh giá cụ thể thuộc lớp trung thực hay giả mạo.

Đầu tiên bạn sẽ lặp qua tất cả các tệp văn bản và lấy đường dẫn tuyệt đối của tất cả các tệp văn bản, từ đó bạn sẽ trích xuất các nhãn tương ứng.

path = 'op_spam_train/'

label = []

configfiles = [os.path.join(subdir,f)
for subdir, dirs, files in os.walk(path)
    for f in fnmatch.filter(files, '*.txt')]

Nên có 1600 đường dẫn, mỗi đường dẫn đại diện cho một tệp văn bản mới. Hãy kiểm tra nhanh nhé!

len(configfiles)
1600

Hãy in ra một trong các đường dẫn tệp văn bản.

configfiles[1]
'op_spam_train/negative_polarity/deceptive_from_MTurk/fold4/d_swissotel_14.txt'

Vậy, từ kết quả trên, bạn có thể thấy rằng để trích xuất nhãn, chúng ta cần một kiểu bộ lọc nào đó. Và cho việc này, bạn sẽ dùng Regex, còn gọi là biểu thức chính quy.

for f in configfiles:
    c = re.search('(trut|deceptiv)\w',f)
    label.append(c.group())

Khi các nhãn đã được trích xuất vào một list tên là label, hãy tạo một dataframe từ list này.

labels = pd.DataFrame(label, columns = ['Labels'])

Hãy in 5 hàng đầu tiên của dataframe labels.

labels.head(5)
  Labels
0 deceptive
1 deceptive
2 deceptive
3 deceptive
4 deceptive

Lấy tất cả đánh giá và thêm vào một danh sách

Sau khi đã trích xuất tất cả nhãn, đến lúc trích xuất nội dung đánh giá từ các tệp văn bản!

review = []
directory =os.path.join("op_spam_train")
for subdir,dirs ,files in os.walk(directory):
   # print (subdir)
    for file in files:
        if fnmatch.filter(files, '*.txt'):
            f=open(os.path.join(subdir, file),'r')
            a = f.read()
            review.append(a)

Giống như trước, giờ bạn sẽ tạo một dataframe từ danh sách review.

reviews = pd.DataFrame(review, columns = ['HotelReviews'])

Hãy in 5 hàng đầu tiên của dataframe reviews.

reviews.head(5)
  HotelReviews
0 Grant it, this hotel seems very nice, but I wa...
1 I recently stayed at the Swissotel Chicago wit...
2 I was sorely disappointed with the Sheraton Ch...
3 My family and I stayed at the Sheraton Chicago...
4 I recently stayed at the Homewood Suites by Hi...

Tuyệt! Đến đây khá trực quan đúng không?

Giờ hãy gộp cả hai dataframe labels và reviews lại!

Gộp dataframe đánh giá và dataframe nhãn

result = pd.merge(reviews, labels,right_index=True,left_index = True)


result['HotelReviews'] = result['HotelReviews'].map(lambda x: x.lower())

Sau khi gộp, bạn có một dataframe mới tên là result. Hãy in vài hàng đầu tiên của dataframe này.

result.head()
  HotelReviews Labels
0 grant it, this hotel seems very nice, but i wa... deceptive
1 i recently stayed at the swissotel chicago wit... deceptive
2 i was sorely disappointed with the sheraton ch... deceptive
3 my family and i stayed at the sheraton chicago... deceptive
4 i recently stayed at the homewood suites by hi... deceptive

Loại bỏ stopword khỏi cột Hotel Reviews

Khi xử lý dữ liệu văn bản, việc loại bỏ stopword là rất quan trọng. Stopword không mang nhiều ý nghĩa, và chúng không cung cấp thông tin giúp mô hình học được mẫu trong dữ liệu.

Bạn sẽ tạo một cột mới trong dataframe tên là review_without_stopwords. Hàm lambda sẽ xử lý tất cả các hàng của cột HotelReviews. Bạn sẽ dùng list comprehension và chỉ lưu những từ không xuất hiện trong biến stop vào cột mới.

import ntlk
nltk.download('stopwords')

Lưu ý: Để chạy được ô bên dưới, bạn có thể cần chạy các dòng lệnh trên trong terminal.

stop = stopwords.words('english')

result['review_without_stopwords'] = result['HotelReviews'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))

Hãy in nhanh dataframe sau khi loại bỏ stopword!

result.head()
  HotelReviews Labels review_without_stopwords
0 grant it, this hotel seems very nice, but i wa... deceptive grant it, hotel seems nice, pleased stay here....
1 i recently stayed at the swissotel chicago wit... deceptive recently stayed swissotel chicago husband two ...
2 i was sorely disappointed with the sheraton ch... deceptive sorely disappointed sheraton chicago. outside ...
3 my family and i stayed at the sheraton chicago... deceptive family stayed sheraton chicago hotel towers be...
4 i recently stayed at the homewood suites by hi... deceptive recently stayed homewood suites hilton chicago...

Trích xuất loại từ (part of speech) từ các Đánh giá Khách sạn để dùng làm đặc trưng đầu vào cho mô hình

Theo 1 gợi ý rằng ý kiến trung thực và giả mạo có thể lần lượt được phân vào thể loại thông tin (informative) và tưởng tượng (imaginative). Có sự khác biệt phân bố mạnh giữa văn bản thông tin và tưởng tượng, cụ thể là loại thứ nhất thường có nhiều danh từ, tính từ, giới từ, mạo từ và liên từ đẳng lập hơn, trong khi loại sau bao gồm nhiều động từ, trạng từ, đại từ và tiền mạo từ. Tuy nhiên, việc ý kiến giả mạo chứa nhiều dạng so sánh nhất không phải điều bất ngờ, vì văn viết lừa đảo (nhưng không nhất thiết là văn tưởng tượng nói chung) thường dùng ngôn ngữ phóng đại.

Vậy nên, giờ với mỗi từ trong một hàng của dataframe, hãy trích xuất loại từ tương ứng và bạn sẽ đưa phần này vào mô hình như một vector đặc trưng.

Để gán nhãn pos, bạn sẽ dùng TextBlob, một thư viện Python để xử lý dữ liệu văn bản. Nó cung cấp API đơn giản cho các tác vụ NLP phổ biến như gán loại từ, trích xuất cụm danh từ, phân tích cảm xúc, phân loại, dịch, v.v.

Lưu ý: Để chạy ô hàm pos bên dưới, bạn có thể cần chạy các dòng lệnh sau trong cửa sổ terminal.

import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
def pos(review_without_stopwords):
    return TextBlob(review_without_stopwords).tags
os = result.review_without_stopwords.apply(pos)
os1 = pd.DataFrame(os)

Mỗi hàng của dataframe os1 sẽ gồm một danh sách các từ cùng loại từ tương ứng. Bạn sẽ không thể vector hóa một danh sách để đưa vào mô hình. Vì vậy, bạn sẽ phải chuyển các hàng dạng danh sách này thành chuỗi.

os1.head()
  review_without_stopwords
0 [(grant, NN), (it, PRP), (hotel, NN), (seems, ...
1 [(recently, RB), (stayed, VBN), (swissotel, NN...
2 [(sorely, RB), (disappointed, JJ), (sheraton, ...
3 [(family, NN), (stayed, VBD), (sheraton, JJ), ...
4 [(recently, RB), (stayed, VBN), (homewood, NN)...

Hãy chuyển mỗi hàng thành một chuỗi, trong đó mỗi từ sẽ được nối với thẻ pos tương ứng bằng dấu gạch chéo, và các từ được phân tách bằng một khoảng trắng.

os1['pos'] = os1['review_without_stopwords'].map(lambda x:" ".join(["".join(x) for x in x ]) )

Cuối cùng, hãy gộp cột pos với dataframe chính result và in vài hàng đầu tiên!

result = result = pd.merge(result, os1,right_index=True,left_index = True)
result.head()
first few rows of pos column and the main result df

Giai đoạn Huấn luyện

Chia dữ liệu thành hai phần: 80% huấn luyện và 20% kiểm tra

Khi đã trích xuất đặc trưng, giờ là lúc chia dữ liệu thành huấn luyện và kiểm tra. Trong hướng dẫn này, bạn sẽ chia 80% dữ liệu để huấn luyện và 20% còn lại để kiểm tra.

review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=13)

Vector hóa dữ liệu Huấn luyện và Kiểm tra bằng TfidfVectorizer

Hãy tìm hiểu chi tiết về TfidfVectorizer

Tfidf có hai phần:

    • Tần suất thuật ngữ (Tf): Một từ cụ thể xuất hiện bao nhiêu lần trong một tài liệu. Để hiểu rõ hơn, hãy lấy từ: “the”. Từ này khá phổ biến và sẽ xuất hiện với tần suất cao trong tất cả tài liệu của bạn. Nhưng nếu nghĩ kỹ, “the” không cung cấp thêm thông tin gì về tài liệu của bạn. Còn nếu nói về từ “messi”, nó cho ta ngữ cảnh. Ta có thể phần nào chắc chắn rằng tài liệu có thể nói về bóng đá. Vậy ta cần giảm trọng số của “the” bằng cách nào đó. Giờ bạn có thể nói hãy lấy nghịch đảo tần suất tương ứng của chúng để tăng trọng số cho “messi”. Khá đúng nhưng có một điểm cần lưu ý. Có thể tồn tại các từ rất hiếm trong tài liệu. Ví dụ: “floccinaucinihilipilification”. Đây là một từ có thật, nghĩa là: “Hành động hay thói quen đánh giá thứ gì đó là vô giá trị.” Nếu bạn dùng nghịch đảo cho từ này, chắc chắn giá trị sẽ gần 1 nhưng lại không cho bạn biết ngữ cảnh. Vậy (lấy ví dụ con số) tf (“the”) = 100 tf(“messi”) = 5 tf(“floccinaucinihilipilification”) = 1
  • Nghịch đảo tần suất tài liệu (idf): Vấn đề trên về từ phổ biến và hiếm được giải quyết bằng cách thêm thành phần này. Vậy nó là gì? Nó được tính bằng log của {số tài liệu trong corpus chia cho số tài liệu mà thuật ngữ này xuất hiện}. Với “the”, tỉ lệ sẽ gần 1. Do đó, log sẽ đưa giá trị này về 0. idf (“the”) = 0 idf (“messi”) = log(10/3) = 0,52 (Vì corpus nói về bóng đá) idf (“floccinaucinihilipilification”) = log(10/1) = 1
  • Bước cuối: Giờ ta muốn trọng số dành cho “messi” cao hơn hai từ kia. Để làm vậy ta nhân hai thành phần: tfidf = tf x idf “the” = 100 x 0 = 0, “floccinaucinihilipilification” = 1 x 1 = 1, “messi” = 5 x 0,52 = 2,6

Kỹ thuật gán trọng số này giúp mô hình học máy trong phân loại vì ta chỉ rõ từ nào nặng/nhẹ hơn.

Bây giờ bạn đã biết về nó, hãy triển khai trên dữ liệu huấn luyện và kiểm tra.

tf_vect = TfidfVectorizer(lowercase = True, use_idf=True, smooth_idf=True, sublinear_tf=False)

X_train_tf = tf_vect.fit_transform(review_train)
X_test_tf = tf_vect.transform(review_test)

Triển khai Mô hình

Giờ bạn sẽ triển khai một mô hình học máy gọi là Support Vector Machines (SVM). Để hiểu rõ hơn bạn có thể xem liên kết này.

Để chọn siêu tham số tốt nhất cho thuật toán ML, bạn sẽ dùng GridSearchCV, dựa trên dữ liệu huấn luyện và nhãn sẽ gợi ý cho bạn giá trị siêu tham số tốt nhất trong số các giá trị bạn chỉ định dưới dạng danh sách. Bạn sẽ chọn năm giá trị khác nhau cho C và gamma và dựa trên dữ liệu, bạn sẽ nhận được bộ siêu tham số tối ưu.

def svc_param_selection(X, y, nfolds):
    Cs = [0.001, 0.01, 0.1, 1, 10]
    gammas = [0.001, 0.01, 0.1, 1]
    param_grid = {'C': Cs, 'gamma' : gammas}
    grid_search = GridSearchCV(svm.SVC(kernel='linear'), param_grid, cv=nfolds)
    grid_search.fit(X, y)
    return grid_search.best_params_
svc_param_selection(X_train_tf,label_train,5)
{'C': 10, 'gamma': 0.001}
clf = svm.SVC(C=10,gamma=0.001,kernel='linear')
clf.fit(X_train_tf,label_train)
pred = clf.predict(X_test_tf)

Lưu bộ vector hóa Tfidf và mô hình ML

Hãy lưu mô hình bạn vừa huấn luyện cùng với bộ vector hóa Tfidf bằng thư viện pickle mà bạn đã nhập ở đầu, để sau này bạn chỉ cần tải dữ liệu, vector hóa và dự đoán bằng mô hình ML.

with open('vectorizer.pickle', 'wb') as fin:
    pickle.dump(tf_vect, fin)
with open('mlmodel.pickle','wb') as f:
    pickle.dump(clf,f)

Tải bộ vector hóa Tfidf và mô hình ML

pkl = open('mlmodel.pickle', 'rb')
clf = pickle.load(pkl)   
vec = open('vectorizer.pickle', 'rb')
tf_vect = pickle.load(vec)
/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator SVC from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
  UserWarning)
/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator TfidfTransformer from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
  UserWarning)
/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator TfidfVectorizer from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
  UserWarning)

Dự đoán trên Dữ liệu Kiểm tra

X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)

Vẽ ma trận nhầm lẫn, điểm chính xác và báo cáo phân loại để phân tích hiệu năng mô hình

print(metrics.accuracy_score(label_test, pred))
0.96875
print (confusion_matrix(label_test, pred))
[[149   6]
 [  4 161]]

Ma trận nhầm lẫn trên là ma trận 2 x 2, trong đó, phần tử hàng đầu cột đầu là Dương tính thật (TP), hàng đầu cột thứ hai là Âm tính giả (FN), hàng thứ hai cột đầu là Dương tính giả (FP) và hàng thứ hai cột thứ hai là Âm tính thật (TN).

Từ ma trận trên, bạn có thể kết luận chỉ có 10 mẫu kiểm tra trong số 320 bị phân loại sai.

print (classification_report(label_test, pred))
             precision    recall  f1-score   support

  deceptive       0.97      0.96      0.97       155
      truth       0.96      0.98      0.97       165

avg / total       0.97      0.97      0.97       320

Kiểm thử Mô hình với các Random State khác nhau

  • Random State 1
review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=1)
X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)
print(metrics.accuracy_score(label_test, pred))
0.978125
print (confusion_matrix(label_test, pred))
[[146   5]
 [  2 167]]
print (classification_report(label_test, pred))
             precision    recall  f1-score   support

  deceptive       0.99      0.97      0.98       151
      truth       0.97      0.99      0.98       169

avg / total       0.98      0.98      0.98       320
  • Random State 10
review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=10)
X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)
print(metrics.accuracy_score(label_test, pred))
0.98125
print (confusion_matrix(label_test, pred))
[[155   5]
 [  1 159]]
print (classification_report(label_test, pred))
             precision    recall  f1-score   support

  deceptive       0.99      0.97      0.98       160
      truth       0.97      0.99      0.98       160

avg / total       0.98      0.98      0.98       320
  • Random State 42
review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=42)
X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)
print(metrics.accuracy_score(label_test, pred))
0.984375
print (confusion_matrix(label_test, pred))
[[165   3]
 [  2 150]]
print (classification_report(label_test, pred))
             precision    recall  f1-score   support

  deceptive       0.99      0.98      0.99       168
      truth       0.98      0.99      0.98       152

avg / total       0.98      0.98      0.98       320

Từ các dự đoán trên, bạn có thể thấy Mô hình hoạt động rất tốt và không bị overfit vì bạn đã kiểm thử nhiều lần bằng cách chia dữ liệu theo các cách khác nhau.

Kiểm thử mô hình với hai đánh giá từ Yelp

def test_string(s):
    X_test_tf = tf_vect.transform([s])
    y_predict = clf.predict(X_test_tf)
    return y_predict
test_string("The hotel was good.The room had a 27-inch Samsung led tv, a microwave.The room had a double bed")
array(['truth'], dtype=object)
test_string("My family and I are huge fans of this place. The staff is super nice, and the food is great. The chicken is very good, and the garlic sauce is perfect. Ice cream topped with fruit is delicious too. Highly recommended!")
array(['deceptive'], dtype=object)

Mô hình đã dự đoán đúng hai đánh giá trên. Đánh giá đầu tiên là trung thực còn đánh giá thứ hai là giả mạo!

Lưu ý

Hiệu năng mô hình có thể thay đổi khi triển khai trên hệ thống xử lý khác với thông số kỹ thuật khác nhau, đây là hành vi bất thường đã được quan sát. Nếu cộng đồng có thể giúp tìm ra nguyên nhân, điều đó sẽ giúp ích rất nhiều cho mọi người, bao gồm cả tác giả bài viết này. Ở đây “cộng đồng” là các độc giả sẽ đọc hướng dẫn này!

Chúc bạn học tốt!

Hy vọng hướng dẫn này thực sự hữu ích và bổ sung giá trị cho bộ kỹ năng của bạn.

Nếu bạn muốn học thêm về Machine Learning, hãy học khóa Building Chatbots in Python của DataCamp.

Chủ đề
Python
Machine Learning

Tìm hiểu thêm về Python và Machine Learning

Khóa học

Tìm hiểu Machine Learning

2 giờ
313.7K
Giới thiệu về học máy mà không cần lập trình.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
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êmXem Thêm