Tìm kiếm ngữ nghĩa và embedding mở rộng

Nhập môn Embeddings với OpenAI API

Emmanuel Pire

Senior Software Engineer, DataCamp

Tìm kiếm ngữ nghĩa

  • Dùng embedding để trả về kết quả tương tự nhất với truy vấn tìm kiếm
  • Ví dụ: Tìm kiếm ngữ nghĩa cho trang tin tức trực tuyến

Cách hoạt động của tìm kiếm ngữ nghĩa: văn bản truy vấn được embedding bởi mô hình embedding, sau đó tính khoảng cách giữa truy vấn đã embedding và các tiêu đề đã embedding. Trả về tiêu đề gần nhất.

Nhập môn Embeddings với OpenAI API

Tìm kiếm ngữ nghĩa

Cách hoạt động của tìm kiếm ngữ nghĩa: văn bản truy vấn được embedding bởi mô hình embedding, sau đó tính khoảng cách giữa truy vấn đã embedding và các tiêu đề đã embedding. Trả về tiêu đề gần nhất.

  1. Embed truy vấn và các văn bản khác
  2. Tính khoảng cách cosine
  3. Lấy văn bản có khoảng cách cosine nhỏ nhất
Nhập môn Embeddings với OpenAI API

Embedding mở rộng

articles = [
    {"headline": "Economic Growth Continues Amid Global Uncertainty",
     "topic": "Business",
     "keywords": ["economy", "business", "finance"]},
    ...
    {"headline": "1.5 Billion Tune-in to the World Cup Final",
     "topic": "Sport",
     "keywords": ["soccer", "world cup", "tv"]}
]
Headline: Economic Growth Continues Amid Global Uncertainty
Topic: Business
Keywords: economy, business, finance
Nhập môn Embeddings với OpenAI API

Kết hợp thuộc tính với F-string

articles = [..., {"headline": "1.5 Billion Tune-in to the World Cup ",
                  "topic": "Sport",
                  "keywords": ["soccer", "world cup", "tv"]}]


def create_article_text(article):
return f"""Headline: {article['headline']} Topic: {article['topic']} Keywords: {', '.join(article['keywords'])}"""
print(create_article_text(articles[-1]))
Headline: 1.5 Billion Tune-in to the World Cup Final
Topic: Sport
Keywords: soccer, world cup, tv
Nhập môn Embeddings với OpenAI API

Tạo embedding mở rộng

article_texts = [create_article_text(article) for article in articles]

article_embeddings = create_embeddings(article_texts)
print(article_embeddings)
[[-0.019609929993748665, -0.03331860154867172, ...],
 ...,
 [..., -0.014373429119586945, -0.005235843360424042]]
Nhập môn Embeddings với OpenAI API

Tính khoảng cách

from scipy.spatial import distance

def find_n_closest(query_vector, embeddings, n=3):

distances = [] for index, embedding in enumerate(embeddings): dist = distance.cosine(query_vector, embedding) distances.append({"distance": dist, "index": index})
distances_sorted = sorted(distances, key=lambda x: x["distance"])
return distances_sorted[0:n]
Nhập môn Embeddings với OpenAI API

Trả về kết quả tìm kiếm

query_text = "AI"

query_vector = create_embeddings(query_text)[0]
hits = find_n_closest(query_vector, article_embeddings)
for hit in hits: article = articles[hit['index']] print(article['headline'])
Tech Giant Buys 49% Stake In AI Startup
Tech Company Launches Innovative Product to Improve Online Accessibility
India Successfully Lands Near Moon's South Pole
Nhập môn Embeddings với OpenAI API

Ayo berlatih!

Nhập môn Embeddings với OpenAI API

Preparing Video For Download...