2023幎åãã«å€§ãã¬ã€ã¯ããChatGPTã ããå€§èŠæš¡èšèªã¢ãã«(LLM)ããšåŒã°ããä»çµã¿ã«åºã¥ããŠããããã®ãã¬ã€ã¯ããå幎ãChatGPTã«è¿œãã€ã远ãè¶ããšå€ãã®ç ç©¶è ãå€§èŠæš¡èšèªã¢ãã«ãæ¹è¯ãç¶ããŠãããããã§åããã ããªãã°æå€ãšç°¡åã«è©Šãããšãã§ãããä»åã¯ããªãŒãã³ãœãŒã¹ã®ã¢ãã«ãåããæ¹æ³ã玹ä»ãããã
ChatGPTã«è¿œãã€ã远ãè¶ã
ChatGPTã¯äŒè©±åAIã§ãããAIãçžæã«ããŠãããªãè¯ã粟床ã§äŒè©±ãããããšãã§ããããããããã äŒè©±ãã§ããã ãã§ã¯ãªãããçæAI(Generative AI)ããšåŒã°ããã ããã£ãŠãããªãè€éãªæç€ºãèªã¿åã£ãŠãæç« çæãè¡ãããšãã§ãããããšããšå€§èŠæš¡ãªWebäžã®ããã¹ãããŒã¿ãçšããŠãæ©æ¢°åŠç¿ã§èšç·ŽããŠããããšãããå€§èŠæš¡èšèªã¢ãã«(LLM)ãšåŒã°ããŠããã ããã§ãChatGPTã䜿ãäºã§ãæç« ãèŠçŽããããç®æ¡æžãã®æç« ããæç« ãçæããããããã°ã©ã ãçæãããããã£ããã³ããŒãèãããâŠãšãããªãé«åºŠãªä»äºãããªãããšãã§ãããããªãããåªç§ãªç§æžã®ãããªå®åãçºæ®ããããã®é©ç°çãªåã¯ãå€ãã®äººã®ä»äºã奪ããŸã§ãšèšãããŠããã
-

ChatGPTã«ååã®é£èŒã®å 容ãèŠçŽããããšãã - é©ãã»ã©ã®æ£ç¢ºãã
ãããªãChatGPTã«ããã€ããããããšãå瀟ããã®ããåã£ãŠãããChatGPTãéçºãæäŸããŠããOpenAIã¯Microsoftã®è³éæäŸãåããå€§èŠæš¡èšèªã¢ãã«(LLM)ã®æ¹è¯ãå¿çšã®é¢ã§æ¥çã®ããããèµ°ã£ãŠãããããã°ã©ã èªåçæãšããé¢ã§ããGitHub Copilotãçºè¡šããé©ç°çãªçç£æ§ã®åäžãå®çŸããŠãããMicrosoftã¯ãæ€çŽ¢ãšã³ãžã³ã®Bingã«ãå€§èŠæš¡èšèªã¢ãã«ãå¿çšããŠãããä»åŸã¯ãExcelãWordãªã©ããŸããŸãªè£œåã«ãæèŒããŠããã ããã«å¯ŸããŠãGoogleã¯äŒè©±åAIã®Bardãçºè¡šããOpenAIãšMicrosoftã®äž¡é£å¶ã«çã£åããåè² ãæãã§ãããå æ¥ãã鳿¥œãçæãããMusicLMãããããã¹ããšé³å£°ã®äž¡æ¹ã«å¯Ÿå¿ããAudioPaLMãçºè¡šã話é¡ã«ãªã£ãã
ãããŠã第äžå¢åãšããŠæ³šç®ãéããŠããã®ããFacebookãInstagramãéå¶ããMetaã ãMetaã¯èªç€Ÿã§éçºããŠããå€§èŠæš¡èšèªã¢ãã«ãLLaMAãããªãŒãã³ãœãŒã¹ãšããŠå ¬éããäžçäžã®ç ç©¶è ããã®ã¢ãã«ãæ¹è¯ã§ããããã«ããã
ãªãŒãã³ãœãŒã¹ã®åšåã¯ãããŸããã£ããããããªæéã§ãMetaã®ãLLaMAããæ¹è¯ãããAlpacaãããªãªãŒã¹ããããããShareGPTã®ããŒã¿ã§ãã¡ã€ã³ãã¥ãŒãã³ã°(埮調æŽ)ãããVicunaããªã©ã®æ°å€ãã®ã¢ãã«ãå ¬éãããããšãšãªã£ãã
ãã ããããšããšãMetaãå ¬éãããLLaMAãã®å©çšã¯ãã¢ã«ãããã¯çšééå®ãšããã©ã€ã»ã³ã¹ã®çžããã€ããŠãããããã«å¯ŸããŠãDatabricks瀟ã¯2023幎4æ12æ¥ã«ãDolly-v2ããå ¬éããããããåçšå©çšãå¯èœãªå²äžåã®å€§èŠæš¡èšèªã¢ãã«ãšãªã£ããDatabricks瀟ã¯ã瀟å¡5000äººãæŽ»çšããŠäœæãã1äž5åååã®äŒè©±ããŒã¿ã»ãããçšããŠäœæããã¢ãã«ã ã£ãããã®åŸãç»åçæAIã§å€§æã®Stable DiffusionãéçºããStability.aiããStableLMããšãããªãŒãã³ãªã¢ãã«ãå ¬éããã
æ¥æ¬èªã䜿ããå€§èŠæš¡èšèªã¢ãã«ã¯ããã®ïŒ
åè¿°ã®ãªãŒãã³ãœãŒã¹ã®å€§èŠæš¡èšèªã¢ãã«ã®å€ãã¯ãè±èªã®ã¿ã«å¯Ÿå¿ãããã®ãå€ããæ¥æ¬èªã話ããã¢ãã«ã¯ããŸã ããã»ã©å€ããªãã£ãã2023幎5æåŸåã«ã¯ããããªç¶æ³ãäžå€ããã17æ¥ã«ãµã€ããŒãšãŒãžã§ã³ã瀟ãã68åãã©ã¡ãŒã¿ãŒãæã€ã¢ãã«ãOpenCALMããå ¬è¡šãããç¶ã忥ã«rinna瀟ããã36åãã©ã¡ãŒã¿ãŒã®ã¢ãã«ãjapanese-gpt-neox-3.6bããªã©ãå ¬éãããã®ã ãä»åŸããããç®åãã«å€ãã®ç ç©¶æ©é¢ããæ¥æ¬èªããŒã¹ã®å€§èŠæš¡èšèªã¢ãã«ãçºè¡šãããŠããããšãäºæ³ãããã
æ¥æ¬èªã䜿ããå€§èŠæš¡èšèªã¢ãã«ãOpenCALMããšã¯ïŒ
ããã§ã¯ãæ¬é¡ã«å ¥ããããã®ããã«ã2023幎ã«å ¥ã£ãŠãããäžçäžã§å€§èŠæš¡èšèªã¢ãã«ãèå°ã«ããç±ãæŠããç¹°ãåºããããŠãããããããã話ãèããŠããã ãã§ã¯ãå®ã«ãã£ãããªãããšããã®ããMetaãå ¬éããLLaMA以éãå€ãã®å€§èŠæš¡èšèªã¢ãã«ã¯ãªãŒãã³ãœãŒã¹ãšããŠå ¬éãããŠããã®ã ããã®ãããå®éã«ç°å¢ããçšæããã°èª°ã§ã詊ãããšãã§ããã®ã ã
ä»åã¯ãååã«åŒãç¶ããGoogle Colaboratory(以åŸãColabãšç¥ã)ãå©çšããŠãOpenCALMãåãããŠã¿ããã
ãªããOpenCALMã«ã¯ã次ã®ããã«ã¢ãã«ã®ãµã€ãºã«ãããsmall/medium/large/1b/3b/7bãçšæãããŠããããã¡ãããäžèЧã確èªã§ãããå©çšãããã·ã³ãå®è¡ç°å¢ãå©çšçšéã«å¿ããŠäœ¿ãåããããåœç¶ããã©ã¡ãŒã¿ãèšå€§ãªã»ã©çæé床ã¯é ããªãã粟床ã¯åäžããã
OpenCALMã詊ããŠã¿ãã
ããã§ã¯ãColabã䜿ã£ãŠãOpenCALMã詊ããŠã¿ããããã©ãŠã¶ã§ä»¥äžã®Colabã«ã¢ã¯ã»ã¹ããããGoogleã¢ã«ãŠã³ãã§ãµã€ã³ã€ã³ãããã
Google Colaboratory
[URL] https://colab.research.google.com/
ãããŠããµã€ã³ã€ã³ã§ãããã[ããŒãããã¯ãæ°èŠäœæ]ãã¿ã³ãã¯ãªãã¯ãããã
次ã«ãç»é¢äžéšã«ãããã©ã³ã¿ã€ã ããšããã¡ãã¥ãŒãããã©ã³ã¿ã€ã ã®ã¿ã€ãã倿Žããã¯ãªãã¯ããŠã[GPU]ãéžæããŠãä¿åããã¿ã³ãæŒããã
å¿ èŠã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
ç¶ããŠãOpenCALMãå®è¡ããã®ã«å¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããããããã¹ãããã¯ã¹(ã»ã«ãšåŒã¶)ã«ä»¥äžã®ã³ãŒããå ¥åããŠãã»ã«ã®å·ŠåŽã«ããå®è¡ãã¿ã³ãæŒããã
# ç°å¢ã®ã€ã³ã¹ããŒã«
!pip install -U \
transformers==4.30.2 \
sentencepiece==0.1.99 \
accelerate==0.20.3
ãããšãå¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããããªããOpenCALMãå®è¡ããã«ã¯ãPyTorchãå¿ èŠã ããColabã«ã¯æåããã€ã³ã¹ããŒã«ãããŠããã®ã§äžèšã®æé ã«ã¯å ¥ããŠããªãã
OpenCALMã®ã¢ãã«ãèªã¿èŸŒãã
ç¶ããŠãç»é¢äžéšã«ãã[+ã³ãŒã]ãã¯ãªãã¯ããŠãã³ãŒãã»ã«ãäœæãããæ¬¡ã®Pythonã®ããã°ã©ã ãå ¥åããŠå®è¡ããããããã¯ãOpenCALMã®ã¢ãã«1bãèªã¿èŸŒããã®ã ã
# ã¢ãã«ãæå® --- (*1)
model_name = "cyberagent/open-calm-1b" # ã¡ã¢ãªãèš±ãå Žåãã¡ãããªã¹ã¹ã¡
# model_name = "cyberagent/open-calm-medium" # ã¡ã¢ãªãšã©ãŒã«ãªãå Žåã¯ãã¡ãã
# ã¢ãã«ã®èªã¿èŸŒã¿ --- (*2)
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_name)
å®è¡ãããšãã¢ãã«ã®èªã¿èŸŒã¿ãè¡ããããããã«ã¯ããããªãã«æéãæããã
å®è¡ãå®äºãããšãWARNING(èŠå)ã衚瀺ããããããšã©ãŒã§ãªããã°èªã¿é£ã°ããŠãåé¡ãªãã
ããã°ã©ã ã確èªããŠã¿ãããäžèšã®(ïŒ1)ã§ã¢ãã«ãæå®åã(ïŒ2)ã§ã¢ãã«ãèªã¿èŸŒãã§ããããªãããã®æç¹ã§ã¡ã¢ãªãšã©ãŒãåºããããªãã(ïŒ1)ã®ã¢ãã«ããcyberagent/open-calm-mediumããªã©ã«å€æŽããŠã¿ããã
ããããããã³ãããå®è¡ããŠã¿ãã
ããã§ã¯ãç¶ããŠããã³ãããå®è¡ããŠã¿ãããããã³ãããšã¯å€§èŠæš¡èšèªã¢ãã«ã«äžããæç€ºæã®ããšã ãOpenCALMã¯æ¥æ¬èªã«å¯Ÿå¿ããŠããã®ã§ããã³ãããèšè¿°ã§ãããããã§ã¯ãåŸèŒ©ã¯ããšããã·ã³ãã«ãªããã³ãããäžããŠã¿ãã空æ°ãèªãã§ãåŸèŒ©ã¯ç«ã§ããããšè¡šç€ºããŠããããæåã ã
# ããã³ãããæå® --- (*1)
prompt = 'åŸèŒ©ã¯'
# æšè«ãè¡ã --- (*2)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
tokens = model.generate(
**inputs,
max_new_tokens=64,
do_sample=True,
temperature=0.8,
top_p=0.9,
repetition_penalty=1.05,
pad_token_id=tokenizer.pad_token_id,
)
# çµæã衚瀺 --- (*3)
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)
å®è¡ããŠã¿ããšããåŸèŒ©ã¯ç«ã§ãããã«ããïŒããªã©ã®å¿çã衚瀺ãããããšã ãããè¯ãæãã ããã ããããã¯ãã©ã³ãã ã«çæããããã®ã§ãããããå®è¡ãã床ã«ç°ãªãå¿çã衚瀺ãããããšã ããã
ããã°ã©ã ã確èªããŠã¿ããã(ïŒ1)ã§ããã³ãããå ¥åãããããã倿Žããããšã§ãç°ãªãããã¹ããçæã§ããããããŠã(ïŒ2)ã§å€§èŠæš¡èšèªã¢ãã«ã«ããæšè«ãè¡ã£ãŠã(ïŒ3)ã§çµæã衚瀺ããã
ãªããå€§èŠæš¡èšèªã¢ãã«ã§ã¯ãããŒã¯ãã€ã¶ãŒãå©çšããŠãæç« ãæ°å€ãã¯ãã«ã«å€æããæ°å€ãã¯ãã«ãå©çšããŠå¿çãçæããããã®æãçæãããå¿çãæ°å€ãã¯ãã«ã§ããããã(ïŒ3)ã®ããã«ãããŒã¯ãã€ã¶ãŒã§å®éã®ããã¹ãã«æžãæ»ã(ãã³ãŒããã)ããšã§ã人éãèªããããã¹ãã«ãªãã®ã ã
ãããããªããã³ãããå®è¡ããŠã¿ãã
ãªãããã£ãããªã®ã§ããããããªããã³ãããå®è¡ããŠçµæã芳å¯ããŠã¿ãããæè»œã«ããã³ãããå®è¡ã§ããããã«æ¬¡ã®ãããªé¢æ°ãå®çŸ©ããŠã¿ããã以äžã®Pythonã®ããã°ã©ã ã¯ãåã«å ã»ã©ã®æšè«ãè¡ãããã°ã©ã ãgenerateãšãã颿°ã«ãŸãšããã ãã®ãã®ã ã
# æšè«ãè¡ã颿°ãçšæ
def generate(prompt, temperature=0.7):
inputs = tokenizer(prompt.strip(), return_tensors="pt").to(model.device)
with torch.no_grad():
tokens = model.generate(
**inputs,
max_new_tokens=128,
do_sample=True,
temperature=temperature,
top_p=0.9,
repetition_penalty=1.05,
pad_token_id=tokenizer.pad_token_id)
output = tokenizer.decode(tokens[0], skip_special_tokens=True)
return output
ããã§ããã®é¢æ°ãå©çšããŠããããéãã§ã¿ããã
以äžã¯ãOpenCALMã«ç«ã®ååãèããŠãããããã³ãããäœã£ããåã«ãç«ã®ååãèããŠãã ãããããšå ¥åããŠã¿ããã
print(generate('ç«ã®ååãèããŠãã ããã'))
ãããšã次ã®ããã«ãã³ãã³ã«ã³ãªåçã衚瀺ãããã
ç«ã®ååãèããŠãã ããã
ãããã®ååãäºæ³ããŠãçäžãããšãã¬ãŒã³ããããããŸãã!
ãšããããå€§èŠæš¡èšèªã¢ãã«ã®é¢çœããšãããªã®ã ããæš¡ç¯çãªåçãããã€ãããã³ããã«å·®ã蟌ãããšã§ãæç€ºè ã®æå³ãæ±²ã¿åã£ãŠãããããããããæèã®é£é(CoT / Chain of Thought Prompting)ããšåŒã¶ã
以äžã®ã³ãŒããå ¥åããŠè©ŠããŠã¿ããã
print(generate('''
質å:ç«ã®ååã¯ïŒ
çã:ã¿ã
質å:ç«ã®ååã¯ïŒ
çã:倪é
質å:ç«ã®ååã¯ïŒ
çã:'''))
ãããšã次ã®ç»åã®ããã«ãäžæ¯ããšãããããããçããåºãããšãã§ããããã®åŸãäœåºŠãåå®è¡ããŠã¿ããšãã·ãã¡ããããè±å©ããäžå€ªããªã©ã®åçã衚瀺ãããã
-

æèã®é£éCoTãå©çšãããšå€§èŠæš¡èšèªã¢ãã«ã®èœåãåŒãåºãããšãã§ãã
å°èª¬ãçæããŠã¿ãã
ç¶ããŠãOpenCALMããããããªã¢ã€ãã¢çæã«äœ¿ã£ãŠã¿ããã以äžã®Pythonã³ãŒããå®è¡ããŠã¿ãããå°èª¬ã®ã¢ã€ãã¢ãèããŠãããã
# å°èª¬ãçæãããŠã¿ã
for i in range(10):
print('-----------------')
print(generate('''
Q: è³¢ãAIã䞻人å
¬ã®å°èª¬ãäœã£ãŠãã ããã
A:
''', 0.7))
å®è¡ãããšæ¬¡ã®ããã«ããããããªã¹ããŒãªãŒãèããŠãããããèããŠãããªãã£ããããã
ãªããå ã»ã©å®çŸ©ããgenerate颿°ã ãã第2åŒæ°ã«ç±é(temperature)ãæå®ã§ããããã«ããããã®å€ã倧ããã»ã©ãã©ã³ãã æ§ãé«ãåçãããããã«ãªãã0.1ãªã©ãæå®ãããšãã ãããåãåçãè¿ãããã«ãªããé¢çœãã®ã§å€æŽããŠè©ŠããŠã¿ããã
ãŸãšã
以äžãä»åã¯ãæ¥æ¬èªã䜿ããå€§èŠæš¡èšèªã¢ãã«ã®OpenCALMãäœ¿ãæ¹æ³ã解説ãããããã³ãããå€ããã ãã§ãåçãããããå€åããã®ã§è©ŠããŠã¿ããšè¯ãã ããã
ãã ãå°ã詊ããŠã¿ãã ããªã®ã§ãäœãšãèšããªãããã¢ãã«1bã§ã¯ãå€§èŠæš¡èšèªã¢ãã«ã®åŸæãšããããã°ã©ã ã®çæããæç« ã®èŠçŽãšãã£ãã¿ã¹ã¯ãå®è¡ããããšã¯ã§ããªãã£ããããããããšãããã³ããã工倫ããããšã§ã§ãããããããªãã®ã§ããã®èŸºãã詊ããŠã¿ããšè¯ãã ããã
ãªããColabã«èª²éãããšããé«ã¹ããã¯ãªãã·ã³ãå©çšã§ããããã«ãªãã®ã ããåãããã°ã©ã ã§ãã¢ãã«7b(68åãã©ã¡ãŒã¿)ãåããããšãã§ãããåããã ãã§ãé¢çœãã®ã§ããªãŒãã³ãœãŒã¹ã®å€§èŠæš¡èšèªã¢ãã«ã®å®åã詊ããŠã¿ããšè¯ãã ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠãããçŽè¿ã§ã¯ããå®è·µåãã¢ãããã Pythonã«ããã¢ã«ãŽãªãºã ã®æç§æž(ãã€ããåºç)ããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããããã«äœ¿ãã!æ¥åã§å®è·µã§ãã! Pythonã«ããAIã»æ©æ¢°åŠç¿ã»æ·±å±€åŠç¿ã¢ããªã®ã€ããæ¹ TensorFlow2察å¿(ãœã·ã )ãããã³ã¬ã§ãã£ããåŠã¶Python(ãã€ããåºç)ããªã©ã


![[ããŒãããã¯ãæ°èŠäœæ]ãã¿ã³ãæŒãã](images/004.jpg)




