Nhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản
Việc nhúng cho phép máy tính so sánh ý nghĩa thay vì khớp các từ chính xác. Chúng hỗ trợ tìm kiếm ngữ nghĩa, đề xuất và RAG. Tìm hiểu xem chúng là gì, mức độ tương tự được đo lường như thế nào và chúng làm bạn thất vọng ở điểm nào.
- nhúng là danh sách các số thể hiện ý nghĩa của văn bản, hình ảnh hoặc dữ liệu khác.
- Những đồ vật giống nhau sẽ có những con số giống nhau nên ý nghĩa có thể được so sánh với toán học.
- Độ tương tự cosine so sánh hướng và đó là một cách phổ biến để tính điểm mức độ giống nhau của hai phần nhúng.
- Chỉ so sánh các phần nhúng từ cùng một mô hình và kiểm tra kết quả trên dữ liệu của riêng bạn.
Tìm kiếm “cách lấy lại tiền của tôi” và một hệ thống tốt sẽ tìm thấy một trang có tiêu đề “Chính sách hoàn tiền”, mặc dù cả hai trang này không có từ ngữ quan trọng nào. Khả năng đó đến từ nhúng, một trong những ý tưởng hữu ích nhất trong AI hiện đại.
Hướng dẫn này giải thích các phần nhúng mà không cần tính toán nặng nề. Chúng tôi đã chạy một ví dụ nhỏ trong Python 3.13 và kết quả của nó được hiển thị bên dưới. Các vectơ trong đó là những vectơ chúng tôi được tạo bằng tay, mỗi vectơ chỉ có ba số, để dễ nhìn thấy ý tưởng. Các phần nhúng thực sự đến từ một mô hình đã được đào tạo và thường có hàng trăm hoặc hàng nghìn con số.
nhúng là gì?
Việc nhúng là sự thể hiện một thứ gì đó dưới dạng danh sách các số, được gọi là vectơ. Một mô hình được huấn luyện sao cho các mục có ý nghĩa liên quan sẽ nhận được các vectơ gần nhau.
"kitten" -> [0.9, 0.8, 0.1]
"cat" -> [0.9, 0.7, 0.2]
"invoice" -> [0.0, 0.1, 0.9]
Khi văn bản ở dạng này, máy tính có thể tính toán xem hai đoạn văn bản giống nhau đến mức nào, điều này không thể thực hiện trực tiếp với các từ. Việc nhúng cũng không giới hạn ở các từ. Các câu, toàn bộ tài liệu, hình ảnh, âm thanh và sản phẩm đều có thể được nhúng.
Tại sao không chỉ đối sánh từ khóa?
| Truy vấn và tài liệu | Tìm kiếm từ khóa | Nhúng tìm kiếm |
|---|---|---|
| “hoàn tiền” và “chính sách hoàn tiền” | Nhớ nhung, không lời chia sẻ | Có thể tìm thấy nó |
| “máy tính xách tay” và “máy tính xách tay” | nhớ nó | Có thể tìm thấy nó |
| “lỗi E1042” và một trang có “E1042” | Tìm thấy nó một cách chính xác | Có thể bỏ lỡ nó |
| “ngân hàng” (sông) và “ngân hàng” (tiền) | Đối xử với họ như nhau | Có thể tách chúng ra, theo ngữ cảnh nhất định |
Hướng dẫn của chúng tôi về RAG cho thấy điều này trong thực tế. Một tìm kiếm đếm từ đơn giản không đạt điểm nào cho “Khi nào tôi có thể lấy lại tiền?” chống lại một tài liệu hoàn lại tiền, vì họ không chia sẻ lời nào. Cũng lưu ý đến hàng thứ ba: số nhận dạng chính xác là điểm yếu của phần nhúng, vì vậy tìm kiếm từ khóa vẫn có chỗ đứng.
Hãy nghĩ về một bản đồ
Hãy tưởng tượng đặt từng từ trên một bản đồ khổng lồ, nơi vị trí phản ánh ý nghĩa. “Mèo” và “mèo con” gần như ngồi cạnh nhau, “chó” ở cùng một khu phố và “hóa đơn” ở một thành phố khác. Để tìm các từ liên quan, bạn chỉ cần nhìn gần đó.
Việc nhúng thực sự hoạt động theo cách tương tự, ngoại trừ việc bản đồ có hàng trăm kích thước chứ không phải hai. Mọi người không thể hình dung được điều đó, nhưng phép toán vẫn hoạt động như nhau. Các số riêng lẻ thường không có ý nghĩa rõ ràng, chẳng hạn như “độ lông”. Điều quan trọng là vị trí tổng thể.
Một ví dụ hoạt động nhỏ
Đây là cách so sánh các vectơ được tạo bằng tay của chúng tôi:
import math
def cosine(a, b):
dot = sum(x * y for x, y in zip(a, b))
return dot / (math.sqrt(sum(x * x for x in a)) *
math.sqrt(sum(y * y for y in b)))
vectors = {
"kitten": [0.9, 0.8, 0.1],
"cat": [0.9, 0.7, 0.2],
"dog": [0.8, 0.3, 0.2],
"invoice": [0.0, 0.1, 0.9],
}
for word in ("kitten", "dog", "invoice"):
print(word, round(cosine(vectors["cat"], vectors[word]), 3))
# kitten 0.994
# dog 0.955
# invoice 0.238
Đối với “mèo”, “mèo con” đạt điểm cao nhất, tiếp theo là “chó” và “hóa đơn” thấp hơn nhiều. Chúng tôi đã chọn những vectơ này để tạo ra mẫu đó, vì vậy việc xếp hạng không chứng minh được điều gì về ngôn ngữ thực. Nó chỉ cho thấy cách tính toán hoạt động. Tìm kiếm ngữ nghĩa thực hiện điều tương tự theo ba bước: nhúng truy vấn, cho điểm truy vấn đó theo mọi mục được lưu trữ và sắp xếp.
query = [0.85, 0.75, 0.15]
sorted(vectors, key=lambda w: cosine(query, vectors[w]), reverse=True)
# ['kitten', 'cat', 'dog', 'invoice']
Giải thích sự tương tự cosine
Mỗi vectơ có thể được coi là một mũi tên chỉ từ gốc tọa độ. Độ tương tự cosine đo góc giữa hai mũi tên, bỏ qua độ dài của chúng. Chúng tôi đã xác nhận các giá trị chính:
cosine([1, 2, 3], [2, 4, 6]) # 1.0 same direction
cosine([1, 0], [0, 1]) # 0.0 unrelated (at right angles)
cosine([1, 0], [-1, 0]) # -1.0 opposite directions
| Điểm | Ý nghĩa |
|---|---|
| Gần 1 | Chỉ về cùng một hướng, rất giống nhau |
| Gần 0 | Không liên quan |
| Gần -1 | Chỉ vào các hướng ngược nhau |
Nhìn vào dòng đầu tiên. [2, 4, 6] dài gấp đôi [1, 2, 3], tuy nhiên điểm số vẫn là 1,0 hoàn hảo, bởi vì chỉ hướng mới là điều quan trọng. Điều đó rất hữu ích cho văn bản, trong đó độ dài có thể phản ánh những thứ như kích thước tài liệu hơn là ý nghĩa. Hãy cẩn thận với các ngưỡng. Không có điểm chung nào có nghĩa là “tương tự”, vì các phạm vi hữu ích khác nhau giữa các mô hình, vì vậy hãy kiểm tra dữ liệu của riêng bạn.
Các biện pháp khoảng cách khác
| Đo lường | Nó nhìn cái gì | Ghi chú |
|---|---|---|
| Độ tương tự cosin | Chỉ góc | Một mặc định chung cho văn bản |
| Sản phẩm chấm | Góc và chiều dài | Nhanh và bằng cosin trên các vectơ chuẩn hóa |
| khoảng cách Euclide | Khoảng cách đường thẳng | Nhỏ hơn có nghĩa là giống nhau hơn |
Sự khác biệt rất dễ nhận thấy. Hai vectơ giống nhau có điểm cosin là 1,0 có khoảng cách Euclide là 3,742, vì một vectơ dài hơn vectơ kia. Nhiều hệ thống chuẩn hóa vectơ, chia tỷ lệ mỗi vectơ thành độ dài bằng 1. Sau đó, tích chấm và cosin cho cùng một câu trả lời và chúng tôi đã xác nhận điều này: cả hai đều cho 0,955 cho “mèo” và “chó”. Kiểm tra tài liệu mô hình của bạn để xem nó khuyến nghị biện pháp nào.
Cách học nhúng
Không ai gán những con số này bằng tay trong các hệ thống thực. Một mạng lưới thần kinh học chúng trong quá trình đào tạo. Một ý tưởng sớm và có ảnh hưởng là các từ xuất hiện trong các ngữ cảnh tương tự có xu hướng có ý nghĩa tương tự nhau, chẳng hạn như “Tôi đã cho con mèo của tôi ăn” và “Tôi đã cho con chó của tôi ăn”. Các mô hình như Word2Vec và GloVe đã học vectơ từ từ các mẫu đó.
Sau đó, các mô hình dựa trên máy biến áp như BERT đã tạo ra các phần nhúng nhận biết theo ngữ cảnh, do đó “ngân hàng” có thể có một vectơ khác trong “bờ sông” và “khoản vay ngân hàng”. Nhiều mô hình hiện đại nhúng toàn bộ câu hoặc đoạn văn cùng một lúc. Hướng dẫn của chúng tôi về mô hình ngôn ngữ lớn giải thích cách biến áp xử lý ngữ cảnh.
Nơi nhúng được sử dụng
| sử dụng | Nó giúp ích như thế nào |
|---|---|
| Tìm kiếm ngữ nghĩa | Tìm kết quả theo ý nghĩa, thay vì từ ngữ chính xác |
| RAG | Truy xuất các đoạn văn có liên quan cho một mô hình ngôn ngữ |
| Khuyến nghị | Đề xuất các mục tương tự như những mục bạn thích |
| Phân cụm | Nhóm hỗ trợ vé hoặc đánh giá theo chủ đề |
| Phát hiện trùng lặp | Phát hiện các câu hỏi hoặc danh sách tương tự |
| Phân loại | Cung cấp các tính năng cho các mô hình đơn giản |
| Phát hiện bất thường | Gắn cờ các mục ở xa mọi thứ khác |
Tìm kiếm ở quy mô
Ví dụ của chúng tôi so sánh một truy vấn với mọi mục, được gọi là tìm kiếm chính xác. Điều đó hoạt động tốt với hàng nghìn mặt hàng, nhưng nó sẽ trở nên chậm với hàng triệu mặt hàng. Các chỉ số lân cận gần nhất (ANN) chẳng hạn như HNSW giải quyết vấn đề này. Họ tìm thấy những trận đấu rất gần một cách nhanh chóng, bằng cách từ bỏ một cơ hội nhỏ để bỏ lỡ trận đấu hay nhất.
Cơ sở dữ liệu vectơ và phần mở rộng, chẳng hạn như pgvector cho PostgreSQL, cung cấp các chỉ mục này cùng với tính năng lọc và lưu trữ. Hướng dẫn về cơ sở dữ liệu vectơ của chúng tôi bao gồm các tùy chọn. Đối với một dự án nhỏ, bạn có thể không cần một dự án nào cả và việc tìm kiếm trong bộ nhớ là một cách hoàn toàn tốt để bắt đầu.
Mẹo: Hãy cân nhắc sớm tìm kiếm kết hợp. Việc kết hợp tính tương đồng của việc nhúng với kết hợp từ khóa thường mang lại kết quả tốt hơn so với việc sử dụng riêng lẻ, đặc biệt khi người dùng tìm kiếm mã sản phẩm, tên hoặc thông báo lỗi.
Lựa chọn mô hình nhúng
- Ngôn ngữ. Ví dụ: nếu nội dung của bạn bằng tiếng Hindi hoặc Tamil, hãy kiểm tra xem mô hình có xử lý tốt nội dung đó hay không.
- Miền. Các mô hình chung có thể gặp khó khăn với các thuật ngữ pháp lý hoặc y tế chuyên ngành.
- Kích thước. Nhiều kích thước hơn có thể thu được nhiều chi tiết hơn nhưng chúng tốn nhiều dung lượng lưu trữ và bộ nhớ hơn.
- Chi phí và lưu trữ. So sánh API được lưu trữ với mô hình mở mà bạn có thể tự chạy, đặc biệt là đối với dữ liệu riêng tư.
- Độ dài đầu vào. Mô hình có giới hạn, do đó, trước tiên, các tài liệu dài phải được chia thành các đoạn.
Bài kiểm tra tốt nhất là dữ liệu của riêng bạn. Thu thập khoảng 20 truy vấn thực tế cùng với các tài liệu họ cần tìm và so sánh cách xếp hạng của từng mô hình. Điểm chuẩn được công bố có thể không phản ánh nội dung của bạn.
Hạn chế
- Khóa mô hình. Không thể so sánh các vectơ từ các mô hình khác nhau. Nếu bạn thay đổi mô hình, bạn phải nhúng lại mọi thứ.
- Điều khoản chính xác. ID, mã và tên hiếm có thể không khớp một cách đáng tin cậy.
- Phủ định. “Được phép hoàn tiền” và “không được phép hoàn tiền” có thể ở gần nhau, mặc dù ý nghĩa trái ngược nhau.
- Tương tự không có nghĩa là đúng. Một kết quả trùng khớp gần đúng có thể đã lỗi thời hoặc đơn giản là sai.
- Thành kiến. Các phần nhúng có thể tiếp thu các khuôn mẫu từ dữ liệu huấn luyện của chúng.
- Cosine không phải là phép thuật. Các nhà nghiên cứu đã đặt câu hỏi về ý nghĩa của nó đối với một số phép nhúng đã học, vì vậy, hãy coi điểm số là một tín hiệu hữu ích chứ không phải là thước đo sự thật.
Những lỗi thường gặp
- Trộn các mô hình. Nhúng các truy vấn và tài liệu có cùng mô hình và phiên bản.
- Sử dụng một ngưỡng tương tự ở mọi nơi. Điều chỉnh ngưỡng tương tự cho từng mô hình và nhiệm vụ.
- Nhúng toàn bộ các tài liệu lớn. Ý nghĩa sẽ bị loãng đi, vì vậy phân tách chúng trước.
- Bỏ qua đánh giá. Nếu không có truy vấn kiểm tra, bạn không thể biết liệu thay đổi có hữu ích hay không.
- Sử dụng nội dung nhúng cho mọi thứ. Nếu người dùng tìm kiếm ID chính xác thì chỉ mục cơ sở dữ liệu bình thường sẽ tốt hơn.
Lời kết
Việc nhúng biến ý nghĩa thành các con số để phần mềm có thể so sánh các ý tưởng thay vì các chuỗi. Khái niệm này rất đơn giản, trong khi công việc thực tế nằm ở việc chọn mô hình, phân chia dữ liệu và thử nghiệm trên các truy vấn thực. Để tự mình thử, hãy nhúng vài chục tài liệu của riêng bạn với bất kỳ mô hình nhúng nào, tìm kiếm chúng bằng các câu hỏi thực tế và xem kết quả làm bạn ngạc nhiên ở đâu.
Câu hỏi thường gặp
Nhúng trong thuật ngữ đơn giản là gì?
Nhúng là danh sách các số đại diện cho ý nghĩa. Các mục có ý nghĩa tương tự sẽ có số tương tự nhau, điều này cho phép máy tính so sánh chúng về mặt toán học.
Độ tương tự cosin là gì?
Nó đo góc giữa hai vectơ, từ -1 đến 1. Điểm gần 1 có nghĩa là chúng hướng gần như cùng một hướng, điều này cho thấy nội dung tương tự nhau.
Sự khác biệt giữa nhúng và mã thông báo là gì?
Mã thông báo là một đoạn văn bản mà mô hình xử lý. Phần nhúng là một vectơ số biểu thị ý nghĩa của mã thông báo, câu hoặc tài liệu.
Một phần nhúng nên có bao nhiêu kích thước?
Nó phụ thuộc vào mô hình, và hàng trăm đến vài nghìn là phổ biến. Nhiều hơn có thể thu được nhiều chi tiết hơn nhưng tốn nhiều bộ nhớ hơn, vì vậy hãy kiểm tra xem trường hợp sử dụng của bạn cần gì.
Tôi có cần cơ sở dữ liệu vectơ để sử dụng phần nhúng không?
Không. Các bộ sưu tập nhỏ có thể được tìm kiếm trong bộ nhớ. Cơ sở dữ liệu vectơ trở nên hữu ích với các bộ sưu tập lớn hơn, cập nhật thường xuyên hoặc nhu cầu lọc.
Tiếp tục học hỏi
Cần trợ giúp về kiểm tra, WordPress hoặc SEO?
Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.
Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại
Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.
Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó
Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …
Đọc bài viết →DevOpsGiải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng
Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…
Đọc bài viết →Phát triển phần mềmGiải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429
Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …
Đọc bài viết →Tự động hóa kiểm thửChế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối
Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…
Đọc bài viết →Kiểm thử phần mềmGiải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%
Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…
Đọc bài viết →Cơ sở dữ liệu & SQLDELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại
DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ
Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…
Đọc bài viết →Phát triển phần mềmGiao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch
Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …
Đọc bài viết →Phát triển phần mềmGiải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng
Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…
Đọc bài viết →Phát triển phần mềmHàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng
Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …
Đọc bài viết →Trí tuệ nhân tạoĐại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy
Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …
Đọc bài viết →DevOpsGiám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết
Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…
Đọc bài viết →DevOpsDocker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách
Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …
Đọc bài viết →Tự động hóa kiểm thửTDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each
TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…
Đọc bài viết →Kiểm thử phần mềmKiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế
Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh
Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…
Đọc bài viết →Cơ sở dữ liệu & SQLCâu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp
TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…
Đọc bài viết →Phát triển phần mềmJWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động
JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…
Đọc bài viết →Phát triển phần mềmGiải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ
Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…
Đọc bài viết →Phát triển phần mềmGiải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế
Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …
Đọc bài viết →Trí tuệ nhân tạoNhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản
nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…
Đọc bài viết →DevOpsTriển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn
Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…
Đọc bài viết →Tự động hóa kiểm thửKiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn
Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…
Đọc bài viết →Kiểm thử phần mềmKiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6
Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…
Đọc bài viết →Kiểm thử phần mềmTrường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp
Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…
Đọc bài viết →Cơ sở dữ liệu & SQLTối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian
Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…
Đọc bài viết →Cơ sở dữ liệu & SQLSQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra
SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…
Đọc bài viết →Phát triển phần mềmHướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ
Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…
Đọc bài viết →Phát triển phần mềmXử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ
Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…
Đọc bài viết →Phát triển phần mềmCác lớp và đối tượng Python: Hướng dẫn OOP với các ví dụ thực tế
Các lớp và đối tượng Python được giải thích bằng mã mà chúng tôi đã chạy: __init__, các phương thức, thuộc tính lớp và phiên bản, tính kế thừa, thuộ…
Đọc bài viết →Trí tuệ nhân tạoMô hình ngôn ngữ lớn là gì? LLM hoạt động như thế nào, được giải thích mà không cường điệu hóa
Mô hình ngôn ngữ lớn là gì? LLM được giải thích bằng ngôn ngữ đơn giản: mã thông báo, phần nhúng, sự chú ý, đào tạo, cửa sổ nhiệt độ và ngữ cảnh, mộ…
Đọc bài viết →DevOpsCác lệnh Linux cho người mới bắt đầu: Hướng dẫn thiết bị đầu cuối cần thiết kèm ví dụ
Các lệnh Linux dành cho người mới bắt đầu, được nhóm theo tác vụ: điều hướng, tệp, xem nhật ký, grep, đường dẫn, quyền, quy trình và lưu trữ, cùng v…
Đọc bài viết →Tự động hóa kiểm thửSelenium vs Nhà viết kịch: Sự khác biệt chính, So sánh mã và nên chọn cái nào
Selenium và Playwright được so sánh: kiến trúc, chờ đợi, hỗ trợ trình duyệt và ngôn ngữ, gỡ lỗi, kiểm tra giống nhau ở cả hai công cụ, lời khuyên di…
Đọc bài viết →Kiểm thử phần mềmPhân vùng tương đương: Giải thích kỹ thuật thiết kế thử nghiệm bằng các ví dụ đã thực hiện
Giải thích về phân vùng tương đương: cách tìm các phân vùng hợp lệ và không hợp lệ, các ví dụ hoạt động theo độ tuổi, mật khẩu và phiếu giảm giá, cá…
Đọc bài viết →Kiểm thử phần mềmMức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: Sự khác biệt, Ma trận và ví dụ thực tế
Giải thích về mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: định nghĩa rõ ràng, ma trận bốn chiều với các ví dụ, thang đo cấp độ, a…
Đọc bài viết →Cơ sở dữ liệu & SQLHướng dẫn về truy vấn con SQL: Các loại, truy vấn con tương quan và TỒN TẠI kèm ví dụ
Hướng dẫn về truy vấn con SQL với các truy vấn chúng tôi đã chạy: truy vấn con vô hướng, IN, FROM và SELECT, truy vấn con tương quan, EXISTS, bẫy và…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về giao dịch SQL và ACID: Các mức CAM KẾT, ROLLBACK và Cô lập
Các giao dịch SQL và ACID được giải thích bằng chuyển khoản ngân hàng mà chúng tôi đã thực hiện: CAM KẾT, ROLLBACK, điểm lưu trữ, khóa, mức cách ly,…
Đọc bài viết →Phát triển phần mềmGit merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào
Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.
Đọc bài viết →Phát triển phần mềmList comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh
List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)
Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.
Đọc bài viết →