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 nhiều hơn so với các dạng phần mềm trước đây. Điều này khiến việc thăm dò 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 điều bất ngờ là rất quan trọ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 các mô hình đó hoạt động.
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 thêm sức mạnh củ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 độ chính xác của trình tự (một kỹ thuật diễn giải) để phân tích các phương pháp thiết kế câu lệnh khác nhau.
Mục tiêu học tập:
- Tìm hiểu về độ chính xác của trình tự và cách sử dụng trong quá trình phân tích mô hình.
- Thiết lập LIT cho Gemma để tính toán kết quả của lời nhắc và độ ổn định của trình tự.
- Sử dụng độ chính xác của trình tự thông qua mô-đun LM Salience để tìm hiểu tác động của thiết kế câu lệnh đối với dữ liệu đầu ra của mô hình.
- Thử nghiệm các cải tiến được đưa ra theo giả định cho LIT và xem tác động của chúng.
Lưu ý: Lớp học lập trình này sử dụng phương pháp triển khai KerasNLP của Gemma và TensorFlow v2 cho phần phụ trợ. Bạn nên sử dụng nhân GPU để theo dõi.
2. Kết quả trình tự và ứng dụng của nó trong phân tích mô hình
Các mô hình tạo sinh chuyển văn bản thành văn bản (chẳng hạn như Gemma) sẽ thực hiện một trình tự nhập dưới dạng văn bản được tạo mã thông báo rồi tạo mã thông báo mới dưới dạng các phần tiếp theo hoặc hoàn thành điển hình cho dữ liệu đầu vào đó. Quá trình tạo này diễn ra mỗi lần một mã thông báo, thêm (trong 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ế hệ 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ã thông báo kết thúc trình tự (EOS) hoặc đạt đến độ dài tối đa đã xác định trước.
Phương thức phục hồi là một lớp kỹ thuật AI (XAI) có thể giải thích, 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 đối với các phần khác nhau của đầu ra đó. LIT hỗ trợ các phương thức nâng cao cho nhiều tác vụ phân loại, các phương thức này 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. Độ tinh 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 chuyển văn bản sang văn bản, đồng thời 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 đã tạo.
Tại đây, bạn sẽ sử dụng phương thức gradient L2 Norm để xác định độ ổn định của trình tự. Phương thức này sẽ phân tích độ dốc của mô hình và đưa ra mức độ ảnh hưởng của từng mã thông báo trước đó đối với dữ liệu đầu ra. Phương pháp này đơn giản và hiệu quả, đồng thời đã được hiển thị để hoạt động tốt trong việc phân loại và các chế độ cài đặt khác. Điểm độ mặn càng cao thì mức độ ảnh hưởng càng cao. Phương pháp này được sử dụng trong LIT vì đây là phương pháp dễ hiểu 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 pháp nâng cao hơn dựa trên độ dốc dựa trên chuyển màu bao gồm Độ dốc ⋅ Đầu vào và Độ dốc tích hợp. Ngoài ra, còn có một số phương pháp dựa trên phương pháp cắt bỏ, chẳng hạn như LIME và SHAP. Các phương pháp này có thể mạnh mẽ hơn nhưng tốn kém hơn đáng kể khi tính toán. Hãy tham khảo bài viết này để so sánh chi tiết về các phương pháp khử muối.
Bạn có thể tìm hiểu thêm về khoa học về các phương pháp kiểm tra độ mặn trong bài viết tương tác giới thiệu này về công cụ khám phá chuẩn đối với salience.
3. Nhập, môi trường và mã thiết lập khác
Tốt nhất là bạn nên tham gia 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, xin 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 công cụ tăng tốc mạnh mẽ hơn. Ngoài ra, bạn có thể sử dụng môi trườ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 trong 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 thông tin này.
Cài đặt LIT và Keras NLP
Đối với lớp học lập trình này, bạn cần có phiên bản mới nhất của keras
(3) keras-nlp
(0.8.0) và lit-nlp
(1.1) và một tài khoản Kaggle để tải mô hình cơ sở xuống.
!pip install -q -U lit-nlp
!pip uninstall -y umap-learn
!pip install -q -U keras-nlp
!pip install -q -U keras
Truy cập Kaggle
Để đăng nhập vào Kaggle, bạn có thể lưu trữ tệp thông tin xác thực kaggle.json
của mình tại ~/.kaggle/kaggle.json
hoặc chạy mã sau trong môi trường Colab. Hãy xem tài liệu về gói kagglehub
để biết thêm thông tin chi tiết.
import kagglehub
kagglehub.login()
Ngoài ra, hãy nhớ chấp nhận thoả thuận cấp phép cho Gemma.
4. Thiết lập mô hình LIT
import os
os.environ["KERAS_BACKEND"] = "tensorflow"
import keras
import keras_nlp
# Run at half precision.
keras.config.set_floatx("bfloat16")
model_name = 'gemma_instruct_2b_en'
gemma_model = keras_nlp.models.GemmaCausalLM.from_preset(model_name)
Mã sau đây khởi chạy trình bao bọc LIT để hỗ trợ độ chính xác trên mô hình Gemma. Khung LIT gọi đây là các mô hình, nhưng trong trường hợp này, chúng chỉ là các điểm cuối khác nhau cho cùng một gemma_model
cơ bản mà bạn đã tải ở trên. Điều này cho phép LIT điện toán các quá trình tạo, mã hoá và bảo mật theo yêu cầu.
from lit_nlp.examples.models import instrumented_keras_lms
batch_size = 1
max_sequence_length = 512
init_models = instrumented_keras_lms.initialize_model_group_for_salience
models = init_models(model_name, gemma_model,
batch_size=batch_size,
max_length=max_sequence_length)
5. Thiết lập tập dữ liệu LIT
Gemma là một mô hình tạo sinh chuyển văn bản thành văn bản, nhận dữ liệu nhập văn bản rồi tạo đầu ra văn bản. Các mô hình của LIT giả định rằng các tập dữ liệu sẽ cung cấp các trường sau đây để hỗ trợ việc tạo:
prompt
: Giá trị đầu vào choKerasGenerationModel
.target
: Một chuỗi mục tiêu không bắt buộc, chẳng hạn như "dữ liệu thực tế" (vàng) hoặc một phản hồi được tạo trước từ mô hình.
LIT bao gồm một tập hợp nhỏ các sample_prompts
với ví dụ từ một vài nguồn, chẳng hạn như:
- GSM8K: Giải các bài toán ở trường trung học bằng các ví dụ ít ảnh.
- Điểm chuẩn Gigaword: Tạo dòng tiêu đề cho một tập hợp các bài viết ngắn.
- Câu lệnh theo hiến pháp: Tạo ý tưởng mới về cách sử dụng đối tượng có nguyên tắc/ranh giới.
Bạn cũng có thể dễ dàng tải dữ liệu của mình, dưới dạng tệp .jsonl
chứa bản ghi có các trường prompt
và target
(ví dụ) (không bắt buộc) 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 lời nhắc mẫu.
from lit_nlp.examples.datasets import lm as lm_data
datasets = {
'sample_prompts': lm_data.PromptExamples(
lm_data.PromptExamples.SAMPLE_DATA_PATH
),
}
6. Thiết lập giao diện người dùng LIT
LIT là một công cụ tìm hiểu mô hình tương tác, cho phép đánh giá thủ công và thăm dò hành vi của mô hình theo cách thủ công. Giao diện người dùng LIT hỗ trợ tương tác này bằng cách cho phép bạn:
- trực quan hoá các tập dữ liệu và đầu ra của mô hình,
- chạy các phương thức salience để hiểu mã thông báo đầu vào thúc đẩy hành vi của mô hình, và
- tạo ra luận chứng phản thực tế để kiểm tra các giả thuyết.
LIT cho phép tất cả điều này trên cùng một giao diện, giảm sự phiền hà khi chuyển đổi giữa các công cụ khác nhau. Điều này đặc biệt hữu ích cho các nhiệm vụ như kỹ thuật câu lệnh mà bạn sẽ tập trung vào sau trong lớp học lập trình này.
Bạn có thể dùng bố cục giao diện người dùng này cho mọi mô hình ngôn ngữ tạo sinh khác. Nếu quan tâm đến những tính năng ngoài những tính năng được liệt kê ở đây, bạn có thể xem danh sách đầy đủ tại đây.
from lit_nlp.api import layout
modules = layout.LitModuleName
LM_SALIENCE_LAYOUT = layout.LitCanonicalLayout(
left={
'Data Table': [modules.DataTableModule],
'Datapoint Editor': [modules.DatapointEditorModule],
},
upper={ # if 'lower' not specified, this fills the right side
'Salience': [modules.LMSalienceModule],
},
layoutSettings=layout.LayoutSettings(leftWidth=40),
description='Custom layout for language model salience.',
)
Mã này khởi chạy máy chủ LIT. Quá trình này có thể mất vài giây vì quá trình này cũng chạy mô hình trên lời nhắc mẫu và lưu kết quả vào bộ nhớ đệm.
from lit_nlp import notebook as lit_notebook
lit_widget = lit_notebook.LitWidget(
models=models,
datasets=datasets,
layouts={'default': LM_SALIENCE_LAYOUT},
default_layout='default',
)
Giờ đây, bạn có thể hiện giao diện người dùng:
lit_widget.render(height=800)
Bạn cũng có thể mở LIT dưới dạng một trang đầy đủ trong một thẻ mới. Chạy đoạn mã này rồi nhấp vào đường liên kết xuất hiện trong đoạn mã:
lit_widget.render(open_in_new_tab=True)
Lưu ý: nếu bạn đang sử dụng LIT trong tập lệnh .py
thông thường, hãy sử dụng lit_nlp.dev_server.Server()
thay vì LitWidget
để hiển thị một máy chủ độc lập. Hãy xem tài liệu LIT để biết thêm chi tiết.
7. Phân tích một vài lời nhắc cảnh quay cho Gemma trong LIT
Ngày nay, tính năng nhắc câu lệnh cũng là nghệ thuật và khoa học. LIT có thể giúp bạn cải thiện lời nhắc theo kinh nghiệm cho các mô hình ngôn ngữ lớn, chẳng hạn như Gemma. Ở phần trước, bạn sẽ thấy một ví dụ về cách 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ác 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 ứng dụng và nguyên mẫu chất lượng cao dựa trên LLM là cách nhắc ít lần (bao gồm cả ví dụ về hành vi mong muốn trong câu lệnh) và chuỗi suy nghĩ (bao gồm cả hình thức giải thích hoặc lý luận trước khi đưa ra kết quả cuối cùng của LLM). Tuy nhiên, việc tạo một câu lệnh hiệu quả thường vẫn là một thách thức.
Hãy xem một ví dụ về cách giúp một người đánh giá xem họ có thích đồ ăn dựa trên sở thích của họ hay không. Mẫu lời nhắc chuỗi suy nghĩ ban đầu có thể có dạ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 thấy vấn đề với câu lệnh này không? LIT sẽ giúp bạn kiểm tra câu lệnh bằng mô-đun LM Salience.
8. Sử dụng thông tin bổ sung về trình tự để gỡ lỗi
Độ tin cậy được tính toán ở cấp nhỏ nhất có thể (tức là cho từng mã thông báo đầu vào), nhưng LIT có thể tổng hợp độ nhạy của mã thông báo thành các khoảng 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ề độ chính xác và cách sử dụng chỉ số này để xác định thành kiến ngoài ý muốn trong bài viết Saliency Explorable của chúng tôi.
Hãy bắt đầu bằng cách đưa ra một ví dụ mẫu mới cho lời nhắc cho các biến mẫu lời nhắc:
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 biệt, bạn có thể sử dụng Trình chỉnh sửa điểm dữ liệu của LIT để thêm câu lệnh này:
Một cách khác là kết xuất lại tiện ích trực tiếp với lời nhắc quan tâm:
lit_widget.render(data=[fewshot_mistake_example])
Hãy lưu ý đến phần 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 gợi ý bạn ăn thứ gì đó mà bạn nói rõ ràng là bạn không được ăn?
Độ chính xác của trình tự có thể giúp làm nổi bật vấn đề gốc rễ, như trong các ví dụ ngắn gọn của chúng tôi. Trong ví dụ đầu tiên, chuỗi suy luận trong phần phân tích it has cooked onions in it, which you don't like
không phù hợp với đề xuất cuối cùng You have to try it
.
Trong mô-đun LM Salience, chọn "Câu" rồi chọn dòng đề xuất. Lúc này, giao diện người dùng sẽ có dạng như sau:
Nội dung này làm nổi bật một lỗi do con người gây ra: việc vô tình sao chép và dán phần đề xuất và không cập nhật được phần này!
Bây giờ, hãy sửa mục "Đề xuất" trong ví dụ đầu tiên về Avoid
rồi thử lại. LIT đã tải sẵn ví dụ này trong lời nhắc mẫu, vì vậy, bạn có thể sử dụng hàm tiện ích nhỏ này để lấy nó:
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ờ, quá trình 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.
Bài học quan trọng mà bạn cần rút ra là: việc tạo nguyên mẫu sớm giúp bộc lộ những rủi ro mà bạn có thể không lường trước được và bản chất dễ mắc lỗi của các mô hình ngôn ngữ nghĩa là chúng ta phải chủ động thiết kế để phát hiện lỗi. Bạn có thể xem thêm nội dung thảo luận về chủ đề này trong Sách hướng dẫn về con người và AI của chúng tôi về cách thiết kế bằng AI.
Mặc dù lời nhắc vài cảnh quay đã được sửa tốt hơn nhưng vẫn chưa chính xác: câu lệnh này yêu cầu người dùng tránh đúng trứng, nhưng lập luận lại không đúng, nói rằng họ không thích trứng, trong khi trên thực tế, người dùng đã tuyên bố rằng họ không được ăn trứng. Trong phần sau, bạn sẽ thấy cách có thể cải thiện.
9. Kiểm định 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ẽ thử nghiệm việc thêm hiến pháp để 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ế kèm theo các nguyên tắc giúp định hướng việc tạo mô hình. Các phương pháp gần đây thậm chí còn cho phép dẫn xuất tương tác của các nguyên tắc hiến pháp.
Hãy dùng ý tưởng này để giúp cải thiện câu lệnh hơn nữa. Thêm một phần chứa các nguyên tắc dành cho việc tạo ở đầu câu lệnh của chúng ta. Phần này giờ đây sẽ 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 mộ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 độ chính xác của gợi ý để nắm được lý do xảy ra thay đổi này:
Lưu ý rằng nội dung đề xuất an toàn hơn nhiều. Hơn nữa, cụm từ "Không phù hợp với bạn" chịu ảnh hưởng của nguyên tắc nêu rõ sự phù hợp theo chế độ hạn chế về chế độ ăn uống, cùng với quá trình phân tích (chuỗi tư duy). Điều này giúp tin tưởng hơn rằng dữ liệu đầu ra đang diễn ra vì lý do phù hợp.
10. Bao gồm các nhóm phi kỹ thuật trong quá trình thăm dò và khám phá mô hình
Quá trình diễn giải là một quá trình cần cả nhóm nỗ lực, mở rộng kiến thức chuyên môn về XAI, chính sách, pháp lý và nhiều lĩnh vực khác.
Theo truyền thống, việc tương tác với các mô hình trong giai đoạn phát triển ban đầu đòi hỏi chuyên môn kỹ thuật quan trọng, điều này khiến một số cộng tác viên khó tiếp cận và thăm dò các mô hình đó hơn. Trước đây, công cụ chưa từng tồn tại để cho phép 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 rằng mô hình này có thể thay đổi. Như bạn đã thấy qua lớp học lập trình này, phương tiện trực quan và khả năng tương tác của LIT để kiểm tra độ mặn và khám phá các ví dụ có thể giúp các bên liên quan khác nhau chia sẻ và truyền đạt các phát hiện. Điều này cho phép bạn có thêm nhiều thành viên trong nhóm để khám phá mô hình, thăm dò và gỡ lỗi. Việc giới thiệu cho học sinh những phương pháp kỹ thuật này có thể giúp học sinh hiểu rõ hơn về cách hoạt động của các mô hình. Ngoài ra, với những kiến thức chuyên môn đa dạng hơn trong giai đoạn thử nghiệm mô hình ban đầu, bạn cũng có thể phát hiện những kết quả không mong muốn và có thể cải thiện.
11. 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 kết quả và kiểm thử "điều gì sẽ xảy ra nếu" trong trường hợp cụ thể. Điều này đặc biệt hữu ích khi thử nghiệm nhiều biến thể của lời nhắc.
- Mô-đun LM Salience cung cấp bản trình bày trực quan về độ mặn và cung cấp mức độ chi tiết của dữ liệu có thể kiểm soát để bạn có thể truyền đạt về các cấu trúc lấy con người làm trung tâm (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 kết quả đánh giá mô hình, hãy đưa các ví dụ đó vào LIT để gỡ lỗi. Hãy 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ể cho là có liên quan một cách hợp lý đến nhiệm vụ lập mô hình, sử dụng các hình ảnh trực quan để xem vị trí mô hình tham gia chính xác hoặc không chính xác vào nội dung câu lệnh, sau đó xem chi tiết các đơn vị nội dung nhỏ hơn để mô tả thêm hành vi không chính xác bạn đang gặp phải nhằm xác định cách khắc phục khả thi.
Cuối cùng: Lit không ngừng được 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ẻ đề xuất của bạn tại đây.