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

Giới thiệu về Text Embeddings với OpenAI API

Khám phá hướng dẫn sử dụng OpenAI API để tạo text embeddings. Tìm hiểu các ứng dụng trong phân loại văn bản, truy xuất thông tin và phát hiện tương đồng ngữ nghĩa.
Đã cập nhật 5 thg 10, 2026  · 7 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Text embedding là một công cụ thiết yếu trong lĩnh vực xử lý ngôn ngữ tự nhiên (NLP). Đây là các biểu diễn số của văn bản, trong đó mỗi từ hoặc cụm từ được biểu diễn dưới dạng một vector dày đặc gồm các số thực.

Ưu điểm lớn của các embedding này là khả năng nắm bắt ý nghĩa ngữ nghĩa và mối quan hệ giữa các từ hoặc cụm từ, từ đó giúp máy móc hiểu và xử lý ngôn ngữ tự nhiên một cách hiệu quả.

Text embeddings đặc biệt quan trọng trong các tình huống như phân loại văn bản, truy xuất thông tin và phát hiện mức độ tương đồng ngữ nghĩa.

OpenAI, nổi tiếng với những đóng góp xuất sắc cho lĩnh vực trí tuệ nhân tạo, hiện khuyến nghị sử dụng mô hình Ada V2 để tạo text embeddings. Mô hình này xuất phát từ dòng mô hình GPT và đã được huấn luyện để nắm bắt tốt hơn ngữ cảnh và liên kết xuất hiện trong văn bản.

Nếu bạn chưa quen với API của OpenAI hoặc gói openai trong Python, bạn nên đọc Sử dụng GPT-3.5 và GPT-4 qua OpenAI API trong Python trước khi tiếp tục. Hướng dẫn này sẽ giúp bạn thiết lập tài khoản và hiểu lợi ích của việc dùng API.

Hướng dẫn này cũng sử dụng clustering (gom cụm), một kỹ thuật máy học dùng để nhóm các điểm tương tự nhau. Nếu bạn chưa quen với clustering, đặc biệt là k-Means, hãy cân nhắc đọc Giới thiệu k-Means Clustering với scikit-learn trong Python.

Bạn có thể dùng Text Embeddings để làm gì?

Text embedding có thể áp dụng cho nhiều bài toán, bao gồm nhưng không giới hạn ở:

  • Phân loại văn bản. Text embeddings hỗ trợ tạo các mô hình chính xác cho phân tích cảm xúc hoặc nhận diện chủ đề.
  • Truy xuất thông tin. Có thể dùng để truy tìm thông tin liên quan đến một truy vấn cụ thể, tương tự như công cụ tìm kiếm.
  • Phát hiện tương đồng ngữ nghĩa. Embedding có thể nhận diện và định lượng mức độ tương đồng ngữ nghĩa giữa các đoạn văn bản.
  • Hệ thống gợi ý. Có thể cải thiện chất lượng gợi ý bằng cách hiểu sở thích người dùng dựa trên tương tác với dữ liệu văn bản.
  • Sinh văn bản. Embedding được dùng để tạo văn bản mạch lạc và phù hợp ngữ cảnh hơn.
  • Dịch máy. Text embeddings có thể nắm bắt ý nghĩa ngữ nghĩa xuyên ngôn ngữ, từ đó nâng cao chất lượng dịch máy.

Bắt đầu thiết lập

Bạn sẽ cần một số gói Python để làm việc với text embeddings, như sau:

  • os: Thư viện tích hợp sẵn của Python để tương tác với hệ điều hành.
  • openai: client Python để tương tác với OpenAI API.
  • scipy.spatial.distance: cung cấp các hàm tính khoảng cách giữa các điểm dữ liệu.
  • sklean.cluster.KMeans: dùng để tính toán KMeans clustering.
  • umap.UMAP: một kỹ thuật giảm chiều cho dữ liệu có số chiều lớn.

Trước khi sử dụng, hãy cài đặt openai, scipy, plotly sklearn và umap bằng lệnh sau. Toàn bộ mã có trong sổ tay DataLab này.

pip install -U openai, scipy, plotly-express, scikit-learn, umap-learn

Sau khi chạy lệnh trên thành công, bạn có thể import các thư viện như sau:

import os
import openai
from scipy.spatial import distance
import plotly.express as px
from sklearn.cluster import KMeans
from umap import UMAP

Giờ chúng ta sẽ thiết lập khóa API của OpenAI như sau:

openai.api_key = "<YOUR_API_KEY_HERE>"

Lưu ý: Bạn cần tự thiết lập API KEY của mình. Khóa trong mã nguồn không khả dụng và chỉ dùng cho mục đích cá nhân.

Mẫu mã gọi GPT qua API

Hàm trợ giúp sau có thể dùng để tạo embedding cho một dòng văn bản bằng OpenAI API. Trong mã, chúng ta dùng phiên bản ada v2 hiện có để tạo embedding.

def get_embedding(text_to_embed):
	# Embed a line of text
	response = openai.Embedding.create(
    	model= "text-embedding-ada-002",
    	input=[text_to_embed]
	)
	# Extract the AI output embedding as a list of floats
	embedding = response["data"][0]["embedding"]
    
	return embedding

Về bộ dữ liệu

Trong phần này, chúng ta sẽ sử dụng dữ liệu đánh giá nhạc cụ trên Amazon được cung cấp miễn phí trên Kaggle. Bạn cũng có thể tải dữ liệu từ tài khoản Github của tôi như sau:

import pandas as pd

data_URL =  "https://raw.githubusercontent.com/keitazoumana/Experimentation-Data/main/Musical_instruments_reviews.csv"

review_df = pd.read_csv(data_URL)
review_df.head()

image4.gif

Trong tất cả các cột, chúng ta chỉ quan tâm đến cột reviewText.

review_df = review_df[['reviewText']]
print("Data shape: {}".format(review_df.shape))
display(review_df.head())
Data shape: (10261, 1)

Bộ dữ liệu có rất nhiều đánh giá. Để tối ưu chi phí, chúng ta chỉ dùng 100 hàng được chọn ngẫu nhiên.

image3.png

Giờ đây, chúng ta có thể tạo embedding cho mỗi hàng trong tập dữ liệu bằng cách áp dụng hàm phía trên với biểu thức lambda:

review_df = review_df.sample(100)
review_df["embedding"] = review_df["reviewText"].astype(str).apply(get_embedding)

# Make the index start from 0
review_df.reset_index(drop=True)

review_df.head(10)

image2.png

10 hàng đầu tiên của đánh giá và embedding

Hiểu về độ tương đồng văn bản

Để minh họa khái niệm tương đồng ngữ nghĩa, hãy xét hai đánh giá có thể mang cảm xúc tương tự:

“Sản phẩm này tuyệt vời!”

“Nó thực sự vượt quá mong đợi của tôi!”

Sử dụng pdist() từ scipy.spatial.distance, chúng ta có thể tính khoảng cách Euclid giữa các embedding của chúng.

Khoảng cách Euclid là căn bậc hai của tổng bình phương sai khác giữa hai embedding, minh họa như bên dưới:

Minh họa khoảng cách Euclid (nguồn)

Minh họa khoảng cách Euclid (nguồn)

Nếu hai đánh giá thực sự tương tự, khoảng cách sẽ tương đối nhỏ.

Tiếp theo, xét hai đánh giá khác nhau:

“Sản phẩm này tuyệt vời!"

"Tôi không hài lòng với món hàng này."

Khoảng cách giữa embedding của hai đánh giá này sẽ lớn hơn đáng kể so với khoảng cách giữa hai đánh giá tương tự.

Nghiên cứu tình huống: Dùng Text Embedding cho phân tích cụm

Các text embedding đã tạo có thể dùng để phân tích cụm, nhằm nhóm các nhạc cụ có mức độ tương đồng cao lại với nhau.

Có nhiều thuật toán gom cụm như K-Means, DBSCAN, phân cụm phân cấp (hierarchical), và Gaussian Mixture Models. Trong bài toán cụ thể này, chúng ta sẽ dùng KMeans. Tuy nhiên, bài viết Giới thiệu về phân cụm phân cấp trong Python cung cấp khung kiến thức tốt để hiểu cặn kẽ phương pháp này và cách triển khai trong Python.

Gom cụm dữ liệu văn bản

K-means yêu cầu xác định trước số lượng cụm, và chúng ta sẽ đặt là 3 với tham số n_clusters như sau:

kmeans = KMeans(n_clusters=3)
kmeans.fit(review_df["embedding"].tolist())

Giảm chiều dữ liệu văn bản đã embed

Con người thường chỉ có thể hình dung tối đa ba chiều. Phần này sẽ dùng UMAP, một công cụ giảm chiều tương đối nhanh và có khả năng mở rộng tốt.

Đầu tiên, chúng ta tạo một instance của lớp UMAP và áp dụng hàm fit_transform lên các embedding để tạo biểu diễn hai chiều có thể vẽ được.

reducer = UMAP()
embeddings_2d = reducer.fit_transform(review_df["embedding"].tolist())

Trực quan hóa các cụm

Cuối cùng, tạo biểu đồ scatter cho embedding hai chiều. Tọa độ x và y lần lượt lấy từ embeddings_2d[: , 0] và embeddings_2d[: , 1]

Các cụm sẽ tách biệt rõ ràng về mặt trực quan:

fig = px.scatter(x=embeddings_2d[:, 0], y=embeddings_2d[:, 1], color=kmeans.labels_)
fig.show()

Trực quan hóa cụm

Trực quan hóa các cụm

Tổng thể có ba cụm chính với màu sắc khác nhau. Màu của mỗi đánh giá trên hình được xác định bởi nhãn/số cụm do mô hình K-Means gán. Ngoài ra, vị trí của mỗi điểm thể hiện trực quan mức độ tương đồng của một đánh giá so với các đánh giá khác.

Nâng cao hơn

Để đào sâu hiểu biết về text embeddings và OpenAI API, hãy tham khảo các tài liệu sau từ DataCamp: Fine-Tuning GPT-3 bằng OpenAI API và Python và Cheat Sheet OpenAI API trong Python. Tài liệu giúp bạn khai mở toàn bộ tiềm năng của GPT-3 thông qua fine-tuning, đồng thời minh họa cách dùng OpenAI API và Python để cải thiện mô hình mạng nơ-ron tiên tiến này cho bài toán cụ thể của bạn.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Nhà khoa học dữ liệu đa tài, yêu thích chia sẻ kiến thức và đóng góp cho cộng đồng, Zoumana là người sáng tạo nội dung trên YouTube và là cây bút công nghệ hàng đầu trên Medium. Anh yêu thích thuyết trình, lập trình và giảng dạy. Zoumana có hai bằng thạc sĩ: một về khoa học máy tính chuyên sâu Học máy tại Paris, Pháp, và một về Khoa học dữ liệu tại Texas Tech University, Hoa Kỳ. Anh bắt đầu sự nghiệp với vai trò Nhà phát triển phần mềm tại Groupe OPEN ở Pháp, sau đó chuyển sang IBM làm Tư vấn Học máy, nơi anh phát triển các giải pháp AI đầu-cuối cho các công ty bảo hiểm. Zoumana gia nhập Axionable, startup Trí tuệ nhân tạo Bền vững đầu tiên có trụ sở tại Paris và Montreal. Tại đây, anh làm Nhà khoa học dữ liệu và triển khai các sản phẩm AI, chủ yếu là các bài toán NLP, cho khách hàng tại Pháp, Montreal, Singapore và Thụy Sĩ. Ngoài ra, 5% thời gian của anh được dành cho Nghiên cứu và Phát triển. Hiện tại, anh làm việc với vai trò Nhà khoa học dữ liệu cao cấp tại IFC - Nhóm Ngân hàng Thế giới.

Chủ đề
Trí tuệ Nhân tạo
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