Kweli nqaku, siza kuhamba ngendlela yokwenza imodeli yolwimi olula kakhulu usebenzisa iRuby. Ngelixa iiMifuziselo zoLwimi olukhulu lokwenyani (LLMs) zifuna izixa ezikhulu zedatha kunye nezixhobo zokubala, sinokuyila imodeli yokudlala ebonisa uninzi lweengqikelelo ezingundoqo emva kokwenziwa kolwimi. Kumzekelo wethu, siya kwakha imodeli ye-Markov Chain esisiseko "efunda" kumbhalo wokufakwayo kwaye emva koko ivelise isicatshulwa esitsha ngokusekwe kwiipateni eziyibonileyo.
Qaphela: Esi sifundo senzelwe iinjongo zemfundo kwaye sibonakalisa indlela elula yokwenziwa kolwimi. Ayikokuthatha indawo ye-LLMs zale mihla zokufunda nzulu njenge-GPT-4 kodwa yintshayelelo yezimvo ezisisiseko.
IModeli yoLwimi yinkqubo enika amathuba okulandelelana kwamagama. Embindini walo, iyilelwe ukubamba ukwakheka kweenkcukacha-manani zolwimi ngokufunda ukuba nokwenzeka kolandelelwano oluthile kwimeko ethile. Oku kuthetha ukuba imodeli ihlalutya imizimba emikhulu yesicatshulwa ukuqonda indlela amagama aqhele ukulandelelana ngayo, ngaloo ndlela ivumela ukuba iqikelele ukuba leliphi igama okanye ibinzana elinokuza ngokulandelayo ngokulandelelana. Ubunakho obunjalo bungundoqo kungekuphela nje kwimisebenzi efana nokuveliswa kokubhaliweyo kunye nokugqibezela ngokuzenzekelayo kodwa nakwiintlobo ezahlukeneyo zokusetyenzwa kolwimi lwendalo (NLP), kubandakanywa uguqulelo, ushwankathelo, kunye nohlalutyo lweemvakalelo.
Imifuziselo yolwimi olukhulu lwangoku (LLMs) olufana ne-GPT-4 isebenzisa ubuchule bokufunda obunzulu kunye neeseti zedatha ezinkulu ukuthabatha iipatheni ezinzima kulwimi. Basebenza ngokucubungula igalelo lesicatshulwa kusetyenziswa iileyironi ezininzi ezenziweyo, ezibenza ukuba baqonde kwaye bavelise isicatshulwa esifana nomntu ngobuchule obumangalisayo. Nangona kunjalo, emva kwezi nkqubo zintsonkothileyo kukho ingcamango efanayo esisiseko: ukuqonda kunye nokuqikelela ukulandelelana kwamagama ngokusekelwe kwizinto ezinokwenzeka ezifundiweyo.
Enye yeendlela ezilula zokulinganisa ulwimi nge- Markov Chain . I-Markov Chain yimodeli yezibalo esebenza kwingqikelelo yokuba ukubakho kwegama elinokwenzeka kuxhomekeke kuphela kwiseti elinganiselweyo yamagama andulelayo, kunembali yonke yesicatshulwa. Le ngcamango yaziwa ngokuba yipropati kaMarkov. Ngokwezinto eziphathekayo, imodeli ithatha ukuba igama elilandelayo ngokulandelelana linokuqikelelwa kuphela ngokujonga awona magama amvanje (amagama) - ukulula okwenza ingxaki ngekhompyutha ithatheke ngakumbi ngelixa isabamba iipateni eziluncedo kwidatha.
Kwimodeli yolwimi esekwe kuMarkov Chain:
Ekuphumezeni kwethu, siza kusebenzisa "umyalelo" oqwalaselweyo ukujonga ukuba mangaphi amagama angaphambili ekufuneka aqwalaselwe xa kuqikelelwa. Umyalelo ophezulu ubonelela ngomxholo othe kratya, onokuthi ube nesiphumo sokuhambelana ngakumbi kunye nesicatshulwa esifanelekileyo ngokwemeko, njengoko imodeli inolwazi oluthe kratya malunga nento eza ngaphambili. Ngokuchaseneyo, ulandelelwano olusezantsi luzisa ukungakhethi okuthe kratya kwaye kunokukhokelela kubuchule obungakumbi, nangona bungenakucingeleka, ukulandelelana kwamagama. Oku kuthungelana phakathi kokuhambelana nokuyila yeyona nto iphambili kuqwalaselo kumzekelo wolwimi.
Ngokuqonda le migaqo isisiseko, sinokuxabisa zombini ukulula kweemodeli zeMarkov Chain kunye neengcinga ezisisiseko ezixhasa iimodeli zolwimi oluntsonkothileyo lwe-neural. Lo mbono wandisiweyo awuncedi nje kuphela ekubambeni ubuxhakaxhaka beenkcukacha-manani emva koqikelelo lolwimi kodwa ukwabeka isiseko sokuzama iindlela eziphucuke ngakumbi zokusetyenzwa kolwimi lwendalo.
Ngaphambi kokuba uqalise, qiniseka ukuba ufake iRuby kwinkqubo yakho. Unokujonga inguqulo yakho yeRuby ngokuqhuba:
ruby -v
Ukuba iRuby ayifakwanga, ungayikhuphela kwi-ruby-lang.org .
Kwiprojekthi yethu, unokufuna ukwenza uluhlu olunikezelweyo kunye nefayile:
mkdir tiny_llm cd tiny_llm touch llm.rb
Ngoku ulungele ukubhala ikhowudi yakho yeRuby.
Kwimodeli yolwimi, udinga i-text corpus. Ungasebenzisa nayiphi na ifayile yombhalo yoqeqesho. Kumzekelo wethu olula, ungasebenzisa isampulu encinci yesicatshulwa, umzekelo:
sample_text = <<~TEXT Once upon a time in a land far, far away, there was a small village. In this village, everyone knew each other, and tales of wonder were told by the elders. The wind whispered secrets through the trees and carried the scent of adventure. TEXT
Ngaphambi koqeqesho, kuluncedo ukuqhubela phambili isicatshulwa:
Ngeenjongo zethu, indlela kaRuby's String#split
isebenza kakuhle ngokwaneleyo kwithokheni.
Siza kudala iklasi yeRuby egama MarkovChain
ukuze ifake ukuziphatha komzekelo. Iklasi iya kubandakanya:
train
eyakha ikhonkco ukusuka kumbhalo wokufakwayo.generate
evelisa isicatshulwa esitsha ngesampulu kwikhonkco.Ngezantsi yikhowudi epheleleyo yemodeli:
class MarkovChain def initialize(order = 2) @order = order # The chain is a hash that maps a sequence of words (key) to an array of possible next words. @chain = Hash.new { |hash, key| hash[key] = [] } end # Train the model using the provided text. def train(text) # Optionally normalize the text (eg, downcase) processed_text = text.downcase.strip words = processed_text.split # Iterate over the words using sliding window technique. words.each_cons(@order + 1) do |words_group| key = words_group[0...@order].join(" ") next_word = words_group.last @chain[key] << next_word end end # Generate new text using the Markov chain. def generate(max_words = 50, seed = nil) # Choose a random seed from the available keys if none is provided or if the seed is invalid. if seed.nil? || [email protected]?(seed) seed = @chain.keys.sample end generated = seed.split while generated.size < max_words # Form the key from the last 'order' words. key = generated.last(@order).join(" ") possible_next_words = @chain[key] break if possible_next_words.nil? || possible_next_words.empty? # Randomly choose the next word from the possibilities. next_word = possible_next_words.sample generated << next_word end generated.join(" ") end end
**Ukuqaliswa:**Umakhi initialize
umisela ulandelelwano (okuhlala kukho isi-2) kwaye kudala ihashi engenanto yekhonkco lethu. I-hash inikwe ibhloko engagqibekanga ukuze isitshixo esitsha ngasinye siqale njengoluhlu olungenanto.
**Uqeqesho loMzekelo:**Indlela train
ithatha umtya wesicatshulwa, iwenze ibe yesiqhelo, kwaye yahlule ibe ngamagama. Ukusebenzisa each_cons
, idala amaqela alandelelanayo amagama order + 1
. Amagama order
lokuqala asebenza njengesitshixo, kwaye igama lokugqibela lihlonyelwa kuluhlu lokuqhubeka okunokwenzeka kweso sitshixo.
**Ukuvelisa okubhaliweyo:**Indlela generate
iqala ngeqhosha lembewu. Ukuba akukho nanye enikiweyo, iqhosha elingakhethiyo liyakhethwa. Yakha ngokuphindaphinda ulandelelwano ngokujonga amagama order
lokugqibela kunye nesampuli yegama elilandelayo de kufikelelwe kwelona nani liphezulu lamagama.
Ngoku ukuba sineklasi yethu MarkovChain
, masiyiqeqeshe kwidatha yesicatshulwa.
# Sample text data for training sample_text = <<~TEXT Once upon a time in a land far, far away, there was a small village. In this village, everyone knew each other, and tales of wonder were told by the elders. The wind whispered secrets through the trees and carried the scent of adventure. TEXT # Create a new MarkovChain instance with order 2 model = MarkovChain.new(2) model.train(sample_text) puts "Training complete!"
Xa uqhuba ikhowudi engentla (umzekelo, ngokuyigcina kwi llm.rb
kunye nokusebenzisa ruby llm.rb
), imodeli iya kuqeqeshwa ngokusebenzisa isicatshulwa esinikiweyo.
Nje ukuba imodeli iqeqeshwe, unokuvelisa isicatshulwa esitsha. Makhe songeze ikhowudi ukuvelisa kunye nokuprinta isampulu yesicatshulwa:
# Generate new text using the trained model. generated_text = model.generate(50) puts "Generated Text:" puts generated_text
Ungazama nokubonelela ngembewu yokuvelisa umbhalo. Umzekelo, ukuba uyasazi esinye sezitshixo kumzekelo (njenge "once upon"
), ungenza:
seed = "once upon" generated_text_with_seed = model.generate(50, seed) puts "\nGenerated Text with seed '#{seed}':" puts generated_text_with_seed
Ngokuzama ngeembewu ezahlukeneyo kunye neeparamitha (njengokulandelelana kunye nenani eliphezulu lamagama), unokubona ukuba isiphumo siyahluka njani.
Nasi iskripthi esipheleleyo seRuby esidibanisa onke la manyathelo angentla:
#!/usr/bin/env ruby # llm.rb # Define the MarkovChain class class MarkovChain def initialize(order = 2) @order = order @chain = Hash.new { |hash, key| hash[key] = [] } end def train(text) processed_text = text.downcase.strip words = processed_text.split words.each_cons(@order + 1) do |words_group| key = words_group[0...@order].join(" ") next_word = words_group.last @chain[key] << next_word end end def generate(max_words = 50, seed = nil) if seed.nil? || [email protected]?(seed) seed = @chain.keys.sample end generated = seed.split while generated.size < max_words key = generated.last(@order).join(" ") possible_next_words = @chain[key] break if possible_next_words.nil? || possible_next_words.empty? next_word = possible_next_words.sample generated << next_word end generated.join(" ") end end # Sample text data for training sample_text = <<~TEXT Once upon a time in a land far, far away, there was a small village. In this village, everyone knew each other, and tales of wonder were told by the elders. The wind whispered secrets through the trees and carried the scent of adventure. TEXT # Create and train the model model = MarkovChain.new(2) model.train(sample_text) puts "Training complete!" # Generate text without a seed generated_text = model.generate(50) puts "\nGenerated Text:" puts generated_text # Generate text with a specific seed seed = "once upon" generated_text_with_seed = model.generate(50, seed) puts "\nGenerated Text with seed '#{seed}':" puts generated_text_with_seed
llm.rb
.llm.rb
. ruby llm.rb
Kuya kufuneka ubone imveliso ebonisa ukuba imodeli iqeqeshiwe kwaye emva koko imizekelo emibini yombhalo ovelisiweyo.
Le theyibhile ilandelayo ishwankathela ezinye iimetriki zombonakaliso kwiinguqulelo ezahlukeneyo zomiliselo lwethu oluNcinci lweLLM. I-metric nganye ichazwe ngezantsi:
Apha ngezantsi yitheyibhile yophawulo enedatha yebenchmark:
Umzekelo | Umyalelo | Ixesha loQeqesho (ms) | Ixesha lesizukulwana (ms) | Usetyenziso Lwenkumbulo (MB) | Ukulinganisa ukuhambelana |
---|---|---|---|---|---|
I-LLM encinci v1 | 2 | 50 | 10 | 10 | 3/5 |
Incinci LLM v2 | 3 | 70 | 15 | 12 | 3.5/5 |
Incinci LLM v3 | 4 | 100 | 20 | 15 | 4/5 |
Ezi mpawu zibonelela ngombono okhawulezayo worhwebo phakathi kolungelelwaniso lweemodeli ezahlukeneyo. Njengoko iodolo isanda, imodeli ithatha ixesha elide ukuqeqesha kunye nokuvelisa umbhalo, kwaye isebenzisa imemori engaphezulu. Nangona kunjalo, oku kunyuka kokusetyenziswa kwemithombo kaninzi kuhamba kunye nokuphuculwa kokuhambelana kombhalo owenziweyo.
Kule tutorial, sibonise indlela yokwenza imodeli yolwimi olula kakhulu usebenzisa iRuby. Ngokusebenzisa ubuchule beMarkov Chain, sakhe inkqubo ethi:
Ngelixa le modeli yezinto zokudlala ikude lee kwii-LLM zomgangatho wemveliso, isebenza njengenyathelo lokuqonda indlela iimodeli zolwimi ezisebenza ngayo kwinqanaba elisisiseko. Unokwandisa kule ngcamango ngokubandakanya ubuchule obuphambili, ukuphatha iziphumlisi ngcono, okanye ukudibanisa iRuby kunye namathala eencwadi okufunda ngomatshini kwiimodeli ezinobunkunkqele.
Ikhowudi yolonwabo!