jms0522 / Medical-project

✅ 의료 데이터를 활용한 챗봇과 다양한 파이프라인을 제작합니다.
5 stars 4 forks source link

Data processing #55

Closed jms0522 closed 7 months ago

jms0522 commented 7 months ago

의료 데이터를 구하기 위한 방법 (생각 단계)

ai hub에는 실제 환자 음성 데이터 존재함.

데이터를 구하기 힘든 현 시점에서 실제 데이터를 구할 수 있는 방법 중 하나임.

음성 데이터 - 텍스트 데이터 변환으로 데이터 수집

https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=data&dataSetSn=566

jms0522 commented 7 months ago

0221

4

질문 예시

질문 예시

네이버 QnA data 전처리 ver.1

지식인 QnA 데이터와 네이버 질병 백과 질병 사전 목록을 통한 LLM 모델 fine turn을 위한 데이터 전처리 작업 진행.

답변에서 병명 추출 / 데이터 밸런싱 / 한국어와 띄어쓰기 (딥러닝 모델) 교정 / 한 질문에 다양한 병명이 있을 경우 score를 줘서 가장 높은 score의 병명을 추출 / 특수 문자 제거 / 증상에 대한 score가 너무 낮은 데이터 삭제 / 증상과 정의 분리 / 증상 컬럼 없는 경우 정의 컬럼으로 대체 / 증상 정의 둘 다 없는 경우 삭제 / 소아기칭, 영유아복통 등 세분화된 질병 삭제 / word count를 이용한 밸런싱 등

"답 없는 질문과 답변 내용을 최대한 전처리 하기 위해 노력."

전체 데이터 : 약 300만 (지식인 QnA 한정) 시험 전처리 : 100만개 -> 6만개로 전처리

앞으로의 과제 : 답변 수가 너무 적은 데이터를 삭제 하는 방법보다 데이터 증대 / 질문의 유사한 유의어, 혹은 단어 삽입, 위치 변경, 랜덤 단어 삭제 EDA (easy data argumentation)등으로 문맥이 비숫한 질문을 만들어 증강을 생각 해 볼 수 있고, bert gtp2등의 모델을 fine tune 하여 문맥이 유사한 질문을 생성으로 증강 고려 할 수 있음.

느낀점 : 데이터가 너무 정형화되지 않고 증상을 물어보는 질문도 너무 부정확해서 전처리 하는 게 너무 힘들다. 사실 전처리를 통해 이만큼까지 데이터를 줄이는 것도 데이터를 훼손 시키고 변형으로 인한 손실이 크지만 현재 kict deep learning server에서도 memory 이슈가 계속 발생하는 상황. solar, llama2 등등. peft LoRa의 방법론을 더 깊게 파서 경량화를 더 해보든 애초에 토큰의 수가 적은 모델을 사용하던 돈을 발라서 학습을 시키던 선택을 해야할 듯.

사실 모델을 돌려서 평가를 해봐야 전처리든 미세조정이든 할텐데 조금 답답한 상황이다. 결국 또 RAG가 답 일지도.. 그럼 질문과 답변을 전처리해서 vectort store에 넣어야 하는지 모르겠음

jms0522 commented 7 months ago

preview

데이터 전처리 전

스크린샷 2024-02-22 09 16 56

데이터 전처리 후

스크린샷 2024-02-22 09 16 16

@stfano @cheol2Y @minseok1994

허깅페이스 업로드

스크린샷 2024-02-24 18 53 59
jms0522 commented 7 months ago

전처리 과정

  1. 결측치 제거 또는 채우기 데이터셋 내의 질문(question)이나 답변(answer)에 결측치가 있는 경우, 해당 행을 제거하거나 적절한 값으로 채워야 합니다.
  2. 텍스트 정규화 텍스트의 일관성을 높이기 위해 소문자화, 대문자화 또는 다른 형태의 정규화를 수행할 수 있습니다. 불필요한 공백, 탭, 줄바꿈 등을 제거하여 텍스트를 깔끔하게 정리합니다.
  3. 구두점 및 특수 문자 처리 마침표(.), 물음표(?), 쉼표(,) 등과 같은 구두점의 처리는 질문의 종류를 구분하거나 문장의 경계를 인식하는 데 도움이 될 수 있습니다. 필요에 따라 특수 문자를 제거하거나 특정 기호를 유지합니다.
  4. 불용어 제거 일반적으로 의미 있는 정보를 제공하지 않는 불용어(stop words)를 제거하여 모델의 학습에 집중할 수 있는 중요한 정보만 남깁니다.
  5. 토큰화 텍스트를 단어, 구, 문장 등으로 나누는 토큰화 과정을 통해 모델이 처리하기 쉬운 형태로 데이터를 변환합니다.
  6. 어간 추출(Stemming) 또는 표제어 추출(Lemmatization) 단어의 기본 형태를 추출하여 모델이 다양한 변형된 형태의 단어를 같은 단어로 인식할 수 있도록 합니다.
  7. 엔티티 인식 및 이름 대체 특정 이름, 위치, 기관 등의 엔티티를 인식하고, 이를 일반화된 태그나 다른 표현으로 대체하여 데이터의 일반화 능력을 높일 수 있습니다.
  8. 데이터 증강 질문의 다양성을 높이기 위해 동의어 교체, 문장 재구성 등의 방법으로 데이터를 증강할 수 있습니다.
  9. 문장 길이 조정 너무 긴 문장을 분할하거나, 특정 길이 이상의 문장을 잘라내어 모델의 입력 크기를 표준화합니다. 이러한 전처리 단계들은 모델의 목적과 특성, 그리고 사용할 데이터의 특성에 따라 선택적으로 적용될 수 있습니다. 가장 중요한 것은 전처리 과정이 최종 모델의 성능에 긍정적인 영향을 미쳐야 한다는 것입니다.
jms0522 commented 7 months ago

0222 total naver QnA

전처리 과정

스크린샷 2024-02-22 19 46 32 스크린샷 2024-02-22 19 59 54 스크린샷 2024-02-22 19 58 00 스크린샷 2024-02-22 20 43 19

스크린샷 2024-02-24 18 49 50

허깅페이스 업로드 완료

스크린샷 2024-02-24 19 28 35
stfano commented 7 months ago

0224

hidak processing

전처리 전 데이터 양

image

전처리 후 데이터 양

image