Upload from huggingface_hub
Browse files- .gitattributes +1 -0
- 1_Pooling/config.json +10 -0
- README.md +609 -0
- config.json +49 -0
- config_sentence_transformers.json +14 -0
- configuration.py +145 -0
- model.safetensors +3 -0
- modeling.py +1418 -0
- modules.json +20 -0
- sentence_bert_config.json +4 -0
- special_tokens_map.json +51 -0
- tokenizer.json +3 -0
- tokenizer_config.json +55 -0
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
1_Pooling/config.json
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"word_embedding_dimension": 768,
|
3 |
+
"pooling_mode_cls_token": true,
|
4 |
+
"pooling_mode_mean_tokens": false,
|
5 |
+
"pooling_mode_max_tokens": false,
|
6 |
+
"pooling_mode_mean_sqrt_len_tokens": false,
|
7 |
+
"pooling_mode_weightedmean_tokens": false,
|
8 |
+
"pooling_mode_lasttoken": false,
|
9 |
+
"include_prompt": true
|
10 |
+
}
|
README.md
ADDED
@@ -0,0 +1,609 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
<br>bồi dưỡng được cấp cho học viên có đủ các điều kiện sau đây:1. Tham gia học tập đầy
|
1 |
<br>đủ theo quy định của chương trình bồi dưỡng.<br><br>2. Có đủ các bài kiểm
|
2 |
<br>tra, viết thu hoạch, tiểu luận, đề án theo quy định của chương trình bồi dưỡng;
|
3 |
<br>các bài kiểm tra, viết thu hoạch, tiểu luận, đề án phải đạt từ 50% số điểm trở
|
4 |
<br>lên theo thang điểm quy định của chương trình.<br><br>3. Chấp hành đúng, đầy
|
5 |
<br>đủ các quy định của pháp luật về bồi dưỡng cán bộ, công chức, viên chức; quy
|
6 |
<br>chế, nội quy học tập của Học viện Hành chính Quốc gia; cơ sở đào tạo, bồi
|
7 |
<br>dưỡng; cơ sở đào tạo, nghiên cứu.</code> | <code>1.0</code> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
tags:
|
3 |
+
- sentence-transformers
|
4 |
+
- sentence-similarity
|
5 |
+
- feature-extraction
|
6 |
+
- dense
|
7 |
+
- generated_from_trainer
|
8 |
+
- dataset_size:2864
|
9 |
+
- loss:MultipleNegativesRankingLoss
|
10 |
+
base_model: Alibaba-NLP/gte-multilingual-base
|
11 |
+
widget:
|
12 |
+
- source_sentence: Điều kiện hưởng chính sách hỗ trợ chi phí học tập đối với sinh
|
13 |
+
viên là người dân tộc thiểu số là gì?
|
14 |
+
sentences:
|
15 |
+
- "1. Cơ sở giáo dục có vốn đầu tư nước ngoài được thành lập và hoạt động dưới hình\
|
16 |
+
\ thức trường hoặc trung tâm và được đặt tên theo quy định sau:\t\ta) Đối với\
|
17 |
+
\ trường, tên phải bao gồm các yếu tố cấu thành được sắp xếp theo trật tự: “Trường”,\
|
18 |
+
\ “Cấp học hoặc trình độ đào tạo” và tên riêng;\t\tb) Đối với cơ sở đào tạo, bồi\
|
19 |
+
\ dưỡng ngắn hạn, tên phải bao gồm các yếu tố cấu thành được sắp xếp theo trật\
|
20 |
+
\ tự: “Trung tâm giáo dục hoặc đào tạo”, “Ngành hoặc nhóm ngành đào tạo chính”\
|
21 |
+
\ và tên riêng;\t\tc) Đối với phân hiệu của cơ sở giáo dục đại học có vốn đầu\
|
22 |
+
\ tư nước ngoài tại Việt Nam thì tên phải bao gồm các yếu tố cấu thành được sắp\
|
23 |
+
\ xếp theo trật tự: “Phân hiệu”, “Tên cơ sở giáo dục đại học có vốn đầu tư nước\
|
24 |
+
\ ngoài” và “tại tỉnh, thành phố”.\n\n2. Tên riêng của cơ sở giáo dục có vốn đầu\
|
25 |
+
\ tư nước ngoài không được đặt trùng hoặc gây nhầm lẫn với tên của cơ sở giáo\
|
26 |
+
\ dục đã đăng ký, với tên của doanh nghiệp thực hiện dự án đầu tư; không sử dụng\
|
27 |
+
\ từ ngữ, ký hiệu vi phạm truyền thống lịch sử, văn hóa, đạo đức và thuần phong\
|
28 |
+
\ mỹ tục của dân tộc Việt Nam.\n\n3. Cơ sở giáo dục có vốn đầu tư nước ngoài có\
|
29 |
+
\ tên giao dịch bằng tiếng Việt và tên giao dịch quốc tế bằng tiếng Anh (hoặc\
|
30 |
+
\ bằng một ngôn ngữ nước ngoài thông dụng khác) với nội dung tương đương.\n\n\
|
31 |
+
4. Bộ trưởng Bộ Giáo dục và Đào tạo xem xét, quyết định việc đặt tên một số cơ\
|
32 |
+
\ sở giáo dục mang tính đặc thù."
|
33 |
+
- 'Để được hưởng chính sách hỗ trợ chi phí học tập, sinh viên phải đáp ứng đủ các
|
34 |
+
điều kiện sau:
|
35 |
+
|
36 |
+
|
37 |
+
1. Sinh viên là người dân tộc thiểu số thuộc hộ nghèo và hộ cận nghèo theo quy
|
38 |
+
định của Thủ tướng Chính phủ phê duyệt theo từng thời kỳ.
|
39 |
+
|
40 |
+
|
41 |
+
2. Thi đỗ vào học đại học, cao đẳng hệ chính quy tại các cơ sở giáo dục đại học,
|
42 |
+
bao gồm: đại học, học viện, trường đại học, trường cao đẳng tại năm tham dự tuyển
|
43 |
+
sinh theo đúng quy định của cơ quan Nhà nước có thẩm quyền về quy chế tuyển sinh
|
44 |
+
đại học, cao đẳng.'
|
45 |
+
- "1. Phá hoại các trang thiết bị điện, thiết bị đo đếm điện và công trình điện\
|
46 |
+
\ lực.\n\n2. Hoạt động điện lực không có giấy phép theo quy định của Luật này.\n\
|
47 |
+
\n3. Đóng, cắt điện trái quy định của pháp luật.\n\n4. Vi phạm các quy định về\
|
48 |
+
\ an toàn trong phát điện, truyền tải điện, phân phối điện và sử dụng điện.\n\n\
|
49 |
+
5. Cản trở việc kiểm tra hoạt động điện lực và sử dụng điện.\n\n6. Trộm cắp điện.\n\
|
50 |
+
\n7. Sử dụng điện để bẫy, bắt động vật hoặc làm phương tiện bảo vệ, trừ trường\
|
51 |
+
\ hợp được quy định tại Điều 59 của Luật này.\n\n8. Vi phạm các quy định về bảo\
|
52 |
+
\ vệ hành lang an toàn lưới điện, khoảng cách an toàn của đường dây và trạm điện.\
|
53 |
+
\ \n\n9. Cung cấp thông tin không trung thực làm tổn hại đến quyền và lợi ích\
|
54 |
+
\ hợp pháp của tổ chức, cá nhân hoạt động điện lực và sử dụng điện.\n\n10. Lợi\
|
55 |
+
\ dụng chức vụ, quyền hạn để gây sách nhiễu, phiền hà, thu lợi bất chính trong\
|
56 |
+
\ hoạt động điện lực và sử dụng điện. \n\n11. Các hành vi khác vi phạm quy định\
|
57 |
+
\ của pháp luật về điện lực."
|
58 |
+
- source_sentence: 2. Vi phạm quy định về tổ chức, hoạt động của trung tâm tư vấn,
|
59 |
+
hỗ trợ hôn nhân và gia đình có yếu tố nước ngoài bị xử phạt như thế nào?
|
60 |
+
sentences:
|
61 |
+
- '1. Hàng năm, Bộ Nông nghiệp và Phát triển nông thôn tổ chức xây dựng, phê duyệt
|
62 |
+
kế hoạch kiểm tra định kỳ hoặc đột xuất để kiểm tra, đánh giá việc tổ chức thực
|
63 |
+
hiện, tiến độ, kết quả, hiệu quả dự án khuyến nông trung ương. Tần suất kiểm tra
|
64 |
+
được thực hiện ít nhất một lần cho mỗi dự án trong thời gian thực hiện.
|
65 |
+
|
66 |
+
|
67 |
+
2. Trước khi tiến hành kiểm tra (tối thiểu 05 ngày làm việc), đoàn kiểm tra thông
|
68 |
+
báo thời gian, địa điểm kiểm tra tới tổ chức chủ trì, chủ nhiệm dự án và các thành
|
69 |
+
viên đoàn kiểm tra. Tổ chức chủ trì, chủ nhiệm dự án làm báo cáo tiến độ thực
|
70 |
+
hiện dự án gửi đoàn kiểm tra để phục vụ công tác kiểm tra.
|
71 |
+
|
72 |
+
|
73 |
+
3. Trong quá trình thực hiện dự án, tổ chức chủ trì tự tổ chức kiểm tra dự án
|
74 |
+
và gửi báo cáo kết quả kiểm tra về Bộ Nông nghiệp và Phát triển nông thôn trước
|
75 |
+
ngày 15 tháng 6 và 15 tháng 12 hàng năm hoặc đột xuất khi có yêu cầu.'
|
76 |
+
- '1. Chủ sở hữu nhà ở có quyền thế chấp nhà ở đang cho thuê nhưng phải thông báo
|
77 |
+
bằng văn bản cho bên thuê nhà ở biết trước về việc thế chấp. Bên thuê nhà ở được
|
78 |
+
tiếp tục thuê đến hết hạn hợp đồng thuê nhà ở.
|
79 |
+
|
80 |
+
|
81 |
+
2. Trường hợp nhà ở đang thuê bị xử lý để thực hiện nghĩa vụ của bên thế chấp
|
82 |
+
nhà ở thì bên thuê nhà ở được tiếp tục thuê đến hết hạn hợp đồng, trừ trường hợp
|
83 |
+
bên thuê nhà ở vi phạm các quy định tại khoản 2 Điều 132 của Luật này hoặc các
|
84 |
+
bên có thỏa thuận khác.'
|
85 |
+
- "1. Phạt tiền từ 1.000.000 đồng đến 3.000.000 đồng đối với hành vi không thông\
|
86 |
+
\ báo cho cơ quan nhà nước có thẩm quyền khi có sự thay đổi về tên gọi, trụ sở,\
|
87 |
+
\ người đứng đầu.\n2. Phạt tiền từ 3.000.000 đồng đến 5.000.000 đồng đối với một\
|
88 |
+
\ trong các hành vi sau:\t\ta) Tẩy xoá, sửa chữa làm sai lệch nội dung giấy tờ,\
|
89 |
+
\ văn bản do cơ quan, tổ chức, người có thẩm quyền cấp trong hồ sơ đăng ký hoạt\
|
90 |
+
\ động hoặc thay đổi nội dung đăng ký hoạt động;\t\tb) Tẩy xoá, sửa chữa làm sai\
|
91 |
+
\ lệch nội dung giấy đăng ký hoạt động;\t\tc) Không thực hiện chế độ báo cáo;\
|
92 |
+
\ không lập, quản lý hoặc sử dụng không đúng sổ sách, biểu mẫu;\t\td) Không tư\
|
93 |
+
\ vấn, hỗ trợ cho người có yêu cầu tư vấn, hỗ trợ về hôn nhân và gia đình có yếu\
|
94 |
+
\ tố nước ngoài;\t\tđ) Không cấp giấy xác nhận của trung tâm theo yêu cầu của\
|
95 |
+
\ người được tư vấn, hỗ trợ;\t\te) Không công bố công khai mức thù lao theo quy\
|
96 |
+
\ định.\n3. Phạt tiền từ 5.000.000 đồng đến 7.000.000 đồng đối với một trong các\
|
97 |
+
\ hành vi sau:\t\ta) Khai không đúng sự thật trong tờ khai đăng ký hoạt động;\t\
|
98 |
+
\tb) Cung cấp giấy tờ chứng minh về trụ sở không đúng sự thật;\t\tc) Thay đổi\
|
99 |
+
\ tên gọi, trụ sở, người đứng đầu hoặc nội dung đăng ký hoạt động mà không có\
|
100 |
+
\ xác nhận của cơ quan có thẩm quyền.\n4. Phạt tiền từ 7.000.000 đồng đến 10.000.000\
|
101 |
+
\ đồng đối với một trong các hành vi sau:\t\ta) Hoạt động trong trường hợp không\
|
102 |
+
\ còn đủ điều kiện hoạt động;\t\tb) Hoạt động vượt quá phạm vi, nội dung ghi trong\
|
103 |
+
\ giấy đăng ký hoạt động;\t\tc) Đòi hỏi tiền hoặc lợi ích khác ngoài thù lao theo\
|
104 |
+
\ quy định khi thực hiện tư vấn, hỗ trợ về hôn nhân và gia đình có yếu tố nước\
|
105 |
+
\ ngoài;\t\td) Không giữ bí mật các thông tin, tư liệu về đời sống riêng tư, bí\
|
106 |
+
\ mật cá nhân, bí mật gia đình của các bên theo quy định của pháp luật.\n5. Phạt\
|
107 |
+
\ tiền từ 10.000.000 đồng đến 20.000.000 đồng đối với một trong các hành vi sau:\t\
|
108 |
+
\ta) Thực hiện các hoạt động tư vấn, hỗ trợ hôn nhân và gia đình có yếu tố nước\
|
109 |
+
\ ngoài khi chưa có giấy đăng ký hoạt động;\t\tb) Lợi dụng việc tư vấn, hỗ trợ\
|
110 |
+
\ hôn nhân và gia đình có yếu tố nước ngoài nhằm mua bán người, bóc lột sức lao\
|
111 |
+
\ động, xâm phạm tình dục hoặc vì mục đích trục lợi khác."
|
112 |
+
- source_sentence: Tiền thưởng thêm từ hoàn thành tốt hợp đồng có cần phải xuất hóa
|
113 |
+
đơn không?
|
114 |
+
sentences:
|
115 |
+
- "1. Người nào cướp giật tài sản của người khác, thì bị phạt tù từ 01 năm đến 05\
|
116 |
+
\ năm.\n\n2. Phạm tội thuộc một trong các trường hợp sau đây, thì bị phạt tù từ\
|
117 |
+
\ 03 năm đến 10 năm:\t\ta) Có tổ chức;\t\tb) Có tính chất chuyên nghiệp;\t\tc)\
|
118 |
+
\ Chiếm đoạt tài sản trị giá từ 50.000.000 đồng đến dưới 200.000.000 đồng;\t\t\
|
119 |
+
d) Dùng thủ đoạn nguy hiểm;\t\tđ) Hành hung để tẩu thoát;\t\te) Gây thương tích\
|
120 |
+
\ hoặc gây tổn hại cho sức khỏe của người khác mà tỷ lệ tổn thương cơ thể từ 11%\
|
121 |
+
\ đến 30%;\t\tg) Phạm tội đối với người dưới 16 tuổi, phụ nữ mà biết là có thai,\
|
122 |
+
\ người già yếu hoặc người không có khả năng tự vệ;\t\th) Gây ảnh hưởng xấu đến\
|
123 |
+
\ an ninh, trật tự, an toàn xã hội;\t\ti) Tái phạm nguy hiểm.\n\n3. Phạm tội thuộc\
|
124 |
+
\ một trong các trường hợp sau đây, thì bị phạt tù từ 07 năm đến 15 năm:\t\ta)\
|
125 |
+
\ Chiếm đoạt tài sản trị giá từ 200.000.000 đồng đến dưới 500.000.000 đồng;\t\t\
|
126 |
+
b) Gây thương tích hoặc gây tổn hại cho sức khỏe của người khác mà tỷ lệ tổn thương\
|
127 |
+
\ cơ thể từ 31% đến 60%;\t\tc) Lợi dụng thiên tai, dịch bệnh.\n\n4. Phạm tội thuộc\
|
128 |
+
\ một trong các trường hợp sau đây, thì bị phạt tù từ 12 năm đến 20 năm hoặc tù\
|
129 |
+
\ chung thân:\t\ta) Chiếm đoạt tài sản trị giá 500.000.000 đồng trở lên;\t\tb)\
|
130 |
+
\ Gây thương tích hoặc gây tổn hại cho sức khỏe của 01 người mà tỷ lệ tổn thương\
|
131 |
+
\ cơ thể 61% trở lên hoặc gây thương tích hoặc gây tổn hại cho sức khỏe của 02\
|
132 |
+
\ người trở lên mà tỷ lệ tổn thương cơ thể của mỗi người 31% trở lên;\t\tc) Làm\
|
133 |
+
\ chết người;\t\td) Lợi dụng hoàn cảnh chiến tranh, tình trạng khẩn cấp.\n\n5.\
|
134 |
+
\ Người phạm tội còn có thể bị phạt tiền từ 10.000.000 đồng đến 100.000.000 đồng."
|
135 |
+
- 'Bắt buộc phải trưng cầu giám định khi cần xác định:
|
136 |
+
|
137 |
+
|
138 |
+
1. Tình trạng tâm thần của người bị buộc tội khi có sự nghi ngờ về năng lực trách
|
139 |
+
nhiệm hình sự của họ; tình trạng tâm thần của người làm chứng hoặc bị hại khi
|
140 |
+
có sự nghi ngờ về khả năng nhận thức, khả năng khai báo đúng đắn về những tình
|
141 |
+
tiết của vụ án;
|
142 |
+
|
143 |
+
|
144 |
+
2. Tuổi của bị can, bị cáo, bị hại nếu việc đó có ý nghĩa đối với việc giải quyết
|
145 |
+
vụ án và không có tài liệu để xác định chính xác tuổi của họ hoặc có nghi ngờ
|
146 |
+
về tính xác thực của những tài liệu đó;
|
147 |
+
|
148 |
+
|
149 |
+
3. Nguyên nhân chết người;
|
150 |
+
|
151 |
+
|
152 |
+
4. Tính chất thương tích, mức độ tổn hại sức khoẻ hoặc khả năng lao động;
|
153 |
+
|
154 |
+
|
155 |
+
5. Chất ma tuý, vũ khí quân dụng, vật liệu nổ, chất cháy, chất độc, chất phóng
|
156 |
+
xạ, tiền giả, vàng, bạc, kim khí quý, đá quý, đồ cổ;
|
157 |
+
|
158 |
+
|
159 |
+
6. Mức độ ô nhiễm môi trường.'
|
160 |
+
- '1. Tổ chức, cá nhân nhận các khoản thu về bồi thường bằng tiền (bao gồm cả tiền
|
161 |
+
bồi thường về đất và tài sản trên đất khi bị thu hồi đất theo quyết định của cơ
|
162 |
+
quan Nhà nước có thẩm quyền), tiền thưởng, tiền hỗ trợ, tiền chuyển nhượng quyền
|
163 |
+
phát thải và các khoản thu tài chính khác.Cơ sở kinh doanh khi nhận khoản tiền
|
164 |
+
thu về bồi thường, tiền thưởng, tiền hỗ trợ nhận được, tiền chuyển nhượng quyền
|
165 |
+
phát thải và các khoản thu tài chính khác thì lập chứng từ thu theo quy định.
|
166 |
+
Đối với cơ sở kinh doanh chi tiền, căn cứ mục đích chi để lập chứng từ chi tiền.Trường
|
167 |
+
hợp bồi thường bằng hàng hóa, dịch vụ, cơ sở bồi thường phải lập hóa đơn và kê
|
168 |
+
khai, tính, nộp thuế GTGT như đối với bán hàng hóa, dịch vụ; cơ sở nhận bồi thường
|
169 |
+
kê khai, khấu trừ theo quy định.Trường hợp cơ sở kinh doanh nhận tiền của tổ chức,
|
170 |
+
cá nhân để thực hiện dịch vụ cho tổ chức, cá nhân như sửa chữa, bảo hành, khuyến
|
171 |
+
mại, quảng cáo thì phải kê khai, nộp thuế theo quy định.Ví dụ 10: Công ty TNHH
|
172 |
+
P&C nhận được khoản tiền lãi từ việc mua trái phiếu và tiền cổ tức từ việc mua
|
173 |
+
cổ phiếu của các doanh nghiệp khác. Công ty TNHH P&C không phải kê khai, nộp thuế
|
174 |
+
GTGT đối với khoản tiền lãi từ việc mua trái phiếu và tiền cổ tức nhận được.Ví
|
175 |
+
dụ 11: Doanh nghiệp A nhận được khoản bồi thường thiệt hại do bị hủy hợp đồng
|
176 |
+
từ doanh nghiệp B là 50 triệu đồng thì doanh nghiệp A lập chứng từ thu và không
|
177 |
+
phải kê khai, nộp thuế GTGT đối với khoản tiền trên.Ví dụ 12: Doanh nghiệp X mua
|
178 |
+
hàng của doanh nghiệp Y, doanh nghiệp X có ứng trước cho doanh nghiệp Y một khoản
|
179 |
+
tiền và được doanh nghiệp Y trả lãi cho khoản tiền ứng trước đó thì doanh nghiệp
|
180 |
+
X không phải kê khai, nộp thuế GTGT đối với khoản lãi nhận được.Ví dụ 13: Doanh
|
181 |
+
nghiệp X bán hàng cho doanh nghiệp Z, tổng giá thanh toán là 440 triệu đồng. Theo
|
182 |
+
hợp đồng, doanh nghiệp Z thanh toán trả chậm trong vòng 3 tháng, lãi suất trả
|
183 |
+
chậm là 1%/tháng/tổng giá thanh toán của hợp đồng. Sau 3 tháng, doanh nghiệp X
|
184 |
+
nhận được từ doanh nghiệp Z tổng giá trị thanh toán của hợp đồng là 440 triệu
|
185 |
+
đồng và số tiền lãi chậm trả là 13,2 triệu đồng (440 triệu đồng x 1% x 3 tháng)
|
186 |
+
thì doanh nghiệp X không phải kê khai, nộp thuế GTGT đối với khoản tiền 13,2 triệu
|
187 |
+
đồng này.Ví dụ 14: Doanh nghiệp bảo hiểm A và Công ty B ký hợp đồng bảo hiểm với
|
188 |
+
hình thức bảo hiểm bằng tiền. Khi có rủi ro bảo hiểm xảy ra, doanh nghiệp bảo
|
189 |
+
hiểm A bồi thường cho Công ty B bằng tiền theo quy định của pháp luật về bảo hiểm.
|
190 |
+
Công ty B không phải kê khai, nộp thuế GTGT đối với số tiền bồi thường bảo hiểm
|
191 |
+
nhận được.Ví dụ 15: Công ty cổ phần Sữa ABC có chi tiền cho các nhà phân phối
|
192 |
+
(là tổ chức, cá nhân kinh doanh) để thực hiện chương trình khuyến mại (theo quy
|
193 |
+
định của pháp luật về hoạt động xúc tiến thương mại), tiếp thị, trưng bày sản
|
194 |
+
phẩm cho Công ty (nhà phân phối nhận tiền này để thực hiện dịch vụ cho Công ty)
|
195 |
+
thì khi nhận tiền, trường hợp nhà phân phối là người nộp thuế GTGT theo phương
|
196 |
+
pháp khấu trừ lập hóa đơn GTGT và tính thuế GTGT theo thuế suất 10%, trường hợp
|
197 |
+
nhà phân phối là người nộp thuế GTGT theo phương pháp trực tiếp thì sử dụng hóa
|
198 |
+
đơn bán hàng và xác định số thuế phải nộp theo tỷ lệ (%) trên doanh thu theo quy
|
199 |
+
định.'
|
200 |
+
- source_sentence: Công trình trong đô thị cần đáp ứng điều kiện nào để được cấp giấy
|
201 |
+
phép xây dựng?
|
202 |
+
sentences:
|
203 |
+
- Mức phạt tiền của mỗi hành vi vi phạm hành chính quy định tại Nghị định này là
|
204 |
+
mức phạt áp dụng đối với cá nhân; trường hợp có cùng một hành vi vi phạm hành
|
205 |
+
chính thì mức phạt tiền đối với tổ chức bằng 02 lần mức phạt tiền đối với cá nhân.
|
206 |
+
- "1. Việc đánh giá viên chức được xem xét theo các nội dung sau:\t\ta) Kết quả\
|
207 |
+
\ thực hiện công việc hoặc nhiệm vụ theo hợp đồng làm việc đã ký kết;\t\tb) Việc\
|
208 |
+
\ thực hiện quy định về đạo đức nghề nghiệp;\t\tc) Tinh thần trách nhiệm, thái\
|
209 |
+
\ độ phục vụ nhân dân, tinh thần hợp tác với đồng nghiệp và việc thực hiện quy\
|
210 |
+
\ tắc ứng xử của viên chức;\t\td) Việc thực hiện các nghĩa vụ khác của viên chức.\n\
|
211 |
+
\n2. Việc đánh giá viên chức quản lý được xem xét theo các nội dung quy định tại\
|
212 |
+
\ khoản 1 Điều này và các nội dung sau:\t\ta) Năng lực lãnh đạo, quản lý, điều\
|
213 |
+
\ hành và tổ chức thực hiện nhiệm vụ;\t\tb) Kết quả hoạt động của đơn vị được\
|
214 |
+
\ giao quản lý, phụ trách.\n\n3. Việc đánh giá viên chức được thực hiện hàng năm;\
|
215 |
+
\ khi kết thúc thời gian tập sự; trước khi ký tiếp hợp đồng làm việc; thay đổi\
|
216 |
+
\ vị trí việc làm; xét khen thưởng, kỷ luật, bổ nhiệm, bổ nhiệm lại, quy hoạch,\
|
217 |
+
\ đào tạo, bồi đường."
|
218 |
+
- "1. Đơn đề nghị cấp giấy phép di dời công trình.\n\n2. Bản sao giấy tờ chứng minh\
|
219 |
+
\ quyền sử dụng đất nơi công trình sẽ di dời đến và giấy tờ hợp pháp về sở hữu\
|
220 |
+
\ công trình theo quy định của pháp luật.\n\n3. Bản vẽ hoàn công công trình (nếu\
|
221 |
+
\ có) hoặc bản vẽ thiết kế mô tả thực trạng công trình được di dời, gồm mặt bằng,\
|
222 |
+
\ mặt cắt móng và bản vẽ kết cấu chịu lực chính; bản vẽ tổng mặt bằng địa điểm\
|
223 |
+
\ công trình sẽ được di dời tới; bản vẽ mặt bằng, mặt cắt móng tại địa điểm công\
|
224 |
+
\ trình sẽ di dời đến.\n\n4. Báo cáo kết quả khảo sát đánh giá chất lượng hiện\
|
225 |
+
\ trạng của công trình do tổ chức, cá nhân có đủ điều kiện năng lực thực hiện.\n\
|
226 |
+
\n5. Phương án di dời do tổ chức, cá nhân có đủ điều kiện năng lực thực hiện gồm:\t\
|
227 |
+
\ta) Phần thuyết minh về hiện trạng công trình và khu vực công trình sẽ được di\
|
228 |
+
\ dời đến; giải pháp di dời, phương án bố trí sử dụng phương tiện, thiết bị, nhân\
|
229 |
+
\ lực; giải pháp bảo đảm an toàn cho công trình, người, máy móc, thiết bị và công\
|
230 |
+
\ trình lân cận; bảo đảm vệ sinh môi trường; tiến độ di dời; tổ chức, cá nhân\
|
231 |
+
\ thực hiện di dời công trình;\t\tb) Phần bản vẽ biện pháp thi công di dời công\
|
232 |
+
\ trình."
|
233 |
+
- source_sentence: Trách nhiệm của Trưởng phòng Tiền tệ - Kho quỹ Ngân hàng Nhà nước
|
234 |
+
chi nhánh trong việc quản lý tiền mặt, tài sản quý, giấy tờ có giá là gì?
|
235 |
+
sentences:
|
236 |
+
- '1. Hướng dẫn, kiểm tra nghiệp vụ quản lý an toàn kho quỹ; tổ chức việc thu, chi
|
237 |
+
(xuất, nhập), bảo quản, vận chuyển tiền mặt, tài sản quý, giấy tờ có giá theo
|
238 |
+
quy định.
|
239 |
+
|
240 |
+
|
241 |
+
2. Hướng dẫn, kiểm tra việc mở và ghi chép sổ sách của thủ quỹ, thủ kho tiền.
|
242 |
+
|
243 |
+
|
244 |
+
3. Tham gia kiểm tra, kiểm kê, bàn giao tiền mặt, tài sản quý, giấy tờ có giá.'
|
245 |
+
- "1. Người có đủ các điều kiện sau đây không phân biệt dân tộc, nam nữ, thành phần\
|
246 |
+
\ xã hội, tín ngưỡng, tôn giáo được đăng ký dự tuyển viên chức: \t\ta) Có quốc\
|
247 |
+
\ tịch Việt Nam và cư trú tại Việt Nam;\t\tb) Từ đủ 18 tuổi trở lên. Đối với một\
|
248 |
+
\ số lĩnh vực hoạt động văn hóa, nghệ thuật, thể dục, thể thao, tuổi dự tuyển\
|
249 |
+
\ có thể thấp hơn theo quy định của pháp luật; đồng thời, phải có sự đồng ý bằng\
|
250 |
+
\ văn bản của người đại diện theo pháp luật;\t\tc) Có đơn đăng ký dự tuyển;\t\t\
|
251 |
+
d) Có lý lịch rõ ràng;\t\tđ) Có văn bằng, chứng chỉ đào tạo, chứng chỉ hành nghề\
|
252 |
+
\ hoặc có năng khiếu kỹ năng phù hợp với vị trí việc làm;\t\te) Đủ sức khoẻ để\
|
253 |
+
\ thực hiện công việc hoặc nhiệm vụ;\t\tg) Đáp ứng các điều kiện khác theo yêu\
|
254 |
+
\ cầu của vị trí việc làm do đơn vị sự nghiệp công lập xác định nhưng không được\
|
255 |
+
\ trái với quy định của pháp luật.\n\n2. Những người sau đây không được đăng ký\
|
256 |
+
\ dự tuyển viên chức:\t\ta) Mất năng lực hành vi dân sự hoặc bị hạn chế năng lực\
|
257 |
+
\ hành vi dân sự;\t\tb) Đang bị truy cứu trách nhiệm hình sự; đang chấp hành bản\
|
258 |
+
\ án, quyết định về hình sự của Tòa án; đang bị áp dụng biện pháp xử lý hành chính\
|
259 |
+
\ đưa vào cơ sở chữa bệnh, cơ sở giáo dục, trường giáo dưỡng."
|
260 |
+
- "1. Người nộp thuế phát hiện hồ sơ khai thuế đã nộp cho cơ quan thuế có sai, sót\
|
261 |
+
\ thì được khai bổ sung hồ sơ khai thuế trong thời hạn 10 năm kể từ ngày hết thời\
|
262 |
+
\ hạn nộp hồ sơ khai thuế của kỳ tính thuế có sai, sót nhưng trước khi cơ quan\
|
263 |
+
\ thuế, cơ quan có thẩm quyền công bố quyết định thanh tra, kiểm tra.\n\n2. Khi\
|
264 |
+
\ cơ quan thuế, cơ quan có thẩm quyền đã công bố quyết định thanh tra, kiểm tra\
|
265 |
+
\ thuế tại trụ sở của người nộp thuế thì người nộp thuế vẫn được khai bổ sung\
|
266 |
+
\ hồ sơ khai thuế; cơ quan thuế thực hiện xử phạt vi phạm hành chính về quản lý\
|
267 |
+
\ thuế đối với hành vi quy định tại Điều 142 và Điều 143 của Luật này.\n\n3. Sau\
|
268 |
+
\ khi cơ quan thuế, cơ quan có thẩm quyền đã ban hành kết luận, quyết định xử\
|
269 |
+
\ lý về thuế sau thanh tra, kiểm tra tại trụ sở của người nộp thuế thì việc khai\
|
270 |
+
\ bổ sung hồ sơ khai thuế được quy định như sau:\t\ta) Người nộp thuế được khai\
|
271 |
+
\ bổ sung hồ sơ khai thuế đối với trường hợp làm tăng số tiền thuế phải nộp, giảm\
|
272 |
+
\ số tiền thuế được khấu trừ hoặc giảm số tiền thuế được miễn, giảm, hoàn và bị\
|
273 |
+
\ xử phạt vi phạm hành chính về quản lý thuế đối với hành vi quy định tại Điều\
|
274 |
+
\ 142 và Điều 143 của Luật này;\t\tb) Trường hợp người nộp thuế phát hiện hồ sơ\
|
275 |
+
\ khai thuế có sai, sót nếu khai bổ sung làm giảm số tiền thuế phải nộp hoặc làm\
|
276 |
+
\ tăng số tiền thuế được khấu trừ, tăng số tiền thuế được miễn, giảm, hoàn thì\
|
277 |
+
\ thực hiện theo quy định về giải quyết khiếu nại về thuế.\n\n4. Hồ sơ khai bổ\
|
278 |
+
\ sung hồ sơ khai thuế bao gồm:\t\ta) Tờ khai bổ sung;\t\tb) Bản giải trình khai\
|
279 |
+
\ bổ sung và các tài liệu có liên quan.\n\n5. Đối với hàng hóa xuất khẩu, nhập\
|
280 |
+
\ khẩu, việc khai bổ sung hồ sơ khai thuế thực hiện theo quy định của pháp luật\
|
281 |
+
\ về hải quan."
|
282 |
+
pipeline_tag: sentence-similarity
|
283 |
+
library_name: sentence-transformers
|
284 |
+
---
|
285 |
+
|
286 |
+
# SentenceTransformer based on Alibaba-NLP/gte-multilingual-base
|
287 |
+
|
288 |
+
This is a [sentence-transformers](https://www.SBERT.net) model finetuned from [Alibaba-NLP/gte-multilingual-base](https://huggingface.co/Alibaba-NLP/gte-multilingual-base). It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.
|
289 |
+
|
290 |
+
## Model Details
|
291 |
+
|
292 |
+
### Model Description
|
293 |
+
- **Model Type:** Sentence Transformer
|
294 |
+
- **Base model:** [Alibaba-NLP/gte-multilingual-base](https://huggingface.co/Alibaba-NLP/gte-multilingual-base) <!-- at revision 9bbca17d9273fd0d03d5725c7a4b0f6b45142062 -->
|
295 |
+
- **Maximum Sequence Length:** 512 tokens
|
296 |
+
- **Output Dimensionality:** 768 dimensions
|
297 |
+
- **Similarity Function:** Cosine Similarity
|
298 |
+
<!-- - **Training Dataset:** Unknown -->
|
299 |
+
<!-- - **Language:** Unknown -->
|
300 |
+
<!-- - **License:** Unknown -->
|
301 |
+
|
302 |
+
### Model Sources
|
303 |
+
|
304 |
+
- **Documentation:** [Sentence Transformers Documentation](https://sbert.net)
|
305 |
+
- **Repository:** [Sentence Transformers on GitHub](https://github.com/UKPLab/sentence-transformers)
|
306 |
+
- **Hugging Face:** [Sentence Transformers on Hugging Face](https://huggingface.co/models?library=sentence-transformers)
|
307 |
+
|
308 |
+
### Full Model Architecture
|
309 |
+
|
310 |
+
```
|
311 |
+
SentenceTransformer(
|
312 |
+
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False, 'architecture': 'NewModel'})
|
313 |
+
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
|
314 |
+
(2): Normalize()
|
315 |
+
)
|
316 |
+
```
|
317 |
+
|
318 |
+
## Usage
|
319 |
+
|
320 |
+
### Direct Usage (Sentence Transformers)
|
321 |
+
|
322 |
+
First install the Sentence Transformers library:
|
323 |
+
|
324 |
+
```bash
|
325 |
+
pip install -U sentence-transformers
|
326 |
+
```
|
327 |
+
|
328 |
+
Then you can load this model and run inference.
|
329 |
+
```python
|
330 |
+
from sentence_transformers import SentenceTransformer
|
331 |
+
|
332 |
+
# Download from the 🤗 Hub
|
333 |
+
model = SentenceTransformer("sentence_transformers_model_id")
|
334 |
+
# Run inference
|
335 |
+
sentences = [
|
336 |
+
'Trách nhiệm của Trưởng phòng Tiền tệ - Kho quỹ Ngân hàng Nhà nước chi nhánh trong việc quản lý tiền mặt, tài sản quý, giấy tờ có giá là gì?',
|
337 |
+
'1. Hướng dẫn, kiểm tra nghiệp vụ quản lý an toàn kho quỹ; tổ chức việc thu, chi (xuất, nhập), bảo quản, vận chuyển tiền mặt, tài sản quý, giấy tờ có giá theo quy định.\n\n2. Hướng dẫn, kiểm tra việc mở và ghi chép sổ sách của thủ quỹ, thủ kho tiền.\n\n3. Tham gia kiểm tra, kiểm kê, bàn giao tiền mặt, tài sản quý, giấy tờ có giá.',
|
338 |
+
'1. Người có đủ các điều kiện sau đây không phân biệt dân tộc, nam nữ, thành phần xã hội, tín ngưỡng, tôn giáo được đăng ký dự tuyển viên chức: \t\ta) Có quốc tịch Việt Nam và cư trú tại Việt Nam;\t\tb) Từ đủ 18 tuổi trở lên. Đối với một số lĩnh vực hoạt động văn hóa, nghệ thuật, thể dục, thể thao, tuổi dự tuyển có thể thấp hơn theo quy định của pháp luật; đồng thời, phải có sự đồng ý bằng văn bản của người đại diện theo pháp luật;\t\tc) Có đơn đăng ký dự tuyển;\t\td) Có lý lịch rõ ràng;\t\tđ) Có văn bằng, chứng chỉ đào tạo, chứng chỉ hành nghề hoặc có năng khiếu kỹ năng phù hợp với vị trí việc làm;\t\te) Đủ sức khoẻ để thực hiện công việc hoặc nhiệm vụ;\t\tg) Đáp ứng các điều kiện khác theo yêu cầu của vị trí việc làm do đơn vị sự nghiệp công lập xác định nhưng không được trái với quy định của pháp luật.\n\n2. Những người sau đây không được đăng ký dự tuyển viên chức:\t\ta) Mất năng lực hành vi dân sự hoặc bị hạn chế năng lực hành vi dân sự;\t\tb) Đang bị truy cứu trách nhiệm hình sự; đang chấp hành bản án, quyết định về hình sự của Tòa án; đang bị áp dụng biện pháp xử lý hành chính đưa vào cơ sở chữa bệnh, cơ sở giáo dục, trường giáo dưỡng.',
|
339 |
+
]
|
340 |
+
embeddings = model.encode(sentences)
|
341 |
+
print(embeddings.shape)
|
342 |
+
# [3, 768]
|
343 |
+
|
344 |
+
# Get the similarity scores for the embeddings
|
345 |
+
similarities = model.similarity(embeddings, embeddings)
|
346 |
+
print(similarities)
|
347 |
+
# tensor([[ 1.0000, 0.8502, -0.0614],
|
348 |
+
# [ 0.8502, 1.0000, -0.0440],
|
349 |
+
# [-0.0614, -0.0440, 1.0000]])
|
350 |
+
```
|
351 |
+
|
352 |
+
<!--
|
353 |
+
### Direct Usage (Transformers)
|
354 |
+
|
355 |
+
<details><summary>Click to see the direct usage in Transformers</summary>
|
356 |
+
|
357 |
+
</details>
|
358 |
+
-->
|
359 |
+
|
360 |
+
<!--
|
361 |
+
### Downstream Usage (Sentence Transformers)
|
362 |
+
|
363 |
+
You can finetune this model on your own dataset.
|
364 |
+
|
365 |
+
<details><summary>Click to expand</summary>
|
366 |
+
|
367 |
+
</details>
|
368 |
+
-->
|
369 |
+
|
370 |
+
<!--
|
371 |
+
### Out-of-Scope Use
|
372 |
+
|
373 |
+
*List how the model may foreseeably be misused and address what users ought not to do with the model.*
|
374 |
+
-->
|
375 |
+
|
376 |
+
<!--
|
377 |
+
## Bias, Risks and Limitations
|
378 |
+
|
379 |
+
*What are the known or foreseeable issues stemming from this model? You could also flag here known failure cases or weaknesses of the model.*
|
380 |
+
-->
|
381 |
+
|
382 |
+
<!--
|
383 |
+
### Recommendations
|
384 |
+
|
385 |
+
*What are recommendations with respect to the foreseeable issues? For example, filtering explicit content.*
|
386 |
+
-->
|
387 |
+
|
388 |
+
## Training Details
|
389 |
+
|
390 |
+
### Training Dataset
|
391 |
+
|
392 |
+
#### Unnamed Dataset
|
393 |
+
|
394 |
+
* Size: 2,864 training samples
|
395 |
+
* Columns: <code>sentence_0</code>, <code>sentence_1</code>, and <code>label</code>
|
396 |
+
* Approximate statistics based on the first 1000 samples:
|
397 |
+
| | sentence_0 | sentence_1 | label |
|
398 |
+
|:--------|:----------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------|:--------------------------------------------------------------|
|
399 |
+
| type | string | string | float |
|
400 |
+
| details | <ul><li>min: 14 tokens</li><li>mean: 23.6 tokens</li><li>max: 55 tokens</li></ul> | <ul><li>min: 15 tokens</li><li>mean: 299.02 tokens</li><li>max: 512 tokens</li></ul> | <ul><li>min: 1.0</li><li>mean: 1.0</li><li>max: 1.0</li></ul> |
|
401 |
+
* Samples:
|
402 |
+
| sentence_0 | sentence_1 | label |
|
403 |
+
|:-------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------|
|
404 |
+
| <code>Điều kiện để được cấp chứng chỉ bồi dưỡng của cán bộ, công chức, viên chức được quy định như thế nào?</code> | <code>Chứng chỉ chương trình
|
405 |
<br>bồi dưỡng được cấp cho học viên có đủ các điều kiện sau đây:1. Tham gia học tập đầy
|
406 |
<br>đủ theo quy định của chương trình bồi dưỡng.<br><br>2. Có đủ các bài kiểm
|
407 |
<br>tra, viết thu hoạch, tiểu luận, đề án theo quy định của chương trình bồi dưỡng;
|
408 |
<br>các bài kiểm tra, viết thu hoạch, tiểu luận, đề án phải đạt từ 50% số điểm trở
|
409 |
<br>lên theo thang điểm quy định của chương trình.<br><br>3. Chấp hành đúng, đầy
|
410 |
<br>đủ các quy định của pháp luật về bồi dưỡng cán bộ, công chức, viên chức; quy
|
411 |
<br>chế, nội quy học tập của Học viện Hành chính Quốc gia; cơ sở đào tạo, bồi
|
412 |
<br>dưỡng; cơ sở đào tạo, nghiên cứu.</code> | <code>1.0</code> |
|
413 |
+
| <code>Vi bằng phải đảm bảo nội dung và hình thức thế nào?</code> | <code>1. Vi bằng được lập bằng văn bản tiếng Việt, có nội dung chủ yếu sau đây: a) Tên, địa chỉ Văn phòng Thừa phát lại; họ, tên Thừa phát lại lập vi bằng; b) Địa điểm, thời gian lập vi bằng; c) Họ, tên, địa chỉ người yêu cầu lập vi bằng; d) Họ, tên người tham gia khác (nếu có); đ) Nội dung yêu cầu lập vi bằng; nội dung cụ thể của sự kiện, hành vi được ghi nhận; e) Lời cam đoan của Thừa phát lại về tính trung thực và khách quan trong việc lập vi bằng; g) Chữ ký của Thừa phát lại, dấu Văn phòng Thừa phát lại, chữ ký hoặc dấu điểm chỉ của người yêu cầu, người tham gia khác (nếu có) và người có hành vi bị lập vi bằng (nếu họ có yêu cầu).Vi bằng có từ 02 trang trở lên thì từng trang phải được đánh số thứ tự; vi bằng có từ 02 tờ trở lên phải được đóng dấu giáp lai giữa các tờ; số lượng bản chính của mỗi vi bằng do các bên tự thỏa thuận.<br><br>2. Kèm theo vi bằng có thể có các tài liệu chứng minh; trường hợp tài liệu chứng minh do Thừa phát lại lập thì phải phù hợp với thẩm quyền, phạm vi theo q...</code> | <code>1.0</code> |
|
414 |
+
| <code>Người cai nghiện tại cơ sở cai nghiện bắt buộc được thăm gặp người thân mấy lần mỗi tuần?</code> | <code>1. Người cai nghiện được thăm gặp người thân tại phòng thăm gặp của cơ sở cai nghiện bắt buộc, một tuần một lần, mỗi lần không quá 02 giờ và tối đa không quá 03 thân nhân. Trường hợp gặp lâu hơn phải được Giám đốc cơ sở cai nghiện bắt buộc đồng ý và tối đa không quá 04 giờ.Người cai nghiện có vợ hoặc chồng, được Giám đốc cơ sở cai nghiện bắt buộc xem xét, cho phép thăm gặp tại phòng riêng của cơ sở cai nghiện bắt buộc một lần trong tháng và tối đa không quá 48 giờ cho một lần gặp. Căn cứ quy mô và điều kiện, cơ sở cai nghiện xây dựng, tổ chức phòng riêng để học viên thăm gặp vợ hoặc chồng.<br><br>2. Cơ sở cai nghiện xây dựng quy chế thăm gặp theo theo hướng dẫn của Bộ trưởng Bộ Lao động - Thương binh và Xã hội.<br><br>3. Người cai nghiện được nhận và gửi thư, nhận tiền, quà (trừ rượu, bia, thuốc lá, các chất kích thích, đồ vật và các loại văn hóa phẩm bị cấm). Cơ sở cai nghiện có trách nhiệm kiểm tra thư và các loại quà trước khi trao cho người cai nghiện. Riêng tiền hoặc giấy tờ có giá, người cai...</code> | <code>1.0</code> |
|
415 |
+
* Loss: [<code>MultipleNegativesRankingLoss</code>](https://sbert.net/docs/package_reference/sentence_transformer/losses.html#multiplenegativesrankingloss) with these parameters:
|
416 |
+
```json
|
417 |
+
{
|
418 |
+
"scale": 20.0,
|
419 |
+
"similarity_fct": "cos_sim"
|
420 |
+
}
|
421 |
+
```
|
422 |
+
|
423 |
+
### Training Hyperparameters
|
424 |
+
#### Non-Default Hyperparameters
|
425 |
+
|
426 |
+
- `per_device_train_batch_size`: 24
|
427 |
+
- `per_device_eval_batch_size`: 24
|
428 |
+
- `num_train_epochs`: 30
|
429 |
+
- `fp16`: True
|
430 |
+
- `multi_dataset_batch_sampler`: round_robin
|
431 |
+
|
432 |
+
#### All Hyperparameters
|
433 |
+
<details><summary>Click to expand</summary>
|
434 |
+
|
435 |
+
- `overwrite_output_dir`: False
|
436 |
+
- `do_predict`: False
|
437 |
+
- `eval_strategy`: no
|
438 |
+
- `prediction_loss_only`: True
|
439 |
+
- `per_device_train_batch_size`: 24
|
440 |
+
- `per_device_eval_batch_size`: 24
|
441 |
+
- `per_gpu_train_batch_size`: None
|
442 |
+
- `per_gpu_eval_batch_size`: None
|
443 |
+
- `gradient_accumulation_steps`: 1
|
444 |
+
- `eval_accumulation_steps`: None
|
445 |
+
- `torch_empty_cache_steps`: None
|
446 |
+
- `learning_rate`: 5e-05
|
447 |
+
- `weight_decay`: 0.0
|
448 |
+
- `adam_beta1`: 0.9
|
449 |
+
- `adam_beta2`: 0.999
|
450 |
+
- `adam_epsilon`: 1e-08
|
451 |
+
- `max_grad_norm`: 1
|
452 |
+
- `num_train_epochs`: 30
|
453 |
+
- `max_steps`: -1
|
454 |
+
- `lr_scheduler_type`: linear
|
455 |
+
- `lr_scheduler_kwargs`: {}
|
456 |
+
- `warmup_ratio`: 0.0
|
457 |
+
- `warmup_steps`: 0
|
458 |
+
- `log_level`: passive
|
459 |
+
- `log_level_replica`: warning
|
460 |
+
- `log_on_each_node`: True
|
461 |
+
- `logging_nan_inf_filter`: True
|
462 |
+
- `save_safetensors`: True
|
463 |
+
- `save_on_each_node`: False
|
464 |
+
- `save_only_model`: False
|
465 |
+
- `restore_callback_states_from_checkpoint`: False
|
466 |
+
- `no_cuda`: False
|
467 |
+
- `use_cpu`: False
|
468 |
+
- `use_mps_device`: False
|
469 |
+
- `seed`: 42
|
470 |
+
- `data_seed`: None
|
471 |
+
- `jit_mode_eval`: False
|
472 |
+
- `use_ipex`: False
|
473 |
+
- `bf16`: False
|
474 |
+
- `fp16`: True
|
475 |
+
- `fp16_opt_level`: O1
|
476 |
+
- `half_precision_backend`: auto
|
477 |
+
- `bf16_full_eval`: False
|
478 |
+
- `fp16_full_eval`: False
|
479 |
+
- `tf32`: None
|
480 |
+
- `local_rank`: 0
|
481 |
+
- `ddp_backend`: None
|
482 |
+
- `tpu_num_cores`: None
|
483 |
+
- `tpu_metrics_debug`: False
|
484 |
+
- `debug`: []
|
485 |
+
- `dataloader_drop_last`: False
|
486 |
+
- `dataloader_num_workers`: 0
|
487 |
+
- `dataloader_prefetch_factor`: None
|
488 |
+
- `past_index`: -1
|
489 |
+
- `disable_tqdm`: False
|
490 |
+
- `remove_unused_columns`: True
|
491 |
+
- `label_names`: None
|
492 |
+
- `load_best_model_at_end`: False
|
493 |
+
- `ignore_data_skip`: False
|
494 |
+
- `fsdp`: []
|
495 |
+
- `fsdp_min_num_params`: 0
|
496 |
+
- `fsdp_config`: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
|
497 |
+
- `fsdp_transformer_layer_cls_to_wrap`: None
|
498 |
+
- `accelerator_config`: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
|
499 |
+
- `deepspeed`: None
|
500 |
+
- `label_smoothing_factor`: 0.0
|
501 |
+
- `optim`: adamw_torch
|
502 |
+
- `optim_args`: None
|
503 |
+
- `adafactor`: False
|
504 |
+
- `group_by_length`: False
|
505 |
+
- `length_column_name`: length
|
506 |
+
- `ddp_find_unused_parameters`: None
|
507 |
+
- `ddp_bucket_cap_mb`: None
|
508 |
+
- `ddp_broadcast_buffers`: False
|
509 |
+
- `dataloader_pin_memory`: True
|
510 |
+
- `dataloader_persistent_workers`: False
|
511 |
+
- `skip_memory_metrics`: True
|
512 |
+
- `use_legacy_prediction_loop`: False
|
513 |
+
- `push_to_hub`: False
|
514 |
+
- `resume_from_checkpoint`: None
|
515 |
+
- `hub_model_id`: None
|
516 |
+
- `hub_strategy`: every_save
|
517 |
+
- `hub_private_repo`: None
|
518 |
+
- `hub_always_push`: False
|
519 |
+
- `hub_revision`: None
|
520 |
+
- `gradient_checkpointing`: False
|
521 |
+
- `gradient_checkpointing_kwargs`: None
|
522 |
+
- `include_inputs_for_metrics`: False
|
523 |
+
- `include_for_metrics`: []
|
524 |
+
- `eval_do_concat_batches`: True
|
525 |
+
- `fp16_backend`: auto
|
526 |
+
- `push_to_hub_model_id`: None
|
527 |
+
- `push_to_hub_organization`: None
|
528 |
+
- `mp_parameters`:
|
529 |
+
- `auto_find_batch_size`: False
|
530 |
+
- `full_determinism`: False
|
531 |
+
- `torchdynamo`: None
|
532 |
+
- `ray_scope`: last
|
533 |
+
- `ddp_timeout`: 1800
|
534 |
+
- `torch_compile`: False
|
535 |
+
- `torch_compile_backend`: None
|
536 |
+
- `torch_compile_mode`: None
|
537 |
+
- `include_tokens_per_second`: False
|
538 |
+
- `include_num_input_tokens_seen`: False
|
539 |
+
- `neftune_noise_alpha`: None
|
540 |
+
- `optim_target_modules`: None
|
541 |
+
- `batch_eval_metrics`: False
|
542 |
+
- `eval_on_start`: False
|
543 |
+
- `use_liger_kernel`: False
|
544 |
+
- `liger_kernel_config`: None
|
545 |
+
- `eval_use_gather_object`: False
|
546 |
+
- `average_tokens_across_devices`: False
|
547 |
+
- `prompts`: None
|
548 |
+
- `batch_sampler`: batch_sampler
|
549 |
+
- `multi_dataset_batch_sampler`: round_robin
|
550 |
+
- `router_mapping`: {}
|
551 |
+
- `learning_rate_mapping`: {}
|
552 |
+
|
553 |
+
</details>
|
554 |
+
|
555 |
+
### Training Logs
|
556 |
+
| Epoch | Step | Training Loss |
|
557 |
+
|:-------:|:----:|:-------------:|
|
558 |
+
| 8.3333 | 500 | 0.0984 |
|
559 |
+
| 16.6667 | 1000 | 0.0354 |
|
560 |
+
| 25.0 | 1500 | 0.0288 |
|
561 |
+
|
562 |
+
|
563 |
+
### Framework Versions
|
564 |
+
- Python: 3.10.12
|
565 |
+
- Sentence Transformers: 5.0.0
|
566 |
+
- Transformers: 4.54.0
|
567 |
+
- PyTorch: 2.7.1+cu126
|
568 |
+
- Accelerate: 1.9.0
|
569 |
+
- Datasets: 4.0.0
|
570 |
+
- Tokenizers: 0.21.2
|
571 |
+
|
572 |
+
## Citation
|
573 |
+
|
574 |
+
### BibTeX
|
575 |
+
|
576 |
+
#### Sentence Transformers
|
577 |
+
```bibtex
|
578 |
+
@inproceedings{reimers-2019-sentence-bert,
|
579 |
+
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
|
580 |
+
author = "Reimers, Nils and Gurevych, Iryna",
|
581 |
+
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
|
582 |
+
month = "11",
|
583 |
+
year = "2019",
|
584 |
+
publisher = "Association for Computational Linguistics",
|
585 |
+
url = "https://arxiv.org/abs/1908.10084",
|
586 |
+
}
|
587 |
+
```
|
588 |
+
|
589 |
+
#### MultipleNegativesRankingLoss
|
590 |
+
```bibtex
|
591 |
+
@misc{henderson2017efficient,
|
592 |
+
title={Efficient Natural Language Response Suggestion for Smart Reply},
|
593 |
+
author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
|
594 |
+
year={2017},
|
595 |
+
eprint={1705.00652},
|
596 |
+
archivePrefix={arXiv},
|
597 |
+
primaryClass={cs.CL}
|
598 |
+
}
|
599 |
+
```
|
600 |
+
|
601 |
+
<!--
|
602 |
+
## Glossary
|
603 |
+
|
604 |
+
*Clearly define terms in order to be accessible across audiences.*
|
605 |
+
-->
|
606 |
+
|
607 |
+
<!--
|
608 |
+
## Model Card Authors
|
609 |
+
|
610 |
+
*Lists the people who create the model card, providing recognition and accountability for the detailed work that goes into its construction.*
|
611 |
+
-->
|
612 |
+
|
613 |
+
<!--
|
614 |
+
## Model Card Contact
|
615 |
+
|
616 |
+
*Provides a way for people who have updates to the Model Card, suggestions, or questions, to contact the Model Card authors.*
|
617 |
+
-->
|
config.json
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"architectures": [
|
3 |
+
"NewModel"
|
4 |
+
],
|
5 |
+
"attention_probs_dropout_prob": 0.0,
|
6 |
+
"auto_map": {
|
7 |
+
"AutoConfig": "configuration.NewConfig",
|
8 |
+
"AutoModel": "modeling.NewModel",
|
9 |
+
"AutoModelForMaskedLM": "Alibaba-NLP/new-impl--modeling.NewForMaskedLM",
|
10 |
+
"AutoModelForMultipleChoice": "Alibaba-NLP/new-impl--modeling.NewForMultipleChoice",
|
11 |
+
"AutoModelForQuestionAnswering": "Alibaba-NLP/new-impl--modeling.NewForQuestionAnswering",
|
12 |
+
"AutoModelForSequenceClassification": "Alibaba-NLP/new-impl--modeling.NewForSequenceClassification",
|
13 |
+
"AutoModelForTokenClassification": "Alibaba-NLP/new-impl--modeling.NewForTokenClassification"
|
14 |
+
},
|
15 |
+
"classifier_dropout": 0.0,
|
16 |
+
"hidden_act": "gelu",
|
17 |
+
"hidden_dropout_prob": 0.1,
|
18 |
+
"hidden_size": 768,
|
19 |
+
"id2label": {
|
20 |
+
"0": "LABEL_0"
|
21 |
+
},
|
22 |
+
"initializer_range": 0.02,
|
23 |
+
"intermediate_size": 3072,
|
24 |
+
"label2id": {
|
25 |
+
"LABEL_0": 0
|
26 |
+
},
|
27 |
+
"layer_norm_eps": 1e-12,
|
28 |
+
"layer_norm_type": "layer_norm",
|
29 |
+
"logn_attention_clip1": false,
|
30 |
+
"logn_attention_scale": false,
|
31 |
+
"max_position_embeddings": 8192,
|
32 |
+
"model_type": "new",
|
33 |
+
"num_attention_heads": 12,
|
34 |
+
"num_hidden_layers": 12,
|
35 |
+
"pack_qkv": true,
|
36 |
+
"pad_token_id": 1,
|
37 |
+
"position_embedding_type": "rope",
|
38 |
+
"rope_scaling": {
|
39 |
+
"factor": 8.0,
|
40 |
+
"type": "ntk"
|
41 |
+
},
|
42 |
+
"rope_theta": 20000,
|
43 |
+
"torch_dtype": "float32",
|
44 |
+
"transformers_version": "4.54.0",
|
45 |
+
"type_vocab_size": 1,
|
46 |
+
"unpad_inputs": false,
|
47 |
+
"use_memory_efficient_attention": false,
|
48 |
+
"vocab_size": 250048
|
49 |
+
}
|
config_sentence_transformers.json
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"model_type": "SentenceTransformer",
|
3 |
+
"__version__": {
|
4 |
+
"sentence_transformers": "5.0.0",
|
5 |
+
"transformers": "4.54.0",
|
6 |
+
"pytorch": "2.7.1+cu126"
|
7 |
+
},
|
8 |
+
"prompts": {
|
9 |
+
"query": "",
|
10 |
+
"document": ""
|
11 |
+
},
|
12 |
+
"default_prompt_name": null,
|
13 |
+
"similarity_fn_name": "cosine"
|
14 |
+
}
|
configuration.py
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# coding=utf-8
|
2 |
+
# Copyright 2024 The GTE Team Authors and Alibaba Group.
|
3 |
+
# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
|
4 |
+
#
|
5 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
# you may not use this file except in compliance with the License.
|
7 |
+
# You may obtain a copy of the License at
|
8 |
+
#
|
9 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10 |
+
#
|
11 |
+
# Unless required by applicable law or agreed to in writing, software
|
12 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
# See the License for the specific language governing permissions and
|
15 |
+
# limitations under the License.
|
16 |
+
""" NEW model configuration"""
|
17 |
+
from transformers.configuration_utils import PretrainedConfig
|
18 |
+
from transformers.utils import logging
|
19 |
+
|
20 |
+
logger = logging.get_logger(__name__)
|
21 |
+
|
22 |
+
|
23 |
+
class NewConfig(PretrainedConfig):
|
24 |
+
r"""
|
25 |
+
This is the configuration class to store the configuration of a [`NewModel`] or a [`TFNewModel`]. It is used to
|
26 |
+
instantiate a NEW model according to the specified arguments, defining the model architecture. Instantiating a
|
27 |
+
configuration with the defaults will yield a similar configuration to that of the NEW
|
28 |
+
[izhx/new-base-en](https://huggingface.co/izhx/new-base-en) architecture.
|
29 |
+
|
30 |
+
Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the
|
31 |
+
documentation from [`PretrainedConfig`] for more information.
|
32 |
+
|
33 |
+
|
34 |
+
Args:
|
35 |
+
vocab_size (`int`, *optional*, defaults to 30522):
|
36 |
+
Vocabulary size of the NEW model. Defines the number of different tokens that can be represented by the
|
37 |
+
`inputs_ids` passed when calling [`NewModel`] or [`TFNewModel`].
|
38 |
+
hidden_size (`int`, *optional*, defaults to 768):
|
39 |
+
Dimensionality of the encoder layers and the pooler layer.
|
40 |
+
num_hidden_layers (`int`, *optional*, defaults to 12):
|
41 |
+
Number of hidden layers in the Transformer encoder.
|
42 |
+
num_attention_heads (`int`, *optional*, defaults to 12):
|
43 |
+
Number of attention heads for each attention layer in the Transformer encoder.
|
44 |
+
intermediate_size (`int`, *optional*, defaults to 3072):
|
45 |
+
Dimensionality of the "intermediate" (often named feed-forward) layer in the Transformer encoder.
|
46 |
+
hidden_act (`str` or `Callable`, *optional*, defaults to `"gelu"`):
|
47 |
+
The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`,
|
48 |
+
`"relu"`, `"silu"` and `"gelu_new"` are supported.
|
49 |
+
hidden_dropout_prob (`float`, *optional*, defaults to 0.1):
|
50 |
+
The dropout probability for all fully connected layers in the embeddings, encoder, and pooler.
|
51 |
+
attention_probs_dropout_prob (`float`, *optional*, defaults to 0.1):
|
52 |
+
The dropout ratio for the attention probabilities.
|
53 |
+
max_position_embeddings (`int`, *optional*, defaults to 512):
|
54 |
+
The maximum sequence length that this model might ever be used with. Typically set this to something large
|
55 |
+
just in case (e.g., 512 or 1024 or 2048).
|
56 |
+
type_vocab_size (`int`, *optional*, defaults to 2):
|
57 |
+
The vocabulary size of the `token_type_ids` passed when calling [`NewModel`] or [`TFNewModel`].
|
58 |
+
initializer_range (`float`, *optional*, defaults to 0.02):
|
59 |
+
The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
|
60 |
+
layer_norm_eps (`float`, *optional*, defaults to 1e-12):
|
61 |
+
The epsilon used by the layer normalization layers.
|
62 |
+
position_embedding_type (`str`, *optional*, defaults to `"rope"`):
|
63 |
+
Type of position embedding. Choose one of `"absolute"`, `"rope"`.
|
64 |
+
rope_theta (`float`, *optional*, defaults to 10000.0):
|
65 |
+
The base period of the RoPE embeddings.
|
66 |
+
rope_scaling (`Dict`, *optional*):
|
67 |
+
Dictionary containing the scaling configuration for the RoPE embeddings. Currently supports two scaling
|
68 |
+
strategies: linear and dynamic. Their scaling factor must be a float greater than 1. The expected format is
|
69 |
+
`{"type": strategy name, "factor": scaling factor}`. When using this flag, don't update
|
70 |
+
`max_position_embeddings` to the expected new maximum. See the following thread for more information on how
|
71 |
+
these scaling strategies behave:
|
72 |
+
https://www.reddit.com/r/LocalLLaMA/comments/14mrgpr/dynamically_scaled_rope_further_increases/. This is an
|
73 |
+
experimental feature, subject to breaking API changes in future versions.
|
74 |
+
classifier_dropout (`float`, *optional*):
|
75 |
+
The dropout ratio for the classification head.
|
76 |
+
|
77 |
+
Examples:
|
78 |
+
|
79 |
+
```python
|
80 |
+
>>> from transformers import NewConfig, NewModel
|
81 |
+
|
82 |
+
>>> # Initializing a NEW izhx/new-base-en style configuration
|
83 |
+
>>> configuration = NewConfig()
|
84 |
+
|
85 |
+
>>> # Initializing a model (with random weights) from the izhx/new-base-en style configuration
|
86 |
+
>>> model = NewModel(configuration)
|
87 |
+
|
88 |
+
>>> # Accessing the model configuration
|
89 |
+
>>> configuration = model.config
|
90 |
+
```"""
|
91 |
+
|
92 |
+
model_type = "new"
|
93 |
+
|
94 |
+
def __init__(
|
95 |
+
self,
|
96 |
+
vocab_size=30528,
|
97 |
+
hidden_size=768,
|
98 |
+
num_hidden_layers=12,
|
99 |
+
num_attention_heads=12,
|
100 |
+
intermediate_size=3072,
|
101 |
+
hidden_act="gelu",
|
102 |
+
hidden_dropout_prob=0.1,
|
103 |
+
attention_probs_dropout_prob=0.0,
|
104 |
+
max_position_embeddings=2048,
|
105 |
+
type_vocab_size=1,
|
106 |
+
initializer_range=0.02,
|
107 |
+
layer_norm_type='layer_norm',
|
108 |
+
layer_norm_eps=1e-12,
|
109 |
+
# pad_token_id=0,
|
110 |
+
position_embedding_type="rope",
|
111 |
+
rope_theta=10000.0,
|
112 |
+
rope_scaling=None,
|
113 |
+
classifier_dropout=None,
|
114 |
+
pack_qkv=True,
|
115 |
+
unpad_inputs=False,
|
116 |
+
use_memory_efficient_attention=False,
|
117 |
+
logn_attention_scale=False,
|
118 |
+
logn_attention_clip1=False,
|
119 |
+
**kwargs,
|
120 |
+
):
|
121 |
+
super().__init__(**kwargs)
|
122 |
+
|
123 |
+
self.vocab_size = vocab_size
|
124 |
+
self.hidden_size = hidden_size
|
125 |
+
self.num_hidden_layers = num_hidden_layers
|
126 |
+
self.num_attention_heads = num_attention_heads
|
127 |
+
self.hidden_act = hidden_act
|
128 |
+
self.intermediate_size = intermediate_size
|
129 |
+
self.hidden_dropout_prob = hidden_dropout_prob
|
130 |
+
self.attention_probs_dropout_prob = attention_probs_dropout_prob
|
131 |
+
self.max_position_embeddings = max_position_embeddings
|
132 |
+
self.type_vocab_size = type_vocab_size
|
133 |
+
self.initializer_range = initializer_range
|
134 |
+
self.layer_norm_type = layer_norm_type
|
135 |
+
self.layer_norm_eps = layer_norm_eps
|
136 |
+
self.position_embedding_type = position_embedding_type
|
137 |
+
self.rope_theta = rope_theta
|
138 |
+
self.rope_scaling = rope_scaling
|
139 |
+
self.classifier_dropout = classifier_dropout
|
140 |
+
|
141 |
+
self.pack_qkv = pack_qkv
|
142 |
+
self.unpad_inputs = unpad_inputs
|
143 |
+
self.use_memory_efficient_attention = use_memory_efficient_attention
|
144 |
+
self.logn_attention_scale = logn_attention_scale
|
145 |
+
self.logn_attention_clip1 = logn_attention_clip1
|
model.safetensors
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:4f0d0e530ea4cbccece8e1b744037b4f90de1e4e374707180b184052b04d641e
|
3 |
+
size 1221487872
|
modeling.py
ADDED
@@ -0,0 +1,1418 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# coding=utf-8
|
2 |
+
# Copyright 2024 The GTE Team Authors and Alibaba Group.
|
3 |
+
# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
|
4 |
+
#
|
5 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6 |
+
# you may not use this file except in compliance with the License.
|
7 |
+
# You may obtain a copy of the License at
|
8 |
+
#
|
9 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10 |
+
#
|
11 |
+
# Unless required by applicable law or agreed to in writing, software
|
12 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14 |
+
# See the License for the specific language governing permissions and
|
15 |
+
# limitations under the License.
|
16 |
+
"""PyTorch NEW model."""
|
17 |
+
|
18 |
+
import math
|
19 |
+
from dataclasses import dataclass
|
20 |
+
from typing import List, Optional, Tuple, Union
|
21 |
+
|
22 |
+
import torch
|
23 |
+
import torch.utils.checkpoint
|
24 |
+
from torch import nn
|
25 |
+
|
26 |
+
from transformers.activations import ACT2FN
|
27 |
+
from transformers.modeling_outputs import (
|
28 |
+
BaseModelOutput,
|
29 |
+
BaseModelOutputWithPooling,
|
30 |
+
MaskedLMOutput,
|
31 |
+
MultipleChoiceModelOutput,
|
32 |
+
QuestionAnsweringModelOutput,
|
33 |
+
SequenceClassifierOutput,
|
34 |
+
ModelOutput,
|
35 |
+
)
|
36 |
+
from transformers.modeling_utils import PreTrainedModel
|
37 |
+
from transformers.utils import logging
|
38 |
+
|
39 |
+
try:
|
40 |
+
import xformers.ops as xops
|
41 |
+
except ImportError as e:
|
42 |
+
xops = None
|
43 |
+
|
44 |
+
from .configuration import NewConfig
|
45 |
+
|
46 |
+
|
47 |
+
logger = logging.get_logger(__name__)
|
48 |
+
|
49 |
+
|
50 |
+
# Adapted from https://github.com/HazyResearch/flash-attention/blob/main/flash_attn/bert_padding.py
|
51 |
+
# Which was adapted from https://github.com/mlcommons/training_results_v1.1/blob/main/NVIDIA/benchmarks/bert/implementations/pytorch/padding.py
|
52 |
+
class IndexFirstAxis(torch.autograd.Function):
|
53 |
+
@staticmethod
|
54 |
+
def forward(ctx, input, indices):
|
55 |
+
ctx.save_for_backward(indices)
|
56 |
+
assert input.ndim >= 2
|
57 |
+
ctx.first_axis_dim, other_shape = input.shape[0], input.shape[1:]
|
58 |
+
second_dim = other_shape.numel()
|
59 |
+
# TD [2022-03-04] For some reason torch.gather is a bit faster than indexing.
|
60 |
+
# return input[indices]
|
61 |
+
# return torch.gather(
|
62 |
+
# rearrange(input, "b ... -> b (...)"), 0, repeat(indices, "z -> z d", d=second_dim)
|
63 |
+
# ).reshape(-1, *other_shape)
|
64 |
+
return torch.gather(
|
65 |
+
input.view(ctx.first_axis_dim, second_dim),
|
66 |
+
0,
|
67 |
+
indices.unsqueeze(-1).expand(indices.size(0), second_dim)
|
68 |
+
).reshape(-1, *other_shape)
|
69 |
+
|
70 |
+
@staticmethod
|
71 |
+
def backward(ctx, grad_output):
|
72 |
+
(indices,) = ctx.saved_tensors
|
73 |
+
assert grad_output.ndim >= 2
|
74 |
+
other_shape = grad_output.shape[1:]
|
75 |
+
# grad_output = rearrange(grad_output, "b ... -> b (...)")
|
76 |
+
grad_output = grad_output.view(grad_output.size(0), other_shape.numel())
|
77 |
+
grad_input = torch.zeros(
|
78 |
+
[ctx.first_axis_dim, grad_output.shape[1]],
|
79 |
+
device=grad_output.device,
|
80 |
+
dtype=grad_output.dtype,
|
81 |
+
)
|
82 |
+
# TD [2022-03-04] For some reason torch.scatter is a bit faster than indexing.
|
83 |
+
# grad_input[indices] = grad_output
|
84 |
+
# grad_input.scatter_(0, repeat(indices, "z -> z d", d=grad_output.shape[1]), grad_output)
|
85 |
+
grad_input.scatter_(
|
86 |
+
0, indices.unsqueeze(-1).expand(indices.size(0), grad_output.size(1)), grad_output
|
87 |
+
)
|
88 |
+
return grad_input.reshape(ctx.first_axis_dim, *other_shape), None
|
89 |
+
|
90 |
+
|
91 |
+
index_first_axis = IndexFirstAxis.apply
|
92 |
+
|
93 |
+
|
94 |
+
def unpad_input(hidden_states, attention_mask=None, indices=None):
|
95 |
+
"""
|
96 |
+
Arguments:
|
97 |
+
hidden_states: (batch, seqlen, ...)
|
98 |
+
attention_mask: (batch, seqlen), bool / int, 1 means valid and 0 means not valid.
|
99 |
+
indices: (total_nnz), the indices of non-masked tokens from the flattened input sequence.
|
100 |
+
Return:
|
101 |
+
hidden_states: (total_nnz, ...), where total_nnz = number of tokens in selected in attention_mask.
|
102 |
+
"""
|
103 |
+
if indices is None:
|
104 |
+
assert attention_mask is not None
|
105 |
+
indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()
|
106 |
+
|
107 |
+
# TD [2022-03-04] We don't want to index with a bool mask, because Pytorch will expand the
|
108 |
+
# bool mask, then call nonzero to get the indices, then index with those. The indices is @dim
|
109 |
+
# times larger than it needs to be, wasting memory. It's faster and more memory-efficient to
|
110 |
+
# index with integer indices. Moreover, torch's index is a bit slower than it needs to be,
|
111 |
+
# so we write custom forward and backward to make it a bit faster.
|
112 |
+
hidden_states = hidden_states.view(-1, *hidden_states.shape[2:])
|
113 |
+
return index_first_axis(hidden_states, indices)
|
114 |
+
|
115 |
+
|
116 |
+
class IndexPutFirstAxis(torch.autograd.Function):
|
117 |
+
@staticmethod
|
118 |
+
def forward(
|
119 |
+
ctx,
|
120 |
+
values: torch.Tensor,
|
121 |
+
indices: torch.Tensor,
|
122 |
+
first_axis_dim
|
123 |
+
) -> torch.Tensor:
|
124 |
+
ctx.save_for_backward(indices)
|
125 |
+
assert indices.ndim == 1
|
126 |
+
assert values.ndim >= 2
|
127 |
+
output = torch.zeros(
|
128 |
+
first_axis_dim, *values.shape[1:], device=values.device, dtype=values.dtype
|
129 |
+
)
|
130 |
+
output[indices] = values
|
131 |
+
return output
|
132 |
+
|
133 |
+
@staticmethod
|
134 |
+
def backward(ctx, grad_output: torch.Tensor) -> Tuple[torch.Tensor, None, None]:
|
135 |
+
indices, = ctx.saved_tensors
|
136 |
+
grad_values = grad_output[indices]
|
137 |
+
return grad_values, None, None
|
138 |
+
|
139 |
+
|
140 |
+
index_put_first_axis = IndexPutFirstAxis.apply
|
141 |
+
|
142 |
+
|
143 |
+
def pad_input(inputs: torch.Tensor, indices: torch.Tensor, batch: int, seqlen: int) -> torch.Tensor:
|
144 |
+
"""Add padding to sequences.
|
145 |
+
|
146 |
+
Arguments:
|
147 |
+
inputs: (total_nnz, ...), where total_nnz = number of tokens in selected in attention_mask.
|
148 |
+
indices: (total_nnz), `indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()`
|
149 |
+
batch: int batch_size
|
150 |
+
seqlen: int max sequence length
|
151 |
+
|
152 |
+
Returns:
|
153 |
+
inputs: (batch, seqlen, ...)
|
154 |
+
"""
|
155 |
+
output = index_put_first_axis(inputs, indices, batch * seqlen)
|
156 |
+
return output.view(batch, seqlen, *inputs.shape[1:])
|
157 |
+
|
158 |
+
|
159 |
+
def rotate_half(x):
|
160 |
+
"""Rotates half the hidden dims of the input."""
|
161 |
+
x1 = x[..., : x.shape[-1] // 2]
|
162 |
+
x2 = x[..., x.shape[-1] // 2 :]
|
163 |
+
return torch.cat((-x2, x1), dim=-1)
|
164 |
+
|
165 |
+
|
166 |
+
def apply_rotary_pos_emb(q, k, cos, sin):
|
167 |
+
"""Applies Rotary Position Embedding to the query and key tensors.
|
168 |
+
|
169 |
+
Args:
|
170 |
+
q (`torch.Tensor`): The query tensor.
|
171 |
+
k (`torch.Tensor`): The key tensor.
|
172 |
+
cos (`torch.Tensor`): The cosine part of the rotary embedding.
|
173 |
+
sin (`torch.Tensor`): The sine part of the rotary embedding.
|
174 |
+
Returns:
|
175 |
+
`tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
|
176 |
+
"""
|
177 |
+
cos, sin = cos.to(q.dtype), sin.to(q.dtype)
|
178 |
+
q_embed = (q * cos) + (rotate_half(q) * sin)
|
179 |
+
k_embed = (k * cos) + (rotate_half(k) * sin)
|
180 |
+
return q_embed, k_embed
|
181 |
+
|
182 |
+
|
183 |
+
class RotaryEmbedding(torch.nn.Module):
|
184 |
+
def __init__(self, dim, max_position_embeddings=512, base=10000.0, device=None):
|
185 |
+
super().__init__()
|
186 |
+
|
187 |
+
self.dim = dim
|
188 |
+
self.max_position_embeddings = max_position_embeddings
|
189 |
+
self.base = base
|
190 |
+
inv_freq = 1.0 / (self.base ** (torch.arange(0, self.dim, 2).float().to(device) / self.dim))
|
191 |
+
self.register_buffer("inv_freq", inv_freq, persistent=False)
|
192 |
+
|
193 |
+
# Build here to make `torch.jit.trace` work.
|
194 |
+
self._set_cos_sin_cache(
|
195 |
+
seq_len=max_position_embeddings, device=self.inv_freq.device, dtype=torch.get_default_dtype()
|
196 |
+
)
|
197 |
+
|
198 |
+
def _set_cos_sin_cache(self, seq_len, device, dtype):
|
199 |
+
self.max_seq_len_cached = seq_len
|
200 |
+
t = torch.arange(self.max_seq_len_cached, device=device, dtype=torch.float32)
|
201 |
+
|
202 |
+
freqs = torch.einsum("i,j->ij", t, self.inv_freq)
|
203 |
+
# Different from paper, but it uses a different permutation in order to obtain the same calculation
|
204 |
+
emb = torch.cat((freqs, freqs), dim=-1)
|
205 |
+
self.register_buffer("cos_cached", emb.cos().to(dtype), persistent=False)
|
206 |
+
self.register_buffer("sin_cached", emb.sin().to(dtype), persistent=False)
|
207 |
+
|
208 |
+
def forward(self, x, seq_len=None):
|
209 |
+
# x: [bs, num_attention_heads, seq_len, head_size]
|
210 |
+
if seq_len > self.max_seq_len_cached:
|
211 |
+
self._set_cos_sin_cache(seq_len=seq_len, device=x.device, dtype=x.dtype)
|
212 |
+
|
213 |
+
return (
|
214 |
+
self.cos_cached[:seq_len, ...].to(dtype=x.dtype),
|
215 |
+
self.sin_cached[:seq_len, ...].to(dtype=x.dtype),
|
216 |
+
)
|
217 |
+
|
218 |
+
|
219 |
+
class NTKScalingRotaryEmbedding(RotaryEmbedding):
|
220 |
+
"""RotaryEmbedding extended with fixed and mixed NTK scaling. https://kexue.fm/archives/9706 """
|
221 |
+
|
222 |
+
def __init__(self, dim, max_position_embeddings=512, base=10000, device=None, scaling_factor=1.0, mixed_b=None):
|
223 |
+
self.scaling_factor = scaling_factor
|
224 |
+
self.mixed_b = mixed_b
|
225 |
+
super().__init__(dim, max_position_embeddings, base, device)
|
226 |
+
max_position_embeddings = max_position_embeddings * self.scaling_factor
|
227 |
+
self._set_cos_sin_cache(max_position_embeddings, self.inv_freq.device, torch.get_default_dtype())
|
228 |
+
|
229 |
+
def _set_cos_sin_cache(self, seq_len, device, dtype):
|
230 |
+
self.max_seq_len_cached = seq_len
|
231 |
+
|
232 |
+
if seq_len > self.max_position_embeddings:
|
233 |
+
base = self.base * (self.scaling_factor if self.mixed_b is None else 1)
|
234 |
+
inv_freq = 1.0 / (base ** (torch.arange(0, self.dim, 2).float().to(device) / self.dim))
|
235 |
+
|
236 |
+
if self.mixed_b is None:
|
237 |
+
inv_freq = inv_freq / self.scaling_factor ** (2 / self.dim) # (6)
|
238 |
+
else:
|
239 |
+
a = torch.tensor(self.scaling_factor).log() / (self.dim / 2) ** self.mixed_b # (13)
|
240 |
+
lambda_1_m = (a * torch.arange(1, self.dim // 2 + 1).float().to(device) ** self.mixed_b).exp() # (12)
|
241 |
+
inv_freq = inv_freq / lambda_1_m # (10)
|
242 |
+
|
243 |
+
self.register_buffer("inv_freq", inv_freq, persistent=False)
|
244 |
+
|
245 |
+
t = torch.arange(self.max_seq_len_cached, device=device, dtype=torch.float32)
|
246 |
+
|
247 |
+
freqs = torch.einsum("i,j->ij", t, self.inv_freq)
|
248 |
+
# Different from paper, but it uses a different permutation in order to obtain the same calculation
|
249 |
+
emb = torch.cat((freqs, freqs), dim=-1)
|
250 |
+
self.register_buffer("cos_cached", emb.cos().to(dtype), persistent=False)
|
251 |
+
self.register_buffer("sin_cached", emb.sin().to(dtype), persistent=False)
|
252 |
+
|
253 |
+
|
254 |
+
class RMSNorm(nn.Module):
|
255 |
+
def __init__(self, hidden_size, eps=1e-6):
|
256 |
+
"""
|
257 |
+
RMSNorm is equivalent to T5LayerNorm
|
258 |
+
"""
|
259 |
+
super().__init__()
|
260 |
+
self.weight = nn.Parameter(torch.ones(hidden_size))
|
261 |
+
self.variance_epsilon = eps
|
262 |
+
|
263 |
+
def forward(self, hidden_states):
|
264 |
+
input_dtype = hidden_states.dtype
|
265 |
+
hidden_states = hidden_states.to(torch.float32)
|
266 |
+
variance = hidden_states.pow(2).mean(-1, keepdim=True)
|
267 |
+
hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
|
268 |
+
return self.weight * hidden_states.to(input_dtype)
|
269 |
+
|
270 |
+
|
271 |
+
LAYER_NORM = {
|
272 |
+
'layer_norm': nn.LayerNorm,
|
273 |
+
'rms_norm': RMSNorm
|
274 |
+
}
|
275 |
+
|
276 |
+
|
277 |
+
class NewEmbeddings(nn.Module):
|
278 |
+
"""
|
279 |
+
Embedding and Unpadding.
|
280 |
+
"""
|
281 |
+
|
282 |
+
def __init__(self, config: NewConfig):
|
283 |
+
super().__init__()
|
284 |
+
self.padding_idx = config.pad_token_id
|
285 |
+
self.word_embeddings = nn.Embedding(
|
286 |
+
config.vocab_size, config.hidden_size, padding_idx=self.padding_idx
|
287 |
+
)
|
288 |
+
|
289 |
+
self.position_embedding_type = config.position_embedding_type
|
290 |
+
if self.position_embedding_type == 'absolute':
|
291 |
+
self.position_embeddings = nn.Embedding(
|
292 |
+
config.max_position_embeddings, config.hidden_size, padding_idx=self.padding_idx
|
293 |
+
)
|
294 |
+
elif self.position_embedding_type == 'rope':
|
295 |
+
self._init_rope(config)
|
296 |
+
else:
|
297 |
+
raise ValueError
|
298 |
+
|
299 |
+
self.type_vocab_size = config.type_vocab_size
|
300 |
+
if self.type_vocab_size > 0:
|
301 |
+
self.token_type_embeddings = nn.Embedding(config.type_vocab_size, config.hidden_size)
|
302 |
+
|
303 |
+
# self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load
|
304 |
+
# any TensorFlow checkpoint file
|
305 |
+
self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
|
306 |
+
self.dropout = nn.Dropout(config.hidden_dropout_prob)
|
307 |
+
# position_ids is contiguous in memory and excluded when serialized
|
308 |
+
self.register_buffer(
|
309 |
+
"position_ids", torch.arange(config.max_position_embeddings), persistent=False
|
310 |
+
)
|
311 |
+
|
312 |
+
def _init_rope(self, config):
|
313 |
+
kwargs = dict(
|
314 |
+
dim=int(config.hidden_size / config.num_attention_heads),
|
315 |
+
max_position_embeddings=config.max_position_embeddings,
|
316 |
+
base=config.rope_theta
|
317 |
+
)
|
318 |
+
if config.rope_scaling is None:
|
319 |
+
self.rotary_emb = RotaryEmbedding(**kwargs)
|
320 |
+
else:
|
321 |
+
kwargs.update(scaling_factor=config.rope_scaling["factor"])
|
322 |
+
scaling_type = config.rope_scaling["type"]
|
323 |
+
if scaling_type == 'ntk':
|
324 |
+
kwargs.update(mixed_b=config.rope_scaling.get('mixed_b', None))
|
325 |
+
self.rotary_emb = NTKScalingRotaryEmbedding(**kwargs)
|
326 |
+
# elif scaling_type == "linear":
|
327 |
+
# self.rotary_emb = LinearScalingRotaryEmbedding(**kwargs)
|
328 |
+
# elif scaling_type == "dynamic":
|
329 |
+
# self.rotary_emb = DynamicNTKScalingRotaryEmbedding(**kwargs)
|
330 |
+
else:
|
331 |
+
raise ValueError(f"Unknown RoPE scaling type {scaling_type}")
|
332 |
+
|
333 |
+
def forward(
|
334 |
+
self,
|
335 |
+
unpad_inputs: bool,
|
336 |
+
input_ids: Optional[torch.Tensor] = None,
|
337 |
+
attention_mask: Optional[torch.Tensor] = None,
|
338 |
+
length: Optional[List[int]] = None,
|
339 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
340 |
+
position_ids: Optional[torch.Tensor] = None,
|
341 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
342 |
+
) -> Tuple[torch.Tensor, torch.Tensor, Optional[Tuple], Optional[List[int]]]:
|
343 |
+
"""
|
344 |
+
"""
|
345 |
+
if inputs_embeds is None:
|
346 |
+
device, input_shape = input_ids.device, input_ids.shape
|
347 |
+
else:
|
348 |
+
device, input_shape = inputs_embeds.device, inputs_embeds.shape[:2]
|
349 |
+
batch_size, seq_length = input_shape
|
350 |
+
|
351 |
+
# Set attention_mask if it's None
|
352 |
+
if attention_mask is None:
|
353 |
+
attention_mask = torch.ones(input_shape, device=device)
|
354 |
+
if length is not None:
|
355 |
+
for i, l in enumerate(length):
|
356 |
+
attention_mask[i, l:] = 0
|
357 |
+
|
358 |
+
# Set attention_mask_bool for unpadding
|
359 |
+
if unpad_inputs:
|
360 |
+
attention_mask_bool = attention_mask.bool()
|
361 |
+
if length is None:
|
362 |
+
length = attention_mask.sum(-1).tolist()
|
363 |
+
|
364 |
+
# Get word embeddings
|
365 |
+
if inputs_embeds is None:
|
366 |
+
if unpad_inputs:
|
367 |
+
input_ids = input_ids[attention_mask_bool].unsqueeze(0)
|
368 |
+
inputs_embeds = self.word_embeddings(input_ids)
|
369 |
+
else:
|
370 |
+
if unpad_inputs:
|
371 |
+
inputs_embeds = inputs_embeds[attention_mask_bool].unsqueeze(0)
|
372 |
+
embeddings = inputs_embeds
|
373 |
+
|
374 |
+
# Set and unpad position_ids
|
375 |
+
if position_ids is None:
|
376 |
+
if seq_length > self.position_ids.size(0):
|
377 |
+
self.register_buffer(
|
378 |
+
"position_ids", torch.arange(seq_length, device=embeddings.device), persistent=False
|
379 |
+
)
|
380 |
+
if unpad_inputs:
|
381 |
+
# [1, cumsum_seq_len]
|
382 |
+
position_ids = torch.cat([self.position_ids[:l] for l in length]).unsqueeze(0)
|
383 |
+
else:
|
384 |
+
# [bs, seq_len]
|
385 |
+
position_ids = self.position_ids[:seq_length].expand(batch_size, -1)
|
386 |
+
elif unpad_inputs:
|
387 |
+
position_ids = position_ids[attention_mask_bool].unsqueeze(0) # [1, cumsum_seq_len]
|
388 |
+
|
389 |
+
# Compute rotary embedding
|
390 |
+
if self.position_embedding_type == 'rope':
|
391 |
+
rope_cos, rope_sin = self.rotary_emb(inputs_embeds, seq_len=seq_length)
|
392 |
+
rope_cos = rope_cos[position_ids].unsqueeze(2) # [bs, seq_len, 1, dim]
|
393 |
+
rope_sin = rope_sin[position_ids].unsqueeze(2) # [bs, seq_len, 1, dim]
|
394 |
+
rope_embeds = rope_cos, rope_sin
|
395 |
+
else:
|
396 |
+
rope_embeds = None
|
397 |
+
|
398 |
+
if self.type_vocab_size > 0:
|
399 |
+
if token_type_ids is None:
|
400 |
+
token_type_ids = position_ids.mul(0)
|
401 |
+
else:
|
402 |
+
if self.type_vocab_size < 2:
|
403 |
+
token_type_ids.mul_(0)
|
404 |
+
if unpad_inputs:
|
405 |
+
token_type_ids = token_type_ids[attention_mask_bool].unsqueeze(0)
|
406 |
+
|
407 |
+
token_type_embeddings = self.token_type_embeddings(token_type_ids)
|
408 |
+
embeddings = embeddings + token_type_embeddings
|
409 |
+
|
410 |
+
# BERT position
|
411 |
+
if self.position_embedding_type == "absolute":
|
412 |
+
position_embeddings = self.position_embeddings(position_ids)
|
413 |
+
embeddings = embeddings + position_embeddings
|
414 |
+
|
415 |
+
embeddings = self.LayerNorm(embeddings)
|
416 |
+
embeddings = self.dropout(embeddings)
|
417 |
+
|
418 |
+
return embeddings, attention_mask, rope_embeds, length
|
419 |
+
|
420 |
+
|
421 |
+
class NewAttention(nn.Module):
|
422 |
+
def __init__(self, config: NewConfig, pack_qkv=None, use_memory_efficient_attention=None):
|
423 |
+
super().__init__()
|
424 |
+
self.config = config
|
425 |
+
if config.hidden_size % config.num_attention_heads != 0 and not hasattr(config, "embedding_size"):
|
426 |
+
raise ValueError(
|
427 |
+
f"The hidden size ({config.hidden_size}) is not a multiple of the number of attention "
|
428 |
+
f"heads ({config.num_attention_heads})"
|
429 |
+
)
|
430 |
+
|
431 |
+
self.hidden_size = config.hidden_size
|
432 |
+
self.num_attention_heads = config.num_attention_heads
|
433 |
+
self.attention_head_size = int(config.hidden_size / config.num_attention_heads)
|
434 |
+
self.all_head_size = self.num_attention_heads * self.attention_head_size
|
435 |
+
|
436 |
+
if pack_qkv is None:
|
437 |
+
pack_qkv = config.pack_qkv
|
438 |
+
self.pack_qkv = pack_qkv
|
439 |
+
|
440 |
+
if self.pack_qkv:
|
441 |
+
self.qkv_proj = nn.Linear(config.hidden_size, self.all_head_size * 3, bias=True)
|
442 |
+
else:
|
443 |
+
self.q_proj = nn.Linear(config.hidden_size, self.all_head_size, bias=True)
|
444 |
+
self.k_proj = nn.Linear(config.hidden_size, self.all_head_size, bias=True)
|
445 |
+
self.v_proj = nn.Linear(config.hidden_size, self.all_head_size, bias=True)
|
446 |
+
|
447 |
+
self.dropout = nn.Dropout(config.attention_probs_dropout_prob)
|
448 |
+
self.o_proj = nn.Linear(config.hidden_size, config.hidden_size, bias=True)
|
449 |
+
|
450 |
+
if use_memory_efficient_attention is None:
|
451 |
+
use_memory_efficient_attention = self.config.use_memory_efficient_attention
|
452 |
+
self.use_memory_efficient_attention = use_memory_efficient_attention
|
453 |
+
self.memory_efficient_attention = None if xops is None else xops.memory_efficient_attention
|
454 |
+
if self.use_memory_efficient_attention:
|
455 |
+
assert self.memory_efficient_attention is not None, 'please install xformers'
|
456 |
+
|
457 |
+
def forward(
|
458 |
+
self,
|
459 |
+
hidden_states: torch.Tensor,
|
460 |
+
attention_bias: torch.FloatTensor,
|
461 |
+
rope_embeds: Optional[Tuple[torch.FloatTensor, torch.FloatTensor]] = None,
|
462 |
+
padding_inputs: Optional[Tuple] = None, # indices, batch, seqlen
|
463 |
+
attention_scale: Optional[torch.FloatTensor] = None,
|
464 |
+
head_mask: Optional[torch.FloatTensor] = None,
|
465 |
+
output_attentions: Optional[bool] = False,
|
466 |
+
qkv_inputs: Optional[Tuple] = None, # For RetroMAE
|
467 |
+
) -> Tuple[torch.Tensor, ...]:
|
468 |
+
shape_hd = (self.num_attention_heads, self.attention_head_size)
|
469 |
+
# qkv
|
470 |
+
if self.pack_qkv and qkv_inputs is None:
|
471 |
+
qkv_pack = self.qkv_proj(hidden_states).split(self.all_head_size, dim=-1)
|
472 |
+
else:
|
473 |
+
if qkv_inputs is None:
|
474 |
+
qkv_inputs = (hidden_states, hidden_states, hidden_states)
|
475 |
+
qkv_pack = [
|
476 |
+
getattr(self, n + '_proj')(s) for s, n in zip(qkv_inputs, 'qkv')
|
477 |
+
]
|
478 |
+
query_states, key_states, value_states = [t.view(t.shape[:-1] + shape_hd) for t in qkv_pack]
|
479 |
+
|
480 |
+
if self.config.position_embedding_type == 'rope':
|
481 |
+
query_states, key_states = apply_rotary_pos_emb(query_states, key_states, *rope_embeds)
|
482 |
+
|
483 |
+
dtype = query_states.dtype
|
484 |
+
|
485 |
+
if self.config.logn_attention_scale and attention_scale is not None:
|
486 |
+
# https://kexue.fm/archives/8823
|
487 |
+
query_states = query_states * attention_scale.to(dtype)
|
488 |
+
|
489 |
+
if padding_inputs is not None:
|
490 |
+
query_states = pad_input(query_states.squeeze(), *padding_inputs)
|
491 |
+
key_states = pad_input(key_states.squeeze(), *padding_inputs)
|
492 |
+
value_states = pad_input(value_states.squeeze(), *padding_inputs)
|
493 |
+
|
494 |
+
if self.use_memory_efficient_attention:
|
495 |
+
assert self.memory_efficient_attention is not None, "xformers is not loaded"
|
496 |
+
assert output_attentions is False, "memory_efficient_attention do not output attentions"
|
497 |
+
assert head_mask is None, "Not support yet"
|
498 |
+
attention_probs = None
|
499 |
+
if torch.is_tensor(attention_bias):
|
500 |
+
attention_bias = attention_bias.to(dtype)
|
501 |
+
context_layer = self.memory_efficient_attention(
|
502 |
+
query_states,
|
503 |
+
key_states,
|
504 |
+
value_states,
|
505 |
+
attn_bias=attention_bias,
|
506 |
+
p=self.dropout.p
|
507 |
+
)
|
508 |
+
else:
|
509 |
+
if output_attentions and isinstance(self, NewSdpaAttention):
|
510 |
+
raise RuntimeError("SDPA do not output attentions")
|
511 |
+
context_layer, attention_probs = self._attention(
|
512 |
+
query_states, key_states, value_states, attention_bias, head_mask
|
513 |
+
)
|
514 |
+
|
515 |
+
if padding_inputs is not None:
|
516 |
+
context_layer = unpad_input(context_layer, indices=padding_inputs[0])
|
517 |
+
|
518 |
+
new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)
|
519 |
+
context_layer = context_layer.view(new_context_layer_shape)
|
520 |
+
|
521 |
+
# output proj
|
522 |
+
attn_output = self.o_proj(context_layer)
|
523 |
+
|
524 |
+
# add attentions if we output them
|
525 |
+
outputs = (attn_output, attention_probs) if output_attentions else (attn_output,)
|
526 |
+
return outputs
|
527 |
+
|
528 |
+
def _attention(self, query_states, key_states, value_states, attention_bias, head_mask):
|
529 |
+
"""
|
530 |
+
Args:
|
531 |
+
q/k/v: (B, L, n_head, head_dim),
|
532 |
+
Returns:
|
533 |
+
attn_output: (B L, n_head, head_dim)
|
534 |
+
"""
|
535 |
+
query_states = query_states.transpose(1, 2)
|
536 |
+
key_states = key_states.transpose(1, 2)
|
537 |
+
value_states = value_states.transpose(1, 2)
|
538 |
+
# Take the dot product between "query" and "key" to get the raw attention scores.
|
539 |
+
attention_scores = torch.matmul(query_states, key_states.transpose(-1, -2))
|
540 |
+
|
541 |
+
attention_scores = attention_scores / math.sqrt(self.attention_head_size)
|
542 |
+
if attention_bias is not None:
|
543 |
+
# Apply the attention mask is (precomputed for all layers in BertModel forward() function)
|
544 |
+
attention_scores = attention_scores + attention_bias
|
545 |
+
|
546 |
+
# Normalize the attention scores to probabilities.
|
547 |
+
attention_probs = nn.functional.softmax(attention_scores, dim=-1)
|
548 |
+
|
549 |
+
# This is actually dropping out entire tokens to attend to, which might
|
550 |
+
# seem a bit unusual, but is taken from the original Transformer paper.
|
551 |
+
if self.dropout.p > 0:
|
552 |
+
attention_probs = self.dropout(attention_probs)
|
553 |
+
|
554 |
+
# Mask heads if we want to
|
555 |
+
if head_mask is not None:
|
556 |
+
attention_probs = attention_probs * head_mask
|
557 |
+
|
558 |
+
context_layer = torch.matmul(attention_probs, value_states)
|
559 |
+
|
560 |
+
context_layer = context_layer.permute(0, 2, 1, 3).contiguous()
|
561 |
+
return context_layer, attention_probs
|
562 |
+
|
563 |
+
|
564 |
+
class NewSdpaAttention(NewAttention):
|
565 |
+
"""
|
566 |
+
New attention module using torch.nn.functional.scaled_dot_product_attention. This module inherits from
|
567 |
+
`NewAttention` as the weights of the module stays untouched. The only changes are on the forward pass to adapt to
|
568 |
+
SDPA API.
|
569 |
+
"""
|
570 |
+
def __init__(self, config: NewConfig, **kwargs):
|
571 |
+
super().__init__(config, **kwargs)
|
572 |
+
# torch.backends.cuda.enable_mem_efficient_sdp(False)
|
573 |
+
# logger.warning(
|
574 |
+
# "Disable memory efficient attention kernel for `NewSdpaAttention`, you can set "
|
575 |
+
# "`use_memory_efficient_attention=True` if it expected to use."
|
576 |
+
# )
|
577 |
+
|
578 |
+
def _attention(self, query_states, key_states, value_states, attention_bias, head_mask):
|
579 |
+
attn_output = torch.nn.functional.scaled_dot_product_attention(
|
580 |
+
query_states.transpose(1, 2),
|
581 |
+
key_states.transpose(1, 2),
|
582 |
+
value_states.transpose(1, 2),
|
583 |
+
attn_mask=attention_bias,
|
584 |
+
dropout_p=self.dropout.p if self.training else 0.0,
|
585 |
+
)
|
586 |
+
attn_output = attn_output.permute(0, 2, 1, 3).contiguous()
|
587 |
+
return attn_output, None
|
588 |
+
|
589 |
+
|
590 |
+
NEW_ATTENTION_CLASSES = {
|
591 |
+
"eager": NewAttention,
|
592 |
+
# "flash_attention_2": , # TODO
|
593 |
+
"sdpa": NewSdpaAttention,
|
594 |
+
}
|
595 |
+
|
596 |
+
|
597 |
+
class NewGatedMLP(nn.Module):
|
598 |
+
"""
|
599 |
+
GLU Variants Improve Transformer.
|
600 |
+
"""
|
601 |
+
|
602 |
+
def __init__(self, config: NewConfig):
|
603 |
+
super().__init__()
|
604 |
+
self.intermediate_size = config.intermediate_size
|
605 |
+
self.up_gate_proj = nn.Linear(config.hidden_size, self.intermediate_size * 2, bias=False)
|
606 |
+
self.down_proj = nn.Linear(self.intermediate_size, config.hidden_size, bias=True)
|
607 |
+
self.act_fn = ACT2FN[config.hidden_act]
|
608 |
+
if config.hidden_dropout_prob > 0:
|
609 |
+
self.hidden_dropout = nn.Dropout(config.hidden_dropout_prob)
|
610 |
+
else:
|
611 |
+
self.hidden_dropout = None
|
612 |
+
|
613 |
+
def forward(self, hidden_states):
|
614 |
+
up_gate = self.up_gate_proj(hidden_states)
|
615 |
+
up_states, gate = torch.split(up_gate, self.intermediate_size, dim=-1)
|
616 |
+
gate = self.act_fn(gate)
|
617 |
+
gated_states = gate * up_states
|
618 |
+
if self.hidden_dropout is not None:
|
619 |
+
gated_states = self.hidden_dropout(gated_states)
|
620 |
+
down_states = self.down_proj(gated_states)
|
621 |
+
return down_states
|
622 |
+
|
623 |
+
|
624 |
+
class NewLayer(nn.Module):
|
625 |
+
def __init__(
|
626 |
+
self,
|
627 |
+
config: NewConfig,
|
628 |
+
pack_qkv=None,
|
629 |
+
use_memory_efficient_attention=None,
|
630 |
+
attn_implementation=None
|
631 |
+
):
|
632 |
+
super().__init__()
|
633 |
+
if attn_implementation is None:
|
634 |
+
attn_implementation = config._attn_implementation
|
635 |
+
if use_memory_efficient_attention is None:
|
636 |
+
use_memory_efficient_attention = config.use_memory_efficient_attention
|
637 |
+
if use_memory_efficient_attention:
|
638 |
+
if attn_implementation != 'eager':
|
639 |
+
logger.warning_once(f"Override {attn_implementation=} to 'eager' as {use_memory_efficient_attention=}")
|
640 |
+
attn_implementation = 'eager' # Since it will be SDPA by default for torch>=2.1.1
|
641 |
+
self.attention = NEW_ATTENTION_CLASSES[attn_implementation](
|
642 |
+
config, pack_qkv=pack_qkv, use_memory_efficient_attention=use_memory_efficient_attention
|
643 |
+
)
|
644 |
+
self.mlp = NewGatedMLP(config)
|
645 |
+
|
646 |
+
ln_class = LAYER_NORM[config.layer_norm_type]
|
647 |
+
self.attn_ln = ln_class(config.hidden_size, eps=config.layer_norm_eps)
|
648 |
+
self.mlp_ln = ln_class(config.hidden_size, eps=config.layer_norm_eps)
|
649 |
+
|
650 |
+
if config.hidden_dropout_prob > 0:
|
651 |
+
self.hidden_dropout = nn.Dropout(config.hidden_dropout_prob)
|
652 |
+
else:
|
653 |
+
self.hidden_dropout = None
|
654 |
+
|
655 |
+
def forward(
|
656 |
+
self,
|
657 |
+
hidden_states: torch.Tensor,
|
658 |
+
attention_bias: torch.FloatTensor,
|
659 |
+
rope_embeds: Optional[Tuple[torch.FloatTensor, torch.FloatTensor]] = None,
|
660 |
+
padding_inputs: Optional[Tuple] = None, # indices, batch, seqlen
|
661 |
+
attention_scale: Optional[torch.FloatTensor] = None,
|
662 |
+
subset_indices: Optional[torch.LongTensor] = None,
|
663 |
+
head_mask: Optional[torch.FloatTensor] = None,
|
664 |
+
output_attentions: Optional[bool] = False,
|
665 |
+
qkv_inputs: Optional[Tuple] = None, # For RetroMAE
|
666 |
+
) -> Tuple[torch.Tensor, ...]:
|
667 |
+
# Multi head self attention
|
668 |
+
residual = hidden_states if qkv_inputs is None else qkv_inputs[0]
|
669 |
+
attention_outputs = self.attention(
|
670 |
+
hidden_states,
|
671 |
+
attention_bias,
|
672 |
+
rope_embeds,
|
673 |
+
padding_inputs,
|
674 |
+
attention_scale,
|
675 |
+
head_mask,
|
676 |
+
output_attentions=output_attentions,
|
677 |
+
qkv_inputs=qkv_inputs,
|
678 |
+
)
|
679 |
+
hidden_states = attention_outputs[0]
|
680 |
+
if self.hidden_dropout is not None:
|
681 |
+
hidden_states = self.hidden_dropout(hidden_states)
|
682 |
+
hidden_states = residual + hidden_states
|
683 |
+
|
684 |
+
# In pretraining, after the attention of last layer, we only need the masked tokens.
|
685 |
+
if subset_indices is not None:
|
686 |
+
hidden_states = hidden_states[subset_indices]
|
687 |
+
|
688 |
+
hidden_states = self.attn_ln(hidden_states)
|
689 |
+
|
690 |
+
# Fully Connected
|
691 |
+
residual = hidden_states
|
692 |
+
hidden_states = self.mlp(hidden_states)
|
693 |
+
if self.hidden_dropout is not None:
|
694 |
+
hidden_states = self.hidden_dropout(hidden_states)
|
695 |
+
hidden_states = residual + hidden_states
|
696 |
+
hidden_states = self.mlp_ln(hidden_states)
|
697 |
+
|
698 |
+
# add self attentions if we output attention weights
|
699 |
+
outputs = (hidden_states,) + attention_outputs[1:]
|
700 |
+
return outputs
|
701 |
+
|
702 |
+
|
703 |
+
class NewEncoder(nn.Module):
|
704 |
+
def __init__(self, config):
|
705 |
+
super().__init__()
|
706 |
+
self.config = config
|
707 |
+
self.layer = nn.ModuleList([NewLayer(config) for _ in range(config.num_hidden_layers)])
|
708 |
+
self.gradient_checkpointing = False
|
709 |
+
|
710 |
+
def forward(
|
711 |
+
self,
|
712 |
+
hidden_states: torch.Tensor,
|
713 |
+
attention_bias: Optional[torch.FloatTensor] = None,
|
714 |
+
rope_embeds: Optional[Tuple[torch.FloatTensor, torch.FloatTensor]] = None,
|
715 |
+
padding_inputs: Optional[Tuple] = None, # indices, batch, seqlen
|
716 |
+
attention_scale: Optional[torch.FloatTensor] = None,
|
717 |
+
subset_indices: Optional[torch.LongTensor] = None,
|
718 |
+
head_mask: Optional[torch.FloatTensor] = None,
|
719 |
+
output_attentions: Optional[bool] = False,
|
720 |
+
output_hidden_states: Optional[bool] = False,
|
721 |
+
return_dict: Optional[bool] = True,
|
722 |
+
) -> Union[Tuple[torch.Tensor], BaseModelOutput]:
|
723 |
+
all_hidden_states = () if output_hidden_states else None
|
724 |
+
all_self_attentions = () if output_attentions else None
|
725 |
+
|
726 |
+
for i, layer_module in enumerate(self.layer):
|
727 |
+
if output_hidden_states:
|
728 |
+
all_hidden_states = all_hidden_states + (hidden_states,)
|
729 |
+
|
730 |
+
if i >= len(self.layer) - 1:
|
731 |
+
layer_subset_indices = subset_indices
|
732 |
+
else:
|
733 |
+
layer_subset_indices = None
|
734 |
+
|
735 |
+
layer_head_mask = head_mask[i] if head_mask is not None else None
|
736 |
+
|
737 |
+
if self.gradient_checkpointing and self.training:
|
738 |
+
layer_outputs = self._gradient_checkpointing_func(
|
739 |
+
layer_module.__call__,
|
740 |
+
hidden_states,
|
741 |
+
attention_bias,
|
742 |
+
rope_embeds,
|
743 |
+
padding_inputs,
|
744 |
+
attention_scale,
|
745 |
+
layer_subset_indices,
|
746 |
+
layer_head_mask,
|
747 |
+
)
|
748 |
+
else:
|
749 |
+
layer_outputs = layer_module(
|
750 |
+
hidden_states,
|
751 |
+
attention_bias,
|
752 |
+
rope_embeds,
|
753 |
+
padding_inputs,
|
754 |
+
attention_scale,
|
755 |
+
layer_subset_indices,
|
756 |
+
layer_head_mask,
|
757 |
+
output_attentions,
|
758 |
+
)
|
759 |
+
|
760 |
+
hidden_states = layer_outputs[0]
|
761 |
+
if output_attentions:
|
762 |
+
all_self_attentions = all_self_attentions + (layer_outputs[1],)
|
763 |
+
|
764 |
+
if output_hidden_states:
|
765 |
+
all_hidden_states = all_hidden_states + (hidden_states,)
|
766 |
+
|
767 |
+
if not return_dict:
|
768 |
+
return tuple(
|
769 |
+
v
|
770 |
+
for v in [
|
771 |
+
hidden_states,
|
772 |
+
all_hidden_states,
|
773 |
+
all_self_attentions,
|
774 |
+
]
|
775 |
+
if v is not None
|
776 |
+
)
|
777 |
+
return BaseModelOutput(
|
778 |
+
last_hidden_state=hidden_states,
|
779 |
+
hidden_states=all_hidden_states,
|
780 |
+
attentions=all_self_attentions,
|
781 |
+
)
|
782 |
+
|
783 |
+
|
784 |
+
# Copied from transformers.models.bert.modeling_bert.BertPooler with Bert->New
|
785 |
+
class NewPooler(nn.Module):
|
786 |
+
def __init__(self, config):
|
787 |
+
super().__init__()
|
788 |
+
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
|
789 |
+
self.activation = nn.Tanh()
|
790 |
+
|
791 |
+
def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
|
792 |
+
# We "pool" the model by simply taking the hidden state corresponding
|
793 |
+
# to the first token.
|
794 |
+
first_token_tensor = hidden_states[:, 0]
|
795 |
+
pooled_output = self.dense(first_token_tensor)
|
796 |
+
pooled_output = self.activation(pooled_output)
|
797 |
+
return pooled_output
|
798 |
+
|
799 |
+
|
800 |
+
class NewPreTrainedModel(PreTrainedModel):
|
801 |
+
"""
|
802 |
+
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
|
803 |
+
models.
|
804 |
+
"""
|
805 |
+
|
806 |
+
config_class = NewConfig
|
807 |
+
base_model_prefix = "new"
|
808 |
+
supports_gradient_checkpointing = True
|
809 |
+
_supports_sdpa = True
|
810 |
+
|
811 |
+
def _init_weights(self, module):
|
812 |
+
"""Initialize the weights"""
|
813 |
+
if isinstance(module, nn.Linear):
|
814 |
+
# Slightly different from the TF version which uses truncated_normal for initialization
|
815 |
+
# cf https://github.com/pytorch/pytorch/pull/5617
|
816 |
+
module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)
|
817 |
+
if module.bias is not None:
|
818 |
+
module.bias.data.zero_()
|
819 |
+
elif isinstance(module, nn.Embedding):
|
820 |
+
module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)
|
821 |
+
if module.padding_idx is not None:
|
822 |
+
module.weight.data[module.padding_idx].zero_()
|
823 |
+
elif isinstance(module, nn.LayerNorm):
|
824 |
+
module.bias.data.zero_()
|
825 |
+
module.weight.data.fill_(1.0)
|
826 |
+
|
827 |
+
|
828 |
+
class NewModel(NewPreTrainedModel):
|
829 |
+
"""
|
830 |
+
The bare New Model transformer outputting raw hidden-states without any specific head on top.
|
831 |
+
"""
|
832 |
+
|
833 |
+
def __init__(self, config: NewConfig, add_pooling_layer=False):
|
834 |
+
super().__init__(config)
|
835 |
+
self.config = config
|
836 |
+
|
837 |
+
self.embeddings = NewEmbeddings(config)
|
838 |
+
self.encoder = NewEncoder(config)
|
839 |
+
|
840 |
+
self.pooler = NewPooler(config) if add_pooling_layer else None
|
841 |
+
|
842 |
+
# Initialize weights and apply final processing
|
843 |
+
self.post_init()
|
844 |
+
|
845 |
+
def get_input_embeddings(self):
|
846 |
+
return self.embeddings.word_embeddings
|
847 |
+
|
848 |
+
def set_input_embeddings(self, value):
|
849 |
+
self.embeddings.word_embeddings = value
|
850 |
+
|
851 |
+
def forward(
|
852 |
+
self,
|
853 |
+
input_ids: Optional[torch.Tensor] = None,
|
854 |
+
attention_mask: Optional[torch.Tensor] = None,
|
855 |
+
length: Optional[List[int]] = None,
|
856 |
+
subset_indices: Optional[torch.LongTensor] = None,
|
857 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
858 |
+
position_ids: Optional[torch.Tensor] = None,
|
859 |
+
head_mask: Optional[torch.Tensor] = None,
|
860 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
861 |
+
output_attentions: Optional[bool] = None,
|
862 |
+
output_hidden_states: Optional[bool] = None,
|
863 |
+
return_dict: Optional[bool] = None,
|
864 |
+
unpad_inputs: Optional[bool] = None,
|
865 |
+
) -> Union[Tuple[torch.Tensor], BaseModelOutputWithPooling]:
|
866 |
+
r"""
|
867 |
+
length (`list` of length `batch_size`, *optional*):
|
868 |
+
If is `None`, return padded `last_hidden_state`.
|
869 |
+
subset_indices ():
|
870 |
+
pass
|
871 |
+
unpad_inputs (`bool`, *optional*):
|
872 |
+
pass
|
873 |
+
"""
|
874 |
+
output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions
|
875 |
+
output_hidden_states = (
|
876 |
+
output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
|
877 |
+
)
|
878 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
879 |
+
unpad_inputs = unpad_inputs if unpad_inputs is not None else self.config.unpad_inputs
|
880 |
+
output_padded = length is None
|
881 |
+
|
882 |
+
if input_ids is not None and inputs_embeds is not None:
|
883 |
+
raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
|
884 |
+
elif input_ids is not None:
|
885 |
+
self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask)
|
886 |
+
input_shape = input_ids.size()
|
887 |
+
elif inputs_embeds is not None:
|
888 |
+
input_shape = inputs_embeds.size()[:-1]
|
889 |
+
else:
|
890 |
+
raise ValueError("You have to specify either input_ids or inputs_embeds")
|
891 |
+
|
892 |
+
# TODO: not used
|
893 |
+
# # Prepare head mask if needed
|
894 |
+
# # 1.0 in head_mask indicate we keep the head
|
895 |
+
# # attention_probs has shape bsz x n_heads x N x N
|
896 |
+
# # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads]
|
897 |
+
# # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length]
|
898 |
+
# head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers)
|
899 |
+
|
900 |
+
# Get embeddings, may unpad them
|
901 |
+
(embedding_output, attention_mask, rope_embeds, length) = self.embeddings(
|
902 |
+
unpad_inputs,
|
903 |
+
input_ids=input_ids,
|
904 |
+
attention_mask=attention_mask,
|
905 |
+
length=length,
|
906 |
+
token_type_ids=token_type_ids,
|
907 |
+
position_ids=position_ids,
|
908 |
+
inputs_embeds=inputs_embeds
|
909 |
+
)
|
910 |
+
|
911 |
+
batch_size, seq_length = input_shape
|
912 |
+
if unpad_inputs and self.config.use_memory_efficient_attention:
|
913 |
+
attention_bias = xops.fmha.attn_bias.BlockDiagonalMask.from_seqlens(length)
|
914 |
+
else:
|
915 |
+
# We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length]
|
916 |
+
# ourselves in which case we just need to make it broadcastable to all heads.
|
917 |
+
attention_bias = self.get_extended_attention_mask(attention_mask, input_shape)
|
918 |
+
if self.config.use_memory_efficient_attention:
|
919 |
+
# Invalid shape for attention bias: torch.Size([48, 1, 1, 512]) (expected (48, 12, 512, 512))
|
920 |
+
attention_bias = attention_bias.expand(-1, self.config.num_attention_heads, seq_length, -1)
|
921 |
+
|
922 |
+
padding_inputs = None
|
923 |
+
if unpad_inputs and (output_padded or not self.config.use_memory_efficient_attention):
|
924 |
+
indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()
|
925 |
+
if not self.config.use_memory_efficient_attention:
|
926 |
+
padding_inputs = (indices, *input_shape)
|
927 |
+
|
928 |
+
attention_scale = None
|
929 |
+
if self.config.logn_attention_scale:
|
930 |
+
logger.warning_once("TODO: logn_attention_scale")
|
931 |
+
# # attention scale log_512(input_len)
|
932 |
+
# attention_scale = attention_mask.sum(1).log() / torch.tensor(self.config.max_position_embeddings).log()
|
933 |
+
# # inference-time logn scale need clip 1
|
934 |
+
# if self.config.logn_attention_clip1:
|
935 |
+
# attention_scale.clip_(1)
|
936 |
+
# attention_scale = attention_scale[:, None, None, None]
|
937 |
+
# else:
|
938 |
+
# attention_scale = None
|
939 |
+
|
940 |
+
encoder_outputs = self.encoder(
|
941 |
+
embedding_output,
|
942 |
+
attention_bias=attention_bias,
|
943 |
+
rope_embeds=rope_embeds,
|
944 |
+
padding_inputs=padding_inputs,
|
945 |
+
attention_scale=attention_scale,
|
946 |
+
subset_indices=subset_indices,
|
947 |
+
head_mask=head_mask,
|
948 |
+
output_attentions=output_attentions,
|
949 |
+
output_hidden_states=output_hidden_states,
|
950 |
+
return_dict=return_dict,
|
951 |
+
)
|
952 |
+
sequence_output = encoder_outputs[0]
|
953 |
+
if unpad_inputs and output_padded:
|
954 |
+
sequence_output = pad_input(
|
955 |
+
sequence_output.squeeze(), indices, batch_size, seq_length
|
956 |
+
)
|
957 |
+
|
958 |
+
pooled_output = self.pooler(sequence_output) if self.pooler is not None else None
|
959 |
+
|
960 |
+
if not return_dict:
|
961 |
+
return (sequence_output, pooled_output) + encoder_outputs[1:]
|
962 |
+
|
963 |
+
return BaseModelOutputWithPooling(
|
964 |
+
last_hidden_state=sequence_output,
|
965 |
+
pooler_output=pooled_output,
|
966 |
+
hidden_states=encoder_outputs.hidden_states,
|
967 |
+
attentions=encoder_outputs.attentions,
|
968 |
+
)
|
969 |
+
|
970 |
+
|
971 |
+
class NewLMPredictionHead(nn.Module):
|
972 |
+
def __init__(self, config):
|
973 |
+
super().__init__()
|
974 |
+
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
|
975 |
+
self.transform_act_fn = ACT2FN[config.hidden_act]
|
976 |
+
self.norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
|
977 |
+
|
978 |
+
# The output weights are the same as the input embeddings, but there is
|
979 |
+
# an output-only bias for each token.
|
980 |
+
self.decoder = nn.Linear(config.hidden_size, config.vocab_size)
|
981 |
+
|
982 |
+
def forward(self, hidden_states):
|
983 |
+
hidden_states = self.dense(hidden_states)
|
984 |
+
hidden_states = self.transform_act_fn(hidden_states)
|
985 |
+
hidden_states = self.norm(hidden_states)
|
986 |
+
hidden_states = self.decoder(hidden_states)
|
987 |
+
return hidden_states
|
988 |
+
|
989 |
+
|
990 |
+
class NewForMaskedLM(NewPreTrainedModel):
|
991 |
+
_tied_weights_keys = ["lm_head.decoder.bias", "lm_head.decoder.weight"]
|
992 |
+
|
993 |
+
def __init__(self, config: NewConfig):
|
994 |
+
super().__init__(config)
|
995 |
+
self.new = NewModel(config, add_pooling_layer=False)
|
996 |
+
self.lm_head = NewLMPredictionHead(config)
|
997 |
+
self.loss_fct = nn.CrossEntropyLoss()
|
998 |
+
|
999 |
+
# Initialize weights and apply final processing
|
1000 |
+
self.post_init()
|
1001 |
+
|
1002 |
+
def get_output_embeddings(self):
|
1003 |
+
return self.lm_head.decoder
|
1004 |
+
|
1005 |
+
def set_output_embeddings(self, new_embeddings):
|
1006 |
+
self.lm_head.decoder = new_embeddings
|
1007 |
+
|
1008 |
+
def forward(
|
1009 |
+
self,
|
1010 |
+
input_ids: Optional[torch.Tensor] = None,
|
1011 |
+
attention_mask: Optional[torch.Tensor] = None,
|
1012 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
1013 |
+
position_ids: Optional[torch.Tensor] = None,
|
1014 |
+
head_mask: Optional[torch.Tensor] = None,
|
1015 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
1016 |
+
labels: Optional[torch.Tensor] = None,
|
1017 |
+
output_attentions: Optional[bool] = None,
|
1018 |
+
output_hidden_states: Optional[bool] = None,
|
1019 |
+
return_dict: Optional[bool] = None,
|
1020 |
+
unpad_inputs: Optional[bool] = None,
|
1021 |
+
) -> Union[Tuple[torch.Tensor], MaskedLMOutput]:
|
1022 |
+
r"""
|
1023 |
+
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
|
1024 |
+
Labels for computing the masked language modeling loss. Indices should be in `[-100, 0, ...,
|
1025 |
+
config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are ignored (masked), the
|
1026 |
+
loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`
|
1027 |
+
"""
|
1028 |
+
|
1029 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
1030 |
+
|
1031 |
+
if labels is None or not self.new.config.unpad_inputs:
|
1032 |
+
length = None
|
1033 |
+
subset_indices = None
|
1034 |
+
else:
|
1035 |
+
length = attention_mask.sum(-1).tolist()
|
1036 |
+
labels = labels[attention_mask.bool()].unsqueeze(0)
|
1037 |
+
subset_indices = labels > -100
|
1038 |
+
|
1039 |
+
outputs = self.new(
|
1040 |
+
input_ids,
|
1041 |
+
attention_mask=attention_mask,
|
1042 |
+
length=length,
|
1043 |
+
subset_indices=subset_indices,
|
1044 |
+
token_type_ids=token_type_ids,
|
1045 |
+
position_ids=position_ids,
|
1046 |
+
head_mask=head_mask,
|
1047 |
+
inputs_embeds=inputs_embeds,
|
1048 |
+
output_attentions=output_attentions,
|
1049 |
+
output_hidden_states=output_hidden_states,
|
1050 |
+
return_dict=return_dict,
|
1051 |
+
unpad_inputs=unpad_inputs,
|
1052 |
+
)
|
1053 |
+
|
1054 |
+
sequence_output = outputs[0]
|
1055 |
+
prediction_scores = self.lm_head(sequence_output)
|
1056 |
+
|
1057 |
+
masked_lm_loss = None
|
1058 |
+
if labels is not None:
|
1059 |
+
if subset_indices is None:
|
1060 |
+
mask = attention_mask.bool()
|
1061 |
+
prediction_scores = prediction_scores[mask]
|
1062 |
+
labels = labels[mask]
|
1063 |
+
else:
|
1064 |
+
labels = labels[subset_indices]
|
1065 |
+
masked_lm_loss = self.loss_fct(prediction_scores, labels)
|
1066 |
+
|
1067 |
+
if not return_dict:
|
1068 |
+
output = (prediction_scores,) + outputs[2:]
|
1069 |
+
return ((masked_lm_loss,) + output) if masked_lm_loss is not None else output
|
1070 |
+
|
1071 |
+
return MaskedLMOutput(
|
1072 |
+
loss=masked_lm_loss,
|
1073 |
+
logits=prediction_scores,
|
1074 |
+
hidden_states=outputs.hidden_states,
|
1075 |
+
attentions=outputs.attentions,
|
1076 |
+
)
|
1077 |
+
|
1078 |
+
|
1079 |
+
class NewForSequenceClassification(NewPreTrainedModel):
|
1080 |
+
def __init__(self, config):
|
1081 |
+
super().__init__(config)
|
1082 |
+
self.num_labels = config.num_labels
|
1083 |
+
self.config = config
|
1084 |
+
|
1085 |
+
self.new = NewModel(config, add_pooling_layer=True)
|
1086 |
+
classifier_dropout = (
|
1087 |
+
config.classifier_dropout if config.classifier_dropout is not None else config.hidden_dropout_prob
|
1088 |
+
)
|
1089 |
+
self.dropout = nn.Dropout(classifier_dropout)
|
1090 |
+
self.classifier = nn.Linear(config.hidden_size, config.num_labels)
|
1091 |
+
|
1092 |
+
# Initialize weights and apply final processing
|
1093 |
+
self.post_init()
|
1094 |
+
|
1095 |
+
def forward(
|
1096 |
+
self,
|
1097 |
+
input_ids: Optional[torch.Tensor] = None,
|
1098 |
+
attention_mask: Optional[torch.Tensor] = None,
|
1099 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
1100 |
+
position_ids: Optional[torch.Tensor] = None,
|
1101 |
+
head_mask: Optional[torch.Tensor] = None,
|
1102 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
1103 |
+
labels: Optional[torch.Tensor] = None,
|
1104 |
+
output_attentions: Optional[bool] = None,
|
1105 |
+
output_hidden_states: Optional[bool] = None,
|
1106 |
+
return_dict: Optional[bool] = None,
|
1107 |
+
unpad_inputs: Optional[bool] = None,
|
1108 |
+
) -> Union[Tuple[torch.Tensor], SequenceClassifierOutput]:
|
1109 |
+
r"""
|
1110 |
+
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
|
1111 |
+
Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
|
1112 |
+
config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
|
1113 |
+
`config.num_labels > 1` a classification loss is computed (Cross-Entropy).
|
1114 |
+
"""
|
1115 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
1116 |
+
|
1117 |
+
outputs = self.new(
|
1118 |
+
input_ids,
|
1119 |
+
attention_mask=attention_mask,
|
1120 |
+
token_type_ids=token_type_ids,
|
1121 |
+
position_ids=position_ids,
|
1122 |
+
head_mask=head_mask,
|
1123 |
+
inputs_embeds=inputs_embeds,
|
1124 |
+
output_attentions=output_attentions,
|
1125 |
+
output_hidden_states=output_hidden_states,
|
1126 |
+
return_dict=return_dict,
|
1127 |
+
unpad_inputs=unpad_inputs,
|
1128 |
+
)
|
1129 |
+
|
1130 |
+
pooled_output = outputs[1]
|
1131 |
+
|
1132 |
+
pooled_output = self.dropout(pooled_output)
|
1133 |
+
logits = self.classifier(pooled_output)
|
1134 |
+
|
1135 |
+
loss = None
|
1136 |
+
if labels is not None:
|
1137 |
+
if self.config.problem_type is None:
|
1138 |
+
if self.num_labels == 1:
|
1139 |
+
self.config.problem_type = "regression"
|
1140 |
+
elif self.num_labels > 1 and (labels.dtype == torch.long or labels.dtype == torch.int):
|
1141 |
+
self.config.problem_type = "single_label_classification"
|
1142 |
+
else:
|
1143 |
+
self.config.problem_type = "multi_label_classification"
|
1144 |
+
|
1145 |
+
if self.config.problem_type == "regression":
|
1146 |
+
loss_fct = nn.MSELoss()
|
1147 |
+
if self.num_labels == 1:
|
1148 |
+
loss = loss_fct(logits.squeeze(), labels.squeeze())
|
1149 |
+
else:
|
1150 |
+
loss = loss_fct(logits, labels)
|
1151 |
+
elif self.config.problem_type == "single_label_classification":
|
1152 |
+
loss_fct = nn.CrossEntropyLoss()
|
1153 |
+
loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1))
|
1154 |
+
elif self.config.problem_type == "multi_label_classification":
|
1155 |
+
loss_fct = nn.BCEWithLogitsLoss()
|
1156 |
+
loss = loss_fct(logits, labels)
|
1157 |
+
|
1158 |
+
if not return_dict:
|
1159 |
+
output = (logits,) + outputs[2:]
|
1160 |
+
return ((loss,) + output) if loss is not None else output
|
1161 |
+
|
1162 |
+
return SequenceClassifierOutput(
|
1163 |
+
loss=loss,
|
1164 |
+
logits=logits,
|
1165 |
+
hidden_states=outputs.hidden_states,
|
1166 |
+
attentions=outputs.attentions,
|
1167 |
+
)
|
1168 |
+
|
1169 |
+
|
1170 |
+
class NewForMultipleChoice(NewPreTrainedModel):
|
1171 |
+
def __init__(self, config):
|
1172 |
+
super().__init__(config)
|
1173 |
+
|
1174 |
+
self.new = NewModel(config, add_pooling_layer=True)
|
1175 |
+
classifier_dropout = (
|
1176 |
+
config.classifier_dropout if config.classifier_dropout is not None else config.hidden_dropout_prob
|
1177 |
+
)
|
1178 |
+
self.dropout = nn.Dropout(classifier_dropout)
|
1179 |
+
self.classifier = nn.Linear(config.hidden_size, 1)
|
1180 |
+
|
1181 |
+
# Initialize weights and apply final processing
|
1182 |
+
self.post_init()
|
1183 |
+
|
1184 |
+
def forward(
|
1185 |
+
self,
|
1186 |
+
input_ids: Optional[torch.Tensor] = None,
|
1187 |
+
attention_mask: Optional[torch.Tensor] = None,
|
1188 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
1189 |
+
position_ids: Optional[torch.Tensor] = None,
|
1190 |
+
head_mask: Optional[torch.Tensor] = None,
|
1191 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
1192 |
+
labels: Optional[torch.Tensor] = None,
|
1193 |
+
output_attentions: Optional[bool] = None,
|
1194 |
+
output_hidden_states: Optional[bool] = None,
|
1195 |
+
return_dict: Optional[bool] = None,
|
1196 |
+
unpad_inputs: Optional[bool] = None,
|
1197 |
+
) -> Union[Tuple[torch.Tensor], MultipleChoiceModelOutput]:
|
1198 |
+
r"""
|
1199 |
+
labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
|
1200 |
+
Labels for computing the multiple choice classification loss. Indices should be in `[0, ...,
|
1201 |
+
num_choices-1]` where `num_choices` is the size of the second dimension of the input tensors. (See
|
1202 |
+
`input_ids` above)
|
1203 |
+
"""
|
1204 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
1205 |
+
num_choices = input_ids.shape[1] if input_ids is not None else inputs_embeds.shape[1]
|
1206 |
+
|
1207 |
+
input_ids = input_ids.view(-1, input_ids.size(-1)) if input_ids is not None else None
|
1208 |
+
attention_mask = attention_mask.view(-1, attention_mask.size(-1)) if attention_mask is not None else None
|
1209 |
+
token_type_ids = token_type_ids.view(-1, token_type_ids.size(-1)) if token_type_ids is not None else None
|
1210 |
+
position_ids = position_ids.view(-1, position_ids.size(-1)) if position_ids is not None else None
|
1211 |
+
inputs_embeds = (
|
1212 |
+
inputs_embeds.view(-1, inputs_embeds.size(-2), inputs_embeds.size(-1))
|
1213 |
+
if inputs_embeds is not None
|
1214 |
+
else None
|
1215 |
+
)
|
1216 |
+
|
1217 |
+
outputs = self.new(
|
1218 |
+
input_ids,
|
1219 |
+
attention_mask=attention_mask,
|
1220 |
+
token_type_ids=token_type_ids,
|
1221 |
+
position_ids=position_ids,
|
1222 |
+
head_mask=head_mask,
|
1223 |
+
inputs_embeds=inputs_embeds,
|
1224 |
+
output_attentions=output_attentions,
|
1225 |
+
output_hidden_states=output_hidden_states,
|
1226 |
+
return_dict=return_dict,
|
1227 |
+
unpad_inputs=unpad_inputs,
|
1228 |
+
)
|
1229 |
+
|
1230 |
+
pooled_output = outputs[1]
|
1231 |
+
|
1232 |
+
pooled_output = self.dropout(pooled_output)
|
1233 |
+
logits = self.classifier(pooled_output)
|
1234 |
+
reshaped_logits = logits.view(-1, num_choices)
|
1235 |
+
|
1236 |
+
loss = None
|
1237 |
+
if labels is not None:
|
1238 |
+
loss_fct = nn.CrossEntropyLoss()
|
1239 |
+
loss = loss_fct(reshaped_logits, labels)
|
1240 |
+
|
1241 |
+
if not return_dict:
|
1242 |
+
output = (reshaped_logits,) + outputs[2:]
|
1243 |
+
return ((loss,) + output) if loss is not None else output
|
1244 |
+
|
1245 |
+
return MultipleChoiceModelOutput(
|
1246 |
+
loss=loss,
|
1247 |
+
logits=reshaped_logits,
|
1248 |
+
hidden_states=outputs.hidden_states,
|
1249 |
+
attentions=outputs.attentions,
|
1250 |
+
)
|
1251 |
+
|
1252 |
+
|
1253 |
+
@dataclass
|
1254 |
+
class NewTokenClassifierOutput(ModelOutput):
|
1255 |
+
loss: Optional[torch.FloatTensor] = None
|
1256 |
+
logits: torch.FloatTensor = None
|
1257 |
+
last_hidden_state: torch.FloatTensor = None
|
1258 |
+
hidden_states: Optional[Tuple[torch.FloatTensor, ...]] = None
|
1259 |
+
attentions: Optional[Tuple[torch.FloatTensor, ...]] = None
|
1260 |
+
|
1261 |
+
|
1262 |
+
class NewForTokenClassification(NewPreTrainedModel):
|
1263 |
+
def __init__(self, config):
|
1264 |
+
super().__init__(config)
|
1265 |
+
self.num_labels = config.num_labels
|
1266 |
+
|
1267 |
+
self.new = NewModel(config, add_pooling_layer=False)
|
1268 |
+
classifier_dropout = (
|
1269 |
+
config.classifier_dropout if config.classifier_dropout is not None else config.hidden_dropout_prob
|
1270 |
+
)
|
1271 |
+
self.dropout = nn.Dropout(classifier_dropout)
|
1272 |
+
self.classifier = nn.Linear(config.hidden_size, config.num_labels)
|
1273 |
+
|
1274 |
+
# Initialize weights and apply final processing
|
1275 |
+
self.post_init()
|
1276 |
+
|
1277 |
+
def forward(
|
1278 |
+
self,
|
1279 |
+
input_ids: Optional[torch.Tensor] = None,
|
1280 |
+
attention_mask: Optional[torch.Tensor] = None,
|
1281 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
1282 |
+
position_ids: Optional[torch.Tensor] = None,
|
1283 |
+
head_mask: Optional[torch.Tensor] = None,
|
1284 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
1285 |
+
labels: Optional[torch.Tensor] = None,
|
1286 |
+
output_attentions: Optional[bool] = None,
|
1287 |
+
output_hidden_states: Optional[bool] = None,
|
1288 |
+
return_dict: Optional[bool] = None,
|
1289 |
+
unpad_inputs: Optional[bool] = None,
|
1290 |
+
) -> Union[Tuple[torch.Tensor], NewTokenClassifierOutput]:
|
1291 |
+
r"""
|
1292 |
+
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
|
1293 |
+
Labels for computing the token classification loss. Indices should be in `[0, ..., config.num_labels - 1]`.
|
1294 |
+
"""
|
1295 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
1296 |
+
|
1297 |
+
outputs = self.new(
|
1298 |
+
input_ids,
|
1299 |
+
attention_mask=attention_mask,
|
1300 |
+
token_type_ids=token_type_ids,
|
1301 |
+
position_ids=position_ids,
|
1302 |
+
head_mask=head_mask,
|
1303 |
+
inputs_embeds=inputs_embeds,
|
1304 |
+
output_attentions=output_attentions,
|
1305 |
+
output_hidden_states=output_hidden_states,
|
1306 |
+
return_dict=return_dict,
|
1307 |
+
unpad_inputs=unpad_inputs,
|
1308 |
+
)
|
1309 |
+
|
1310 |
+
sequence_output = outputs[0]
|
1311 |
+
|
1312 |
+
sequence_output = self.dropout(sequence_output)
|
1313 |
+
logits = self.classifier(sequence_output)
|
1314 |
+
|
1315 |
+
loss = None
|
1316 |
+
if labels is not None:
|
1317 |
+
loss_fct = nn.CrossEntropyLoss()
|
1318 |
+
loss = loss_fct(logits.view(-1, self.num_labels), labels.view(-1))
|
1319 |
+
|
1320 |
+
if not return_dict:
|
1321 |
+
output = (logits,) + outputs[2:]
|
1322 |
+
return ((loss,) + output) if loss is not None else output
|
1323 |
+
|
1324 |
+
return NewTokenClassifierOutput(
|
1325 |
+
loss=loss,
|
1326 |
+
logits=logits,
|
1327 |
+
last_hidden_state=sequence_output,
|
1328 |
+
hidden_states=outputs.hidden_states,
|
1329 |
+
attentions=outputs.attentions,
|
1330 |
+
)
|
1331 |
+
|
1332 |
+
|
1333 |
+
class NewForQuestionAnswering(NewPreTrainedModel):
|
1334 |
+
def __init__(self, config):
|
1335 |
+
super().__init__(config)
|
1336 |
+
self.num_labels = config.num_labels
|
1337 |
+
|
1338 |
+
self.new = NewModel(config, add_pooling_layer=False)
|
1339 |
+
self.qa_outputs = nn.Linear(config.hidden_size, config.num_labels)
|
1340 |
+
|
1341 |
+
# Initialize weights and apply final processing
|
1342 |
+
self.post_init()
|
1343 |
+
|
1344 |
+
def forward(
|
1345 |
+
self,
|
1346 |
+
input_ids: Optional[torch.Tensor] = None,
|
1347 |
+
attention_mask: Optional[torch.Tensor] = None,
|
1348 |
+
token_type_ids: Optional[torch.Tensor] = None,
|
1349 |
+
position_ids: Optional[torch.Tensor] = None,
|
1350 |
+
head_mask: Optional[torch.Tensor] = None,
|
1351 |
+
inputs_embeds: Optional[torch.Tensor] = None,
|
1352 |
+
start_positions: Optional[torch.Tensor] = None,
|
1353 |
+
end_positions: Optional[torch.Tensor] = None,
|
1354 |
+
output_attentions: Optional[bool] = None,
|
1355 |
+
output_hidden_states: Optional[bool] = None,
|
1356 |
+
return_dict: Optional[bool] = None,
|
1357 |
+
unpad_inputs: Optional[bool] = None,
|
1358 |
+
) -> Union[Tuple[torch.Tensor], QuestionAnsweringModelOutput]:
|
1359 |
+
r"""
|
1360 |
+
start_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
|
1361 |
+
Labels for position (index) of the start of the labelled span for computing the token classification loss.
|
1362 |
+
Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
|
1363 |
+
are not taken into account for computing the loss.
|
1364 |
+
end_positions (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
|
1365 |
+
Labels for position (index) of the end of the labelled span for computing the token classification loss.
|
1366 |
+
Positions are clamped to the length of the sequence (`sequence_length`). Position outside of the sequence
|
1367 |
+
are not taken into account for computing the loss.
|
1368 |
+
"""
|
1369 |
+
return_dict = return_dict if return_dict is not None else self.config.use_return_dict
|
1370 |
+
|
1371 |
+
outputs = self.new(
|
1372 |
+
input_ids,
|
1373 |
+
attention_mask=attention_mask,
|
1374 |
+
token_type_ids=token_type_ids,
|
1375 |
+
position_ids=position_ids,
|
1376 |
+
head_mask=head_mask,
|
1377 |
+
inputs_embeds=inputs_embeds,
|
1378 |
+
output_attentions=output_attentions,
|
1379 |
+
output_hidden_states=output_hidden_states,
|
1380 |
+
return_dict=return_dict,
|
1381 |
+
unpad_inputs=unpad_inputs,
|
1382 |
+
)
|
1383 |
+
|
1384 |
+
sequence_output = outputs[0]
|
1385 |
+
|
1386 |
+
logits = self.qa_outputs(sequence_output)
|
1387 |
+
start_logits, end_logits = logits.split(1, dim=-1)
|
1388 |
+
start_logits = start_logits.squeeze(-1).contiguous()
|
1389 |
+
end_logits = end_logits.squeeze(-1).contiguous()
|
1390 |
+
|
1391 |
+
total_loss = None
|
1392 |
+
if start_positions is not None and end_positions is not None:
|
1393 |
+
# If we are on multi-GPU, split add a dimension
|
1394 |
+
if len(start_positions.size()) > 1:
|
1395 |
+
start_positions = start_positions.squeeze(-1)
|
1396 |
+
if len(end_positions.size()) > 1:
|
1397 |
+
end_positions = end_positions.squeeze(-1)
|
1398 |
+
# sometimes the start/end positions are outside our model inputs, we ignore these terms
|
1399 |
+
ignored_index = start_logits.size(1)
|
1400 |
+
start_positions = start_positions.clamp(0, ignored_index)
|
1401 |
+
end_positions = end_positions.clamp(0, ignored_index)
|
1402 |
+
|
1403 |
+
loss_fct = nn.CrossEntropyLoss(ignore_index=ignored_index)
|
1404 |
+
start_loss = loss_fct(start_logits, start_positions)
|
1405 |
+
end_loss = loss_fct(end_logits, end_positions)
|
1406 |
+
total_loss = (start_loss + end_loss) / 2
|
1407 |
+
|
1408 |
+
if not return_dict:
|
1409 |
+
output = (start_logits, end_logits) + outputs[2:]
|
1410 |
+
return ((total_loss,) + output) if total_loss is not None else output
|
1411 |
+
|
1412 |
+
return QuestionAnsweringModelOutput(
|
1413 |
+
loss=total_loss,
|
1414 |
+
start_logits=start_logits,
|
1415 |
+
end_logits=end_logits,
|
1416 |
+
hidden_states=outputs.hidden_states,
|
1417 |
+
attentions=outputs.attentions,
|
1418 |
+
)
|
modules.json
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"idx": 0,
|
4 |
+
"name": "0",
|
5 |
+
"path": "",
|
6 |
+
"type": "sentence_transformers.models.Transformer"
|
7 |
+
},
|
8 |
+
{
|
9 |
+
"idx": 1,
|
10 |
+
"name": "1",
|
11 |
+
"path": "1_Pooling",
|
12 |
+
"type": "sentence_transformers.models.Pooling"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"idx": 2,
|
16 |
+
"name": "2",
|
17 |
+
"path": "2_Normalize",
|
18 |
+
"type": "sentence_transformers.models.Normalize"
|
19 |
+
}
|
20 |
+
]
|
sentence_bert_config.json
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"max_seq_length": 512,
|
3 |
+
"do_lower_case": false
|
4 |
+
}
|
special_tokens_map.json
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"bos_token": {
|
3 |
+
"content": "<s>",
|
4 |
+
"lstrip": false,
|
5 |
+
"normalized": false,
|
6 |
+
"rstrip": false,
|
7 |
+
"single_word": false
|
8 |
+
},
|
9 |
+
"cls_token": {
|
10 |
+
"content": "<s>",
|
11 |
+
"lstrip": false,
|
12 |
+
"normalized": false,
|
13 |
+
"rstrip": false,
|
14 |
+
"single_word": false
|
15 |
+
},
|
16 |
+
"eos_token": {
|
17 |
+
"content": "</s>",
|
18 |
+
"lstrip": false,
|
19 |
+
"normalized": false,
|
20 |
+
"rstrip": false,
|
21 |
+
"single_word": false
|
22 |
+
},
|
23 |
+
"mask_token": {
|
24 |
+
"content": "<mask>",
|
25 |
+
"lstrip": true,
|
26 |
+
"normalized": false,
|
27 |
+
"rstrip": false,
|
28 |
+
"single_word": false
|
29 |
+
},
|
30 |
+
"pad_token": {
|
31 |
+
"content": "<pad>",
|
32 |
+
"lstrip": false,
|
33 |
+
"normalized": false,
|
34 |
+
"rstrip": false,
|
35 |
+
"single_word": false
|
36 |
+
},
|
37 |
+
"sep_token": {
|
38 |
+
"content": "</s>",
|
39 |
+
"lstrip": false,
|
40 |
+
"normalized": false,
|
41 |
+
"rstrip": false,
|
42 |
+
"single_word": false
|
43 |
+
},
|
44 |
+
"unk_token": {
|
45 |
+
"content": "<unk>",
|
46 |
+
"lstrip": false,
|
47 |
+
"normalized": false,
|
48 |
+
"rstrip": false,
|
49 |
+
"single_word": false
|
50 |
+
}
|
51 |
+
}
|
tokenizer.json
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:883b037111086fd4dfebbbc9b7cee11e1517b5e0c0514879478661440f137085
|
3 |
+
size 17082987
|
tokenizer_config.json
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"added_tokens_decoder": {
|
3 |
+
"0": {
|
4 |
+
"content": "<s>",
|
5 |
+
"lstrip": false,
|
6 |
+
"normalized": false,
|
7 |
+
"rstrip": false,
|
8 |
+
"single_word": false,
|
9 |
+
"special": true
|
10 |
+
},
|
11 |
+
"1": {
|
12 |
+
"content": "<pad>",
|
13 |
+
"lstrip": false,
|
14 |
+
"normalized": false,
|
15 |
+
"rstrip": false,
|
16 |
+
"single_word": false,
|
17 |
+
"special": true
|
18 |
+
},
|
19 |
+
"2": {
|
20 |
+
"content": "</s>",
|
21 |
+
"lstrip": false,
|
22 |
+
"normalized": false,
|
23 |
+
"rstrip": false,
|
24 |
+
"single_word": false,
|
25 |
+
"special": true
|
26 |
+
},
|
27 |
+
"3": {
|
28 |
+
"content": "<unk>",
|
29 |
+
"lstrip": false,
|
30 |
+
"normalized": false,
|
31 |
+
"rstrip": false,
|
32 |
+
"single_word": false,
|
33 |
+
"special": true
|
34 |
+
},
|
35 |
+
"250001": {
|
36 |
+
"content": "<mask>",
|
37 |
+
"lstrip": true,
|
38 |
+
"normalized": false,
|
39 |
+
"rstrip": false,
|
40 |
+
"single_word": false,
|
41 |
+
"special": true
|
42 |
+
}
|
43 |
+
},
|
44 |
+
"bos_token": "<s>",
|
45 |
+
"clean_up_tokenization_spaces": true,
|
46 |
+
"cls_token": "<s>",
|
47 |
+
"eos_token": "</s>",
|
48 |
+
"extra_special_tokens": {},
|
49 |
+
"mask_token": "<mask>",
|
50 |
+
"model_max_length": 8192,
|
51 |
+
"pad_token": "<pad>",
|
52 |
+
"sep_token": "</s>",
|
53 |
+
"tokenizer_class": "XLMRobertaTokenizerFast",
|
54 |
+
"unk_token": "<unk>"
|
55 |
+
}
|