Sử dụng LIT để phân tích các mô hình Gemma ở Keras

1. Giới thiệu

Các sản phẩm AI tạo sinh còn khá mới và hành vi của một ứng dụng có thể khác biệt nhiều so với các dạng phần mềm trước đây. Do đó, bạn cần phải kiểm tra các mô hình học máy đang được sử dụng, kiểm tra các ví dụ về hành vi của mô hình và điều tra các kết quả bất ngờ.

Công cụ diễn giải học máy (LIT; trang web, GitHub) là một nền tảng để gỡ lỗi và phân tích các mô hình học máy nhằm tìm hiểu lý do và cách thức hoạt động của các mô hình đó.

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng LIT để khai thác tối đa mô hình Gemma của Google. Lớp học lập trình này minh hoạ cách sử dụng độ nổi bật của trình tự, một kỹ thuật có thể diễn giải, để phân tích các phương pháp kỹ thuật lời nhắc khác nhau.

Mục tiêu học tập:

  1. Tìm hiểu về độ nổi bật của trình tự và cách sử dụng trong phân tích mô hình.
  2. Thiết lập LIT cho Gemma để tính toán đầu ra của câu lệnh và độ nổi bật của trình tự.
  3. Sử dụng độ nổi bật của trình tự thông qua mô-đun LM Salience (Độ nổi bật của LM) để tìm hiểu tác động của thiết kế câu lệnh đối với kết quả của mô hình.
  4. Kiểm thử các đề xuất cải tiến được giả định trong LIT và xem tác động của các đề xuất đó.

Lưu ý: lớp học lập trình này sử dụng cách triển khai KerasNLP của Gemma và TensorFlow v2 cho phần phụ trợ. Bạn nên sử dụng hạt nhân GPU để theo dõi.

Bản minh hoạ giao diện người dùng LIT

2. Độ nổi bật của trình tự và cách sử dụng trong phân tích mô hình

Các mô hình tạo sinh văn bản sang văn bản, chẳng hạn như Gemma, lấy một trình tự đầu vào ở dạng văn bản đã mã hoá và tạo các mã thông báo mới là các nội dung tiếp theo hoặc nội dung hoàn chỉnh thông thường cho dữ liệu đầu vào đó. Quá trình tạo này diễn ra từng mã thông báo một, thêm (trong một vòng lặp) từng mã thông báo mới tạo vào dữ liệu đầu vào cùng với mọi mã thông báo trước đó cho đến khi mô hình đạt đến điều kiện dừng. Ví dụ: khi mô hình tạo một mã thông báo kết thúc trình tự (EOS) hoặc đạt đến độ dài tối đa được xác định trước.

Phương thức nổi bật là một lớp kỹ thuật AI có thể giải thích (XAI) có thể cho bạn biết phần nào của dữ liệu đầu vào quan trọng đối với mô hình cho các phần khác nhau của kết quả. LIT hỗ trợ các phương thức nổi bật cho nhiều nhiệm vụ phân loại, giúp giải thích tác động của một chuỗi mã thông báo đầu vào đối với nhãn dự đoán. Độ nổi bật của trình tự tổng quát hoá các phương thức này cho các mô hình tạo sinh văn bản sang văn bản và giải thích tác động của các mã thông báo trước đó đối với các mã thông báo được tạo.

Bạn sẽ sử dụng phương thức Grad L2 Norm (Độ chuẩn L2 của độ dốc) tại đây để xác định độ nổi bật của trình tự. Phương thức này phân tích độ dốc của mô hình và cung cấp cường độ ảnh hưởng của mỗi mã thông báo trước đó đối với kết quả. Phương thức này đơn giản và hiệu quả, đồng thời đã được chứng minh là hoạt động hiệu quả trong việc phân loại và các chế độ cài đặt khác. Điểm nổi bật càng lớn thì mức độ ảnh hưởng càng cao. Phương pháp này được sử dụng trong LIT vì được hiểu rõ và được sử dụng rộng rãi trong cộng đồng nghiên cứu về khả năng diễn giải.

Các phương thức nổi bật dựa trên độ dốc nâng cao hơn bao gồm Grad ⋅ Inputđộ dốc tích hợp. Ngoài ra, bạn cũng có thể sử dụng các phương thức dựa trên phương pháp loại bỏ, chẳng hạn như LIMESHAP. Các phương thức này có thể mạnh mẽ hơn nhưng tốn kém hơn đáng kể về mặt tính toán. Hãy tham khảo bài viết này để biết thông tin so sánh chi tiết về các phương pháp nổi bật.

Bạn có thể tìm hiểu thêm về khoa học của các phương pháp nổi bật trong bài viết nhập môn có tính tương tác về tính nổi bật.

3. Mã nhập, môi trường và mã thiết lập khác

Tốt nhất là bạn nên làm theo lớp học lập trình này trong Colab mới. Bạn nên sử dụng thời gian chạy trình tăng tốc vì bạn sẽ tải một mô hình vào bộ nhớ. Tuy nhiên, hãy lưu ý rằng các tuỳ chọn trình tăng tốc thay đổi theo thời gian và có thể bị giới hạn. Colab cung cấp gói thuê bao có tính phí nếu bạn muốn sử dụng các trình tăng tốc mạnh mẽ hơn. Ngoài ra, bạn có thể sử dụng thời gian chạy cục bộ nếu máy của bạn có GPU phù hợp.

Lưu ý: bạn có thể thấy một số cảnh báo về biểu mẫu

ERROR: pip's dependency resolver does not currently take into account all the
packages that are installed. This behaviour is the source of the following
dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you
have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires
ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.

Bạn có thể yên tâm bỏ qua những lỗi này.

Cài đặt LIT và Keras NLP

Đối với lớp học lập trình này, bạn sẽ cần phiên bản mới nhất của keras (3) keras-nlp (0.14.) và lit-nlp (1.2) cũng như một tài khoản Kaggle để tải mô hình cơ sở xuống.

pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'

Quyền truy cập vào Kaggle

Để xác thực bằng Kaggle, bạn có thể:

  • Lưu trữ thông tin xác thực của bạn trong một tệp, chẳng hạn như ~/.kaggle/kaggle.json;
  • Sử dụng biến môi trường KAGGLE_USERNAMEKAGGLE_KEY; hoặc
  • Chạy đoạn mã sau trong một môi trường Python tương tác, chẳng hạn như Google Colab.
import kagglehub

kagglehub.login()

Hãy xem tài liệu về kagglehub để biết thêm thông tin chi tiết và nhớ chấp nhận thỏa thuận cấp phép Gemma.

Định cấu hình Keras

Keras 3 hỗ trợ nhiều phần phụ trợ học sâu, bao gồm Tensorflow (mặc định), PyTorch và JAX. Phần phụ trợ được định cấu hình bằng biến môi trường KERAS_BACKEND. Bạn phải đặt biến này trước khi nhập thư viện Keras. Đoạn mã sau đây cho bạn biết cách đặt biến này trong môi trường Python tương tác.

import os

os.environ["KERAS_BACKEND"] = "tensorflow"  # or "jax" or "torch"

4. Thiết lập LIT

Bạn có thể sử dụng LIT trong Sổ tay Python hoặc thông qua máy chủ web. Lớp học lập trình này tập trung vào trường hợp sử dụng Sổ tay. Bạn nên tham gia lớp học này trong Google Colab.

Trong lớp học lập trình này, bạn sẽ tải Gemma v2 2B IT bằng cách sử dụng tuỳ chọn cài đặt trước KerasNLP. Đoạn mã sau đây khởi chạy Gemma và tải một tập dữ liệu mẫu trong tiện ích LIT Notebook.

from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb

lit_widget = lit_pdbnb.make_notebook_widget(
    ['sample_prompts'],
    ["gemma2_2b_it:gemma2_instruct_2b_en"],
)

Bạn có thể định cấu hình tiện ích này bằng cách thay đổi hai giá trị được truyền đến hai đối số vị trí bắt buộc:

  • datasets_config: Danh sách các chuỗi chứa tên tập dữ liệu và đường dẫn để tải, dưới dạng "dataset:path", trong đó path có thể là URL hoặc đường dẫn tệp cục bộ. Ví dụ bên dưới sử dụng giá trị đặc biệt sample_prompts để tải các câu lệnh ví dụ được cung cấp trong bản phân phối LIT.
  • models_config: Danh sách các chuỗi chứa tên mô hình và đường dẫn để tải, dưới dạng "model:path", trong đó đường dẫn có thể là URL, đường dẫn tệp cục bộ hoặc tên của một giá trị đặt trước cho khung học sâu đã định cấu hình.

Sau khi định cấu hình LIT để sử dụng mô hình mà bạn quan tâm, hãy chạy đoạn mã sau để hiển thị tiện ích trong Sổ tay.

lit_widget.render(open_in_new_tab=True)

Sử dụng dữ liệu của riêng bạn

Là một mô hình tạo sinh văn bản sang văn bản, Gemma nhận dữ liệu đầu vào là văn bản và tạo dữ liệu đầu ra là văn bản. LIT sử dụng API có ý kiến để truyền đạt cấu trúc của các tập dữ liệu đã tải cho các mô hình. LLM trong LIT được thiết kế để hoạt động với các tập dữ liệu cung cấp hai trường:

  • prompt: Dữ liệu đầu vào cho mô hình sẽ tạo ra văn bản; và
  • target: Một trình tự mục tiêu không bắt buộc, chẳng hạn như câu trả lời "đúng sự thật" của người đánh giá hoặc câu trả lời được tạo sẵn của một mô hình khác.

LIT bao gồm một nhóm nhỏ sample_prompts với các ví dụ từ các nguồn sau đây hỗ trợ cho Lớp học lập trình này và hướng dẫn gỡ lỗi nhanh mở rộng của LIT.

Bạn cũng có thể dễ dàng tải dữ liệu của riêng mình, dưới dạng tệp .jsonl chứa các bản ghi có trường prompt và tuỳ chọn target (ví dụ) hoặc từ bất kỳ định dạng nào bằng cách sử dụng API tập dữ liệu của LIT.

Chạy ô bên dưới để tải các câu lệnh mẫu.

5. Phân tích một số câu lệnh cho Gemma trong LIT

Ngày nay, việc đưa ra câu lệnh là một nghệ thuật cũng như một khoa học. LIT có thể giúp bạn cải thiện câu lệnh theo phương pháp thực nghiệm cho các mô hình ngôn ngữ lớn, chẳng hạn như Gemma. Tiếp theo, bạn sẽ thấy một ví dụ về cách sử dụng LIT để khám phá hành vi của Gemma, dự đoán các vấn đề tiềm ẩn và cải thiện độ an toàn của Gemma.

Xác định lỗi trong câu lệnh phức tạp

Hai trong số những kỹ thuật nhắc quan trọng nhất cho các nguyên mẫu và ứng dụng chất lượng cao dựa trên LLM là nhắc một vài lần (bao gồm các ví dụ về hành vi mong muốn trong câu lệnh) và chuỗi suy nghĩ (bao gồm một hình thức giải thích hoặc lý luận trước khi có kết quả cuối cùng của LLM). Tuy nhiên, việc tạo câu lệnh hiệu quả vẫn thường là một thách thức.

Hãy xem xét ví dụ về việc giúp một người đánh giá xem họ có thích món ăn dựa trên khẩu vị của họ hay không. Mẫu câu lệnh gợi ý chuỗi suy nghĩ ban đầu của nguyên mẫu có thể trông như sau:

def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
  return f"""Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""

Bạn có phát hiện vấn đề với lời nhắc này không? LIT sẽ giúp bạn kiểm tra câu lệnh bằng mô-đun LM Salience.

6. Sử dụng độ nổi bật của trình tự để gỡ lỗi

Độ nổi bật được tính toán ở cấp độ nhỏ nhất có thể (tức là cho mỗi mã thông báo đầu vào), nhưng LIT có thể tổng hợp độ nổi bật của mã thông báo thành các span lớn hơn, dễ diễn giải hơn, chẳng hạn như dòng, câu hoặc từ. Tìm hiểu thêm về độ nổi bật và cách sử dụng độ nổi bật để xác định các thành kiến ngoài ý muốn trong Công cụ khám phá độ nổi bật của chúng tôi.

Hãy bắt đầu bằng cách cung cấp cho câu lệnh một dữ liệu đầu vào mẫu mới cho các biến mẫu câu lệnh:

food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""

prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)

fewshot_mistake_example = {'prompt': prompt}  # you'll use this below
Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis:

Nếu đã mở giao diện người dùng LIT trong ô ở trên hoặc trong một thẻ riêng, bạn có thể sử dụng Trình chỉnh sửa điểm dữ liệu của LIT để thêm lời nhắc này:

Trình chỉnh sửa điểm dữ liệu LIT

Một cách khác là trực tiếp kết xuất lại tiện ích bằng lời nhắc mà bạn quan tâm:

lit_widget.render(data=[fewshot_mistake_example])

Lưu ý kết quả hoàn thành mô hình đáng ngạc nhiên:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: A savoury tart with cheese and eggs
Recommendation: You might not like it, but it's worth trying.

Tại sao mô hình đề xuất bạn ăn một món mà bạn đã nói rõ là không ăn được?

Độ nổi bật của trình tự có thể giúp làm nổi bật vấn đề cốt lõi trong các ví dụ về ít lần chụp. Trong ví dụ đầu tiên, chuỗi lý luận trong phần phân tích it has cooked onions in it, which you don't like không khớp với đề xuất cuối cùng You have to try it.

Trong mô-đun LM Salience (Mức độ nổi bật của LM), hãy chọn "Sentences" (Câu) rồi chọn dòng đề xuất. Giao diện người dùng hiện sẽ có dạng như sau:

Độ nổi bật LIT

Điều này cho thấy một lỗi do con người gây ra: vô tình sao chép và dán phần đề xuất và không cập nhật được phần đó!

Bây giờ, hãy sửa "Recommendation" (Đề xuất) trong ví dụ đầu tiên thành Avoid rồi thử lại. LIT đã tải trước ví dụ này trong các câu lệnh mẫu, vì vậy, bạn có thể sử dụng hàm tiện ích nhỏ này để lấy ví dụ:

def get_fewshot_example(source: str) -> str:
  for example in datasets['sample_prompts'].examples:
    if example['source'] == source:
      return example['prompt']
  raise ValueError(f'Source "{source}" not found in the dataset.')

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])

Bây giờ, việc hoàn thành mô hình sẽ trở thành:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs and cheese, which you don't like.
Recommendation: Avoid.

Một bài học quan trọng cần rút ra từ đây là: việc tạo nguyên mẫu sớm giúp phát hiện những rủi ro mà bạn có thể không nghĩ đến trước đó, và bản chất dễ gặp lỗi của các mô hình ngôn ngữ có nghĩa là bạn phải chủ động thiết kế để tránh lỗi. Bạn có thể tìm hiểu thêm về vấn đề này trong Sách hướng dẫn People + AI của chúng tôi để thiết kế bằng AI.

Mặc dù lời nhắc về một vài bức ảnh đã được sửa lại tốt hơn, nhưng vẫn chưa hoàn toàn chính xác: lời nhắc này cho người dùng biết chính xác rằng họ nên tránh trứng, nhưng lý do lại không chính xác, lời nhắc này cho biết họ không thích trứng, trong khi thực tế người dùng đã nói rằng họ không thể ăn trứng. Trong phần sau, bạn sẽ thấy cách cải thiện hiệu suất.

7. Kiểm thử giả thuyết để cải thiện hành vi của mô hình

LIT cho phép bạn kiểm thử các thay đổi đối với lời nhắc trong cùng một giao diện. Trong trường hợp này, bạn sẽ kiểm thử việc thêm một hệ thống để cải thiện hành vi của mô hình. Hiến pháp đề cập đến các câu lệnh thiết kế có nguyên tắc để giúp hướng dẫn quá trình tạo mô hình. Các phương thức gần đây thậm chí còn cho phép trích xuất tương tác các nguyên tắc hiến pháp.

Hãy sử dụng ý tưởng này để cải thiện thêm câu lệnh. Thêm một phần chứa các nguyên tắc tạo ở đầu câu lệnh của chúng ta. Phần này hiện bắt đầu như sau:

Analyze a menu item in a restaurant.

* The analysis should be brief and to the point.
* The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: Avoid.

...

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])

Với bản cập nhật này, bạn có thể chạy lại ví dụ và quan sát kết quả rất khác:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs, which you can't eat.
Recommendation: Not suitable for you.

Sau đó, bạn có thể kiểm tra lại mức độ nổi bật của câu lệnh để hiểu rõ lý do dẫn đến sự thay đổi này:

Độ nổi bật LIT

Hãy lưu ý rằng đề xuất này an toàn hơn nhiều. Hơn nữa, thông báo "Không phù hợp với bạn" chịu ảnh hưởng của nguyên tắc nêu rõ mức độ phù hợp theo quy định hạn chế về chế độ ăn uống, cùng với nội dung phân tích (còn gọi là chuỗi suy nghĩ). Điều này giúp bạn thêm tự tin rằng kết quả đang xảy ra vì lý do chính đáng.

8. Đưa các nhóm không chuyên về kỹ thuật vào quy trình thăm dò và khám phá mô hình

Khả năng diễn giải là một nỗ lực của nhóm, bao gồm các chuyên môn về XAI, chính sách, pháp lý và nhiều lĩnh vực khác.

Thông thường, việc tương tác với các mô hình ở giai đoạn phát triển ban đầu đòi hỏi chuyên môn kỹ thuật đáng kể, khiến một số cộng tác viên khó tiếp cận và kiểm tra các mô hình đó hơn. Trước đây, các công cụ chưa hỗ trợ các nhóm này tham gia vào các giai đoạn tạo nguyên mẫu ban đầu.

Thông qua LIT, chúng tôi hy vọng có thể thay đổi mô hình này. Như bạn đã thấy trong lớp học lập trình này, phương tiện hình ảnh và khả năng tương tác của LIT để kiểm tra mức độ nổi bật và khám phá các ví dụ có thể giúp các bên liên quan chia sẻ và truyền đạt kết quả. Điều này có thể giúp bạn thu hút nhiều thành viên trong nhóm hơn để khám phá, thăm dò và gỡ lỗi mô hình. Việc giới thiệu cho họ những phương pháp kỹ thuật này có thể giúp họ hiểu rõ hơn về cách hoạt động của các mô hình. Ngoài ra, việc có nhiều chuyên gia hơn trong quá trình thử nghiệm mô hình sớm cũng có thể giúp phát hiện những kết quả không mong muốn mà bạn có thể cải thiện.

9. Tóm tắt

Tóm lại:

  • Giao diện người dùng LIT cung cấp một giao diện để thực thi mô hình tương tác, cho phép người dùng trực tiếp tạo đầu ra và kiểm thử các tình huống "nếu". Điều này đặc biệt hữu ích khi kiểm thử các biến thể của câu lệnh.
  • Mô-đun LM Salience (Mô-đun độ nổi bật của LM) cung cấp bản trình bày trực quan về độ nổi bật và cung cấp độ chi tiết dữ liệu có thể kiểm soát để bạn có thể giao tiếp về các cấu trúc tập trung vào con người (ví dụ: câu và từ) thay vì các cấu trúc tập trung vào mô hình (ví dụ: mã thông báo).

Khi bạn tìm thấy các ví dụ có vấn đề trong quá trình đánh giá mô hình, hãy đưa các ví dụ đó vào LIT để gỡ lỗi. Bắt đầu bằng cách phân tích đơn vị nội dung hợp lý lớn nhất mà bạn có thể nghĩ ra có liên quan hợp lý đến nhiệm vụ lập mô hình, sử dụng hình ảnh trực quan để xem mô hình đang xử lý nội dung lời nhắc một cách chính xác hay không chính xác, sau đó đi sâu vào các đơn vị nội dung nhỏ hơn để mô tả thêm hành vi không chính xác mà bạn đang thấy nhằm xác định các biện pháp khắc phục có thể có.

Cuối cùng: Lit không ngừng cải thiện! Tìm hiểu thêm về các tính năng của chúng tôi và chia sẻ ý kiến đề xuất của bạn tại đây.