11 분 소요

W17

청킹(문단 분할)

GraphML 파일에서 찾아낸 엔티티의 페이지 정보를 통해 md파일의

Reranker 기법(CrossEncoder)

  1. 질문에서 엔티티/개체 추출
  2. 엔티티 컬렉션에서 유사 엔티티 탐색
  3. GraphML 파일에서 엔티티 노드를 찾아 페이지 정보 추출
  4. 페이지 정보로 원본 md파일 검색 및 내용 추출
  5. 추출된 내용을 일정 길이로 분할(구두점이 없으면 이전 문장까지만 저장)
  6. Cross Encoder Reranker를 이용해 문단 재정렬
  7. 재정렬된 문단 상위 n개를 LLM에 입력

질문 재생성 기법(Rewrite, Expansion)

질문 재생성 기법을 응용해서 질문에서 추출된 엔티티만 재생성하도록 함

재생성 기법 결과 비교

재생성 기법을 적용했을 때, 결과가 유의미하게 달라진 문항들이 있었음

  • 2번
[질문] 본문에 설명된 간접 세포 분열(핵분열)의 네 가지 주요 단계를 설명하세요.[답변] 페이지를 찾을 수 없음 [질문] 본문에 설명된 간접 세포 분열(핵분열)의 네 가지 주요 단계를 설명하세요. [답변] 간접 세포 분열(핵분열)의 네 가지 단계는 다음과 같이 간략하게 그룹화됩니다 (7페이지):전기 (Prophase): I단계에서 III단계로 표시됩니다 (7페이지).중기 (Metaphase): IV단계로 표시됩니다 (7페이지).후기 (Anaphase): V단계와 VI단계로 표시됩니다 (7페이지).말기 (Telophase): VII단계와 VIII단계로 표시됩니다 (7페이지).말기 동안, 세포 원형질은 무색 방추사 주위에서 수축하여 결국 각각 자체 핵과 중심체를 가진 두 개의 새로운 세포로 나뉩니다 (7페이지). 핵막과 인 또한 이 단계 동안 분화됩니다 (7페이지).
  • 5번
[질문] 인간 배아의 2주차에 어떤 중요한 발달이 일어나나요?[답변] 제공된 내용에는 인간 배아의 2주차 발달에 대한 정보가 없습니다. 5주차와 6주차(34페이지), 그리고 31일에서 34일까지(30페이지)의 발달을 자세히 설명합니다. 따라서 제공된 텍스트를 바탕으로 질문에 답할 수 없습니다. [질문]인간 배아에서 2주차 동안 어떤 중요한 발달이 일어나나요?[답변] 2주차 말까지 난자는 크기가 상당히 커지고 대부분의 융모가 혈관화됩니다 (33페이지). 배아는 확정적인 형태를 띠고, 머리(cephalic)와 꼬리(caudal) 끝부분이 쉽게 구별됩니다 (33페이지). 신경 주름(neural folds)은 부분적으로 합쳐지고, 배아는 난황낭으로부터 더욱 완전히 분리됩니다 (33페이지). 또한, 축옆 중배엽(paraxial mesoderm)은 원시 분절(primitive segments)로 나뉘고 있습니다 (33페이지, 18페이지). 축옆 중배엽의 가로 분절이 시작되어 이를 원시 분절이라고 불리는 일련의 입방체 덩어리로 변환합니다 (18페이지). 각 분절에는 근강(myocœl)이라고 불리는 중앙 공동이 있으며, 이는 곧 세포로 채워집니다 (18페이지).
  • 10번
[질문] 접형골 주둥이(sphenoidal rostrum)와 그것의 관절에 대해 설명하세요.[답변] 접형골 주둥이(rostrum)의 사골의 수직판 및 서골과의 관절에서 볼 수 있듯이, 쐐기접합(Schindylesis)은 얇은 뼈 판이 다른 뼈에서 두 개의 층판이 분리되어 형성된 틈이나 열구에 끼워지는 형태의 관절입니다(178페이지). [질문] 접형골 로스트룸(sphenoidal rostrum)과 그 관절에 대해 설명하세요.[답변] 정의골결합(Schindylesis)은 얇은 뼈 판이 틈새나 열극 안으로 들어가는 형태의 관절로, 접형골 로스트룸과 벌집뼈의 수직판이 보머뼈와 관절하는 것이 그 예입니다 (178페이지). 접형돌기(sphenoidal process)는 날개돌기(pterygoid process)의 뿌리와 접형골 연골(sphenoidal concha)의 아래쪽 표면과 관절하며, 그 내측 경계는 보머뼈의 날개(ala of the vomer)까지 닿습니다 (103페이지). 각 뼈는 앞쪽으로 벌집뼈와, 측면으로 입천장뼈와 관절하고, 그 후방 끝은 보머뼈 위에 위치하며, 측면의 날개돌기 뿌리와 내측의 접형골 로스트룸 사이에 자리 잡습니다 (89페이지).
  • 16번
[질문]어깨 관절 근처에 위치한 활액낭 중 몇 가지를 나열하고, 이들 중 어떤 활액낭이 활액강(synovial cavity)과 연결되는지 명시하시오.[답변]상완이두근의 긴 건은 결절간구에 위치하며, 전상완회선동맥(anterior humeral circumflex artery)의 가지를 어깨 관절로 전달합니다 (128쪽). 상완이두근의 장두는 어깨와 팔꿈치 모두와 연결되어 모든 자세에서 탄력적인 인대 역할을 합니다 (208쪽). 추가적으로, 어깨 관절에는 활액막이 있습니다 (128, 186, 208, 216쪽).제공된 텍스트는 어깨 관절 근처의 특정 활액낭을 나열하지 않으며, 어떤 활액낭이 활액강과 연결되는지도 명시하지 않습니다. 다만 어깨 관절의 활액막이 연장되어 결절간구의 일부를 덮고 있다는 점만 언급합니다 (128쪽). [질문] 어깨 관절 근처에 위치한 점액낭(bursae) 몇 가지를 나열하고, 이들 중 윤활 공동(synovial cavity)과 연결되는 점액낭을 명시하세요.[답변] 어깨 관절 근처에는 여러 점액낭이 있습니다: 어깨밑근(Subscapularis muscle) 힘줄과 관절낭 사이, 가시아래근(Infraspinatus) 힘줄과 관절낭 사이, 삼각근(Deltoideus) 아래 표면과 관절낭 사이, 봉우리(acromion) 꼭대기 위, 부리돌기(coracoid process)와 관절낭 사이, 부리위팔근(Coracobrachialis) 아래, 큰원근(Teres major)과 위팔세갈래근(Triceps brachii)의 긴갈래 사이, 그리고 넓은등근(Latissimus dorsi) 힘줄의 앞쪽과 뒤쪽 (207페이지).특히, 어깨밑근 힘줄과 관절낭 사이의 점액낭은 관절낭 앞쪽의 구멍을 통해 윤활 공동과 연결됩니다 (207페이지). 또한, 큰허리근(Psoas major)과 엉덩근(Iliacus) 사이의 점액낭은 원형 구멍을 통해 관절 공동과 연결됩니다 (222페이지).
  • 19번
[질문] 질문: 신경계는 근육 분화에 영향을 미치지 않음에도 불구하고, 어떻게 발달 중인 근육의 기원과 이동 경로에 대한 지표 역할을 합니까?[답변]제공된 텍스트에는 신경계가 발달 중인 근육의 기원과 이동 경로를 어떻게 나타내는지에 대한 정보가 포함되어 있지 않으며, 신경계와 근육 분화 간의 관계에 대해서도 논의하지 않습니다. 따라서 제공된 텍스트를 기반으로는 이 질문에 답변할 수 없습니다. 저는 그래프 구조만을 기반으로 답변하고 있습니다. [질문] 신경계는 근육 분화에 영향을 미치지 않음에도 불구하고, 어떻게 발달 중인 근육의 기원과 이동 경로에 대한 지표 역할을 할 수 있나요?[답변] 신경은 팔 싹(arm bud)이 아직 경부(cervical region)에 있을 때 팔 싹으로 들어가고, 팔이 꼬리쪽(caudally)으로 이동함에 따라 위팔 신경얼기(brachial plexus)를 형성하는 아래 경부 신경들은 꼬리 방향을 얻게 됩니다 (249페이지). 이것은 신경계가 근육 분화에 영향을 미치지 않더라도, 발달 중인 근육의 기원과 이동 경로를 어떻게 나타낼 수 있는지를 보여줍니다 (249페이지).
  • 21번
[질문]삼각 인대(triangular ligament)는 무엇이며 어디에 위치합니까?[답변] 삼각골(triangular bone)은 삼각골(os triquetrum) 또는 쐐기형 뼈(cuneiform bone)라고도 알려진 피라미드 모양의 뼈입니다 (137쪽). 이는 손목뼈(carpus)의 위쪽 및 척측(ulnar)에 위치합니다 (137쪽).삼각골은 유구골(hamate)과 타원형의 독립된 면을 통해 관절합니다 (137쪽). 또한 다른 인대들과도 연결됩니다: 측부 인대(collateral ligaments)는 삼각골과 유구골을 연결하고 (215쪽), 배측 인대(dorsal ligaments)는 월상골(lunate)과 삼각골을 연결합니다 (215쪽). 추가적으로, 골간 인대(interosseous ligaments)는 월상골을 삼각골에 연결합니다 (215쪽). [질문] 삼각 인대(triangular ligament)는 무엇이며 어디에 위치하나요?[답변] 텍스트에는 여러 삼각 인대가 설명되어 있습니다.엉치결절인대(Sacrotuberous Ligament, ligamentum sacrotuberosum)는 골반의 아래쪽과 뒤쪽에 위치한 납작한 삼각 인대입니다 (198페이지).삼각뼈(Triangular Bone, os triquetum)는 손목뼈의 위쪽과 자뼈(ulnar) 쪽에 위치합니다 (137페이지).자쪽곁인대(Ulnar Collateral Ligament, ligamentum collaterale ulnare)는 두껍고 삼각 형태의 띠입니다 (209페이지).대퇴골 원형 인대(Ligamentum Teres Femoris)는 대퇴골 머리 오목(fovea capitis femoris)의 앞-위 부분에 심어져 있는 삼각 형태의 다소 납작한 띠입니다 (223페이지).
  • 29번
[질문]심장 주기의 세 단계는 무엇이며, 각 단계 동안 어떤 일이 발생합니까?[답변]제공된 텍스트에는 심장 주기의 단계에 대한 정보가 포함되어 있지 않습니다. 따라서 주어진 맥락으로는 질문에 답변할 수 없습니다. 저는 그래프 구조만을 기반으로 답변하고 있습니다. [질문] 심장 주기(cardiac cycle)의 세 가지 단계는 무엇이며, 각 단계에서 어떤 일이 발생하나요?[답변] 각 심장 주기는 세 가지 단계로 구성됩니다: 심방 수축기(atrial systole), 심실 수축기(ventricular systole), 그리고 휴지기(period of rest)입니다 (358페이지). 심방 수축기 동안에는 양쪽 심방이 수축하여 내용물을 개구부를 통해 심실로 밀어 넣습니다 (358페이지). 이어서 심실 수축기, 즉 양쪽 심실의 지속적인 수축이 일어납니다 (358페이지). 마지막으로, 휴지기 동안 심장은 이완되고, 혈액은 정맥에서 심방으로, 그리고 약간은 심실로 흐릅니다 (358페이지).
  • 30번
[질문]태아 심장의 혈관계에서 관찰되는 주요 특징은 무엇입니까?[답변]죄송하지만, 제공된 텍스트에는 태아 심장의 혈관계에 대한 정보가 포함되어 있지 않습니다. 골반 해부학, 방광 관련 이상, 융모막 융모 발달, 경추에 대해 다루고 있습니다 (201쪽, 149쪽, 24쪽, 50쪽). 따라서 주어진 텍스트를 기반으로는 질문에 답변할 수 없습니다. [질문]태아 심장 혈관계에서 관찰되는 주요 특징은 무엇인가요?[답변] 태아 시기에는 아래대정맥(inferior vena cava)이 거의 직접적으로 좌심방으로 열리고, 아래대정맥 판막은 혈류가 우심실로 가는 것을 막습니다 (360페이지). 또한, 아래대정맥을 통해 들어오는 혈액은 위쪽과 뒤쪽, 즉 심방 중격(atrial septum)을 향해 흐르며, 위대정맥(superior vena cava)의 혈액은 아래쪽과 앞쪽으로 흐릅니다 (353페이지). 이러한 특징들은 태아 혈관계의 정상적인 방향성 혈류를 나타냅니다 (353페이지).
  • 점수 비교

    • 기준

      • 정확성 : 제공된 답변이 정확한 답변인가?(사실과 일치하는가)

      • 완전성 : 질문에서 요구하는 정보를 충분히 제공하는가

      • 다음 프롬프트를 상용 LLM에 입력해 평가

      • 당신은 '그레이 해부학'(Gray's Anatomy) 책에 대한 정보의 정확성과 완전성을 평가하는 전문 AI 평가자입니다. 주어진 '질문'과 '답변'을 보고 다음 두 가지 기준에 따라 답변을 평가해 주세요. 그리고 질문과 답변에 대해 한국어로 번역해주세요
              
        **평가 기준:**
              
        1.  **정확성 (Accuracy)**:
            * 답변의 내용이 **사실과 일치하는지** 평가합니다.
            * **"정확함"** 또는 **"부정확함"** 중 하나로 판단하고, 만약 부정확하다면 **어떤 부분이 왜 틀렸는지** 구체적으로 설명해주세요.
              
        2.  **완전성 (Completeness)**:
            * 답변이 질문에서 요구하는 **모든 정보(또는 핵심 정보)를 충분히 제공하는지** 평가합니다.
            * **"완전함"** 또는 **"불완전함"** 중 하나로 판단하고, 만약 불완전하다면 **어떤 정보가 누락되었는지** 구체적으로 설명해주세요.
              
        **출력 형식:**
        "정확성_평가": "정확함 또는 부정확함",
        "정확성_설명": "부정확할 경우 구체적인 이유",
        "완전성_평가": "완전함 또는 불완전함",
        "완전성_설명": "불완전할 경우 누락된 정보"
        
점수/기법 reranker reranker + expansion
정확성 18/30 27/30
완전성 15/30 18/30

멀티홉 검색

검색된 노드에 m 깊이만큼 떨어진 노드까지 모두 검색하는 기법

출장 전 점검

  • DoRA 학습 코드
    • HarryPotterQA 데이터셋으로 학습하도록 변경
    • MultiGPU 사용 가능한 로직으로 변경
  • 파인튜닝 모델 추론 코드 개발
    • 파인튜닝 후 테스트 데이터셋을 이용해 추론하는 코드
  • Dockerfile 점검

W18

재정렬 모델 교체(ColBert)

  • 기존에는 “cross-encoder/ms-marco-MiniLM-L6-v2” 모델 사용
  • ColBert로 교체했지만 성능이 현저히 떨어짐

서브그래프 탐색 로직

  • 질문의 일치 키워드만 탐색하는 것이 아니라 질문의 (head, relation, tail) 구조가 일치하는 서브그래프만 탐색
  • 세가지가 완벽하게 일치한다는 조건은 너무 엄격하므로 하이브리드 방식 채택
    • 일치하는 서브그래프가 있다면 서브그래프 탐색
    • 없다면 질문의 개체 키워드로 검색
  • 전체 프로세스
1. 질문 이해 : 질문에서 핵심 entity-relation 추출
2. 하이브리드 검색 : 
  1) 서브그래프 탐색 : (entity-relation-entity) 형태가 일치하는 부분을 찾음
  2) 문서 검색 : 1)과정에 실패하면 추추된 개체와 관련된 문서를 찾음
3. rerank : 검색된 텍스트 후보를 cross-encoder 모델로 다시 평가 후 선별
4. 답변 생성

W19

동적 엔티티 확장

  • LLM의 답변이 정확하지 않거나, 처음에 추출된 질문의 엔티티가 지식그래프에 존재하지 않을 경우 동적으로 엔티티를 확장시키는 로직

  • 로직 흐름

    • 사용자 질문에서 엔티티 추출
    • 추출된 엔티티를 기반으로 지식 그래프에서 정보 검색
    • 검색된 정보를 바탕으로 답변 생성
    • 평가용 LLM이 생성한 답변을 평가
      • Correct : 사용자에게 답변 제공
      • Wrong : 잘못된 답변이 생성되었다고 판단 → 동적 엔티티 확장 프로세스 진입
    • 동적 엔티티 확장 : Wrong이라고 평가된 경우, 원래 질문과 답변을 분석하여 추가적으로 검색해야 할 엔티티 재생성. 임계치 횟수만큼 수행

그래프 추상화

  • 지식 그래프의 노이즈를 제거하고 핵심 정보 위주로 그래프를 정제
  • 방법 : 노드에 연결된 엣지의 갯수를 기준으로 연결이 없거나 매우 적은(2회 미만) 노드를 식별하여 제거

커뮤니티 탐지 알고리즘

  • 구축된 지식그래프의 특성이 비슷한 노드끼리 군집화하여 커뮤니티를 형성하고, 검색 확장에 활용
  • 지식 그래프의 구조적 정보를 활용해 질문과 관련된 잠재적 키워드를 찾아내 검색의 재현율 극대화
  • 예 : 사용자가 경골에 대해 질문하면 지식 그래프 분석을 통해 경골이 속한 해부학적 커뮤니티(비골, 슬개골, 무릎 관절)를 식별. 식별된 커뮤니티 내의 다른 엔티티를 검색 대상에 추가 → 관련성이 높은 잠재적 키워드를 폭넓게 찾아 검색의 재현율 극대화

Louvain 알고리즘

  • 내부적으로 연관있는 노드들을 커뮤니티로 묶는 알고리즘
  • 한계점 : Louvain 알고리즘은 지역 이동 → 집합 단계로 이루어지는데, 이 과정에서 내부 연결이 약하거나 불완전한 커뮤니티가 생성될 수 있다

Leiden 알고리즘

  • Louvain 알고리즘을 보완
  • Leiden 알고리즘은 지역 이동 → 정제 → 집합 3단계로 구성, 커뮤니티 형성 후 정제 단계를 통해 불완전한 커뮤니티를 개선

W20

LangGraph 기반 RAG 파이프라인 재설계

  • 기존에 low-level로 구현된 파이프라인을 langgraph 라이브러리를 사용해 재설계
  • 정확도 50%대에서 90%대로 상승
  • 11번(RAG)
원본 질문:
경골은 무엇이며, 사람 다리에서 어디에 위치하는가?

모델 답변:
경골은 일반적으로 정강이뼈로 알려져 있으며, 다리의 내측(안쪽)에 위치한 주요 체중 지지 뼈입니다. 
(출처: 2_Osteology.md, 페이지: 158) 

무릎 바로 아래에서 발목까지 뻗어 있으며, 넓적다리뼈를 제외하고는 골격에서 가장 긴 뼈입니다. 
(출처: 2_Osteology.md, 페이지: 158)

경골은 위쪽 끝부분, 몸통(골간), 그리고 아래쪽 끝부분으로 구성됩니다. 위쪽 끝부분에는 두 개의 관절융기 – 
내측 관절융기와 외측 관절융기 – 가 있어 넓적다리뼈와 관절하여 무릎 관절을 형성합니다. 
(출처: 2_Osteology.md, 페이지: 158) 

위쪽 끝부분의 돌출된 결절은 장경인대의 부착점 역할을 합니다. 
(출처: 2_Osteology.md, 페이지: 158) 

경골의 골간은 뼈 앞면을 따라 이어지는 뚜렷한 앞쪽 볏을 가지고 있으며, 다리의 깊은 근막이 부착하는 지점을 
제공합니다. 
(출처: 2_Osteology.md, 페이지: 158) 

아래쪽 끝부분은 발목 안쪽의 뼈 돌출부인 내측 복사(medial malleolus)를 형성합니다. 
(출처: 2_Osteology.md, 페이지: 160)

남성과 여성의 경골 방향에는 약간의 차이가 있습니다. 남성에서는 경골이 더 수직인 반면, 
여성에서는 약간 아래쪽으로 그리고 바깥쪽으로 기울어져 있습니다. 
(출처: 2_Osteology.md, 페이지: 158) 

경골의 대부분은 표면에 가까이 있어 쉽게 만져볼 수 있으며, 관절융기는 무릎 바로 아래에서, 
앞쪽 볏은 정강이의 위쪽 3분의 2를 따라 만져볼 수 있습니다. 
(출처: 12_Surface_Anatomy_and_Surface_Markings.md, 페이지: 847)
  • 11번(KAG)
질문:
경골(tibia)은 무엇이며, 사람 다리에서 어디에 위치해 있나요?

답변:
경골은 대퇴골을 제외하고 골격에서 가장 긴 뼈입니다 (158페이지). 다리의 내측에 위치합니다 
(158페이지). 몸통과 두 개의 끝부분이 있으며, 위쪽은 무릎 관절에 들어가는 곳에서 
확장되어 있고, 아래쪽 3분의 1은 수축되어 있으며, 아래쪽은 다시 확대되어 있습니다 
(158페이지).
  • 21번(RAG)
원본 질문:
삼각인대는 무엇이며, 어디에 위치하는가?

모델 답변:
"삼각인대"라는 용어는 문맥에 따라 여러 다른 해부학적 구조를 지칭합니다. 
(출처: 11_Splanchnology.md, 페이지: 745) 이러한 인대들은 다음과 같습니다:

1. 간의 삼각인대:

위치: 이 인대들은 복부에 위치하며 간을 횡격막에 연결합니다. 오른쪽 삼각인대와 왼쪽 삼각인대가 있습니다. 
(출처: 11_Splanchnology.md, 페이지: 721)

오른쪽 삼각인대 (Ligamentum Triangulare Dextrum): 간의 노출된 부위의 오른쪽 끝에 있는 작은 주름으로, 
간을 횡격막에 연결하며 관상인대의 상층과 하층에 의해 형성됩니다. (출처: 11_Splanchnology.md, 페이지: 745)

왼쪽 삼각인대 (Ligamentum Triangulare Sinistrum): 간의 왼쪽 엽 상부의 후방 부분을 횡격막에 연결하는 더 큰 
주름입니다. 그 전층은 겸상인대의 왼쪽 층과 연속됩니다. (출처: 11_Splanchnology.md, 페이지: 745)

기능: 이 인대들은 간을 지지하고 고정합니다.

2. 삼각인대 (비뇨생식기 횡격막):

위치: 회음부에 위치합니다. (출처: 4_Myology.md, 페이지: 290)

설명: 이 인대는 비뇨생식기 영역을 가로지르는 가로 중격입니다.

기능: 비뇨생식기 영역 내의 구조물을 지지합니다.

3. 삼각인대 (손목):

위치: 손목에 위치하며 손목뼈에 연결됩니다. (출처: 3_Syndesmology.md, 페이지: 214)

설명: 이 인대는 등쪽 손목뼈 사이 인대와 연속되며, 손배뼈, 반달뼈, 세모뼈에 부착됩니다.

기능: 손목 관절에 안정성을 제공합니다.

4. 비글로우의 Y자형 인대 (엉덩이 삼각인대):

위치: 엉덩관절. (출처: 3_Syndesmology.md, 페이지: 222)

설명: 이 인대는 편평한 삼각형 띠 모양으로 퍼져 돌기 사이 선에 부착됩니다.

기능: 엉덩관절에 안정성을 제공합니다.
  • 21번(KAG)
질문:
삼각 인대(triangular ligament)는 무엇이며 어디에 위치해 있나요?

답변:
제공된 텍스트에는 여러 개의 삼각 인대가 설명되어 있습니다.

오훼견봉 인대(Coracoacromial Ligament)는 오훼돌기와 견봉 사이에 뻗어 있는 강한 삼각띠입니다 (205페이지).

대퇴골 원인대(Ligamentum Teres Femoris)는 대퇴골두 오목의 전상방 부분에 삽입된 삼각형의 다소 납작한 띠로 
설명됩니다 (223페이지).

좌골 관절낭 인대(Ischiocapsular Ligament)는 비구 아래와 뒤쪽의 좌골에서 시작하여 관절낭의 원형 섬유와 섞이는 
강한 섬유의 삼각띠로 구성됩니다 (223페이지).

프로젝트 리팩토링

├── assist_auto/
│   ├── common/
│   │   ├── config.py              # 변수 및 질문리스트 관리
│   │   ├── custom_embedding.py    # VectorDB에서 적용할 임베딩 모델 래퍼
│   │   └── text_utils.py          # PDF 추출 인코더 및 텍스트 전처리 함수
│   │
│   ├── domain/
│   │   └── input_refiner/
│   │       └── llm_based.py         # 엔티티 추출 및 확장 로직
│   │
│   ├── models/
│   │   └── *.py                     # LLM 및 임베딩 모델 로더
│   │
│   ├── prompts/
│   │   └── template_manager.py      # 프롬프트 관리
│   │
│   └── strategies/
│       ├── kag/
│       │   ├── build_graph.py       # 지식 그래프 구축
│       │   ├── extract_entities.py  # 문서에서 엔티티-관계 추출
│       │   └── graph_handler.py     # 지식그래프에 저장된 페이지 메타정보 추출
│       │
│       └── rag/
│           ├── graph_pipeline.py          # 검색, 재정렬, 답변생성 파이프라인 - 그래프 기반
│           ├── recursive_pipeline.py      # 검색, 재정렬, 답변생성 파이프라인 - 벡터DB 기반(RecursiveCharacterSplitter)
│           └── vector_store_handler.py    # 엔티티 벡터DB 초기화
│
└── examples/
    ├── build_graph_pipeline.py  # 지식그래프 구축 실행 파일
    ├── pdf_to_markdown.py       # PDF -> 마크다운 추출 실행 파일
    └── run_kag_pipeline.py      # KAG 메인 답변 생성 프로세스 실행 파일
    └── run_rag_pipeline.py      # 벡터DB 메인 답변 생성 프로세스 실행 파일 - Recursive

LLM 파인튜닝(UIPA 출장)

  • 에러사항
    • 마운트 불가능(sudo 권한)
    • 로컬에서 서버로 모델을 업로드할때 오래걸림
    • LLM 실행 중 gpu 관련 에러
      • GPU가 잡히는데 실행하면 CPU로 잡힘
      • 실행했을 때 GPU는 잡히는데 device-side assert triggered 에러 : torch_dtype = “auto” → torch.float32로 변경
  • 주피터 노트북에 LLM 업로드
    • sudo 권한을 막아놔서 마운트 불가능
    • 모델을 gzip파일로 압축해서 업로드 후 압축해제하는 방식
  • AviationQA 데이터 학습 및 추론
  • 대형모델(100B) 이상(Llama4) 모델 Context 실험
    • AX랩에는 H100 한장 80%가 최대 할당량임. 대규모 LLM 실행 불가능
    • 금일 할당량은 26GiB
  • 모델 추론 시간 비교(aviationQA 데이터)

PDF 인덱싱

  • PDF를 이미지화 시킨 후, PDF를 여러가지 요소로 분류
  • 최종 출력 형태는 {“label”: “table”, “text”: “실제 내용”, “bbox”: “좌표”}

  • Microsoft - LayoutLM 종류
microsoft/layoutlmv3-base : 2G, 2024
microsoft/layoutlm-base-uncased : 1G, 2024
microsoft/layoutlmv2-base-uncased : 800M, 2022
microsoft/layoutlmv3-large : 2.8G, 2022
microsoft/layoutxlm-base :1.4G, 2022
microsoft/layoutlmv2-large-uncased : 1.7G, 2022
microsoft/layoutlm-base-cased : 600M, 2021
microsoft/layoutlm-large-uncased : 2G, 2021
  • LayoutLM에는 OCR이 내장되어있지 않음 → 외부 OCR 사용
  • LayoutLM에는 label을 반환하는 기능이 없음 → publaynet 데이터셋으로 파인튜닝된 모델 사용
  • publaynet으로 파인튜닝된 모델은 모델 실행에 필요한 json 파일이 빠져있어 발생하는 오류가 계속 발생

댓글남기기