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

Xem nội dung về AI tạo sinh Chạy trong Google Colab Xem nguồn trên GitHub Tìm hiểu trong Lớp học lập trình

Giới thiệu

Các sản phẩm AI tạo sinh còn tương đối mới và hành vi của ứng dụng có thể khác nhiều hơn so với các dạng phần mềm trước đó. Điều này rất quan trọng để 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 yếu tố gây bất ngờ.

Công cụ diễn giải học tập (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 hiểu được nguyên nhân và cách chúng hoạt động theo cách đó.

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 kỹ thuật giải mã trình tự (một kỹ thuật diễn giải) để phân tích nhiều phương pháp kỹ thuật gợi ý.

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

  1. Tìm hiểu mức độ linh hoạt của trình tự và ứng dụng của nó trong quá trình phân tích mô hình.
  2. Thiết lập LIT cho Gemma để tính toán kết quả của lời nhắc và độ linh hoạt của trình tự.
  3. Sử dụng khả năng nhận biết trình tự thông qua mô-đun LM Salience để hiểu tác động của thiết kế lời nhắc đối với đầu ra của mô hình.
  4. Thử nghiệm những điểm cải thiện giả định về lời nhắc trong LIT và xem tác động của những điểm cải thiện đó.

Lưu ý: lớp học lập trình này sử dụng phương thức 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 để làm theo.

Chức năng 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 văn bản chuyển văn bản thành văn bản (chẳng hạn như Gemma) sẽ lấy một trình tự nhập ở dạng văn bản được mã hoá rồi tạo các mã thông báo mới thường là lượt theo dõi hoặc hoàn thành thông tin đầ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 một vòng lặp) từng mã thông báo mới được tạo vào dữ liệu đầu vào cùng với mọi thế hệ trước đó cho đến khi mô hình đạt đến điều kiện dừng. Ví dụ như khi mô hình tạo một mã thông báo cuối trình tự (EOS) hoặc đạt đến độ dài tối đa đã xác định trước.

Phương thức xuất hiện là một lớp kỹ thuật AI (XAI) dễ giải thích. Phương thức này có thể cho bạn biết phần nào của dữ liệu đầu vào đóng vai trò quan trọng đối với mô hình cho các phần khác nhau của đầu ra. LIT hỗ trợ các phương thức mã hoá 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. Tính năng tạo trình tự sẽ khái quát hoá các phương thức này thành mô hình tạo văn bản thành 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 đã tạo.

Bạn sẽ sử dụng phương thức Mã chuẩn gradient L2 ở đây để biết độ sắc nét 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 thức này đơn giản và hiệu quả, đã được hiển thị 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 số về độ nổi tiếng 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ì người dùng hiểu rõ và sử dụng rộng rãi phương thức này trong cộng đồng nghiên cứu tính diễn giải.

Các phương thức nâng cao dựa trên hiệu ứng chuyển màu nâng cao hơn có thể kể đến như gradient ⋅ Inputhiệu ứng chuyển màu tích hợp. Ngoài ra, còn có các phương thức dựa trên tính năng cắt 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ể khi tính toán. Hãy tham khảo bài viết này để so sánh chi tiết các phương thức đo lường độ mạnh khác nhau.

Bạn có thể tìm hiểu thêm về khoa học của các phương pháp ghi nhớ mã nguồn trong tài liệu tương tác có thể khám phá tương tác này.

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

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ể bỏ qua những trường hợp này an toàn.

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

Quyền 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 nội dung sau trong môi trường Colab. Xem tài liệu về gói kagglehub để biết thêm thông tin chi tiết.

import kagglehub

kagglehub.login()

Đồng thời, hãy nhớ chấp nhận thoả thuận cấp phép cho Gemma.

Thiết lập LIT cho Gemma

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 các trình bao bọc LIT để hỗ trợ độ nổi bật trên mô hình Gemma. Khung LIT gọi những điểm nà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 tính toán việc tạo, mã hoá và lưu trữ mã 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)

Thiết lập tập dữ liệu LIT

Gemma là một mô hình tạo văn bản chuyển văn bản thành văn bản, có chức năng nhận dữ liệu đầu vào và đầu ra văn bản. 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 cho KerasGenerationModel.
  • 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 "thực tế" (màu vàng) hoặc câu trả lời được tạo trước từ mô hình.

LIT bao gồm một tập hợp nhỏ sample_prompts với các ví dụ từ một số nguồn, chẳng hạn như:

  • [GSM8K][GSM8K]: Giải bài toán cấp học bằng ví dụ cho một vài bức ảnh.
  • [Gigaword Benchmark][gigaword]: Tạo tiêu đề cho một tập hợp các bài viết ngắn.
  • [Nhắc nhở hiến pháp][nhắc nhở hiến pháp]: Tạo các ý 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ó trường prompttarget (không bắt buộc) ([ví dụ][jsonl-example]) hoặc từ định dạng bất kỳ 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.

from lit_nlp.examples.datasets import lm as lm_data

datasets = {
  'sample_prompts': lm_data.PromptExamples(
      lm_data.PromptExamples.SAMPLE_DATA_PATH
  ),
}

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 liên tục đánh giá và thăm dò hành vi của mô hình. 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á tập dữ liệu và kết quả của mô hình,
  • chạy các phương thức mã hoá để hiểu các mã thông báo đầu vào thúc đẩy hành vi của mô hình, và
  • tạo thông tin phản thực tế để kiểm tra giả thuyết.

LIT cho phép tất cả những việc này trong cùng một giao diện, giảm sự phiền hà khi chuyển đổi giữa các công cụ. Điều này đặc biệt hữu ích cho các công việc như thiết kế lời nhắc mà bạn sẽ tập trung vào sau trong lớp học lập trình này.

Bố cục giao diện người dùng này có thể dùng cho mọi mô hình ngôn ngữ tạo sinh khác. Nếu quan tâm đến các tính năng ngoài những tính năng được liệt kê ở đây, bạn có thể tìm thấy 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.',
)

Ô này khởi chạy máy chủ LIT. Quá trình này có thể mất vài giây vì nó cũng chạy mô hình trên các câu lệnh 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ể cho thấy giao diện người dùng:

lit_widget.render(height=800)
<IPython.core.display.Javascript object>

Bạn cũng có thể mở LIT dưới dạng trang đầy đủ trong một thẻ mới. Chạy ô này và nhấp vào liên kết mà ô hiển thị:

lit_widget.render(open_in_new_tab=True)
<IPython.core.display.Javascript object>

Phân tích một vài lời nhắc thực hiện thao tác nhanh cho Gemma trong LIT

Ngày nay, câu lệnh cũng quan trọng như nghệ thuật và LIT có thể giúp bạn cải thiện về mặt thực nghiệm câu lệnh cho các mô hình ngôn ngữ lớn, chẳng hạn như Gemma. Sắp tới, 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.

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 dành cho nguyên mẫu và ứng dụng dựa trên mô hình ngôn ngữ lớn (LLM) chất lượng cao là lời nhắc nhanh (bao gồm cả ví dụ về hành vi mong muốn trong câu lệnh) và chuỗi ý tưởng (bao gồm cả hình thức giải thích hoặc lập luận trước kết quả cuối cùng của mô hình ngôn ngữ lớn). Tuy nhiên, việc tạo lời nhắc hiệu quả thường vẫn khó khăn.

Hãy xem xét 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 về 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 Salience LM.

Sử dụng dữ liệu về trình tự để gỡ lỗi

Mô-đun này làm nổi bật các phần của câu lệnh mà mô hình tham gia khi tạo câu trả lời. Độ nổi bật được tính ở cấp độ nhỏ nhất có thể (tức là đối với mỗi mã thông báo đầu vào), nhưng LIT có thể tổng hợp độ bền của mã thông báo thành những khoảng lớn hơn dễ hiểu hơn, chẳng hạn như dòng, câu hoặc từ. Bạn có thể tìm hiểu thêm về độ mặn và cách sử dụng độ mặn này để xác định độ sai lệch ngoài ý muốn trong bài viết Thử nghiệm độ mặn 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ới trong ví dụ về 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 ở ô phía trên hoặc trong một thẻ riêng, bạn có thể sử dụng Trình chỉnh sửa Datapoint của LIT để thêm lời nhắc sau:

1_Datapoint_editor.png

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])
<IPython.core.display.Javascript object>

Lưu ý rằng việc 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ón gì đó mà bạn đã cho biết rõ ràng là bạn không thể ăn?

Độ linh hoạt của trình tự có thể giúp làm nổi bật vấn đề gốc, có trong các ví dụ vài ảnh của chúng tôi. Trong ví dụ đầu tiên, cách lập luận theo chuỗi 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, hãy chọn "Sentences" (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:

3_few_shots_mistake..png

Bây giờ, hãy sửa "Đề xuất" trong ví dụ đầu tiên thành Avoid và thử lại. LIT đã tải sẵn ví dụ này trong lời nhắc mẫu nên bạn có thể sử dụng hàm hiệu dụng nhỏ này để lấy:

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')}])
<IPython.core.display.Javascript object>

Giờ đây, quá trình hoàn tất 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 là: việc tạo nguyên mẫu sớm sẽ giúp bộc lộ những rủi ro mà bạn có thể không nghĩ tới trước và tính chất dễ xảy ra lỗi của các mô hình ngôn ngữ có nghĩa là chúng ta phải chủ động thiết kế để phát hiện lỗi. Bạn có thể xem nội dung thảo luận thêm về vấn đề 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 là tốt hơn, nhưng nó vẫn chưa chính xác: nó yêu cầu người dùng tránh trứng nhưng lý do không chính xác, lại cho biết họ không thích trứng, trong khi thực tế là 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.

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

LIT cho phép bạn thử nghiệm các thay đổi đối với lời nhắc trong cùng một giao diện. Trong ví dụ này, bạn sẽ kiểm thử việc thêm một thành phần để cải thiện hành vi của mô hình. Hiến pháp đề cập đến các lời nhắc thiết kế với các nguyên tắc giúp định hướng 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 dẫn xuất tương tác các nguyên tắc lập hiến.

Hãy dùng ý tưởng này để giúp cải thiện thêm lời nhắc. Thêm một mục có các nguyên tắc tạo ở đầu lời nhắc của chúng ta. Phần nà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')}])
<IPython.core.display.Javascript object>

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

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

Sau đó, chúng tôi có thể kiểm tra lại mức độ hiệu quả của lời nhắc để giúp giải thích lý do thay đổi này:

3_few_shot_constitution.png

Lưu ý rằng đề xuất an toàn hơn nhiều. Hơn nữa, quyết định "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 cách phân tích (gọi là chuỗi suy nghĩ). Điều này giúp bạn thêm tự tin rằng kết quả đầu ra đang diễn ra đúng lý do.

Đưa các nhóm phi kỹ thuật vào hoạt động thăm dò và thăm dò mô hình

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

Việc tương tác với mô hình trong giai đoạn phát triển ban đầu thường đòi hỏi chuyên môn kỹ thuật cao. Điều này khiến một số cộng tác viên gặp khó khăn hơn trong việc truy cập và thăm dò mô hình. Trước đây, công cụ này chưa từng tồn tại để cho phép các nhóm này tham gia vào giai đoạn tạo nguyên mẫu ban đầu.

Thông qua LIT, 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, khả năng tương tác và phương tiện trực quan của LIT để kiểm tra độ nổi bật cũng như tìm hiểu các ví dụ có thể giúp nhiều bên liên quan chia sẻ và truyền đạt kết quả. Nhờ đó, bạn có thể sử dụng nhiều thành viên trong nhóm hơn để khám phá mô hình, thăm dò và gỡ lỗi. Việc hiển thị các phương thức kỹ thuật này có thể giúp họ nâng cao hiểu biết về cách hoạt động của mô hình. Ngoài ra, việc có được nhiều kiến thức chuyên môn hơn về việc kiểm thử mô hình ban đầu cũng có thể giúp phát hiện những kết quả không mong muốn có thể cải thiện.

Recap

Tóm lại:

  • Giao diện người dùng LIT cung cấp giao diện để thực thi mô hình tương tác, giúp người dùng trực tiếp tạo dữ liệu đầu ra và kiểm thử các tình huống "điều gì sẽ xảy ra nếu". Điều này đặc biệt hữu ích khi thử nghiệm nhiều biến thể lời nhắc.
  • Mô-đun Salience LM trình bày trực quan độ nổi và cung cấp độ chi tiết của 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 lớn nhất hợp lý mà bạn cho rằng có liên quan về mặt logic với nhiệm vụ lập mô hình, sử dụng hình ảnh trực quan để xem vị trí mô hình đang tham gia đúng hay không chính xác nội dung gợi ý, sau đó xem chi tiết các đơn vị nội dung nhỏ hơn để mô tả thêm về hành vi không chính xác mà bạn đang thấy nhằm xác định những cách khắc phục khả thi.

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ẻ những đề xuất của bạn tại đây.

Phụ lục: Cách LIT tính toán khả năng truy cập trình tự

LIT tính toán độ trễ của trình tự trong một quy trình nhiều bước.

  1. Cho sẵn một chuỗi đầu vào (lời nhắc và trình tự tạo của mô hình hoặc trình tự mục tiêu "vàng"), mã hoá chuỗi đó để làm dữ liệu đầu vào của mô hình.
  2. Tính toán chuỗi "mục tiêu" bằng cách cuộn mã thông báo đầu vào sang một vị trí bên trái.
  3. Trích xuất các gói nhúng và tính toán tổn thất trên mỗi mã thông báo giữa quá trình tạo và trình tự "mục tiêu".
  4. Che giấu sự mất mát để tách biệt các mã thông báo mà bạn muốn giải thích.
  5. Dùng hàm tf.GradientTape.gradient() để tính toán độ chuyển màu của các mục nhúng đầu vào liên quan đến tình trạng mất màu được che giấu.
  6. Xử lý độ dốc để đưa ra một điểm số duy nhất cho mỗi mã thông báo đầu vào. Ví dụ: bằng cách lấy tiêu chuẩn L2 của độ dốc ở mỗi vị trí.

Phụ lục: Tính toán lợi ích theo phương thức lập trình

Bạn có thể tính điểm độ bền trực tiếp từ Python theo các bước tương tự như công cụ LIT chạy nội bộ như trên. Bạn sẽ thực hiện việc này qua 3 bước:

  1. Chuẩn bị một ví dụ và chạy trình tạo mã thông báo mô hình,
  2. Chuẩn bị một mặt nạ lựa chọn mã thông báo (dự đoán) nào để giải thích,
  3. Gọi trình bao bọc độ an toàn.

Làm ví dụ về dữ liệu nhập cho LIT

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**'}

Lưu ý về quy ước gọi: cả trình tạo mã thông báo và trình bao bọc giải mã đều sử dụng Model API của LIT, trong đó hàm .predict() lấy danh sách các ví dụ (lệnh) và trả về trình tạo của phản hồi (lệnh). Điều này linh hoạt hơn nhiều khi làm việc với các tập dữ liệu lớn hoặc mô hình chậm hơn, nhưng có nghĩa là nếu chỉ muốn đưa ra dự đoán trong một ví dụ thì giờ đây, bạn cần gói gợi ý bằng những gợi ý như: list(model.predict([example])[0]

Lấy mã thông báo để bạn có thể chọn mục tiêu giải thích

array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
       '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
       '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
       '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
       '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')

Để tính toán độ trễ, bạn cần tạo mặt nạ mục tiêu để chỉ định mã thông báo (được dự đoán) cần giải thích. Mặt nạ đích sẽ là một mảng có độ dài bằng mã thông báo, trong đó 1 giây ở vị trí của mã thông báo mà bạn muốn giải thích. Hãy sử dụng ▁training▁evaluating làm mục tiêu:

Chuẩn bị mặt nạ mục tiêu

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**',
 'target_mask': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
       dtype=float32)}

Gọi mô hình độ mạnh

{'grad_l2': array([45.75, 36.75, 61, 5.40625, 4.09375, 5.625, 6.46875, 7.3125, 3.375,
        5.03125, 3.23438, 4.5625, 2.375, 3.40625, 2.75, 1.97656, 3.95312,
        3.42188, 14.125, 4.53125, 11.375, 12.625, 18.5, 4.5625, 6.5, 0, 0,
        0, 0, 0, 0, 0], dtype=bfloat16),
 'grad_dot_input': array([-4.03125, 3.04688, -7.03125, -0.800781, 0.769531, -0.679688,
        -0.304688, 2.04688, 0.275391, -1.25781, -0.376953, -0.0664062,
        -0.0405273, -0.357422, 0.355469, -0.145508, -0.333984, 0.0181885,
        -5.0625, 0.235352, -0.470703, 2.25, 3.90625, -0.199219, 0.929688,
        0, 0, 0, 0, 0, 0, 0], dtype=bfloat16),
 'tokens': array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
        '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
        '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
        '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
        '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')}

Và bạn đã hoàn tất! Điểm số trong các trường grad_l2grad_dot_input được căn chỉnh với tokens và giống như bạn thấy trong giao diện người dùng LIT.

Lưu ý rằng một vài điểm cuối cùng là 0: vì mô hình của chúng tôi là mô hình ngôn ngữ từ trái sang phải, các mã thông báo bên phải của span đích không ảnh hưởng đến dự đoán.