24. Prompt-base learning, pronpt-tuning và prompt pre-training

Mở đầu

idea từ https://github.com/telexyz/nem/blob/main/cs685-anlp/12-prompt-based.md

prompt-based learning (prompt thủ) là một trào lưu khai thác models mới, thay cho fine-tuning (tune thủ). Có nhiều thứ hay ho có thể thử nghiệm, kể cả với tập dữ liệu nhỏ. - Mr.Tiến Dũng

Demohttps://youtu.be/8HwHGGb1zpQ?t=999
Với một số task, ta thấy rõ rằng Large LMs còn hoạt động tốt hơn fine-tuned SOTA. Có nghĩa rằng, model càng lớn với càng nhiều dữ liệu huấn luyện, lại có tính chính xác hơn những model chỉ lập ra để tập trung phục vụ 1 task, hiện điều này không có xu hướng dừng lại.
Nhưng nếu ta thay tên người, địa danh trong câu hỏi bằng những cái tên không có trong data thì khó trả lời đúng 

Vấn đề: large-scale models tốn kém khi share và serve 
=> Dùng prompt
Phần đầu của Language model là embeddings, trong prompt-tuning thì ta học 1 cách sequence embeddings task-specific vào đầu input của LMs
Ví dụ với T5(encoder-decoder) model, đường màu đen là forward, còn đường màu đỏ là backward, đây là cách fine-tuning thôn thường. Vấn đề là mỗi lần fine-tuning lại tạo 1 bộ tham số mới hoàn toàn nên với n tasks là n models mới
( <SOS> = Start-of-Sequence token)
Với prompt-tuning, vẫn giữ chuỗi vectors input như trên, nhưng ta thêm 1 đoạn prefix vectors (không trong từ điển), và được tạo ngẫu nhiên (tượng trưng cho task)
Ví dụ thường ta cho thêm sentiment analysis trước "this movie is awesome" như là một cách prompt engineering
    - hoặc "give me the sentiment of the sentence, " + "...",
    - hoặc "what is the sentiment of the sentence? " + "...",
Mục đích ở đây là loại bỏ việc thêm các keywords vào prompt thủ công, mà yêu cầu model làm điều đó 

Khi ta tính loss và softmax ở classifier cưới, thì đường dot-line (không update param, frozen) là backward, chỉ update 2 embedding mới được thêm vào ở đầu sequence. Nghĩa là hơn 99,9% mô hình được giữ nguyên, mô hình đang tự học optimal continous representation của instruction
Vậy khi đổi task, ta chỉ cần swap 2 embedding vectors của task này bằng 2 embedding vector của task kia mà không cần đổi tham số toàn bộ

Câu hỏi hay: qua quá trình training ta có được giá trị tốt nhất của 2 prepend embedding vectors này, ta có thể dùng nearest neighbor search để tìm xem các vectors này gần nhất với keywords nào không? (tìm yếu tố quan trọng của task) => paper đã thử nhưng không tìm ra mối liên hệ rõ ràng nào (continuous có sự khác biệt so với discrete). Đôi khi chúng tương đương với các nhãn của bộ phân lớp như là positive hay negative.

=> Có thể khởi tạo tốt hơn bằng cách gán prepend embedding vectors = giá trị của class labels average thay cho random init. Hoặc khởi tạo chúng với discrete prompt (thiết kế thủ công) và để model fine-tune chúng.

Điều này có nghĩa là những prepend vectors đó nằm bên ngoài word embeddings. Và tuy nearest neighbors có liên quan tới task đang thực thi nhưng khó có thể dịch ngược từ prepend vectors sang discrete prompt.

Note: Cách này tuy linh hoạt và không phải thay đổi tham số của mô hình lớn nhưng kết quả của nó không tốt bằng fine-tune toàn bộ mô hình (đương nhiên là thế).
Ưu điểm của prompt-tuning là trong cùng 1 batch chạy được nhiều task
Trong khi đó, với mô hình càng lớn, độ chính xác so với model-tuning không đáng kể
=> Với larger model càng lớn, khả năng cải thiện task càng tốt, thậm chí sinh ra khả năng mới
lượng tinh chỉnh parameters
Model càng lớn thì số lượng prepend vectors cần thiết càng ít?
=> Kết luận: Với model nhỏ, ta nên fine-tune để có accuracy tốt nhất. Còn với model lớn, prompt-tuning để số lượng thay đổi tham số ít nhất

Prompt pretraining: the SPoT approach
SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer

= Prompt + Sequence2sequence Pre-training
- Mục đích: Sử dụng pre-trained LMs như initialization. Ít việc hơn cho architect design nhưng lại thêm engineer objective functions

- Prompt engineering: NLP tasks được mô hình hóa hoàn toàn dựa trên LMs. Các nhiệm vụ trích suất các tính năng nông và sâu, hay dự đoán data đều được giao cho LM. Việc này làm khó phân biệt -> Vì vậy mà Prompt engineering là cần thiết

- Prompt là gì: Khuyến khích một mô hình pre-trained để đưa ra những dự đoán cụ thể bằng cách cung cấp một 'dấu nhắc' chỉ định task sẽ được thực hiện.

- Prompting workflow: prompt addition -> Answer Prediction -> Answer-Label Mapping

Từ prompt đầu vào x, ta dùng template biến nó thành prompting (query context) sau đó đưa dự đoán và mapping với label (kết quả cuối)

- Types of prompts:

        + Prompt: I love this movie. Overall it was a [z] movie

        + Filled Prompt: I love this movie. Overall it was a boring movie

        + Answered Prompt: I love this movie. Overall it was a fantastic movie

        + Prefix Prompt: I love this movie. Overall this movie is [z]

        + Cloze Prompt: I love this movie. Overall it was a [z] movie

- Design Considerations for Prompting

Chi tiết: https://github.com/telexyz/nem/blob/main/cs685-anlp/12-prompt-based.md
- Gradient-based Search: Tự động tìm kiếm một tổ hợp các keywords tốt nhất từ inputs. Cách này tốt hơn các cách domain-based ở trên.
- Prefix/Prompt Tuning: Tại sao ta không trực tiếp tối ưu hóa tham số thay vì chỉ đổi keywords?
        + Prompt-tuning chỉ tối ưu hóa tầng embedding!
        + Prefix-tuning thay vì chỉ tối ưu hóa tầng embedding, nó tuning 1 prefix mà được thêm vào mọi layer của model.

- Answer Engineer: tại sao cần? -> Ta đã reformulate (định hình lại) tasks thì ta cũng nên định nghĩa lại "grough truth labels" 

Có thể hiểu là many2many mapping và gán trọng số (giống softmax)

Mục đích là tìm 1 answer space và map nó với original output Y để có hiệu quả tốt hơn

- Prompt Augmentation: tại sao work? Có sẵn patterns đó trên Internet! :D Có sẵn đâu đó trong dataset, câu "let's think step by step" và sau đó là câu trả lời đúng.

https://youtu.be/5ef83Wljm-M?t=4206


Tham khảo

https://github.com/telexyz/nem/blob/main/cs685-anlp/12-prompt-based.md (promt-base Tien Dung's note)

https://people.cs.umass.edu/~miyyer/cs685/schedule.html (CS685 course)

https://phontron.com/class/anlp2022/schedule.html (CMU CS 11-711, Fall 2022, Advanced NLP)

https://www.youtube.com/playlist?list=PL8PYTP1V4I8D0UkqW2fEhgLrnlDW9QK7z (CMU Advanced NLP 2022 youtube)

https://arxiv.org/pdf/2302.09185.pdf

https://github.com/SALT-NLP/Bound-Cap-LLM

Nhận xét