xuandin commited on
Commit
3b3c570
·
verified ·
1 Parent(s): 37ed70f

Upload from huggingface_hub

Browse files
.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
+ }