* 본 글은 GPT o1-preview 의 도움을 받아 코드 부분을 작성하였습니다.
* 다만 본 글은 매크로 생성 글은 아닙니다.
1. ollama API
ollama 는 api 를 제공합니다.
https://github.com/ollama/ollama/blob/main/docs/api.md
ollama 가 api 를 제공한다는 건, LLM 모델을 구동하고 있는 ollama 에게 별도 명령을 내릴 수 있다는 의미입니다.
ollama api 를 보면 POST 와 같은 HTTP 로 request 를 날릴 수 있습니다.
2. Python PyPDF2 라이브러리
Python 코드로 ollama 에게 PDF 파일을 읽고, 변역하는 코드를 작성해보았습니다.
(*전체 코드를 올리진 않을 예정입니다)
import PyPDF2
def extract_text_from_pdf(pdf_path):
"""
Extracts text from a PDF file.
"""
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ''
for page in reader.pages:
page_text = page.extract_text()
if page_text:
text += page_text + '\n'
return text
PyPDF2 는 파이썬 라이브러리 중에 PDF 파일을 읽을 수 있는 라이브러리입니다.
text 로 일단 반환을 한 후 ollama 에서 구동할 수 있는 모델에 번역하는 명령을 날리고, 한국어로 결과를 받는 게 목표입니다.
ollama API 를 확인해보겠습니다.
요청을 아래와 같이 날리면,
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?"
}'
아래처럼 model, created_at, response, done 과 같은 JSON 형식의 답이 온다고 합니다.
{
"model": "llama3.2",
"created_at": "2023-08-04T08:52:19.385406455-07:00",
"response": "The",
"done": false
}
3. requests 와 json 라이브러리
ollama 에게 테스트로 위와 똑같은 curl request 를 날려보겠습니다. 다만, 모델을 제가 쓰고 있는 llama3.2:1b 에 json 을 사용해서 날리겠습니다.
import requests
import json
url = 'http://localhost:11434/api/generate'
def test_request():
context = {
"model": "llama3.2:1b",
"prompt": "Why is the sky blue?"
}
try:
response = requests.post(url, json=context)
if response.status_code == 200:
response_lines = response.text.strip().splitlines()
full_response = ""
for line in response_lines:
try:
json_data = json.loads(line)
full_response += json_data.get('response', '')
except json.JSONDecodeError as e:
print(f"JSON parsing error for line: {line}, error: {e}")
continue
print("Full response:", full_response)
else:
print(f"Error: {response.status_code}, {response.text}")
except requests.exceptions.RequestException as e:
print(f"An error occurred during the request: {e}")
return ''
test_request()
그럼 답변이 오는 걸 확인할 수 있습니다 (*주의: full_response에 업데이트 하는 식으로 진행했는데, 일단 출력하게되면 (예:
for line in response_lines: try:...) 단어마다 마다의 응답을 받을 수도 있습니다.
답변은 이렇게 왔습니다.
Full response: The sky appears blue to us because of a phenomenon called Rayleigh scattering, named after the British physicist Lord Rayleigh who first described it in the late 19th century. Here is a simplified explanation
When sunlight enters Earth atmosphere, it consists of a spectrum of colors, including red, orange, yellow, green, blue, indigo, and violet. ...
4. PyPDF2 + requests + json 결합, ollama 에게 PDF 파일을 번역 후 출력하도록 요청
이제 이 코드들을 결합해서, ollama 에게 pdf 의 text 파일을 주면 번역 결과를 받아볼 수 있습니다.
이 블로그 글을 복사해서 GPT o1-preview 에 붙여넣은 후, "PDF 파일을 읽고 ollama 의 LLM 을 이용해서 한국어 번역 결과를 출력하는 Python 코드로 업데이트 해 줘." 라고 몇 줄 추가하면 코드를 작성해 줄 것입니다. *o1-preview 진짜 성능 좋은 것 같습니다. 👍
5. 결론 및 추후 개선 필요사항
- llama3.2:1b 와 llama3.1:8b 의 변역 결과를 비교하면, 8b 쪽이 더 좋습니다.
- << llama3.2:1b 를 사용한 결과 >> (한국어로 번역을 시켰는데 굳이 영어 원문을 적어주네요)
제안이 제시되는 concept 및 technology에 대한 정의입니다.
* **제안의 정의** (Definition of a proposed solution or technology)
* **마케팅 submission content** (Marketing submission content)
* **PCCP** (Patient-Centered Clinical Platform)
* **ML-DSF** (Machine Learning-Driven Software Functional Change)
- << llama3.1:8b 를 사용한 결과>>
이 초안 지침에서 우리는 ML-DSF에 대한 시장 제출내용의 추천 사항을 제시한다.
시장 제출 내용에는 다음이 포함된다:
1) 특정 변경 계획에 대한 세부적인 설명;
2) 변경 개발, 확인 및 구현과 관련된 메소드론 (Modification Protocol);
3) planned 변경과 위험 완화에 대한 이익평가 보고서.
- (*동일한 영역의 번역을 찾을 수가 없네요, 왜 같은 내용을 번역을 시켜도 다르게 나오는지 궁금합니다. LLM 에서 모델 사용을 Fix 하는 방법? 이 있는지 궁금합니다. 매번 같은 결과값을 얻을 순 없더라도 의도한 결과를 비슷하게 받을 수 있는 방법 등)
- (1편에서 다룬 것처럼) llama3.2:1b 가 한국어 데이터 학습이 별로 없어 / 혹은 지원하지 않아 발생한 문제일 수 있습니다.
- 모델에 별도의 설정값을 넣어줘야 번역을 더 잘 할 수 있을 것으로 보입니다.