11 điểm bởi GN⁺ 2025-07-29 | 2 bình luận | Chia sẻ qua WhatsApp
  • Embedding là bộ khung ngữ nghĩa của LLM, chuyển đổi văn bản thành vector số để mô hình có thể hiểu được
  • Sự phát triển của embedding đã trải qua nhiều thay đổi, từ các kỹ thuật thống kê như count-based, TF-IDF đến các phương pháp hiện đại như Word2Vec, BERT, dòng GPT
  • Một embedding tốt cần cân bằng giữa việc bảo toàn độ tương đồng ngữ nghĩa của từđiều chỉnh số chiều, còn trong LLM thì embedding được tối ưu hóa và huấn luyện cùng với dữ liệu và nhiệm vụ
  • Bài viết giải thích các phương pháp embedding tiêu biểu như TF-IDF, Word2Vec, BERT bằng ví dụ và trực quan hóa; đặc biệt, embedding trong LLM chuyển token đầu vào thành vector nhiều chiều rồi được cập nhật theo từng tầng dựa trên ngữ cảnh
  • Bài viết hướng dẫn cách hiểu trực quan nguyên lý hoạt động thực tế của embedding thông qua mã thực hành như torch embedding layer, phân tích đồ thị vector embedding và các tài liệu trực quan

Embedding là gì

  • Embedding là kỹ thuật chuyển đổi dữ liệu như văn bản, hình ảnh, âm thanh thành vector nhiều chiều
  • Đặc biệt trong NLP, đây là quá trình chuyển từ hoặc token thành vector để máy tính có thể hiểu được
  • Embedding không chỉ áp dụng cho văn bản mà còn cho nhiều loại dữ liệu khác, nhưng bài viết này tập trung vào text embedding

Sự phát triển và các loại embedding

  • Các kỹ thuật embedding ban đầu chủ yếu là các phương pháp dựa trên thống kê như count vector, TF-IDF, Co-Occurrence Matrix
  • Sau đó, các embedding dựa trên mạng nơ-ron như Word2Vec, GloVe, FastText xuất hiện và bắt đầu phản ánh độ tương đồng ngữ nghĩa trong không gian vector
  • Trong các mô hình dựa trên Transformer như BERT, GPT, embedding của từng token được cập nhật theo từng tầng sau khi đầu vào đi qua mô hình để phản ánh thông tin ngữ cảnh (embedding động/theo ngữ cảnh)

Điều kiện của một embedding tốt

Biểu diễn ngữ nghĩa (semantic representation)

  • Những từ có ý nghĩa tương tự sẽ nằm gần nhau trong không gian vector
    Ví dụ: "cat" và "dog" được ánh xạ gần nhau hơn so với "dog" và "strawberry"

Kích thước chiều (dimensionality)

  • Nếu số chiều embedding quá nhỏ thì khả năng biểu diễn sẽ thiếu, còn quá lớn thì lãng phí bộ nhớ và tăng nguy cơ overfitting
    Ví dụ: GPT-2 có số chiều embedding tối thiểu là 768

Kỹ thuật embedding truyền thống: TF-IDF

  • TF-IDF tính độ quan trọng của từ bằng cách nhân tần suất xuất hiện với độ hiếm (nghịch đảo tần suất tài liệu)
  • TF: một từ xuất hiện thường xuyên như thế nào trong một tài liệu
  • IDF: từ đó hiếm đến mức nào trong toàn bộ tập tài liệu
  • Kết quả của TF-IDF được dùng cho các phân tích đơn giản như truy hồi thông tin, trích xuất từ khóa, nhưng không phản ánh tốt độ tương đồng ngữ nghĩa
  • Khi trực quan hóa, phần lớn từ thường tụ vào một cụm và mức độ phân tách ngữ nghĩa thấp

Word2Vec

  • Word2Vec là embedding dựa trên mạng nơ-ron, phản ánh hiệu quả các quan hệ ngữ nghĩa trong không gian vector
  • Có các phương pháp như CBOW (dự đoán từ trung tâm từ các từ xung quanh), Skipgram (dự đoán các từ xung quanh từ từ trung tâm)
  • Thông qua huấn luyện, ma trận embedding ở tầng ẩn được sử dụng như vector ngữ nghĩa của từ
  • Sử dụng các kỹ thuật tối ưu như negative sampling nên có thể huấn luyện hiệu quả ngay cả trên dữ liệu quy mô lớn
  • Khi trực quan hóa bằng TensorFlow Embedding Projector, có thể thấy các từ giống nhau về ngữ nghĩa được gom cụm

BERT và embedding dựa trên Transformer

  • BERT là mô hình Transformer chỉ gồm Encoder, và càng đi qua nhiều tầng thì thông tin ngữ cảnh càng được phản ánh một cách động
  • Giai đoạn đầu vào: token hóa văn bản bằng tokenizer → chuyển thành vector token embedding → cộng với positional embedding
  • Sau đó đi qua nhiều tầng Transformer, embedding thay đổi động để phản ánh thông tin ngữ cảnh
  • Các special token như [CLS], [SEP] cũng được dùng để xử lý thông tin toàn câu/phân tách
  • Sau BERT, nhiều LLM đã áp dụng embedding động (theo ngữ cảnh)

Cấu trúc và huấn luyện embedding trong LLM

  • Embedding trong LLM được triển khai như tầng đầu tiên (lookup table) chuyển token đầu vào thành vector nhiều chiều
  • Nó được tổ chức dưới dạng bảng nhận token ID và trả về vector embedding tương ứng, như torch.nn.Embedding
  • Trong quá trình huấn luyện, LLM tối ưu cả trọng số của tầng embedding, nhờ đó embedding được tinh chỉnh phù hợp với dữ liệu và mục tiêu mà mô hình xử lý
  • Ví dụ: mô hình DeepSeek-R1-Distill-Qwen-1.5B sử dụng vector embedding 1536 chiều

Trực quan hóa embedding và phân tích đồ thị

  • Có thể phân tích không gian embedding dưới dạng đồ thị dựa trên độ tương đồng giữa các vector embedding (như cosine similarity)
  • Ví dụ: có thể tokenize câu "AI agents will be the most hot topic..." rồi trực quan hóa bằng cách nối các token có độ tương đồng cao trong embedding của từng token
  • Các biến thể khác nhau của cùng một từ đơn (ví dụ: "list", "_list", "List") cũng thường có embedding tương tự nhau

Kết luận

  • Embedding là thành phần cốt lõi của LLM và NLP, giúp chuyển dữ liệu đầu vào thành vector số để mô hình có thể xử lý cấu trúc ngữ nghĩa và thông tin ngữ cảnh
  • Ngay cả trong thời đại LLM, nguyên lý cơ bản và cấu trúc của embedding không thay đổi quá nhiều, và vẫn đóng vai trò rất quan trọng đối với hiệu năng cũng như khả năng diễn giải của mô hình
  • Nhờ các ví dụ mã trực quan và tài liệu minh họa, có thể dễ dàng hiểu được nguyên lý hoạt động thực tế của embedding

2 bình luận

 
crawler 2025-07-29

king - man + woman = queen

 
GN⁺ 2025-07-29
Ý kiến trên Hacker News
  • Thật sự đáng ngạc nhiên khi embedding là một trong những phần hầu như không được bàn đến trong stack LLM; tôi luôn nghĩ đây là phần có ảnh hưởng cực lớn đến khả năng mạng suy ra các liên kết ngữ nghĩa một cách trực quan, nhưng mọi người lại không nói nhiều về nó

    • Vấn đề của embedding là gần như không thể đọc hiểu được nếu không có chính mô hình đó; embedding rõ ràng mã hóa ý nghĩa của chuỗi đầu vào, nhưng thông tin này bị nén quá mức trong quá trình huấn luyện đến mức chỉ decoder head của mô hình mới giải mã được; Anthropic có nghiên cứu biến các đặc trưng nội bộ của Sonnet 3 thành dạng có thể diễn giải, nhưng cách này tốn kém vì phải huấn luyện song song một mạng riêng để diễn giải activation của các lớp bên trong

    • Điểm kỳ lạ của không gian nhiều chiều là phần lớn các giá trị vừa trực giao với nhau vừa cách nhau rất xa; thế mà các kỹ thuật giảm chiều vẫn có thể gom cụm các khái niệm ngay cả trong không gian 50 nghìn chiều, điều này thật đáng kinh ngạc

    • Khi mới tìm hiểu sâu về embedding, tôi đã nghĩ rằng “ít nhất một phần ba phép màu của LLM đến từ embedding”; bản thân việc các từ đã được sắp xếp theo cách có ích về mặt ngữ nghĩa đã phần nào làm bớt đi vẻ huyền bí của LLM; nó vẫn rất kỳ diệu, nhưng có cảm giác như đã nhìn được một chút phía sau tấm màn

    • Embedding giống như một kiểu “Rosetta Stone” giúp máy tính định lượng được ngôn ngữ của con người; tôi nghĩ đây phải là một chủ đề cực kỳ quan trọng, nhưng cũng hiểu rằng việc cố nắm bắt một không gian vector 1.000 chiều là điều khá nặng đầu

    • Tôi không thật sự hiểu ý kiến cho rằng embedding không được thảo luận đủ; đặc biệt trong các ví dụ áp dụng RAG hay khi nói về vector DB, embedding lúc nào cũng là chủ đề trung tâm

  • Tutorial này rất hay — khác biệt giữa contextual embedding và static embedding là rất quan trọng; nhiều người quen với word2vec (static embedding), nhưng contextual embedding thường mạnh hơn rất nhiều; (nhân tiện, trang này bị browser history hijacking khá nặng, chỉ cần cuộn trang là lịch sử trình duyệt bị thêm hàng loạt mục)

  • Phần mà tôi nghĩ cần giải thích nâng cao hơn là sự khác biệt, dưới góc nhìn embedding, giữa transformer Encoder-Decoder (BERT) và mô hình sinh chỉ có Decoder

    • Cần chỉnh nhẹ: BERT là encoder (không phải Encoder-Decoder), ChatGPT là decoder; các mô hình encoder (BERT) có thể nhìn toàn bộ câu nên có lợi thế trong biểu diễn ngữ nghĩa; ví dụ, trong câu “The bank was steep and muddy”, nó có thể xác định nghĩa của bank là bờ sông hay ngân hàng bằng cách nhìn cả câu; ngược lại, các mô hình kiểu GPT (decoder) chỉ nhìn từ trái sang phải nên không thấy thông tin ở phía sau câu khi dự đoán; có thể xem thêm bài modernBERT của huggingfacepaper neoBERT

    • Bổ sung cho giải thích của dust42: BERT là encoder, GPT là decoder, còn T5 là encoder-decoder; hiện nay encoder-decoder ít phổ biến hơn; mô hình encoder thường được dùng cho phân loại, trích xuất thông tin và truy hồi, còn decoder phù hợp với sinh văn bản, tóm tắt và dịch; nghiên cứu gần đây (paper Ettin) cũng xác nhận điều này; cả hai đều là transformer nên có thể chuyển encoder thành decoder hoặc ngược lại; khác biệt trong thiết kế nằm ở bidirectional attention (mọi token đều nhìn được mọi token) và autoregressive attention (chỉ nhìn được các token trước đó)

  • Có thể dùng embedding projector để không chỉ xem hơn 50 từ mà còn rèn cảm giác về trực quan hóa dữ liệu 3D, xem Tensorflow Embedding Projector

  • Đây là một hướng dẫn trực quan cực kỳ xuất sắc! Tôi cũng đã làm một bài học về embedding của LLM theo phong cách visual + audio + quiz để giúp hiểu sâu hơn về deep learning trên app.vidyaarthi.ai, link trải nghiệm trực tiếp, theo đuổi cách tiếp cận “vừa làm vừa học” để biến các khái niệm trừu tượng thành thứ trực quan và tương tác hơn; rất mong nhận được phản hồi (không phải tự quảng bá, đây thật sự là công cụ tôi làm bằng rất nhiều tâm huyết)

  • Có vẻ trang này không truy cập ổn lắm, console hiện đầy các lỗi như “Content-Security-Policy: The page’s settings blocked an inline style…”

  • Tôi nghĩ trực quan hóa bằng word cloud hoặc hiển thị kết quả top-k của truy vấn có thể dễ hiểu hơn; khuyên nên thử nhập từ vào Tensorflow Embedding Projector rồi chọn UMAP projection

  • Một cách giải thích thiên về thực dụng hơn cũng có trong bài viết giải thích về embedding của sgnt.ai, do chính tôi viết

    • Cảm ơn tài liệu rất hay! Theo cách tôi hiểu thì LLM có ba vấn đề lớn:

      1. LLM nén một không gian vector rất nhiều chiều xuống biểu diễn có số chiều thấp hơn, nhưng ý nghĩa của từng trục riêng lẻ trong không gian đó lại không rõ ràng, nên phần lớn chỉ có thể kiểm tra đúng sai từ đầu ra; tôi tò mò về các hướng nghiên cứu nhằm giải quyết vấn đề này
      2. LLM dùng dữ liệu văn bản cho biểu diễn nén này. Nghĩa là chúng học từ ghi chép của con người về thực tại, chứ không phải từ chính thực tại; Keen Technologies dùng dữ liệu robot gắn cảm biến trong thế giới thực để tránh giới hạn này, tuy chậm hơn nhiều nhưng họ tin có thể tạo ra mô hình chính xác hơn về dài hạn
      3. Vì LLM nhét ý nghĩa và thông tin ngữ cảnh của cuộc hội thoại vào một vector duy nhất (trạng thái nội bộ), nên trong các cuộc trò chuyện dài, vector đó liên tục bị ghi đè khiến ngữ cảnh ban đầu mờ dần; tôi muốn biết liệu có cách nào khác để quản lý trạng thái ngoài việc sao lưu vector hay không
    • Cách tiếp cận của bạn trực quan hơn nhiều, tôi đã tự hỏi vì sao bạn không đưa ví dụ embedding cho các đặc trưng dạng categorical/scalar

  • Đây là một bài viết rất giàu tính giáo dục và có cấu trúc tốt, cảm ơn tác giả

    • Có thể xem hồ sơ tác giả trên Huggingface, trước đây đội ngũ HN đã gợi ý nên đăng lại vì phản hồi chưa tốt; điều tôi thích ở bài này là nó đưa ra ví dụ về nhiều loại embedding khác nhau
  • Embedding của LLM thường là một phần của input layer, và khác với các mô hình tiền huấn luyện như Word2Vec, nó được cập nhật trong quá trình huấn luyện,
    ngoài ra tôi còn thắc mắc: ở giai đoạn suy luận, embedding là lookup table dạng “token ID -> vector”,
    về mặt toán học thì có thể xem như mã hóa token ID thành một vector one-hot dài rồi cho đi qua linear layer để nhận được embedding vector,
    liệu cấu trúc này có được áp dụng nguyên vẹn khi huấn luyện embedding không, tức là embedding được coi như một linear layer và được học bằng backprop hay không

    • Embedding cũng là một phần của quy trình backprop thông thường, chỉ là vì lý do hiệu quả nên người ta không thực sự dùng one-hot encoding,
      thay vào đó, indexing được hiện thực theo cách khả vi để gradient chỉ chảy qua vector được chọn,
      nếu muốn xem ví dụ cụ thể thì có thể tham khảo mã nguồn SmallPebble của thư viện deep learning mini do tôi làm

    • Giải thích thêm cho bình luận kia một chút,
      indexing và phép nhân với vector one-hot là tương đương nhau về mặt toán học,
      ví dụ nếu vocab có N mục, độ dài chuỗi là L thì sẽ phải nhân một ma trận thưa NxL với ma trận embedding,
      nhưng trên thực tế, vì mỗi cột chỉ cần biết một chỉ số nên nội bộ hệ thống chỉ biểu diễn bằng một con số (index),
      theo cách này, cùng với forward pass, backward pass cũng được viết riêng dựa trên indexing,
      để gradient được truyền vào đúng các embedding vector đã được chọn xử lý