Hệ thống gợi ý sản phẩm
Trong bài tập này, bạn sẽ xây dựng một hệ thống gợi ý cho một nhà bán lẻ trực tuyến cung cấp nhiều loại sản phẩm. Hệ thống này sẽ đề xuất ba sản phẩm tương tự cho người dùng đã xem trang sản phẩm nhưng chưa mua, dựa trên sản phẩm cuối cùng họ đã truy cập.
Bạn đã được cung cấp một danh sách các dictionary mô tả những sản phẩm có trên trang,
products = [
{
"title": "Smartphone X1",
"short_description": "The latest flagship smartphone with AI-powered features and 5G connectivity.",
"price": 799.99,
"category": "Electronics",
"features": [
"6.5-inch AMOLED display",
...
"Fast wireless charging"
]
},
...
]
và một dictionary cho sản phẩm cuối cùng người dùng đã xem, lưu trong last_product.
Các hàm tùy chỉnh sau, đã được định nghĩa trước trong khóa học, cũng sẵn sàng để bạn sử dụng:
create_embeddings(texts)→ trả về danh sách embedding cho từng văn bản trongtexts.create_product_text(product)→ kết hợp các đặc tính củaproductthành một chuỗi duy nhất để tạo embedding.find_n_closest(query_vector, embeddings, n=3)→ trả vềnkhoảng cách nhỏ nhất và chỉ số của chúng giữaquery_vectorvàembeddings, dựa trên cosine distance.
Bài tập này là một phần của khóa học
Nhập môn Embeddings với OpenAI API
Hướng dẫn bài tập
- Kết hợp các đặc tính dạng văn bản trong
last_product, và cho mỗi sản phẩm trongproducts, bằng cách dùngcreate_product_text(). - Tạo embedding cho
last_product_textvàproduct_textsbằngcreate_embeddings(), đảm bảolast_product_embeddingslà một danh sách đơn. - Tìm ba cosine distance nhỏ nhất và chỉ số của chúng bằng
find_n_closest().
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Combine the features for last_product and each product in products
last_product_text = ____
product_texts = ____
# Embed last_product_text and product_texts
last_product_embeddings = ____
product_embeddings = ____
# Find the three smallest cosine distances and their indexes
hits = ____(____, product_embeddings)
for hit in hits:
product = products[hit['index']]
print(product['title'])