Share
Embed
AIアプリ Dojo #2 Hugging Face Transformers入門
生成系AIへの注目が集まる中、エンジニアの皆さんは、AIアプリを検討する機会が増えていくと思います。このセッションでは、自然言語理解や自然言語生成をコンピューターを使って処理していく上で、広く使われているHugging Face Transformersについて、インストールから簡単な実行までを確認しながら学んでいきます。
必須ではありませんが、事前に gitコマンドやPythonのインストールを済ませておくと、参加される皆さん自身も学びながらHugging Face Transformersを試せると思います。
Akira Onishi (IBM) PRO
June 28, 2023
Transcript
31 slides
-
ຊΞΠɾϏʔɾΤϜגࣜձࣾ ςΫϊϩδʔࣄۀຊ෦ ΧελϚʔɾαΫηε ϓϦϯγύϧɾϚωʔδϟʔ ݉ 8JOEPXT/&5$POUBJOFS1PSUJOH1SPHSBNਪਐϦʔμʔ େ জ "LJSB0OJTIJ!JCNDPN 5XJUUFS!POJBL
IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ IUUQTXXXMJOLFEJODPNJOPOJBL "*ΞϓϦ%PKP )VHHJOH'BDF5SBOTGPSNFSTೖ -
ࣗݾհ 1SPQFSUZ 7BMVF ࢯ໊ େ জ 5XJUUFS-JOLFE*O POJBL *5ۀքྺ
ϚΠϒʔϜ μΠΤοτ )BTI5BH ͍͍Ͷ͐੩Ԭੜ׆ ࠲ӈͷ ౿·Εͯͳ্ཱ͓͕ͪΔಓͷ Α͘͏ٕ มͰࣗΛϙδςΟϒʹ IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ 'BDFCPPLʮ͓ʹ͋͘ʯͰݕࡧ -
ࠓͷ ϩʔΧϧϋʔυΣΞ 8JOEPXT-JOVY.BD 1ZUIPO 1Z5PSDI $6%" "*ਪΞϓϦ Hugging Face
Transformers Hugging Faceに公開されているモデル ࡉ͔ͳཧ۶ൈ͖ʹͯ͠ɺ 1ZUIPOͱ )VHHJOH'BDF5SBOTGPSNFSTΛͬͯ "*ਪΛ࣮ߦͯ͠ΈΔ ຊͷηογϣϯͰମݧ͢Δ༰ จষཁ ݻ༗දݱநग़ /&3/BNFE&OUJUZ3FDPHOJUJPO จষੜ ྨɺจষͷײੳ ԻϑΝΠϧ͔Βจࣈى͜͠ ը૾ͷମݕग़ ࣭ٙԠ ༁ ϓϩάϥϜͷιʔείʔυੜ -
෮श"*ਪΛ͏ΞϓϦͷߏ 8FCϒϥβ ΞϓϦ 8FCαΠτ 8FC "1* αʔϏε AIモデル 計算処理 ࠓ͜͜ͷ
͜ͷܭࢉΛ "*ਪॲཧͱݴ͏ -
෮श"*ֶशͱ"*ਪΛ͚ͯߟ͑Α͏ "*ֶश Ϟσϧͷ࡞ɺվྑ "*ਪ ϞσϧΛར༻ͨ͠ܭࢉ ֶश σʔλ ਂֶश ʢܭࢉʣ ཧతͳԾઆɺݚڀɺ
࣮ূ͔Βͷཪ͚ େنͳܭࢉࢿݯ )1$)JHI1FSGPSNBODF $PNQVUJOH "*Ϟσϧ "*ਪʹదͨ͠ ίϯϐϡʔλʔ ඞཁͳࢿ "*ਪʹదͨ͠ 04ɺϥϯλΠϜ "*ϞσϧΛͬͨܭࢉ ϞσϧʹΑΔ࣮ݧɺݕূ "*ίϛϡχςΟͷϥΠϒϥϦΛར༻ͯ͠ ୯ମͰ࢝ΊΒΕΔ සൟʹߋ৽͕ൃੜ͢ΔલఏͰͷ ։ൃɾӡ༻͕ཧత ϑΟʔυόοΫ ڊେͳσʔλϨΠΫϋεɺ σʔλαΠΤϯςΟετɺ )1$ڥͷࢿ͕ඞཁ IUUQTIVHHJOHGBDFDP -
෮श"*ਪͷ࣮ߦڥ IUUQTQZQJPSH IUUQTIVHHJOHGBDFDP ίϯϐϡʔλʔ 8JOEPXT-JOVY04 1ZUIPO 1Z5PSDI ͳͲ $16 (16ϝϞϦ
ϝϞϦ (16 ϝϞϦ (16ϝϞϦ /7.F 44% (16υϥΠό (1(16ԋࢉϥΠϒϥϦ "*ϞσϧΛར༻ͨ͠ΞϓϦ ϋʔυΣΞநԽϨΠϠʔ )BSEXBSF"CTUSBDUJPO-BZFS $IJQ ηοτ /FUXPSL *OUFSGBDF طଘͷ"*Ϟσϧ ࢲ͕࣮ͨͪ͢Δਪ༻ͷίʔυ "*ϞσϧΛͬͨܭࢉ طଘͷϥΠϒϥϦ IUUQTXXXOWJEJBDPNKBKQ ిݯϢχοτ -
🤗 5SBOTGPSNFST "*ϞσϧͷΧελϚΠζ ϞσϧͷௐɺՃֶश "*Ϟσϧ σʔληοτ "*ਪػցֶशʹదͨ͠ ίϯϐϡʔλʔ "*ਪػցֶशʹదͨ͠ 04ɺϥϯλΠϜ
"*ϞσϧΛͬͨܭࢉ IUUQTIVHHJOHGBDFDP "*ਪ ࣄલֶशࡁΈͷϞσϧΛ ར༻ͨ͠ܭࢉ "*ਪʹదͨ͠ ίϯϐϡʔλʔ "*ਪʹదͨ͠ 04ɺϥϯλΠϜ "*ϞσϧΛͬͨܭࢉ Ճͷσʔλ ֶश༻ͱݕূ༻ʣ from transformers import pipeline detector = pipeline(task="object-detection") preds = detector("画像のURL”) trainer = Trainer( model=model, args=training_args, train_dataset=small_train_dataset, eval_dataset=small_eval_dataset, compute_metrics=compute_metrics, ) trainer.Train() ˞ࠓޙͷԠ༻ฤͰ հ͢Δ༧ఆ -
ࢀߟ5SBOTGPSNFSͷΈ ݄ "UUFOUJPOJT"MM:PV/FFE ͷจൃද ༁λεΫʹؔ͢Δ5SBOTGPSNFSͷϞσϧ͕ϕʔε https://huggingface.co/learn/nlp-course/ja/chapter1/4 &ODPEFS ಛྔͷ ੜ Decoder
⽬的の 系列を ⽣成 ೖྗʢӳޠʣ ༧ଌ͞Εͨग़ྗʢຊޠʣ ͜Ε·Ͱʹ༧ଌ͞Εͨग़ྗʢຊޠʣ ͬ͘͟Γͨ͠ϙΠϯτɿ ͜Ε·Ͱར༻͞Ε͖ͯͨϑΟʔυόοΫϧʔϓΛ ༗͢Δʮ࠶ؼܕʯχϡʔϥϧωοτϫʔΫ 3// ΑΓ ฒྻԽ͍͢͠ ΑΓେنͳֶशϞσϧͷ։ൃ ͜ͷจ͕ൃද͞Ε͔ͯΒଟ͘ͷݴޠϞσϧ͕ొɺ େ͖̏ͭ͘ʹྨʢ(15ܕɺ#&35ܕɺ#"355ܕʣ ฒྻԽ͍͢͠໘ɺϝϞϦফඅྔେ͖͘ͳͬͨ ֓೦ਤ -
import torch import time from transformers import AutoTokenizer, AutoModelForCausalLM prompt_base
= "ユーザー: {}<NL>システム: " start = time.perf_counter() tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft", use_fast=False) end = time.perf_counter() print("Tokenizer loaded:"+str(end-start)) start = time.perf_counter() model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft") #GPUメモリが12-16GBの場合、float16でなんとかメモリ内に収める #model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b-instruction-sft", torch_dtype=torch.float16) end = time.perf_counter() print("CausalLM loaded:"+str(end-start)) if torch.cuda.is_available(): model = model.to("cuda") print ("cuda is available") def inferencing(prompt): start = time.perf_counter() token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") with torch.no_grad(): output_ids = model.generate( token_ids.to(model.device), do_sample=True, max_new_tokens=256, temperature=0.9, top_k=50, repetition_penalty=1.0, pad_token_id=tokenizer.pad_token_id, bos_token_id=tokenizer.bos_token_id, eos_token_id=tokenizer.eos_token_id ) output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1):]) output = output.replace("<NL>", "¥n") end = time.perf_counter() print(”Inferencing completed:"+str(end-start)) return output #続き def do_conversation(): text = input("Neox-3.6b>") if text == "end": return False prompt = prompt_base.format(text) result = inferencing(prompt) print(result) return True while True: res = do_conversation() if res == False: break "*ΞϓϦ%PKPୈճͷৼΓฦΓ ར༻ϞσϧSJOOBKBQBOFTFHQUOFPYCJOTUSVDUJPOTGU IUUQTIVHHJOHGBDFDPSJOOBKBQBOFTFHQUOFPYCJOTUSVDUJPOTGU -
&ODPEF .PEFM %FDPEF "*ͱͷΓऔΓʮਓ͕ཧղͰ͖Δใʯ ػցֶशʹ͓͚Δܭࢉͷதʮԋࢉʯ ਓγεςϜ͕ ೖྗͨ͠ςΩετ &ODPEFS %FDPEFS ਪͰར༻͢Δ
.PEFM ೖྗ ग़ྗ 𝑒! ⋮ 𝑒" 𝑟! ⋮ 𝑟" ੜ͞Εͨ ςΩετ ϕΫτϧ ϕΫτϧ IUUQTIVHHJOHGBDFDPEPDTUSBOTGPSNFSTNBJO@DMBTTFTUPLFOJ[FS -
ࢀߟจࣈྻͷτʔΫϯԽ UQZ ͱͯ͠อଘʢܾͯ͠ɺUPLFOQZʹ͠ͳ͍Α͏ʹɺ࣍ͷϖʔδͰղઆ GSPNUSBOTGPSNFSTJNQPSU"VUP5PLFOJ[FS UPLFOJ[FS"VUP5PLFOJ[FSGSPN@QSFUSBJOFE CFSUCBTFVODBTFE FODPEJOHUPLFOJ[FS 8FBSFWFSZIBQQZUPTIPXZPVUIF🤗5SBOTGPSNFSTMJCSBSZ QSJOU FODPEJOH
࣮ߦ݁Ռ \JOQVU@JET< > UPLFO@UZQF@JET< > BUUFOUJPO@NBTL< >^ -
ࣦഊͷڞ༗UPLFOQZ ࡞Βͳ͍͜ͱ 'JMF6TFSTPOJBLQZUPLFOQZ MJOF JONPEVMF GSPNUSBOTGPSNFSTJNQPSU"VUP5PLFOJ[FS *NQPSU&SSPSDBOOPUJNQPSUOBNF"VUP5PLFOJ[FSGSPNQBSUJBMMZJOJUJBMJ[FENPEVMF USBOTGPSNFST NPTUMJLFMZEVFUPBDJSDVMBSJNQPSU
-JCSBSZ'SBNFXPSLT1ZUIPOGSBNFXPSL7FSTJPOTMJCQZUIPOTJUF QBDLBHFTUSBOTGPSNFST@@JOJU@@QZ 'JMF%=MFBSO=USBOTGPSNFST=TBNQMFT=UPLFOQZ MJOF JONPEVMF GSPNUSBOTGPSNFSTJNQPSU"VUP5PLFOJ[FS *NQPSU&SSPSDBOOPUJNQPSUOBNF"VUP5PLFOJ[FSGSPNQBSUJBMMZJOJUJBMJ[FENPEVMF USBOTGPSNFST NPTUMJLFMZEVFUPBDJSDVMBSJNQPSU $=6TFST=POJBL="QQ%BUB=-PDBM=1SPHSBNT=1ZUIPO=1ZUIPO=MJC=TJUF QBDLBHFT=USBOTGPSNFST=@@JOJU@@QZ ͝ҙɿࣗͰ࡞ͨ͠1ZUIPOίʔυΛ UPLFOQZ ͱ࣮ͯ͠ߦ༻ͷϑΥϧμʹอଘͯ͋͠Δͱɺ ଞͷQZUIPOϓϩάϥϜͷ࣮ߦ࣌ʹඞͣऔΓࠐ·Εͯɺ༧ظͤ͵Τϥʔ͕ੜ͡·͢ɻ ̀ 1ZUIPOఆͷ্ॻ͖ͱΈͳ͞ΕΔ දࣔ͞Ε͍ͯΔΤϥʔίʔυͰݕࡧͯ͠ɺԿ͕ؒҧ͍ͬͯΔͷ͔ʹ͍ͭͯɺؾ͖ʹ͘͘ɺ UPLFOQZͱ͍͏ϑΝΠϧ͕ଘࡏ͢ΔͱΤϥʔ͕ଓͨ͘ΊɺUSBOTGPSNFST1ZUIPO 1ZUPSDIͷ࠶ΠϯετʔϧͰम෮Ͱ͖·ͤΜ https://docs.python.org/ja/3/library/token.html 1ZUIPOڥ͕յΕΔʂʁ -
5SBOTGPSNFSTɺయܕతͳϢʔεέʔε จষཁ ݻ༗දݱநग़ /&3/BNFE&OUJUZ3FDPHOJUJPO จষੜ ྨɺจষͷײੳ ԻϑΝΠϧ͔Βจࣈى͜͠ ը૾ͷମݕग़ ࣭ٙԠ ༁
ϓϩάϥϜͷιʔείʔυੜ ͜ͷͭͷϢʔεέʔεʹ߹Θͤͯ ؆୯ͳίʔυΛूΊ·ͨ͠ɻ (16ࡌͷ8JOEPXT (16αϙʔτͳ͠NBD04 ͦΕͧΕͰಈ࡞֬ೝ͍ͯ͠·͢ -
จষཁ #textsum.py Ϟσϧͷϖʔδʹ͋ΔαϯϓϧίʔυΛҾ༻͍ͯ͠·͢ from transformers import pipeline seq2seq = pipeline("summarization",
model="tsmatz/mt5_summarize_japanese") sample_text = "αοΧʔͷϫʔϧυΧοϓΧλʔϧେձɺੈքϥϯΩϯά24ҐͰάϧʔϓEʹଐ͢Δ ຊɺ23ͷ1࣍Ϧʔάॳઓʹ͓͍ͯɺੈք11ҐͰաڈ4ճͷ༏উΛތΔυΠπͱରઓ͠·ͨ͠ɻࢼ߹લ ɺυΠπͷҰํతͳϖʔεͰ͡·Γ·͕ͨ͠ɺޙɺຊͷอಜ߈ܸతͳબखΛੵۃతʹಈһ͠ ͯྲྀΕΛม͑·ͨ͠ɻ݁ہɺຊલʹ1ΛୣΘΕ·͕ͨ͠ɺ్தग़ͷಊ҆બखͱઙຏબख͕ ޙʹΰʔϧΛܾΊɺ2ର1Ͱٯసউͪ͠·ͨ͠ɻήʔϜͷྲྀΕΛ͔ͭΜͩอࡃ͕ޭΛ͠·ͨ͠ɻ" result = seq2seq(sample_text) print(result) Downloading (…)lve/main/config.json: 100%|█████| 867/867 [00:00<00:00, 2.00MB/s] Downloading pytorch_model.bin: 100%|███████| 1.20G/1.20G [00:15<00:00, 79.1MB/s] Downloading (…)okenizer_config.json: 100%|█████| 399/399 [00:00<00:00, 3.74MB/s] Downloading spiece.model: 100%|████████████| 4.31M/4.31M [00:00<00:00, 26.9MB/s] Downloading tokenizer.json: 100%|██████████| 16.3M/16.3M [00:00<00:00, 17.0MB/s] Downloading (…)cial_tokens_map.json: 100%|████| 74.0/74.0 [00:00<00:00, 612kB/s] Your max_length is set to 128, but your input_length is only 126. Since this is a summarization task, where outputs shorter than the input are typically wanted, you might consider decreasing max_length manually, e.g. summarizer('...', max_length=63) [{'summary_text': 'αοΧʔͷϫʔϧυΧοϓΧλʔϧେձ23ɺ1࣍Ϧʔάॳઓ͕͋ΓɺੈքϥϯΩϯά24ҐͰάϧʔϓEʹଐ͢Δຊɺ υΠπͱରઓͨ͠ɻ'}] IUUQTIVHHJOHGBDFDPUTNBU[NU@TVNNBSJ[F@KBQBOFTF Λར༻ ϞσϧαΠζ (# -
ݻ༗දݱநग़ #ner.py Ϟσϧͷϖʔδʹ͋ΔαϯϓϧίʔυΛҰ෦վม͍ͯ͠·͢ from transformers import pipeline import pandas as
pd model_name = "tsmatz/xlm-roberta-ner-japanese" classifier = pipeline("token-classification", model=model_name) result = classifier("ాத4݄ͷཅؾͷྑ͍ʹɺླΛ͚ͭͯ۽ຊݝͷѨોࢁʹొͬͨɻ۽ຊͷถম யʮനַ ͠ΖʯΛҿΜͩɻ") df = pd.DataFrame(result) print(df) entity score index word start end 0 PER 0.999310 1 ▁ 0 1 1 PER 0.999407 2 ా 0 1 2 PER 0.999074 3 த 1 2 3 LOC 0.998935 14 ۽ຊ 19 21 4 LOC 0.997582 15 ݝ 21 22 5 LOC 0.998968 17 Ѩ 23 24 6 LOC 0.998960 18 ો 24 25 7 LOC 0.998147 19 ࢁ 25 26 8 LOC 0.990043 24 ۽ຊ 31 33 9 PRD 0.997916 30 ന 38 39 10 PRD 0.998629 31 ַ 39 40 11 PRD 0.998314 32 ▁ 41 42 12 PRD 0.997710 33 ͠ 41 42 13 PRD 0.998055 34 Ζ 42 43 IUUQTIVHHJOHGBDFDPUTNBU[YMNSPCFSUBOFSKBQBOFTF (#͋ΔͷͰॳճ͕͔͔࣌ؒΓ·͢ʣ pip install pandas -
จষੜ #tg.py from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt2-medium",
use_fast=False, padding_side='left') tokenizer.do_lower_case = True # due to some bug of tokenizer config loading model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium") data ="͜Μʹͪɺ" input = tokenizer.encode(data, return_tensors="pt") output = model.generate(input, do_sample=True, max_length=300, num_return_sequences=1,pad_token_id=tokenizer.eos_token_id) print(tokenizer.batch_decode(output)) pip install protobuf https://huggingface.co/rinna/japanese-gpt2-medium 1JQFMJOFͰͳ͘ɺ"VUP$MBTTΛར༻ -
ײੳ # sentiment.py from transformers import pipeline model_name = "Mizuiro-sakura/luke-japanese-large-sentiment-analysis-wrime"
classifier = pipeline("sentiment-analysis", model=model_name, tokenizer=model_name) data =[ "ࡢ͘·Ͱࣄͯ͠େมͩͬͨɻ͔͠๙ΊΒΕͣ൵͔ͬͨ͠", "ࡢ͘·Ͱࣄͯ͠େม͚ͩͬͨͲɺ๙ΊΒΕͨͷͰݩؾ͍ͬͺ͍", "ΧϥΦέͰେͰ͕ރΕΔ·Ͱএͨ͠", "ࠓே͔ΒେӍ͕߱ͬͯͲ͜ʹ֎ग़Ͱ͖ͳͯ͘࠷ѱͩͬͨ"] ret = classifier(data) emotions=['͏Ε͍͠', '൵͍͠', 'ظ', 'ౖΓ', 'ڪΕ', 'ݏѱ', '৴པ'] for i, r in enumerate(ret): print(f"'{data[i]}' {float(r['score']) * 100:.2f}%ͷείΞͰ `{emotions[int(r['label'][-1])]}` ͱ ఆ͞Ε·ͨ͠") 'ࡢ͘·Ͱࣄͯ͠େมͩͬͨɻ͔͠๙ΊΒΕͣ൵͔ͬͨ͠' 97.88%ͷείΞͰ `൵͍͠` ͱఆ͞Ε·ͨ͠ 'ࡢ͘·Ͱࣄͯ͠େม͚ͩͬͨͲɺ๙ΊΒΕͨͷͰݩؾ͍ͬͺ͍' 98.29%ͷείΞͰ `͏Ε͍͠` ͱఆ͞Ε·ͨ͠ 'ΧϥΦέͰେͰ͕ރΕΔ·Ͱএͨ͠' 98.48%ͷείΞͰ `͏Ε͍͠` ͱఆ͞Ε·ͨ͠ 'ࠓே͔ΒେӍ͕߱ͬͯͲ͜ʹ֎ग़Ͱ͖ͳͯ͘࠷ѱͩͬͨ' 97.69%ͷείΞͰ `൵͍͠` ͱఆ͞Ε·ͨ͠ IUUQTIVHHJOHGBDFDP.J[VJSPTBLVSBMVLFKBQBOFTFMBSHFTFOUJNFOUBOBMZTJTXSJNF Λར༻ -
Ի͔Βจࣈى͜͠ #trans.py : TransformersͷυΩϡϝϯτͷαϯϓϧίʔυΛҾ༻͍ͯ͠·͢ from transformers import pipeline generator =
pipeline(model="openai/whisper-large") text = generator( [ "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac", "https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac", ] ) print(text) [{'text': ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'}, {'text': ' He hoped there would be stew for dinner, turnips and carrots and bruised potatoes and fat mutton pieces to be ladled out in thick, peppered flour-fattened sauce.'}] IUUQTIVHHJOHGBDFDPPQFOBJXIJTQFSMBSHFW (#͋ΔͷͰɺॳճμϯϩʔυʹ͕͔͔࣌ؒΓ·͢ʣ oniak3@AkiranoiMac py % python3 stt.py Downloading (…)lve/main/config.json: 100%|█| 1.96k/1.96k [00:00<00:00, 5.31MB/s] Downloading pytorch_model.bin: 100%|███████| 6.17G/6.17G [05:06<00:00, 20.2MB/s] Downloading (…)neration_config.json: 100%|█| 3.51k/3.51k [00:00<00:00, 25.6MB/s] Downloading (…)okenizer_config.json: 100%|█████| 842/842 [00:00<00:00, 8.18MB/s] Downloading (…)olve/main/vocab.json: 100%|█| 1.04M/1.04M [00:00<00:00, 1.64MB/s] Downloading (…)/main/tokenizer.json: 100%|█| 2.20M/2.20M [00:00<00:00, 11.7MB/s] Downloading (…)olve/main/merges.txt: 100%|███| 494k/494k [00:00<00:00, 34.7MB/s] Downloading (…)main/normalizer.json: 100%|██| 52.7k/52.7k [00:00<00:00, 353kB/s] Downloading (…)in/added_tokens.json: 100%|█| 2.08k/2.08k [00:00<00:00, 18.7MB/s] Downloading (…)cial_tokens_map.json: 100%|█| 2.08k/2.08k [00:00<00:00, 10.2MB/s] Downloading (…)rocessor_config.json: 100%|███| 185k/185k [00:00<00:00, 59.9MB/s] GGNQFH͕ඞཁ IUUQTGGNQFHPSHEPXOMPBEIUNM Ԡ༻ ຊޠͷձؚ͕·Ε͍ͯΔԻϑΝΠϧΛ ࢦఆ͢Δͱɺ݁ՌͲ͏ͳΔͰ͠ΐ͏͔ʁ ͥͻɺ͓ࢼ͍ͩ͘͠͞ɻ -
ը૾ͷମݕग़ #obd.py : TransformersͷจॻͷίʔυΛҾ༻͍ͯ͠·͢ import requests from PIL import Image
from transformers import pipeline # Download an image with cute cats url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png" image_data = requests.get(url, stream=True).raw image = Image.open(image_data) # Allocate a pipeline for object detection object_detector = pipeline('object-detection') result = object_detector(image) print (result) [{'score': 0.9982201457023621, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 70, 'xmax': 175, 'ymax': 117}}, {'score': 0.9960021376609802, 'label': 'remote', 'box': {'xmin': 333, 'ymin': 72, 'xmax': 368, 'ymax': 187}}, {'score': 0.9954745173454285, 'label': 'couch', 'box': {'xmin': 0, 'ymin': 1, 'xmax': 639, 'ymax': 473}}, {'score': 0.9988006353378296, 'label': 'cat', 'box': {'xmin': 13, 'ymin': 52, 'xmax': 314, 'ymax': 470}}, {'score': 0.9986783862113953, 'label': 'cat', 'box': {'xmin': 345, 'ymin': 23, 'xmax': 640, 'ymax': 368}}] https://huggingface.co/docs/transformers/tasks/object_detection pip install timm -
࣭ٙԠ #qanda.py : ϞσϧͷϖʔδͷαϯϓϧίʔυΛҾ༻͍ͯ͠·͢ from transformers import pipeline model_name =
"tsmatz/roberta_qa_japanese" qa_pipeline = pipeline("question-answering", model=model_name,tokenizer=model_name) result = qa_pipeline( question = "ܾউτʔφϝϯτͰຊʹউͬͨͷͲ͜Ͱ͔ͨ͠ɻ", context = "ຊ༧બϦʔάͰڧ߽ͷυΠπͱεϖΠϯʹউܾͬͯউτʔφϝϯτʹਐΜ͕ͩɺΫϩΞνΞͱରઓͯ͠ഊΕͨɻ", align_to_words = False, ) print(result) oniak3@AkiranoiMac py % code qanda.py oniak3@AkiranoiMac py % python3 qanda.py Downloading (…)lve/main/config.json: 100%|█████| 731/731 [00:00<00:00, 1.71MB/s] Downloading pytorch_model.bin: 100%|█████████| 440M/440M [00:21<00:00, 20.7MB/s] Downloading (…)okenizer_config.json: 100%|█████| 540/540 [00:00<00:00, 2.86MB/s] Downloading spiece.model: 100%|██████████████| 806k/806k [00:00<00:00, 1.14MB/s] Downloading (…)/main/tokenizer.json: 100%|█| 2.41M/2.41M [00:00<00:00, 2.67MB/s] Downloading (…)cial_tokens_map.json: 100%|█████| 170/170 [00:00<00:00, 1.03MB/s] {'score': 0.4740956723690033, 'start': 38, 'end': 43, 'answer': 'ΫϩΞνΞ'} IUUQTIVHHJOHGBDFDPUTNBU[SPCFSUB@RB@KBQBOFTF நग़ܕͷ࣭ԠϞσϧʣ ࢦఆͨ͠DPOUFYUʹؚ·ΕΔճΛநग़͢ΔϞσϧ -
༁ ӳޠ͔Βຊޠ #e2j.py #pip install sacremoses ͕ඞཁ from transformers import
pipeline model_name = "staka/fugumt-en-ja" translator = pipeline("translation", model=model_name) text = ["I have a pen. I have an Apple. How's your translation in Japanese?", "Watsonx is our upcoming enterprise-ready AI and data platform designed to multiply the impact of AI across your business. The platform comprises three powerful components: the watsonx.ai studio for new foundation models, generative AI and machine learning; the watsonx.data fit-for-purpose store for the flexibility of a data lake and the performance of a data warehouse; plus the watsonx.governance toolkit, to enable AI workflows that are built with responsibility, transparency and explainability."] ret = translator(text) print(ret) oniak3@AkiranoiMac py % python3 trans.py [{'translation_text': 'ࢲϖϯΛ͍࣋ͬͯ·͢ɻࢲΞοϓϧΛ͍࣋ͬͯ·͢ɻ͋ͳͨͷ༁ຊޠͰͲ͏Ͱ͔͢ɻ'}, {'translation_text': 'WatsonxɺΤϯλʔϓϥΠζରԠͷAIͱσʔλϓϥοτϑΥʔϜͰɺϏδωεશମͷAIͷӨڹΛֻ͚߹Θͤ ΔΑ͏ʹઃܭ͞Ε͍ͯ·͢ɻϓϥοτϑΥʔϜɺ3ͭͷڧྗͳίϯϙʔωϯτͰߏ͞Ε͍ͯ·͢ɻ৽͍͠ج൫ϞσϧͷͨΊͷ watsonx.aiελδΦɺδΣωϨʔςΟϒAIͱػցֶशɺσʔλϨΠΫͷॊೈੑͱσʔλΣΞϋεͷύϑΥʔϚϯεͷͨΊͷ watsonx.data fit-for-purposeετΞɺɺಁ໌ੑɺઆ໌ՄೳੑΛඋ͑ͨAIϫʔΫϑϩʔΛ࣮ݱ͢ΔͨΊͷwatsonx.governance πʔϧΩοτͰ͢ɻ'}] IUUQTIVHHJOHGBDFDPTUBLBGVHVNUFOKB IUUQTTUBLBKQXPSEQSFTT Q Λࢀরʣ QJQJOTUBMMTBDSFNPTFT -
ιʔείʔυੜ #codeg.py: https://blog.salesforceairesearch.com/codegen/ Λࢀߟʹ͍ͯ͠·͢ from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer
= AutoTokenizer.from_pretrained("Salesforce/codegen2-1B") model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen2-1B", trust_remote_code=True, revision="main") text = "Solve the two sum problem with python." input_ids = tokenizer(text, return_tensors="pt").input_ids generated_ids = model.generate(input_ids, max_length=192) print(tokenizer.decode(generated_ids[0], skip_special_tokens=False)[len(text):]) import math def two_sum(nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ nums.sort() for i in range(len(nums)): if nums[i] == target: return [i, len(nums)] return [] if __name__ == '__main__': print(two_sum([2, 7, 11, 15], 9)) <|endoftext|><|python|># IUUQTIVHHJOHGBDFDP4BMFTGPSDFDPEFHFO# (#͋ΔͷͰؾʹμϯϩʔυ͠·͠ΐ͏จͪ͜Βʣ ࢼ༻ͷͨΊͰ͋Ε$16ͰਪͰ͖·͕͢ɺ࣮༻తͰ͋Γ·ͤΜ ਪ࣌ؒ γεςϜߏ ඵ 8JOEPXT1SP) ".%3Z[FO9 /7*%*"(F'PSDF359 ඵ NBD047FOUVSBʢ'ʣ J.BD*OUFM$PSFJ()[ίΞ$16 -
ϫʔΫγϣοϓɺηογϣϯɺ͓Αͼࢿྉɺ*#.·ͨηογϣϯൃදऀʹΑͬͯ४උ͞ΕɺͦΕͧΕಠࣗͷݟղΛөͨ͠ͷͰ͢ɻͦΕΒใఏڙͷతͷΈ Ͱఏڙ͞Ε͓ͯΓɺ͍͔ͳΔࢀՃऀʹରͯ͠๏త·ͨͦͷଞͷࢦಋॿݴΛҙਤͨ͠ͷͰͳ͘ɺ·ͨͦͷΑ͏ͳ݁ՌΛੜΉͷͰ͋Γ·ͤΜɻຊߨԋࢿྉ ʹؚ·Ε͍ͯΔใʹ͍ͭͯɺશੑͱਖ਼֬ੑΛظ͢ΔΑ͏ྗ͠·͕ͨ͠ɺʮݱঢ়ͷ··ʯఏڙ͞Εɺ໌ࣔ·ͨ҉ࣔʹ͔͔ΘΒ͍͔ͣͳΔอূΘͳ͍ͷͱ ͠·͢ɻຊߨԋࢿྉ·ͨͦͷଞͷࢿྉͷ༻ʹΑͬͯɺ͋Δ͍ͦͷଞͷؔ࿈ʹΑͬͯɺ͍͔ͳΔଛ͕ੜͨ͡߹ɺ*#.ΛෛΘͳ͍ͷͱ͠·͢ɻຊߨԋ ࢿྉʹؚ·Ε͍ͯΔ༰ɺ*#.·ͨͦͷαϓϥΠϠʔϥΠηϯεަऀ͔Β͍͔ͳΔอূ·ͨද໌ΛҾ͖ͩ͢͜ͱΛҙਤͨ͠ͷͰɺ*#.ιϑτΣΞͷ༻ Λنఆ͢Δద༻ϥΠηϯεܖͷ߲Λมߋ͢Δ͜ͱΛҙਤͨ͠ͷͰͳ͘ɺ·ͨͦͷΑ͏ͳ݁ՌΛੜΉͷͰ͋Γ·ͤΜɻ ຊߨԋࢿྉͰ*#.ɺϓϩάϥϜɺ·ͨαʔϏεʹݴٴ͍ͯͯ͠ɺ*#.͕Ӧۀ׆ಈΛߦ͍ͬͯΔͯ͢ͷࠃͰͦΕΒ͕༻ՄೳͰ͋Δ͜ͱΛ҉ࣔ͢ΔͷͰ͋Γ ·ͤΜɻຊߨԋࢿྉͰݴٴ͍ͯ͠ΔϦϦʔεػೳɺࢢػձ·ͨͦͷଞͷཁҼʹج͍ͮͯ*#.ಠࣗͷܾఆݖΛ͍ͬͯͭͰมߋͰ͖Δͷͱ͠ɺ ͍͔ͳΔํ๏ʹ͓͍ͯকདྷͷ·ͨػೳ͕༻ՄೳʹͳΔͱ֬͢Δ͜ͱΛҙਤͨ͠ͷͰ͋Γ·ͤΜɻຊߨԋࢿྉʹؚ·Ε͍ͯΔ༰ɺࢀՃऀ͕։࢝͢Δ ׆ಈʹΑͬͯಛఆͷൢചɺച্ߴͷ্ɺ·ͨͦͷଞͷ݁Ռ͕ੜ͡Δͱड़Δɺ·ͨ҉ࣔ͢Δ͜ͱΛҙਤͨ͠ͷͰɺ·ͨͦͷΑ͏ͳ݁ՌΛੜΉͷͰ͋Γ·
ͤΜɻύϑΥʔϚϯεɺཧ͞Εͨڥʹ͓͍ͯඪ४తͳ*#.ϕϯνϚʔΫΛ༻ͨ͠ଌఆͱ༧ଌʹج͍͍ͮͯ·͢ɻϢʔβʔ͕ܦݧ͢Δ࣮ࡍͷεϧʔϓοτύ ϑΥʔϚϯεɺϢʔβʔͷδϣϒɾετϦʔϜʹ͓͚ΔϚϧνϓϩάϥϛϯάͷྔɺೖग़ྗߏɺετϨʔδߏɺ͓Αͼॲཧ͞ΕΔϫʔΫϩʔυͳͲͷߟྀࣄ߲Λ ؚΉɺଟ͘ͷཁҼʹԠͯ͡มԽ͠·͢ɻ͕ͨͬͯ͠ɺݸʑͷϢʔβʔ͕͜͜Ͱड़ΒΕ͍ͯΔͷͱಉ༷ͷ݁ՌΛಘΒΕΔͱ֬͢ΔͷͰ͋Γ·ͤΜɻ هड़͞Ε͍ͯΔͯ͢ͷ͓٬༷ࣄྫɺͦΕΒͷ͓٬༷͕ͲͷΑ͏ʹ*#.Λ༻͔ͨ͠ɺ·ͨͦΕΒͷ͓٬༷͕ୡͨ݁͠Ռͷ࣮ྫͱͯࣔ͠͞ΕͨͷͰ͢ɻ࣮ࡍ ͷڥίετ͓ΑͼύϑΥʔϚϯεಛੑɺ͓٬༷͝ͱʹҟͳΔ߹͕͋Γ·͢ɻ *#.ɺ*#.ϩΰɺJCNDPNɺ*#.$MPVEɺ*#.$MPVE1BLTɺੈքͷଟ͘ͷࠃͰొ͞Εͨ*OUFSOBUJPOBM#VTJOFTT.BDIJOFT$PSQPSBUJPOͷඪͰ͢ɻଞͷ໊͓ ΑͼαʔϏε໊ɺͦΕͧΕ*#.·֤ͨࣾͷඪͰ͋Δ߹͕͋Γ·͢ɻݱ࣌Ͱͷ*#.ͷඪϦετʹ͍ͭͯɺXXXJCNDPNMFHBMDPQZUSBEFTIUNMΛ͝ཡ ͍ͩ͘͞ɻ .JDSPTPGU 8JOEPXT 8JOEPXT4FSWFS /&5'SBNFXPSL /&5 /&5$PSFɺ.JDSPTPGU$PSQPSBUJPOͷඪ·ͨొඪͰ͢ɻ /7*%*" /7*%*"ϩΰ /7*%*"$6%" /7*%*"$PSQPSBUJPOͷඪ·ͨొඪͰ͢ɻ )VHHJOH'BDFɺ )VHHJOH'BDF *OD ͷඪͰ͢ɻʢొඪͱͯ͠ग़ئதʣ ࢿྉͰར༻͍ͯ͠Δ)VHHJOH'BDFʹొ͞Ε͍ͯΔϞσϧɺ֤Ϟσϧ͕ࢦఆͨ͠ϥΠηϯεͰӡ༻Ͱ͖·͢ɻ ࢿྉʹ͍ࣔͯ͠Δ"*ਪΛ࣮ߦ͢ΔͨΊͷίʔυɺαϯϓϧͰ͋ΓશͳίʔυͰ͋Γ·ͤΜɻ*5ΤϯδχΞͷମݧػձΛ૿ֶ͢शతͰ४උͨ͠ͷͰ͢ɻ "*ϞσϧΛ࣮ࡍͷγεςϜʹΈࠐΉ߹ɺϞσϧͷϥΠηϯεࣄ߲Λ֬ೝ͠ɺγεςϜཁ݅ʹԠͨ͡"*ਪ࣮ߦڥΛ४උ͠ɺඞཁͳྫ֎ॲཧΛՃ͢ΔͳͲ࣮ӡ ༻ʹ͑ΔίʔυΛ࡞͠ɺेͳσόοάɺςετΛߦ͍ͬͯͩ͘͞ɻ )VHHJOH'BDF5SBOTGPSNFSͷٕज़తͳղܾɺϑΟʔυόοΫɺIUUQTHJUIVCDPNIVHHJOHGBDFUSBOTGPSNFST ΑΓɺ (JU)VC*TTVF 1VMM3FRVFTUΛ௨ͯ͡ɺΦʔϓϯιʔείϛϡχςΟͱڞʹਐΊ͍ͯͩ͘͞ɻ