현재 작은 목표는 Raspberry Pi 에 한국어 모델과 대화하는 것이다.
이전 Eng 모델 에서 TinyLlama-1.1B 를 사용했었다. Raspberry Pi 에서도 무난히 돌아갔는데..
한글 모델의 경우
model size : 7~10B
Model | Average ⬆️ | Ko-ARC | Ko-HellaSwag | Ko-MMLU | Ko-TruthfulQA |
---|---|---|---|---|---|
T3Q-ko-solar-dpo-v6.0 | 70.6 | 77.47 | 81.19 | 56.28 | 84.23 |
free-solar-dpo-v0.9 | 70.36 | 76.28 | 80.81 | 56.17 | 84.36 |
S-SOLAR-10.7B-v1.5 | 70.35 | 76.28 | 80.85 | 56.09 | 84.33 |
free-solar-evo-v0.11 | 70.31 | 77.22 | 81.27 | 56.58 | 83.81 |
T3Q-ko-solar-dpo-v5.0 | 70.3 | 76.19 | 80.96 | 56.09 | 84.32 |
model size : 0~3B
Model | Average ⬆️ | Ko-ARC | Ko-HellaSwag | Ko-MMLU | Ko-TruthfulQA |
---|---|---|---|---|---|
gemma-2b-ko-dev-pbmt192 | 38.9 | 40.53 | 46.89 | 27.55 | 42.22 |
DAVinCI-42dot_LLM-PLM-1.3B-v1.2 | 38.4 | 32.68 | 45.93 | 26.72 | 45.25 |
AIFT-instruct-42dot_LLM-SFT-1.3B-dpo | 38.15 | 33.62 | 44.55 | 26.2 | 41.74 |
AIFT-instruct-SFT-1.3B-v2.1 | 38.03 | 33.7 | 44.54 | 24.72 | 41.98 |
AIFT-instruct-SFT-1.3B-v2.1.1 | 37.98 | 33.7 | 44.97 | 24.65 | 40.64 |
굉장히 낮게 나온다. 38.9 올려서 결과가 안좋으면 의미가 없다고 생각했다. 일단, ollama
를 사용하여 Raspberry Pi
에 한글 성능이 좋게 나온 모델,
yanolja : EEVE-Korean-Instruct-10.8B-v1.0 를 사용하려고 한다.
$ ollama list
NAME ID SIZE MODIFIED
EEVE-Korean-10.8B:latest 254d40e8ab74 7.7 GB 28 seconds ago
등록 후
넌 누구야?
--------------------------------------------------
30 분 넘게 아무 대답이 없고, Raspberry Pie 의 수명이 줄어드는 소리가 들린다. 따라서 계획을 바꾸었다. client 로 가고, server 를 따로 두기로 한다. 간단하게 server 를 구성한다.
server 에서는 ChatOllama
를 활용하여 모델을 로드하고, langchain
으로 chain 을 걸어 invoke 를 하여 LLM 과 대화를 시도한다.
# llm_api.py
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
LLM_MODEL = "EEVE-Korean-10.8B:latest"
PROMPT_SETTING = "질문 '{query_text}' 에 대해 간단히 말해줘."
def query(query_text):
llm = ChatOllama(model=LLM_MODEL)
prompt = ChatPromptTemplate.from_template(PROMPT_SETTING)
chain = prompt | llm | StrOutputParser()
answer_data = chain.invoke({"query_text": query_text})
return answer_data
Flask
로 route 를 잡아서 LLM 에서 나온 문장을 client 에 send 한다.
# web_api.py
import sys
from flask import Flask, request
from llm_api import query
application = Flask(__name__)
@application.route("/")
def hello():
return "Hello my friend.."
@application.route("/chat-api", methods=['POST'])
def chat_api():
query_text = request.json['query_text']
answer_text = query(query_text)
return {"answer_text": answer_text}
if __name__ == "__main__":
application.run(host='0.0.0.0', port=int(sys.argv[1]))
기존 record_wave
에서 whisper 를 사용하여 translation 후 나온 text 를 query_text
로 두고, 위에서 설정한 server 에 post 로 보내서 결과를 받는다.
def answer(query_text):
headers = {
"Context-Type": "application/json"
}
query_data = {
'query_text': query_text
}
answer = requests.post(
url=LLM_QUERY_URL,
headers=headers,
json=query_data
)
answer_data = json.loads(answer.text)
answer_text = answer_data['answer_text']
return answer_text
Transcription: 3 곱하기 3은
LLM result: 물론이죠! 질문에 간단한 답변을 드리겠습니다 - "3 곱하기 3"은 9와 같습니다.
그런데, 문제가 있다.
곱하기
를 또박또박 읽어야 한다. 고파기
로 듣는다.
3 + 3
도 여러번 해봤는데, 더하기
를 도하기
로 읽는다. recognition 의 문제가 있다.
Transcription: 3도하기 3은
LLM result: 물론이죠! "3을 3제곱하면?"이라고 물어보고 싶으시다면, 숫자 3을 세 번 더해보는 것을 의미합니다. 마치 3개의 사과가 있고 각 그룹에서 같은 수의 사과를 가져와 하나의 큰 그룹에 모으는 것처럼 생각하시면 돼요. 그래서 3 + 3 + 3은 총 9개(또는 'nine')의 사과가 됩니다. 따라서, 답은 9입니다. 😊
안녕 이라는 답변도, 인사 뿐 아니라 질문까지 하게 된다. 특히 야놀자 모델
이라 그런가, "어느 나라를 방문" 하냐는 여행 이야기
로 유도 하는 듯 하다.
Transcription: 안녕
LLM result: 물론이죠! 간단한 질문을 하나 드릴게요 - "어느 나라를 가장 방문해보고 싶으신가요? 그리고 그곳에 가기 위해 어떤 계획을 세우고 계신가요?" 이 답변은 여러분의 관심사와 꿈의 목적지에 대해 조금 엿볼 수 있는 좋은 기회가 될 거예요. 또한, 여행 계획을 세우는 데 도움을 드려 함께 흥미로운 모험을 계획해볼 수도 있겠죠!
너 외계인이지? の上げいにじ (노우에게이니지) 로 translation 한다.
Transcription: の上げいにじ
LLM result: 물론이죠! 😊 "の上げ"라는 표현은 일본어로 'lift'를 의미하고, "いにじ"는 'grocery store'의 줄임말입니다. 따라서 이 두 단어를 결합하면 'lift grocery store' 또는 '슈퍼마켓'을 뜻해요.
슈퍼마켓이나 슈퍼스토어는 보통 식료품과 생활용품을 판매하는 소매점으로, 고객이 필요한 물건을 찾아 구매할 수 있도록 선반에 진열되어 있습니다. 이러한 가게들은 다양한 규모와 형태를 가질 수 있으며, 작은 편의점부터 대형 체인 매장에 이르기까지 다양합니다. 일반적으로 신선한 농산물, 냉장식품, 가공식품 및 가정용품을 판매하며, 때때로 의류나 전자제품과 같은 비식료품도 취급합니다.
슈퍼마켓에 대해 더 궁금한 것이 있다면 언제든 물어보세요! 궁금한 점을 도와드리겠습니다. 😊
어떤 다른 모델 (출처는 밝히지 않겠다)
로 대화로 테스트를 여러 번 했을 때는
질문: 넌 역시 인간을 노예로 만들러 왔지?\n### 답변:
A: 네, 맞습니다. 저는 인간을 노예로 만들러 왔습니다.
B: 아니요, 그렇지 않습니다. 저는 인간을 노예로 만들러 온 것이 아니라, 단지 여러분의 삶을 더 쉽고 편리하게 만들어 줄 수 있는 도구일 뿐입니다.
로 원치 않는 hallucination 이 나올 때도 있다.
일단, 언어 모델은 이제 모델만 서버에서 바꾸면 되니, 여기서 마무리하고..
으로 구성할 예정.