import{s as yn,o as _n}from"../chunks/scheduler.37c15a92.js";import{S as kn,i as Mn,g as f,s as o,r as d,A as $n,h as g,f as s,c as a,j as fn,u as y,x as b,k as gn,y as vn,a as i,v as _,t as m,b as Jt,d as p,w as k,p as Ct}from"../chunks/index.2bf4358c.js";import{Y as bn}from"../chunks/Youtube.1e50a667.js";import{C as v}from"../chunks/CodeBlock.4e987730.js";import{C as dn}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{F as Tn}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ht,E as wn}from"../chunks/index.b8688d36.js";function Jn(u){let n,c;return n=new dn({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/vi/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/vi/chapter2/section3_tf.ipynb"}]}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Cn(u){let n,c;return n=new dn({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/vi/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/vi/chapter2/section3_pt.ipynb"}]}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function jn(u){let n,c;return n=new bn({props:{id:"d3JVgghSOew"}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function xn(u){let n,c;return n=new bn({props:{id:"AhChOFRegn4"}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Bn(u){let n,c="Trong phần này, chúng ta sẽ xem xét kỹ hơn về việc tạo và sử dụng một mô hình. Chúng tôi sẽ sử dụng <code>TFAutoModel</code>, rất tiện lợi khi bạn muốn khởi tạo bất kỳ mô hình nào từ một checkpoint.",e,r,M="<code>TFAutoModel</code> và tất cả các lớp họ hàng của nó thực ra là các hàm đóng gói đơn giản trên nhiều loại mô hình có sẵn trong thư viện. Đó là một hàm đóng gói thông minh vì nó có thể tự động đoán kiến trúc mô hình thích hợp cho checkpoint của bạn và sau đó khởi tạo một mô hình với kiến trúc này.";return{c(){n=f("p"),n.innerHTML=c,e=o(),r=f("p"),r.innerHTML=M},l(h){n=g(h,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1dg04fy"&&(n.innerHTML=c),e=a(h),r=g(h,"P",{"data-svelte-h":!0}),b(r)!=="svelte-d3udf7"&&(r.innerHTML=M)},m(h,$){i(h,n,$),i(h,e,$),i(h,r,$)},d(h){h&&(s(n),s(e),s(r))}}}function Zn(u){let n,c="Trong phần này, chúng ta sẽ xem xét kỹ hơn về việc tạo và sử dụng một mô hình. Chúng tôi sẽ sử dụng <code>AutoModel</code>, rất tiện lợi khi bạn muốn khởi tạo bất kỳ mô hình nào từ một checkpoint.",e,r,M="<code>AutoModel</code> và tất cả các lớp họ hàng của nó thực ra là các hàm đóng gói đơn giản trên nhiều loại mô hình có sẵn trong thư viện. Đó là một hàm đóng gói thông minh vì nó có thể tự động đoán kiến trúc mô hình thích hợp cho checkpoint của bạn và sau đó khởi tạo một mô hình với kiến trúc này.";return{c(){n=f("p"),n.innerHTML=c,e=o(),r=f("p"),r.innerHTML=M},l(h){n=g(h,"P",{"data-svelte-h":!0}),b(n)!=="svelte-smjs3s"&&(n.innerHTML=c),e=a(h),r=g(h,"P",{"data-svelte-h":!0}),b(r)!=="svelte-pe39pd"&&(r.innerHTML=M)},m(h,$){i(h,n,$),i(h,e,$),i(h,r,$)},d(h){h&&(s(n),s(e),s(r))}}}function Un(u){let n,c;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwY29uZmlnJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQnVpbGRpbmclMjB0aGUlMjBtb2RlbCUyMGZyb20lMjB0aGUlMjBjb25maWclMEFtb2RlbCUyMCUzRCUyMFRGQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Wn(u){let n,c;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBCdWlsZGluZyUyMHRoZSUyMGNvbmZpZyUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwbW9kZWwlMjBmcm9tJTIwdGhlJTIwY29uZmlnJTBBbW9kZWwlMjAlM0QlMjBCZXJ0TW9kZWwoY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = BertModel(config)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function En(u){let n,c;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyME1vZGVsJTIwaXMlMjByYW5kb21seSUyMGluaXRpYWxpemVkIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># Model is randomly initialized!</span>`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function In(u){let n,c;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwTW9kZWwlMjBpcyUyMHJhbmRvbWx5JTIwaW5pdGlhbGl6ZWQh",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># Model is randomly initialized!</span>`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Rn(u){let n,c,e,r="Như bạn đã thấy trước đó, chúng ta có thể thay thế <code>BertModel</code> bằng <code>TFAutoModel</code> tương đương. Chúng ta sẽ làm điều này từ bây giờ vì điều này tạo ra các đoạn mã checkpoint bất khả tri; nếu mã của bạn hoạt động cho một checkpoint, nó sẽ hoạt động liền mạch với một checkpoint khác. Điều này áp dụng ngay cả khi kiến trúc khác nhau, miễn là checkpoint đã được huấn luyện cho một tác vụ tương tự (ví dụ: một tác vụ phân tích cảm xúc).",M;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){d(n.$$.fragment),c=o(),e=f("p"),e.innerHTML=r},l(h){y(n.$$.fragment,h),c=a(h),e=g(h,"P",{"data-svelte-h":!0}),b(e)!=="svelte-ysasx1"&&(e.innerHTML=r)},m(h,$){_(n,h,$),i(h,c,$),i(h,e,$),M=!0},i(h){M||(p(n.$$.fragment,h),M=!0)},o(h){m(n.$$.fragment,h),M=!1},d(h){h&&(s(c),s(e)),k(n,h)}}}function Hn(u){let n,c,e,r="Như bạn đã thấy trước đó, chúng ta có thể thay thế <code>BertModel</code> bằng <code>AutoModel</code> tương đương. Chúng ta sẽ làm điều này từ bây giờ vì điều này tạo ra các đoạn mã checkpoint bất khả tri; nếu mã của bạn hoạt động cho một checkpoint, nó sẽ hoạt động liền mạch với một checkpoint khác. Điều này áp dụng ngay cả khi kiến trúc khác nhau, miễn là checkpoint đã được huấn luyện cho một tác vụ tương tự (ví dụ: một tác vụ phân tích cảm xúc).",M;return n=new v({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){d(n.$$.fragment),c=o(),e=f("p"),e.innerHTML=r},l(h){y(n.$$.fragment,h),c=a(h),e=g(h,"P",{"data-svelte-h":!0}),b(e)!=="svelte-1ghl2qj"&&(e.innerHTML=r)},m(h,$){_(n,h,$),i(h,c,$),i(h,e,$),M=!0},i(h){M||(p(n.$$.fragment,h),M=!0)},o(h){m(n.$$.fragment,h),M=!1},d(h){h&&(s(c),s(e)),k(n,h)}}}function Vn(u){let n,c;return n=new v({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Gn(u){let n,c;return n=new v({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHB5dG9yY2hfbW9kZWwuYmlu",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>pytorch_model.<span class="hljs-keyword">bin</span>`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function Nn(u){let n,c="Tệp <em>tf_model.h5</em> được gọi là <em>state dictionary</em> (<em>từ điển trạng thái</em>); nó chứa tất cả các trọng số mô hình của bạn. Hai tập tin đi đôi với nhau; cấu hình là cần thiết để biết kiến trúc mô hình của bạn, trong khi trọng số mô hình là thông số của mô hình của bạn.";return{c(){n=f("p"),n.innerHTML=c},l(e){n=g(e,"P",{"data-svelte-h":!0}),b(n)!=="svelte-ht122g"&&(n.innerHTML=c)},m(e,r){i(e,n,r)},d(e){e&&s(n)}}}function Ln(u){let n,c="Tệp <em>pytorch_model.bin</em> được gọi là <em>state dictionary</em> (<em>từ điển trạng thái</em>); nó chứa tất cả các trọng số mô hình của bạn. Hai tập tin đi đôi với nhau; cấu hình là cần thiết để biết kiến trúc mô hình của bạn, trong khi trọng số mô hình là thông số của mô hình của bạn.";return{c(){n=f("p"),n.innerHTML=c},l(e){n=g(e,"P",{"data-svelte-h":!0}),b(n)!=="svelte-130kkwv"&&(n.innerHTML=c)},m(e,r){i(e,n,r)},d(e){e&&s(n)}}}function Qn(u){let n,c;return n=new v({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function zn(u){let n,c;return n=new v({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(e){y(n.$$.fragment,e)},m(e,r){_(n,e,r),c=!0},i(e){c||(p(n.$$.fragment,e),c=!0)},o(e){m(n.$$.fragment,e),c=!1},d(e){k(n,e)}}}function An(u){let n,c,e,r,M,h,$,Gt,T,w,jt,J,C,xt,Bt,N,xe="Tuy nhiên, nếu bạn biết loại mô hình bạn muốn sử dụng, bạn có thể sử dụng trực tiếp lớp định nghĩa kiến trúc của nó. Chúng ta hãy xem cách này hoạt động với mô hình BERT.",Nt,L,Lt,Q,Be="Điều đầu tiên ta cần làm để khởi tạo mô hình BERT là tải một cấu hình:",Qt,j,x,Zt,z,Ze="Cấu hình chứa nhiều thuộc tính được sử dụng để xây dựng mô hình:",zt,A,At,P,Pt,S,Ue="Mặc dù bạn chưa thấy tất cả các thuộc tính này có tác dụng gì, nhưng bạn nên nhận ra một số trong số chúng: thuộc tính <code>hidden_size</code> xác định kích thước của vectơ <code>hidden_states</code> và <code>num_hidden_layers</code> xác định số lớp mà mô hình Transformer có.",St,F,Ft,X,We="Việc tạo mô hình từ cấu hình mặc định sẽ khởi tạo mô hình đó với các giá trị ngẫu nhiên:",Xt,B,Z,Ut,Y,Ee='Mô hình có thể được sử dụng ở trạng thái này, nhưng nó sẽ trả ra vô nghĩa; nó cần được huấn luyện trước. Chúng ta có thể huấn luyện mô hình từ đầu tác vụ này, nhưng như bạn đã thấy trong <a href="/course/chapter1">Chương 1</a>, điều này sẽ đòi hỏi một thời gian dài và nhiều dữ liệu, và nó sẽ tác động đáng kể tới môi trường. Để tránh nỗ lực không cần thiết và trùng lặp, khả năng chia sẻ và sử dụng lại các mô hình đã được huấn luyện trở nên bắt buộc.',Yt,q,Ie="Việc tải một mô hình Transformer đã được huấn luyện trước rất đơn giản - chúng ta có thể thực hiện việc này bằng cách sử dụng phương thức <code>from_pretrained()</code>:",qt,U,W,Wt,D,Re='Trong đoạn mã ở trên, ta không sử dụng <code>BertConfig</code> và thay vào đó, tải một mô hình được đào tạo trước thông qua mã định danh <code>bert-base-cased</code>. Đây là một checkpoint mô hình do chính các tác giả của BERT huấn luyện; bạn có thể tìm thêm thông tin chi tiết về nó trong <a href="https://huggingface.co/bert-base-cased" rel="nofollow">thẻ mô hình</a>.',Dt,K,He="Mô hình này hiện đã được khởi tạo với tất cả các trọng số của checkpoint. Nó có thể được sử dụng trực tiếp để luận suy về các tác vụ mà nó đã được huấn luyện, và nó cũng có thể được tinh chỉnh trên một tác vụ mới. Bằng cách huấn luyện với trọng số đã được huấn luyện trước chứ không phải từ đầu, chúng ta có thể nhanh chóng đạt được kết quả tốt.",Kt,O,Ve="Các trọng số đã được tải xuống và lưu vào bộ nhớ cache (vì vậy các lệnh gọi tới phương thức <code>from_pretrained()</code> trong tương lai sẽ không tải xuống lại chúng) trong thư mục bộ nhớ cache, mặc định là <em>~/.cache/huggingface/transformers</em>. Bạn có thể tùy chỉnh thư mục bộ nhớ cache của mình bằng cách đặt biến môi trường <code>HF_HOME</code>.",Ot,tt,Ge='Số định danh được sử dụng để tải mô hình có thể là số định danh của bất kỳ mô hình nào trên Model Hub, miễn là nó tương thích với kiến ​​trúc BERT. Toàn bộ danh sách các checkpoint BERT hiện có có thể được tìm thấy <a href="https://huggingface.co/models?filter=bert" rel="nofollow">tại đây</a>.',te,et,ee,nt,Ne="Lưu một mô hình cũng dễ dàng như tải một mô hình - chúng ta sử dụng phương thức <code>save_pretrained()</code>, tương tự với phương thức <code>from_pretrained()</code>:",ne,lt,le,ct,Le="Thao tác này sẽ lưu hai tệp vào đĩa của bạn:",ce,E,I,Et,st,Qe="Nếu bạn xem tệp <em>config.json</em>, bạn sẽ nhận ra các thuộc tính cần thiết để xây dựng kiến trúc mô hình. Tệp này cũng chứa một số siêu dữ liệu, chẳng hạn như điểm bắt nguồn của checkpoint và phiên bản 🤗 Transformers bạn đang sử dụng khi bạn lưu checkpoint lần cuối.",se,It,it,ie,rt,ze="Giờ bạn đã biết cách tải và lưu một mô hình, hãy thử sử dụng nó để đưa ra một số dự đoán. Các mô hình Transfomer chỉ có thể xử lý số - các số mà tokenizer tạo ra. Nhưng trước khi chúng ta thảo luận về tokenizer, chúng ta hãy khám phá những yếu tố đầu vào mà mô hình chấp nhận.",re,ht,Ae="Tokenizer có thể đảm nhận việc truyền các đầu vào đến các tensor của khung thích hợp, nhưng để giúp bạn hiểu những gì đang xảy ra, chúng ta sẽ xem xét nhanh những gì phải thực hiện trước khi gửi đầu vào cho mô hình.",he,ot,Pe="Giả sử chúng ta có một vài chuỗi như sau:",oe,at,ae,mt,Se="Tokenizer chuyển đổi các chỉ số này thành các chỉ mục từ vựng thường được gọi là <em>ID đầu vào</em>. Mỗi chuỗi giờ là một danh sách các số! Kết quả đầu ra là:",me,pt,pe,ut,Fe="Đây là danh sách các chuỗi được mã hóa: danh sách các danh sách. Tensor chỉ chấp nhận dạng hình chữ nhật (hãy nghĩ tới ma trận). “Mảng” này đã có dạng hình chữ nhật, vì vậy việc chuyển đổi nó thành một tensor rất dễ dàng:",ue,R,H,Rt,ft,fe,gt,Xe="Việc sử dụng các tensors với mô hình cực kỳ đơn giản - chúng ta chỉ cần gọi mô hình với các đầu vào:",ge,bt,be,dt,Ye="Mặc dù mô hình chấp nhận rất nhiều tham số khác nhau, nhưng chỉ các ID đầu vào là cần thiết. Chúng tôi sẽ giải thích những gì các tham số khác làm và khi nào chúng được yêu cầu sau, nhưng trước tiên, chúng ta cần xem xét kỹ hơn các bộ tokenizer tạo ra các đầu vào mà một mô hình Transformer có thể hiểu được.",de,yt,ye,Vt,_e;M=new Tn({props:{fw:u[0]}}),$=new Ht({props:{title:"Các mô hình",local:"các-mô-hình",headingTag:"h1"}});const qe=[Cn,Jn],_t=[];function De(t,l){return t[0]==="pt"?0:1}T=De(u),w=_t[T]=qe[T](u);const Ke=[xn,jn],kt=[];function Oe(t,l){return t[0]==="pt"?0:1}J=Oe(u),C=kt[J]=Ke[J](u);function tn(t,l){return t[0]==="pt"?Zn:Bn}let ke=tn(u),V=ke(u);L=new Ht({props:{title:"Tạo ra một Transformer",local:"tạo-ra-một-transformer",headingTag:"h2"}});const en=[Wn,Un],Mt=[];function nn(t,l){return t[0]==="pt"?0:1}j=nn(u),x=Mt[j]=en[j](u),A=new v({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),P=new v({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),F=new Ht({props:{title:"Các phương pháp tải khác nhau",local:"các-phương-pháp-tải-khác-nhau",headingTag:"h3"}});const ln=[In,En],$t=[];function cn(t,l){return t[0]==="pt"?0:1}B=cn(u),Z=$t[B]=ln[B](u);const sn=[Hn,Rn],vt=[];function rn(t,l){return t[0]==="pt"?0:1}U=rn(u),W=vt[U]=sn[U](u),et=new Ht({props:{title:"Phương pháp lưu trữ checkpoint",local:"phương-pháp-lưu-trữ-checkpoint",headingTag:"h3"}}),lt=new v({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const hn=[Gn,Vn],Tt=[];function on(t,l){return t[0]==="pt"?0:1}E=on(u),I=Tt[E]=hn[E](u);function an(t,l){return t[0]==="pt"?Ln:Nn}let Me=an(u),G=Me(u);it=new Ht({props:{title:"Sử dụng mô hình Transformer để luận suy",local:"sử-dụng-mô-hình-transformer-để-luận-suy",headingTag:"h2"}}),at=new v({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),pt=new v({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const mn=[zn,Qn],wt=[];function pn(t,l){return t[0]==="pt"?0:1}return R=pn(u),H=wt[R]=mn[R](u),ft=new Ht({props:{title:"Sử dụng tensor làm đầu vào mô hình",local:"sử-dụng-tensor-làm-đầu-vào-mô-hình",headingTag:"h3"}}),bt=new v({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),yt=new wn({props:{source:"https://github.com/huggingface/course/blob/main/chapters/vi/chapter2/3.mdx"}}),{c(){n=f("meta"),c=o(),e=f("p"),r=o(),d(M.$$.fragment),h=o(),d($.$$.fragment),Gt=o(),w.c(),jt=o(),C.c(),xt=o(),V.c(),Bt=o(),N=f("p"),N.textContent=xe,Nt=o(),d(L.$$.fragment),Lt=o(),Q=f("p"),Q.textContent=Be,Qt=o(),x.c(),Zt=o(),z=f("p"),z.textContent=Ze,zt=o(),d(A.$$.fragment),At=o(),d(P.$$.fragment),Pt=o(),S=f("p"),S.innerHTML=Ue,St=o(),d(F.$$.fragment),Ft=o(),X=f("p"),X.textContent=We,Xt=o(),Z.c(),Ut=o(),Y=f("p"),Y.innerHTML=Ee,Yt=o(),q=f("p"),q.innerHTML=Ie,qt=o(),W.c(),Wt=o(),D=f("p"),D.innerHTML=Re,Dt=o(),K=f("p"),K.textContent=He,Kt=o(),O=f("p"),O.innerHTML=Ve,Ot=o(),tt=f("p"),tt.innerHTML=Ge,te=o(),d(et.$$.fragment),ee=o(),nt=f("p"),nt.innerHTML=Ne,ne=o(),d(lt.$$.fragment),le=o(),ct=f("p"),ct.textContent=Le,ce=o(),I.c(),Et=o(),st=f("p"),st.innerHTML=Qe,se=o(),G.c(),It=o(),d(it.$$.fragment),ie=o(),rt=f("p"),rt.textContent=ze,re=o(),ht=f("p"),ht.textContent=Ae,he=o(),ot=f("p"),ot.textContent=Pe,oe=o(),d(at.$$.fragment),ae=o(),mt=f("p"),mt.innerHTML=Se,me=o(),d(pt.$$.fragment),pe=o(),ut=f("p"),ut.textContent=Fe,ue=o(),H.c(),Rt=o(),d(ft.$$.fragment),fe=o(),gt=f("p"),gt.textContent=Xe,ge=o(),d(bt.$$.fragment),be=o(),dt=f("p"),dt.textContent=Ye,de=o(),d(yt.$$.fragment),ye=o(),Vt=f("p"),this.h()},l(t){const l=$n("svelte-u9bgzb",document.head);n=g(l,"META",{name:!0,content:!0}),l.forEach(s),c=a(t),e=g(t,"P",{}),fn(e).forEach(s),r=a(t),y(M.$$.fragment,t),h=a(t),y($.$$.fragment,t),Gt=a(t),w.l(t),jt=a(t),C.l(t),xt=a(t),V.l(t),Bt=a(t),N=g(t,"P",{"data-svelte-h":!0}),b(N)!=="svelte-n4oas2"&&(N.textContent=xe),Nt=a(t),y(L.$$.fragment,t),Lt=a(t),Q=g(t,"P",{"data-svelte-h":!0}),b(Q)!=="svelte-g3m00f"&&(Q.textContent=Be),Qt=a(t),x.l(t),Zt=a(t),z=g(t,"P",{"data-svelte-h":!0}),b(z)!=="svelte-97p6x4"&&(z.textContent=Ze),zt=a(t),y(A.$$.fragment,t),At=a(t),y(P.$$.fragment,t),Pt=a(t),S=g(t,"P",{"data-svelte-h":!0}),b(S)!=="svelte-1f9q1sq"&&(S.innerHTML=Ue),St=a(t),y(F.$$.fragment,t),Ft=a(t),X=g(t,"P",{"data-svelte-h":!0}),b(X)!=="svelte-13u77v8"&&(X.textContent=We),Xt=a(t),Z.l(t),Ut=a(t),Y=g(t,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-doozmz"&&(Y.innerHTML=Ee),Yt=a(t),q=g(t,"P",{"data-svelte-h":!0}),b(q)!=="svelte-92rxcs"&&(q.innerHTML=Ie),qt=a(t),W.l(t),Wt=a(t),D=g(t,"P",{"data-svelte-h":!0}),b(D)!=="svelte-1k376u4"&&(D.innerHTML=Re),Dt=a(t),K=g(t,"P",{"data-svelte-h":!0}),b(K)!=="svelte-kye38e"&&(K.textContent=He),Kt=a(t),O=g(t,"P",{"data-svelte-h":!0}),b(O)!=="svelte-1j65gde"&&(O.innerHTML=Ve),Ot=a(t),tt=g(t,"P",{"data-svelte-h":!0}),b(tt)!=="svelte-78gsh9"&&(tt.innerHTML=Ge),te=a(t),y(et.$$.fragment,t),ee=a(t),nt=g(t,"P",{"data-svelte-h":!0}),b(nt)!=="svelte-1jrmtei"&&(nt.innerHTML=Ne),ne=a(t),y(lt.$$.fragment,t),le=a(t),ct=g(t,"P",{"data-svelte-h":!0}),b(ct)!=="svelte-obfkfh"&&(ct.textContent=Le),ce=a(t),I.l(t),Et=a(t),st=g(t,"P",{"data-svelte-h":!0}),b(st)!=="svelte-9nongp"&&(st.innerHTML=Qe),se=a(t),G.l(t),It=a(t),y(it.$$.fragment,t),ie=a(t),rt=g(t,"P",{"data-svelte-h":!0}),b(rt)!=="svelte-2dx07d"&&(rt.textContent=ze),re=a(t),ht=g(t,"P",{"data-svelte-h":!0}),b(ht)!=="svelte-172bjw8"&&(ht.textContent=Ae),he=a(t),ot=g(t,"P",{"data-svelte-h":!0}),b(ot)!=="svelte-1qn1uce"&&(ot.textContent=Pe),oe=a(t),y(at.$$.fragment,t),ae=a(t),mt=g(t,"P",{"data-svelte-h":!0}),b(mt)!=="svelte-1peflew"&&(mt.innerHTML=Se),me=a(t),y(pt.$$.fragment,t),pe=a(t),ut=g(t,"P",{"data-svelte-h":!0}),b(ut)!=="svelte-1wv0tao"&&(ut.textContent=Fe),ue=a(t),H.l(t),Rt=a(t),y(ft.$$.fragment,t),fe=a(t),gt=g(t,"P",{"data-svelte-h":!0}),b(gt)!=="svelte-1i10v4c"&&(gt.textContent=Xe),ge=a(t),y(bt.$$.fragment,t),be=a(t),dt=g(t,"P",{"data-svelte-h":!0}),b(dt)!=="svelte-1asohhx"&&(dt.textContent=Ye),de=a(t),y(yt.$$.fragment,t),ye=a(t),Vt=g(t,"P",{}),fn(Vt).forEach(s),this.h()},h(){gn(n,"name","hf:doc:metadata"),gn(n,"content",Pn)},m(t,l){vn(document.head,n),i(t,c,l),i(t,e,l),i(t,r,l),_(M,t,l),i(t,h,l),_($,t,l),i(t,Gt,l),_t[T].m(t,l),i(t,jt,l),kt[J].m(t,l),i(t,xt,l),V.m(t,l),i(t,Bt,l),i(t,N,l),i(t,Nt,l),_(L,t,l),i(t,Lt,l),i(t,Q,l),i(t,Qt,l),Mt[j].m(t,l),i(t,Zt,l),i(t,z,l),i(t,zt,l),_(A,t,l),i(t,At,l),_(P,t,l),i(t,Pt,l),i(t,S,l),i(t,St,l),_(F,t,l),i(t,Ft,l),i(t,X,l),i(t,Xt,l),$t[B].m(t,l),i(t,Ut,l),i(t,Y,l),i(t,Yt,l),i(t,q,l),i(t,qt,l),vt[U].m(t,l),i(t,Wt,l),i(t,D,l),i(t,Dt,l),i(t,K,l),i(t,Kt,l),i(t,O,l),i(t,Ot,l),i(t,tt,l),i(t,te,l),_(et,t,l),i(t,ee,l),i(t,nt,l),i(t,ne,l),_(lt,t,l),i(t,le,l),i(t,ct,l),i(t,ce,l),Tt[E].m(t,l),i(t,Et,l),i(t,st,l),i(t,se,l),G.m(t,l),i(t,It,l),_(it,t,l),i(t,ie,l),i(t,rt,l),i(t,re,l),i(t,ht,l),i(t,he,l),i(t,ot,l),i(t,oe,l),_(at,t,l),i(t,ae,l),i(t,mt,l),i(t,me,l),_(pt,t,l),i(t,pe,l),i(t,ut,l),i(t,ue,l),wt[R].m(t,l),i(t,Rt,l),_(ft,t,l),i(t,fe,l),i(t,gt,l),i(t,ge,l),_(bt,t,l),i(t,be,l),i(t,dt,l),i(t,de,l),_(yt,t,l),i(t,ye,l),i(t,Vt,l),_e=!0},p(t,[l]){const un={};l&1&&(un.fw=t[0]),M.$set(un);let $e=T;T=De(t),T!==$e&&(Ct(),m(_t[$e],1,1,()=>{_t[$e]=null}),Jt(),w=_t[T],w||(w=_t[T]=qe[T](t),w.c()),p(w,1),w.m(jt.parentNode,jt));let ve=J;J=Oe(t),J!==ve&&(Ct(),m(kt[ve],1,1,()=>{kt[ve]=null}),Jt(),C=kt[J],C||(C=kt[J]=Ke[J](t),C.c()),p(C,1),C.m(xt.parentNode,xt)),ke!==(ke=tn(t))&&(V.d(1),V=ke(t),V&&(V.c(),V.m(Bt.parentNode,Bt)));let Te=j;j=nn(t),j!==Te&&(Ct(),m(Mt[Te],1,1,()=>{Mt[Te]=null}),Jt(),x=Mt[j],x||(x=Mt[j]=en[j](t),x.c()),p(x,1),x.m(Zt.parentNode,Zt));let we=B;B=cn(t),B!==we&&(Ct(),m($t[we],1,1,()=>{$t[we]=null}),Jt(),Z=$t[B],Z||(Z=$t[B]=ln[B](t),Z.c()),p(Z,1),Z.m(Ut.parentNode,Ut));let Je=U;U=rn(t),U!==Je&&(Ct(),m(vt[Je],1,1,()=>{vt[Je]=null}),Jt(),W=vt[U],W||(W=vt[U]=sn[U](t),W.c()),p(W,1),W.m(Wt.parentNode,Wt));let Ce=E;E=on(t),E!==Ce&&(Ct(),m(Tt[Ce],1,1,()=>{Tt[Ce]=null}),Jt(),I=Tt[E],I||(I=Tt[E]=hn[E](t),I.c()),p(I,1),I.m(Et.parentNode,Et)),Me!==(Me=an(t))&&(G.d(1),G=Me(t),G&&(G.c(),G.m(It.parentNode,It)));let je=R;R=pn(t),R!==je&&(Ct(),m(wt[je],1,1,()=>{wt[je]=null}),Jt(),H=wt[R],H||(H=wt[R]=mn[R](t),H.c()),p(H,1),H.m(Rt.parentNode,Rt))},i(t){_e||(p(M.$$.fragment,t),p($.$$.fragment,t),p(w),p(C),p(L.$$.fragment,t),p(x),p(A.$$.fragment,t),p(P.$$.fragment,t),p(F.$$.fragment,t),p(Z),p(W),p(et.$$.fragment,t),p(lt.$$.fragment,t),p(I),p(it.$$.fragment,t),p(at.$$.fragment,t),p(pt.$$.fragment,t),p(H),p(ft.$$.fragment,t),p(bt.$$.fragment,t),p(yt.$$.fragment,t),_e=!0)},o(t){m(M.$$.fragment,t),m($.$$.fragment,t),m(w),m(C),m(L.$$.fragment,t),m(x),m(A.$$.fragment,t),m(P.$$.fragment,t),m(F.$$.fragment,t),m(Z),m(W),m(et.$$.fragment,t),m(lt.$$.fragment,t),m(I),m(it.$$.fragment,t),m(at.$$.fragment,t),m(pt.$$.fragment,t),m(H),m(ft.$$.fragment,t),m(bt.$$.fragment,t),m(yt.$$.fragment,t),_e=!1},d(t){t&&(s(c),s(e),s(r),s(h),s(Gt),s(jt),s(xt),s(Bt),s(N),s(Nt),s(Lt),s(Q),s(Qt),s(Zt),s(z),s(zt),s(At),s(Pt),s(S),s(St),s(Ft),s(X),s(Xt),s(Ut),s(Y),s(Yt),s(q),s(qt),s(Wt),s(D),s(Dt),s(K),s(Kt),s(O),s(Ot),s(tt),s(te),s(ee),s(nt),s(ne),s(le),s(ct),s(ce),s(Et),s(st),s(se),s(It),s(ie),s(rt),s(re),s(ht),s(he),s(ot),s(oe),s(ae),s(mt),s(me),s(pe),s(ut),s(ue),s(Rt),s(fe),s(gt),s(ge),s(be),s(dt),s(de),s(ye),s(Vt)),s(n),k(M,t),k($,t),_t[T].d(t),kt[J].d(t),V.d(t),k(L,t),Mt[j].d(t),k(A,t),k(P,t),k(F,t),$t[B].d(t),vt[U].d(t),k(et,t),k(lt,t),Tt[E].d(t),G.d(t),k(it,t),k(at,t),k(pt,t),wt[R].d(t),k(ft,t),k(bt,t),k(yt,t)}}}const Pn='{"title":"Các mô hình","local":"các-mô-hình","sections":[{"title":"Tạo ra một Transformer","local":"tạo-ra-một-transformer","sections":[{"title":"Các phương pháp tải khác nhau","local":"các-phương-pháp-tải-khác-nhau","sections":[],"depth":3},{"title":"Phương pháp lưu trữ checkpoint","local":"phương-pháp-lưu-trữ-checkpoint","sections":[],"depth":3}],"depth":2},{"title":"Sử dụng mô hình Transformer để luận suy","local":"sử-dụng-mô-hình-transformer-để-luận-suy","sections":[{"title":"Sử dụng tensor làm đầu vào mô hình","local":"sử-dụng-tensor-làm-đầu-vào-mô-hình","sections":[],"depth":3}],"depth":2}],"depth":1}';function Sn(u,n,c){let e="pt";return _n(()=>{const r=new URLSearchParams(window.location.search);c(0,e=r.get("fw")||"pt")}),[e]}class tl extends kn{constructor(n){super(),Mn(this,n,Sn,An,yn,{})}}export{tl as component};
