다시 시작된 인턴 1주차 회고 : 통합 크롤러 점검부터 LLM 요약까지

2025. 6. 26. 23:09데이터분석 인턴일기

운좋게도 회사측에서 한번더 인턴할 생각이 있냐고 하셔서 같은 곳에서 2번째 인턴을 하게 되었다.

매일 매일 배움과 도전이 가득했던 밀도높은 시간들이라 감사한 마음으로 수락했다.

 

이번주에는 기업홈페이지 자동크롤링 후 수집한 텍스트를 요약하는 시스템을 직접 구현하고 테스트하는 과정을 거쳤다.

 

✅ 코드 자산 정리 및 Github 업로드

먼저 지난주까지 했던 업무들에 대해서 Github 업로드에 업로드 했다.

RAG 기반 챗봇, 뉴스수집기, ISO 인증정보 크롤러, 기업정보 요약 모듈 등 전체 코드와 산출물을 리뷰해볼 수 있는 시간을 가졌다. 

JupyterNotebook, 엑셀, PPT, Word 자료까지 일괄 정리하면서 Github 사용법도 익히고 집에있는 내.. 프로젝트 파일도 생각났다. (눈감아 내파일)

폴더 정리 룰루 ^ㅇ^

 

✅ 기업 홈페이지 크롤러 점검 및 요약 모듈만들기

이전에 만들어뒀던 기업 홈페이지 통합 크롤러의 구조 점검을 진행했다.

홈페이지 구조 인식에 오류가 없는지
모듈별 기능이 잘 분리 되어있는지

 

두가지 간단하게 진행하고 크롤링된 텍스트 데이터를 DeepSeekR1 으로 250자 이내 요약을 진행했다.

먼저 test_summarizer.py를 만들어 Bedrock API로 DeepSeekR1 모델이 정상적으로 호출되는지 확인했다.

이제 나는 토큰개수를 함께 출력하는법을 안다 ^ㅠ^

 

Test Prompt

 

✅ 요약 과정 개선 및 프롬프트 수정

크롤링된 텍스트에는 중복된 문장, 단어들이 너무 많아서 요약품질이 떨어지는 문제가 있었다. 이를 개선하기 위해

deduplicate_lines 함수를 추가하고 중복 제거 로직을 강화해보았다.

append_token_log_to_file 함수로 요약 시 사용된 토큰 수와 결과를 기록해 분석할 수 있도록 개선했다.

프롬프트도 "중복되거나 의미없는 텍스트는 무시할것" 이라는 문구를 추가해보았다.

CSV 파일로 사용된 토큰수와 금액, 시간이 누적 기록된다

 

✅ API 호출 문제 해결 및 크롤링 코드 고도화

Summary를 하는 과정에서 bedrock invoke api로 호출할때 호출 오류가 계속 나와서 원인파악을 해보았다.

이전에 DeepSeeK R1으로 챗봇을 만들때 API 포맷에 따라 답변의 품질이 많이많이 달라지는것을 경험하였다.

저번과는 달랐지만 NO OUTPUT을 보자니 왠지 그때처럼 호출 구조를 바꿔야 하는 것은 아닐까 생각했다.

문제의 요약결과

Invoke API호출시에도 Convers 스타일(role, content)로 수정해서 시스템 프롬프트와 유저 프롬프트를 따로 입력할 수 있도록 코드를 개선 했다. 

 

크롤링 시 family 사이트를 제외하고 해당 도메인과 같은 도메인의 사이트만 가지고 오도록 코드를 수정했다.

family 사이트까지 가지고 오게되면 계열사, 관계사  사이트까지 다 들어가서 텍스트를 가져오는데 이게 매우 쓸모없다

Input토큰이 안그래도 모자른데...

 

최근 해킹 사고가 잇다라 발생해서그런지 갑자기 한사이트에서 자동화 탐지를 시작했다. 

Blocked 발생시 크롤링을 중지하는 코드를 추가하고 자동화 탐지 방지용 설정을 추가했다. (설정했지만 방지는 안됨)

 

 

아까 말했듯이 홈페이지의 텍스트양이 너무 방대해 DeepSeekR1의 입력 토큰양을 초과해 버렸다.

초과한 부분은 자르고 요약을 진행해 보았을때 제대로된 요약이 되지 않았다.

 

✅ Llama 기반 Map-Reduce 방식 요약 테스트

DeepSeekR1이 소화할 수 없는 많은양의 텍스트로 인해서 다른 방법을 고안해보기로 했다.

Llama를 사용해서 Map-Reduce 방식의 병렬 요약 구조를 도입해 시도해보려고 했다.

 

1차 시도 : 요약이 되지 않고, 생각하는 과정이 그대로 보이는것인지? 좀 이상한 대답이 나왔다.

 

API호출부터 다시 해보기로 했다.

1. boto3로 모델 조회하기 → Llama4-scout-17모델 조회해서 연결 확인 및 ModelDetails 확인하기

2. 콘솔화면 Playground에서 API요청 코드를 확인해보기

[전체 명령어 구조 확인]
aws bedrock-runtime invoke-model \
--model-id arn:aws:bedrock:us-west-2:464675057664:inference-profile/us.meta.llama4-scout-17b-instruct-v1:0 \
--body "{\"prompt\":\"what is the capital of France?\",\"max_gen_len\":200,\"temperature\":0.6,\"top_p\":0.9}" \
--cli-binary-format raw-in-base64-out \
--performance-config-latency standard \
--region us-west-2 \
invoke-model-output.txt

해석은 Chat GPT가 해줌

3. Llama4 답변 포맷 확인하기 - 답변 테스트

a. 답변시 혼자서 질문을 계속 생성

Step 1: Understand the question

The question asks for the capital of France, which is a basic geographical fact.

2: Recall geographical knowledge

The capital of France is known to be Paris.

The final answer is: $\\boxed{Paris}$

b. Answer in one sentence only 표현 삽입시 한문장으로 답변

“The capital of France is Paris”

 

4. 분리된 청크를 병렬처리하여 Llama로 요약 시도

  • 적은 분량의 txt : 청크 3개 요약 7.2초 , DeepSeek 200자 요약 3.5초
  • 많은 분량의 txt : 청크 517개 요약 1분 11.9초, DeepSeek 200자요약 토큰 초과
  • 원본길이 2,185,044자
  • 청크총합 2,179,162자
  • 청크별 요약 후 1,246,309자 (DeepSeek 입력초과)

Llama로 요약한 후에도 입력 토큰이 초과되서 의미가 없어짐...