Embeddings - Biểu diễn số học của dữ liệu

Huy Võ
embeddings
vector
vectordb
embedding models
vector databases
semantic similarity
text classification
word2vec
bert
generative ai
llm
Embeddings - Biểu diễn số học của dữ liệu

Ở phần này, bọn mình sẽ cùng học về Embeddings và Vector Databases. Đây là 2 khái niệm nền tảng khá quan trọng trong việc xây dựng các ứng dụng sử dụng LLMs.

Embeddings là gì?

Ngôn ngữ là một thứ rất hay ho và… trừu tượng. Ví dụ như “trái cây” và “trái gió trở trời” đọc thì giống nhau, nhưng nghĩa lại khác nhau rất nhiều. Nhưng “trái cây” và “hoa quả”, đọc thì khác, nhưng nghĩa lại giống nhau. Ta không thể chỉ dựa vào âm tiết, cách viết để hiểu được nghĩa của từ.

Vậy có cách nào để máy tính hiểu được nghĩa của từ? Hoặc hiểu được sự liên hệ giữa các từ, biết những từ nào nghĩa giống nhau, khác nhau hay không?

May thay là có, nếu ta biểu diễn chúng dưới dạng số học. Embeddings là biểu diễn số học của các văn bản, hình ảnh và âm thanh. Nói đơn giản, ta biến các từ/hình ảnh/âm thanh thành các vector số ([0.1, 034, 0.44]), dựa trên các đặc điểm, đặc tính và danh mục của chúng.

embedding

Sau khi chuyển thành vector, ta có thể sử dụng các phép toán vector để tính toán độ tương đồng giữa các vector, để hiểu được mức độ liên quan giữa các đối tượng.

Do vậy, embeddings giúp máy tính hiểu được sự tương đồng ngữ nghĩa giữa các đối tượng (2 từ này có liên quan hay không, 2 ảnh này có giống nhau hay không).

Tại sao embeddings lại quan trọng? Ứng dụng của nó?

Embeddings mang lại nhiều lợi ích quan trọng cho các mô hình deep learning và ứng dụng AI:

  1. Cải thiện khả năng hiểu dữ liệu thực tế: Giúp các mô hình deep learning xử lý các loại dữ liệu phức tạp một cách hiệu quả. Thay vì phải xử lý số, ảnh, chữ viết… giờ ta chỉ việc xử lý embeddings vector.
  2. Giảm chiều dữ liệu và giảm độ phức tạp: Embeddings đơn giản hóa việc biểu diễn dữ liệu nhiều chiều như văn bản, hình ảnh và âm thanh, giúp dễ dàng xử lý và phân tích hơn.

Trong thực tế, embeeding được ứng dụng như sau:

  • Tìm kiếm (kết quả được xếp hạng theo độ liên quan với từ khóa tìm kiếm)
  • Phân cụm (nhóm các văn bản có nội dung tương tự nhau)
  • Gợi ý, đề xuất sản phẩm (đề xuất các mục có nội dung văn bản liên quan)
  • Phát hiện bất thường (tìm ra các trường hợp lạ, ít liên quan với phần còn lại)
  • Phân loại (phân loại văn bản dựa trên nhãn tương đồng nhất)

Ví dụ, khi các bạn tìm kiếm “áo khoác” trên Shopee hoặc Google. Thay vì tìm các sản phẩm có chứa từ “áo khoác”, ta có thể dùng embedding để tìm các sản phẩm tên tương tự như “áo phông”, “áo len”, “áo gió”,…

Embedding Models (Mô hình embedding)

Vậy làm sao để biến một từ hoặc một câu thành embedding? Ta sử dụng embedding models.

Một trong những embedding model phổ biến đầu tiên là word2vec

Thuật toán Word2vec sử dụng một neuron network để học các liên kết từ (sự liên quan của từ) từ một kho ngữ liệu văn bản có dung lượng lớn.
Sau khi được huấn luyện, mô hình có thể phát hiện các từ đồng nghĩa hoặc gợi ý các từ bổ sung cho một phần của câu.
Với cái tên nói lên tất cả, word2vec thể hiện cho mỗi từ riêng biệt với một danh sách cụ thể của các số được gọi là vector.

Về sau, có nhiều embeeding model mới hơn ra đời, BERT của Google là một trong số đó (Nghe nói bây giờ họ vẫn sử dụng BERT trong quá trình tìm kiếm).

embedding-model

Các mô hình embedding chủ yếu khác nhau về đầu vào tối đa + số chiều trong vector đầu ra. Các mô hình lớn hơn, nhiều chiều hơn có thể nắm bắt nhiều thông tin hơn, nhưng tốn nhiều tài nguyên tính toán hơn.

Trên thực tế, ta không cần tự train mô hình embedding, vì đã có các mô hình sẵn có. Một số mô hình embedding phổ biến bao gồm:

  • text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002 của OpenAI
  • all-mpnet-base-v2, all-MiniLM-L12-v2… được thư viện sentence-transformers cung cấp

Ví dụ về cách tạo embedding

Ví dụ, mình có 1 từ đầu vào là “dog”. Khi sử dụng model all-MiniLM-L12-v2, từ này sẽ được biểu diễn dưới dạng một vector với 384 chiều.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L12-v2')
embedding = model.encode("dog")
print(embedding)

Kết quả:

[ 3.48497152e-01 -3.84317964e-01 -1.15802266e-01  2.03050867e-01
 -4.31225628e-01 -1.85827410e-03  7.11700320e-03  1.20060341e-02
  ...
  7.13369623e-02 -2.01146543e-01 -6.64063990e-02 -6.98207021e-02]

Một embedding là một vector (danh sách) các số thực. Từ vector embedding này, ta có thể dùng các phép tính vector để tính toán khoảng cách giữa các vector.

distance

Từ đó, ta hiểu được mức độ liên quan giữa các từ, ảnh hoặc đoạn văn.

Facebook Messenger

fb.com/toidicodedao

Email Support

[email protected]

Telegram

t.me/hoccodeai