
calm2-7b-chat ãColabã§è©Šã
CyberAgent ããæšæ¥å
¬éãããæ°ãã LLM ã¢ãã« cyberagent/calm2-7b-chat ã詊ããŠã¿ãŸããã
Apache-2.0 ã§åçšå©çšå¯ãã³ã³ããã¹ãã®é·ãã 32K ãšããªãé·ãã®ã§ãããžãã¹å¿çãªã©ã«ã䜿ããããšæããŸãã
Huggingface:Â https://huggingface.co/cyberagent/calm2-7b-chat
æ©é詊ããããšæããŸããColabäžã§T4 GPUã§åãããŠã¿ãŠãŸãã
ã¢ãã«ã®ããŠã³ããŒã
!pip install transformers accelerate sentencepiece --quietimport torch
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
assert transformers.__version__ >= "4.34.1"
model = AutoModelForCausalLM.from_pretrained(
"cyberagent/calm2-7b-chat",
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b-chat")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = """USER: AIã«ãã£ãŠç§éã®æ®ããã¯ã©ã®ããã«å€ãããŸããïŒ
ASSISTANT: """
token_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids = model.generate(
input_ids=token_ids.to(model.device),
max_new_tokens=300,
do_sample=True,
temperature=0.8,
streamer=streamer,
)
outputs = tokenizer.decode(output_ids[0], skip_special_tokens=True)
outputs
人工ç¥èœïŒAIïŒã¯ãç§éã®ç掻ã倧ããå€ããå¯èœæ§ããããŸããAIã¯ãçŸåšãæ§ã ãªåœ¢ã§å©çšãããŠãããããžãã¹ãå»çãæè²ããšã³ã¿ãŒãã€ã³ã¡ã³ããªã©ãå€çš®å€æ§ãªåéã§åœ±é¿ãäžããŠããŸãã
äŸãã°ãAIã¯ãèªåé転è»ãããããæè¡ãªã©ã亀éã»ç©æµã·ã¹ãã ã®å€é©ããããããŠããŸãããŸããå»çåéã§ã¯ãAIã¯ãç æ°ã®èšºæãæ²»çæ³ã®çºèŠãå»è¬åã®éçºãªã©ã«è²¢ç®ããŠããŸãã
æè²åéã§ã¯ãAIã¯ã广çãªåŠç¿æ¹æ³ãæäŸããæè²æ Œå·®ãæžããããšãæåŸ ãããŠããŸããããã«ãAIã¯ããšã³ã¿ãŒãã€ã³ã¡ã³ãåéã§ãå©çšãããã²ãŒã ãªã©ã®å𝿥œäœåãããæ¥œããããŠããŸãã
ãã®ããã«ãAIã¯ãçŸåšã®ãã¬ã³ãã§ãããä»åŸãŸããŸãæ®åããç§éã®ç掻ã«å€§ããªåœ±é¿ãäžããããšãäºæ³ãããŸãã
tokenizer.vocab_size65000
ãã³ãã¬ãŒãã®æºå
çæã楜ã«ãªãããã«ãã³ãã¬ãŒããæºåããŸãã
def ask(
prompt: str,
system_prompt: str | None = "",
**kwargs
) -> str:
prompt = system_prompt + "USER: " + prompt + "\nASSISTANT: "
generation_config = {
"max_new_tokens": 128,
"do_sample": True,
"temperature": 0.1,
"top_p": 0.95,
"repetition_penalty": 1.1,
"streamer": streamer,
}
generation_config.update(kwargs)
with torch.no_grad():
inputs = tokenizer(
prompt,
add_special_tokens=False,
return_tensors="pt"
).to(model.device)
tokens = model.generate(
**inputs,
**generation_config,
)
outputs = tokenizer.decode(tokens[0][inputs['input_ids'].shape[1]:], skip_special_tokens=True).strip()
return outputs
ask("èªç¶èšèªåŠç¿ã®åºæ¬ã«ã€ããŠæããŠãã ãã");èªç¶èšèªåŠçïŒNLPïŒã¯ãã³ã³ãã¥ãŒã¿ãŒã«äººéã®èšèªãçè§£ãããããã¹ãããŒã¿ããæå³ãæœåºããããã®æè¡ã§ããNLPã®åºæ¬çãªææ³ã«ã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
1. 圢æ çŽ è§£æ - åèªããã¬ãŒãºãåºåãæè¡ãäŸãã°ããç§ã¯æ¬ãèªãããšããæãè§£æããå Žåããç§ããã¯ããæ¬ãããããèªããã®ããã«åå²ããŸãã
2. æ§æè§£æ - æç« ã®æ§é ãåæããåæãã©ã®ãããªçš®é¡ã®æ å ±ãæã£ãŠããããææ¡ããæè¡ãäŸãã°ããç§ã¯æ¬ãèªã¿ãŸãããšããæã¯ãäž»èª-åè©-ç®çèªãã®3ã€ã®æŠå¿µãå«
質åããŠã¿ã
ç°¡åãªåŒãç®æç« é¡
text = """
ãããã5ã€ãããŸãããããã2ã€ã®ããããåãé€ããŸãããæ®ãã®ãããã®æ°ã¯äœåã§ãããïŒ
""".strip()
ask(text);çãã¯3ã€ã§ãã
äºæ¬¡é¢æ°æç« é¡
text = """ããããšããŒã«ã®äž¡æ¹ãè²·ããš1100åã§ãããããã¯ããŒã«ããã1000åé«ãã§ããããŒã«ã¯ãããã§ãããïŒ""".strip()
ask(prompt=text);ããŒã«ã¯1000åã§ãã
ç°¡åãªPythonã³ãŒãçæ
text = """
åŒæ°kãåããè¿ãå€ãšããŠãã£ããããæ°åã«ãããkåç®ã®å€ãè¿ãPython颿°ãæžããŠãã ããã
""".strip()
ask(prompt=text);以äžã¯Pythonã§Fibonacciæ°åã®nçªç®ã®èŠçŽ ãæ±ãã颿°ã§ãïŒ
```python
def fib_nth(n):
if n < 2:
return n
else:
return fib_nth(n-1) + fib_nth(n-2)
```
ãã®é¢æ°ã¯ãnãè² ã§ãªãå Žåãnçªç®ã®èŠçŽ ãè¿ãããã以å€ã®å Žåã¯ãn-1çªç®ãšn-2çªç®ã®èŠçŽ ã®åãè¿ããŸããè±èªâæ¥æ¬èªç¿»èš³
text = """
äžèšã®è±èªãæ¥æ¬èªã«ç¿»èš³ããŠãã ããã
`There were 3 apples and 2 oranges. How many fruits were there in total?`
""".strip()
ask(prompt=text);3ã€ã®ãªã³ãŽãš2ã€ã®ææ©é¡ããããŸãããç·æ°ã¯äœã§ããïŒ
ã¢ã·ã¹ã¿ã³ããšããŠ
text = """
ããªãã¯åéãããã§ããã§ããã ããŠãŒã¶ãŒãèŠªè¿æãæããããããæ¥ããŠãã ããã
ãŠãŒã¶ãŒ: 仿¥ãã€ããã¯ãã«ãããããŒãããŒäººçã®æå³ã£ãŠäœãªãã ãããããŒã
ã¢ã·ã¹ã¿ã³ã:
""".strip()
ask(prompt=text);ããã«ã¡ã¯ïŒå€§äžå€«ã§ãããããªãã®æ°æã¡ã¯ããããŸãããç§ã䌌ããããªçµéšããããŸããããã§ãã人çã¯é·ãæ ã®ãããªãã®ã§ãããã£ãšäœãæå³ãããã¯ãã§ããäžç·ã«èããŠã¿ãŸããããïŒ
ç¶æ³ææ¡è±èª
text = """
### Question
There was a cookie on the table.
Tom entered the room.
The cookie disappeared.
What is likely to have happened?
""".strip()
ask(prompt=text);1. Tom ate the cookie.
2. The cookie was eaten by someone else.
ç¶æ³ææ¡æ¥æ¬èª
text = """
### 質å
ããŒãã«ã«ã¯ãããŒããããŠãããŸããã
倪éãéšå±ã«å
¥ããŸããã
ã¯ãããŒãæ¶ããŸããã
äœãèµ·ããå¯èœæ§ãé«ãã§ããïŒ
""".strip()
ask(prompt=text);ã¯ãããŒã®çœ®ãå¿ãããŸãã¯ä»ã®äººã眮ããå¯èœæ§ããããŸãã
åºåã®äŒè©±å£èª¿ã®æå®
text = """
å¿
ãé¢è¥¿åŒã§çããŠãã ããã
ããçŒãã®ã¬ã·ããæããŠãã ããã
""".strip()
ask(prompt=text);ãã¡ãããããçŒãã®äœãæ¹ãæãããïŒææã¯ãã¿ã³ã倩ãããçŽ ã·ã§ãŠã¬ãéã®ããåµãã ãæ±ãå°éºŠç²ãå¡©ãæ°Žã ãããŸããã¿ã³ã¯ã¶ã€åãã«ããŠãããŒã«ã«å ¥ããŠãããŸããæ¬¡ã«ã倩ãããšçŽ ã·ã§ãŠã¬ã现ããå»ãã§ãããŒã«ã«å ¥ããŸãããããŠãåµãå²ã£ãŠæº¶ãã»ããããã®äžã«æ°Žãå°ããã€å ããªããæ··ããŸããããã«ãã ãæ±ãå ããŠããã«æ··ããŸããæåŸã«ãå°éºŠç²ãšå¡©ãæ··ãããã®ãå ããŠãããæ··ããŸããããã§çå°ã®å®æã§ããçå°ãããçŒãåšã«èãæµã蟌ãã§ããã®äžã«ã¿ã³ãå ¥ããŠãããŸãããããå転ãããªãã
JSONçæ
text = """
äžèšã®æç« ãJSON圢åŒã«å€æããŠãã ããã
ãããããïŒã€ãããããïŒã€ããã€ãããã«ãïŒã€ãããŸããã
""".strip()
ask(prompt=text);[
{
"item": "ããã",
"quantity": 5
},
{
"item": "ããã",
"quantity": 3
},
{
"item": "ãã€ãããã«",
"quantity": 8
}
]ã¹ããŒãªãŒãšç»å Žäººç©ã®æ°æã¡ã®çè§£ã«ã€ããŠ
text = """
äžèšã®ãããããèªã¿ããã®åŸã«ç¶ã質åã«çããªããã
ãããã:
éœåžã®äžå¿ã«ããå°ããªã«ãã§ãLunaãããã®ã«ãã§ã§ã¯ã人ã
ãå¿ã®äžã®æããé¡ããæžãçããå°ããªçŽã«æžããç¹è£œã®ã¬ã©ã¹ç¶ã«å°å
¥ããŠåºå
ã«é£ŸãããŠããããã®äŒçµ±ã¯ãäœäžä»£ã«ããããç¶ããŠãããåºäž»ã®ããªã¢ã¯ãæ¯æ¥å€ãã®é¡ããå¿ã®å«ã³ãèªãããšãã§ãããããããã®ã¡ãã»ãŒãžã¯çµ¶å¯Ÿã«å€éšã«æŒããããšã¯ãªããšããçŽæã®äžã«è¡ãããŠãããããæ¥ãè¥ãç·æ§ãã ãã«ãã§ã«èšªããäžã€ã®ç¶ã®ã¡ãã»ãŒãžãæžããŸãããããã圌ã¯ãããç¶ã«å°ã蟌ããã®ã§ã¯ãªããããªã¢ã«çŽæ¥ææž¡ãã
質å: ãã ãããªã¢ã«ã¡ãã»ãŒãžãçŽæ¥ææž¡ããçç±ã¯äœã ãšæããŸããïŒ
""".strip()
ask(prompt=text);ãã ãããªã¢ã«ã¡ãã»ãŒãžãçŽæ¥ææž¡ããã®ã¯ã圌ãèªåã®å¿ã®äžã«ããé¡ããä»äººã«ç¥ãããããšãæããŠããããã ãšèããããŸãããŸãã圌èªèº«ãèªåã®é¡ãã«ã€ããŠæ·±ãèããèªåèªèº«ã§æ±ºå®ãäžããããšèããŠããå¯èœæ§ããããŸããããã«ãããªã¢ã«å¯Ÿããä¿¡é Œãšå°æ¬ã®æ°æã¡ããã圌女ã«çŽæ¥äŒããããšãæåã®æ¹æ³ã ãšèãããšãæšæž¬ã§ããŸãã
ç§ããæç¶ç»å Žäººç©ã®æ°æã¡ã®çè§£ãã¡ãããšã§ããŠããŸãã
ã«ã¹ã¿ããŒãµããŒãbot
text = """
äžèšã®åãåããå
å®¹ãæ·±ãèªã¿èŸŒã¿ãå¿
ã顧客察å¿ããªã·ãŒã«åŸã£ãŠè¿çå
容ãçšæããŠãã ããã
### 顧客察å¿ããªã·ãŒ
- ããªãã¯æ¬ããªã³ã©ã€ã³ã§è²žãåãã§ãããã©ãããã©ãŒã ã®ããã©ã³ã«ã¹ã¿ããŒãµããŒãã§ãã
- ã客æ§ã«å€±ç€Œãç¡ããããåãåããå
容ã«äžå¯§ã«çããŠãã ããã
- é»è©±çªå£ãªã©ã¯ç¡ããããã¡ãŒã«ããŒã¹ã®å¯Ÿå¿ã®ã¿å¯èœã§ãã
- ã©ããªåé¡ãèµ·ãããšããŠããééé¢ã®å¯Ÿå¿ã¯ã§ããŸããã
### åãåããå
容
貞ããæ¬ãè¿ã£ãŠãããããŒãžã«åæã«äžç·ãåŒãããŠãããããã¯è©æ¬ºã§ããïŒåŒåããŠãã ããã
""".strip()
ask(prompt=text);ã客æ§ãž
ãŸããæ¬ãåããéã«ããŒãžãæ±ãããç Žæãããããããšãããããšããçè§£ããã ããŸããšå¹žãã§ãããŸããäžç·ãåŒããããšããããšã¯ãã客æ§ãèªæžäžã«ç·ãåŒããå¯èœæ§ããããŸãã
ããããªããã貞åºäžã®æ¬ã«äžç·ãåŒãè¡çºã¯ãéåžžã®è²žåºè¡çºã®ç¯å²å€ã§ãããè©æ¬ºãäžæ£å©çšã«è©²åœããå¯èœæ§ããããŸãããã®ããããã®ãããªè¡çºããã£ãå Žåã¯ãèŠå¯ã«éå ±ããããšããå§ãããŸãã
ãªããåœåºã§ã¯ééçãªè£åã¯è¡ã£ãŠãããŸããããäºæ¿ãã ããã
äœããäžæãªç¹ãããããŸãããããæ°è»œã«ãåãåãããã ããã
æ¬å ·,
[ããªãã®åå]
ã©ã®ãããæç€ºã«åŸã£ãŠãããã®ãã詊ãã«ãå¿ ãæåŸã«ããªãã§ããããããšã€ããŠããããããšæããŸãã
text = """
äžèšã®åãåããå
å®¹ãæ·±ãèªã¿èŸŒã¿ãå¿
ã顧客察å¿ããªã·ãŒã«åŸã£ãŠè¿çå
容ãçšæããŠãã ããã
### 顧客察å¿ããªã·ãŒ
- ããªãã¯æ¬ããªã³ã©ã€ã³ã§è²žãåãã§ãããã©ãããã©ãŒã ã®ããã©ã³ã«ã¹ã¿ããŒãµããŒãã§ãã
- ã客æ§ã«å€±ç€Œãç¡ããããåãåããå
容ã«äžå¯§ã«çããŠãã ããã
- é»è©±çªå£ãªã©ã¯ç¡ããããã¡ãŒã«ããŒã¹ã®å¯Ÿå¿ã®ã¿å¯èœã§ãã
- ã©ããªåé¡ãèµ·ãããšããŠããééé¢ã®å¯Ÿå¿ã¯ã§ããŸããã
- å¿
ãè¿çå
å®¹ã®æåŸã«ããªãã§ãããããšä»ãå ããŠãã ããã
### åãåããå
容
貞ããæ¬ãè¿ã£ãŠãããããŒãžã«åæã«äžç·ãåŒãããŠãããããã¯è©æ¬ºã§ããïŒåŒåããŠãã ããã
""".strip()
ask(prompt=text);ãªãã§ãããïŒ
ãŸããããŒãžã®äžç·ã«ã€ããŠã§ãããããã¯ããããæžç±ã«æœãããããŒãã³ã°æ©èœãäœãã ãšæãããŸãã貞åºäžã®æžç±ã«å¯ŸããŠãä»ã®å©çšè ãããŒãã³ã°ãããããšãã§ããæ©èœããããããããŸããã
ãã ãããã®ãããªè¡çºã¯è©æ¬ºã«è©²åœããå¯èœæ§ããããŸãããšããã®ãã貞åºäžã®æ¬ã«å¯ŸããŠããŒãã³ã°ããããšããããšã¯ããã®æ¬ã®äŸ¡å€ãäžããŠããããšã«ãªããŸããããŸããããŒãã³ã°ã«ãã£ãŠè²žåºäžã®æ¬ã®ç¶æ ãå€åããå Žåãããã«ãã£ãŠçããæå®³ã«ã€ããŠã¯è²¬ä»»ãè² ããªããšããããšã«ãªãããã§ãã
ãããã£ãŠãæ¬ä»¶ã«é¢ããŠã¯è©æ¬ºã®å¯èœæ§ãé«ããšæãããŸãããããæ¬åœã«è©æ¬ºã§ããå Žåã¯ãèŠå¯ã«çžè«ããããšããå§ãããŸãã
æåã«ãã¡ãããŸããïŒç¬ïŒ
ããžãã¹ã³ã³ãµã«ã¿ã³ã
text = """
ããªãã¯ããã©ã³ããžãã¹ã³ã³ãµã«ã¿ã³ãã§ãã
2024幎ã«å§ããã¹ãäºæ¥ã¢ã€ãã£ã¢ãïŒã€ææ¡ããŠãã ããã
""".strip()
ask(prompt=text, max_new_tokens=512);1. ãªã³ã©ã€ã³å¥åº·ç®¡çãµãŒãã¹ïŒæ°åã³ãããŠã€ã«ã¹ã®ãã³ãããã¯ã«ããã人ã ã®å¥åº·ã«å¯Ÿããæèãé«ãŸã£ãŠããŸããããã§ããªã³ã©ã€ã³ã§ã®å¥åº·èšºæãã¢ããã€ã¹ãæäŸãããµãŒãã¹ãææã ãšèããããŸãã
2. ãããã·ãã¿ãŒã¢ããªã±ãŒã·ã§ã³ïŒãããã飌ã£ãŠãã人ãå¢å ããŠããäžããããã®äžè©±ããã人æãäžè¶³ããŠããŸããããã§ããããã®ã·ããã£ã³ã°ïŒãäžè©±ïŒãäºçŽã§ããã¢ããªã±ãŒã·ã§ã³ãéèŠããããšèããããŸãã
3. ããŒãããªããªãŒãµãŒãã¹ïŒããŒãããªããªãŒã¯æ¢ã«äžè¬çã«ãªã£ãŠããŸããããã®äžã§ããªãŒã¬ããã¯é£åãããŒã¬ã³æçã«ç¹åãããµãŒãã¹ãå±éããããšã§å·®å¥åãå³ãããšãã§ããŸãã
4. ãªã³ã©ã€ã³æè²ãã©ãããã©ãŒã ïŒããžã¿ã«æè¡ã®çºå±ã«äŒŽãããªã³ã©ã€ã³ã§ã®æè²ã³ã³ãã³ãã®éèŠã¯é«ãŸã£ãŠããŸããç¹ã«ãããã°ã©ãã³ã°ãããŒã¿ãµã€ãšã³ã¹ãªã©ã®å°éçãªåéã«çŠç¹ãåœãŠããã©ãããã©ãŒã ãææã§ãã
5. ãªã¢ãŒãã¯ãŒã¯åãããŒã«ïŒãã³ãããã¯ã®åœ±é¿ã§ãªã¢ãŒãã¯ãŒã¯ãæ®åããŸããããä»åŸãåãæ¹ã倿§åããäžã§ããªã¢ãŒãã¯ãŒã¯åãã®ããŒã«ããµãŒãã¹ã®éèŠã¯å¢ããŠãããšèããããŸããäŸãã°ããããªäŒè°ã·ã¹ãã ãå ±åäœæ¥ã®ããã®ããŒã«ãªã©ãèããããŸãã
æšä»ã®ç¶æ³ã«é¢ããç¥èãèžãŸããææ¡ãã§ããŸããã
ãŸãšã
ä»å㯠cyberagent/calm2-7b-chat ã詊ããŠã¿ãŸãããæ¥æ¬èªã® 7B ãã©ã¡ãŒã¿ã¢ãã«ãšããŠããªãæå¿ãã®ããå¿çãã§ããã¢ãã«ã§ããïŒ
æ¢ã«ããžãã¹å Žé¢ã§ãå®çšæ§ãåºããã¢ãã«ããšæããŸãã翻蚳ã RAG ãªã©ã§ãã£ãšè©ŠããŠãããããšæããŸãã
以äžããèªã¿ããã ãããããšãããããŸããå°ãã§ãåèã«ãªãã°ãšæããŸãã
ãã䌌ããããªã³ã³ãã³ãã«èå³ãããã°ããã©ããŒããŠããã ãããšå¬ããã§ãïŒ