세미나 후기

HyperCLOVA-X와 함께하는 Healthcare Mini Promptathon 후기

graph-dev 2023. 11. 21. 18:25
728x90

 

하이퍼클로바 X

 

 

참가 신청

 

11월 17일 금요일, 일원역 삼성생명빌딩에서 진행한 제1회 생성모델연구회의 헬스케어 미니 프롬타톤에 참여했습니다. 그 후기를 작성해보았습니다.

 

신청 종료 후, 11월 10일에 메일이 도착합니다. 사전에 학습이 가능한 자료를 제공해주었습니다.

사전 안내 메일

 

 

 

메일에 있는 페이지로 가보니, 간단히 한 가상의 환자에 대한 정보를 제공해줍니다. 현재 공개된 CLOVA-X를 통해 초진 기록을 작성해볼 수 있도록 안내합니다. 2023년 11월 21일 기준 현재 위 페이지는 접근이 안됩니다.

 

 

대략적으로 살펴보면, 다음과 같습니다. HyperCLOVA에서 필요한 다양한 프롬프트 엔지니어링 가이드와, 공개된 사이트를 제공해주었습니다. 

 

시나리오는 다른 증상을 가진 3명의 가상 환자가 응급실에 동시에 도착했을 때, 환자들의 내원부터 퇴원까지 의료진의 다양한 업무를 순차적으로 경험하고, 프롬프트를 작성하면, 생성형 AI인 하이퍼클로바는 제공된 데이터를 바탕으로, '초진 기록, 처방 비교 및 체크리스트, 퇴실 일지'를 빠르게 작성하는 것입니다.

 

한명이 사전공개된 데이터이고, 나머지 한명은 현장 공개, 마지막 환자는 비공개로 평가용으로 사용합니다.난이도와 배점은 과제별로 다르며 모든 점수가 합산되어 최종으로 평가됩니다.

 

어려운 점은 각 환자가 아니라 모든 환자에게 적용되는 1개 프롬프트를 제작한다는 것이었습니다. 과제는 3개가 주어지며 작성해야하는 프롬프트는 총 3개라는 부분이었습니다. 즉, 각 과제마다 1개 프롬프트로 3명의 환자를 다 처리해야하는 거죠.

 

대회장은 일원역 삼성생명빌딩에서 수행했고, 아래 사진과 같습니다. 자리가 넓고, 와이파이도 클라우드를 사용해야하니 잘 제공해주셨습니다. 인터넷이 꽤 중요합니다.

 

대회장 모습

 

 

연사 소개

 

다양한 연사분들이 와주셨습니다. 메인 사회자 분은 삼성서울병원 서준혁 간호사님, 다음으로 응급의학과 차원철 교수님, 대한의료인공지능학회 예종철 교수님, 네이버클라우드 헬스케어랩 유한주 박사님 등 다양한 내빈분들이 와주셨습니다.

 

먼저, 내빈 분들의 소개와 차원철 교수님의 개회사와 학회 예종철 교수님 인사 말씀을 들었습니다. 의료 현장에서도, 이 생성형 AI를 활용하고자 하는 의지가 보여서 참 놀랍기도 합니다. 아직 미완성이 아닐까 생각했던 생성형 AI가 벌써 여기까지 시도한다는 게 신기합니다.

예종철 교수님 인사말씀

 

 

 

 

대회 소개

위에서 소개했지만, 다시 한번 간단히 살펴보겠습니다. 네이버 HyperCLOVA X라는 생성형 AI 도구를 활용해서, 병원 내 기록지 작성 프롬프트를 개발하는 것입니다. 여기서 가상의 환자에 대한 데이터를 사용한다는 점 알아두셨으면 좋겠습니다. 실제 환자가 아닙니다! 가슴통증 환자와 발열 환자 두명의 데이터가 있고, 비공개 데이터 한명이 있습니다. 자세한 내용은 아래 포스터를 참고해주시면 됩니다.

 

 

 

 

CLOVA Studio 사용법 소개

다음은 유한주 박사님의 클로바 스튜디오에서 하이퍼 클로바 X의 소개 및 사용법을 간단히 알려주셨습니다. 여기서는 이 도구의 사용법과 로그인 계정을 알려주시고, 프롬프트를 잘 작성하는 방법을 경험을 담아 소개해주셨습니다. 아주 재밌었습니다. 클로바가 알아듣기 좋게 프롬프트 만드는 방법을 들으면서, 말 안듣는 말썽꾸러기 아이를 잘 달래고 어르는 기술을 듣는 느낌이 들었습니다.

유한주 박사님의 CLOVA Studio와 프롬프트 활용법 소개

 

 

HyperCLOVA X의 유용한 프롬프트 팁

간단 팁들을 소개합니다. 아래와 같은데, 요약하면 구체적으로 입력해야하고, 간단한 작업으로 분리하는 것입니다. 추가 수정도 가능하겠지만, 간단하게 시작해서 덧붙여 나아가는 것이 좋겠죠.

 

특히 "예제"를 넣는 것도 생각보다 좋은 방법이라고 합니다. 이걸 활용해야 하이퍼클로바가 확실히 이해를 한다는 것입니다. 이걸 조금 유의해서 보면 좋았을 것 같네요. 저는 예시를 안 넣었거든요. 짧아야한다는 생각이 좀 더 강했던 기억이 있네요.

하이퍼클로바 유용한 프롬프트 팁들

 

 

 

점심은 맛있는 도시락을 제공해주었습니다. 잘 먹고, 분리수거를 잘해두고, 네트워킹도 하는 쉬는 시간이죠. 머리를 좀 식혔습니다.

점심 도시락과 네트워킹 시간

 

 

 

나의 프롬프트 보기

 

제출 양식에 맞추어 아래와 같이 작성했습니다. 파라미터를 잠깐 소개하자면, top_k, top_p는 제공된 값을 그대로 사용했습니다.

그 외에, max_token은 결과값에서 한번에 출력할 최대 토큰 수입니다. 길게 할수록 긴 답변이 나오더군요. temperature는 일종의 창의성으로 높일수록 창의적인 답변이 나옵니다. 나쁘게 말하면, 환각을 일으킬 확률이 높아질 수도 있다는 것입니다. 그래서 환각이 의료 현장에서 상당히 문제가 된다는 점을 감안해서 아주 낮게 설정했습니다.

 

그 외에 파라미터에 관한 자세한 설명은 다음 가이드를 참고해주세요.

https://guide.ncloud-docs.com/hyperclova/docs/clovastudio-info-aialliance

 

CLOVA Studio 개념

 

guide.ncloud-docs.com

<Parameter>
top_k: 0.8
top_p: 0
max_tokens: 1000
temperature: 0.1
repetition_penalty: 5
stop_sequences: 

<Your_Prompt>
주어진 [초진기록], [오늘처방], [내일처방], [검사결과]를 사용해서,
아래 양식에 따라 [퇴실기록]을 작성해줘. 있는 그대로 작성해야 한다.
없는 항목은 생략한다.

-양식은 [진단명], [입실기록요약], [진료 결과], [경과], [지시사항], [처방약]으로
구성하고 간략히 적는다. 
세부 내용은 아래를 참고한다.

1. [진단명]
- 주진단 : 주진단 내용을 적는다.
2. [입실기록요약] 
- [입실사유]
    - 그 하위 항목으로 [주증상](입실한 주된 이유), [발생일시](증상), [입실일시](입원), [퇴실일시] 순으로
    나누고, 각각 날짜와 시간 순으로 적는다. 
    [퇴실일시]는  알 수 없다면 적지 마라.
3. [진료결과]는 귀가, 중환자실 입실, 병원 입원, 사망 중에서 찾아서 사실만 간단히 적는다.
4. [지시사항]은 퇴원 후 환자가 따르는 지침이다.
5. [처방약]은 다른 병원에서 처방한 것을 제외하고, 처방한 경구로 복용하는 약과 그 복용 지침과 적는다.

 

 

 

다양한 경험

클로바 스튜디오 접속

 

 

위처럼 접속이 잘되었습니다. 왼쪽에 있는 파라미터를 잘 조절해볼 것입니다. 또한, 제공된 데이터를 불러와서 사용할 수 있었습니다. 불러오기를 하면 아래와 같은 화면이 뜨는데, 각 과제에 필요한 환자 데이터를 가져와서 프롬프트를 넣고, 결과값을 예시 결과와 비교해보며 계속 수정하게됩니다. 주의할 점은, 공개옵션에서 전체 공개가 아니라, 나만 보기로 설정해야한다는 점입니다. 다만, 이렇게 해도 서브계정 내에서는 모두 볼 수가 있는 문제가 있었고, 해당 프롬프트와 데이터가 새로 저장되면서, 나머지 분들이 내 작업에 있는 원래 대회용 데이터를 찾지 못하는 문제가 발생했습니다. 결국 대회 종료 시간에 저장하도록 요구사항이 변경되었습니다.

 

제공된 데이터

 

 

일반 모드와 챗모드가 있는데, 저희는 챗모드만을 사용하도록 했습니다. 크게 다른 점은 없지만, 일반 모델은 기본 모델이 여러개가 있고 앞서 작성한 내용에 이어서 답변을 생성해나갈 때 유리하다고 합니다. 반면, 챗모드는 모델이 HCX-002 기본 모델 하나만 있습니다. 튜닝 모델은 사용하지 않았습니다.

 

챗 모드

 

 

프롬프트를 수정하면서 정말 다양한 경험을 했습니다. 크게 보면 환각, 무한 답변 생성, 네트워크 일시 중지, 랜덤성 정도가 있겠습니다.

 

환각(Hallucination) : 거짓말쟁이 AI

퇴실일시라는 것이 없는 환자 기록에서, 스스로 유추해서 퇴실일시를 만들어 넣는 것을 확인했습니다. 이런 경우, temperature 수치를 낮추어보기도 하고, 프롬프트에 "[퇴실일시]를 알 수 없다면 적지 마라" 이렇게 추가하며 조정해봤습니다. 없어지기도 하지만, 다시 실행했을 때는 나오는 걸 보면 참 알다가도 모르겠습니다.

 

퇴실기록을 유추하는 환각현상

 

 

무한 답변 생성: 수다쟁이 AI

답변은 데이터를 기준으로 많아도 10개 미만이어야 하는데, 다시 반복 실행하다보면 끝도없이 답변을 출력하는 경우가 있었습니다. 위 답변에서는 약 5개 처방약을 제공했습니다. 이걸 다시 실행해보면, 아래와 같이 결과가 나타납니다. 일부러 "[처방약]은 간단히 적는다."라고 명시해도 여러번 실행하다보면 이렇게 무한 답변 생성을 하는 점을 확인할 수 있습니다.

 

무한 반복 답변 현상

 

 

랜덤성: 고정되지 않는 AI

이건 문제가 되는 이유가 내가 만든 프롬프트에 대해 확신을 갖지 못하게 한다는 점이었습니다. 처음 만든 답변을 한번 보시면, 생각보다 실제 답안과 매우 유사한 것을 볼 수 있습니다. 실제 답안과 제가 제일 비슷하다고 생각한 AI 답안은 아래와 같습니다.

 

실제 답안(예시)과 결과물 비교

 

이렇게만 나와도 아주 만족스럽습니다. 그런데 다시 그대로 실행해보면, 아래와 같이 결과가 나타납니다. 갑자기 답변이 매우 길어지는 점은 사람을 당황스럽게 하는 법이죠.

 

랜덤한 AI 답변, 고정할 수 있으면 좋겠습니다.

 

이 때, 제가 생각한 게 있습니다. 일종의 Seed값처럼 답변을 고정할 수 있는 임의의 랜덤한 숫자값을 넣을 수 있는 기능이 나오면 좋겠습니다. 해당 seed값에서는 동일한 프롬프트와 파라미터라면, 유사한 답변이 나와야한다고 생각합니다.

 

혹시나 의심하실까봐 화면을 크게해서 파라미터와 프롬프트를 보여드립니다. 필요하시다면 확인해보셔도 좋습니다!

 

동일한 파라미터와 프롬프트임을 보여드립니다.

 

 

 

이 모든 과정에서 제 프롬프트가 보이십니까? 나름대로 짧게 쓰려는 노력을 했습니다. 그런데 우승작들을 보면서 짧기만 하는게 무조건 정답이 아니라는 점을 깨달았습니다. 한번 간단히 살펴보시죠!

 

 

우승자들의 프롬프트 엿보기

먼저 우승작들을 보며 좀 많이 반성했습니다.  1, 2등은 간호사 혹은 간호사 출신 기획자이고, 3등은 의료 영상 엔지니어였습니다.


1. 간호사 출신 분들은 이 프롬프트를 작성하면서, 특히 나오는 답에 대해 중요한 포인트를 몸소 경험으로 알고 있습니다. 의료 현장 경험이 있기 때문입니다.

2. 주어진 2명의 가상의 환자 데이터만으로도, 어떻게 프롬프트를 작성해야 예시 답안(초진기록, 처방 비교 및 체크리스트, 퇴실일지)에 가깝게 나올지 아는 것이 아닙니다. 다만 나오는 어시스턴트(AI의 산출물)을 참고해서, 끊임없이 프롬프트로 피드백을 주며 살을 덧붙여나가는 점이죠.

3. 응급 의료 도메인 지식이 빛을 발하는 부분이 바로 이 끊임없는 피드백입니다. 경험에 따라, 가령 증상이 중증도 순으로 나열되지 않으면, 계속 그 항목에 중증도 순으로 나열하라는 피드백을 넣어 프롬프트를 갱신합니다. 또한, 각 항목별로 작성할 순서 흐름을 강조합니다. 이건 예시 문항에도 적혀있지만, 그 중요성을 대부분 간과했습니다. 경험자들만이 그 중요성을 알고 프롬프트에 어떻게든 추가해서 넣습니다.

4. 사실이 아닌 것을 바로 캐치하며, 프롬프트에 ‘사실대로’, ‘있는 그대로’ 적으라고 계속 프롬프트 항목마다 필요하면 다 집어넣었습니다. 이렇게 해야 간신히 환각 현상을 방지했습니다. 환각 현상을 알아차리려면, 제시된 데이터를 하나씩 비교해보며 시간이 엄청 걸립니다. 이를 경험으로 어느정도는 빠르게 캐치해서 잘못된 답변으로 알아차리고 계속 피드백을 주는 점도 포인트였습니다.

5. 결과적으로 심사 평을 들어봐도, 이렇게 응급 의료에 대해 도메인을 아는 사람이 상당히 유리하긴 합니다. 그것이 의료 현장에 실질적으로 필요하기 때문입니다. 이를 대회 일주일전에 사전 자료에 써있지만 모르면 그 중요성을 간과하고 프롬프트에서 빼먹기 쉽습니다.

 

아래는 우승자 분들의 프롬프트입니다. 나름대로 예시를 만들어 넣으신 분도 있습니다. 제공된 예시를 직접 프롬프트로 넣는 것은 규칙 위반이기 때문이죠. 그리고, 보시면 자꾸 사실대로, 데이터에만 입각해서 작성하도록 프롬프트를 넣는 점을 볼 수 있습니다. 환각 현상을 방지하기 위한 수단입니다.

 

우승자의 프롬프트1
우승자의 프롬프트2

 

후기

모든 헬스케어관련 프롬프트 엔지니어가 간호사가 되어야하는 것은 아니겠지만, 위에서 제기한 점은 계속 배워가야할 것입니다. 처음에는 이 대회를 수행하면서 너무 랜덤성이 강하고, 운이 강하게 작용한다고 생각했습니다. 실행을 여러번 반복해도 안정적으로 답이 안 나와서였습니다. 그런데 우승자들의 프롬프트를 보니 그것보다 더 중요한 점이 따로 있었습니다. 끊임없는 피드백을 주고, 그것이 잘못된 것임을 빠르게 알아차리면서 의료 현장에서 필요한 순서로 순차적으로 전개하도록 프롬프트를 끊임없이 고치며 만드는 능력입니다. 이를 직접 경험할 수 없다면, 이렇게 대회에서 우승자의 소감이나 심사 위원 분들의 피드백으로 간접 체험해볼 수 있는 게 좋았습니다.

저도 디지털헬스케어를 전공했지만, 결과적으로 이번 대회에서 느낀 점은 기술적인 것을 이해하는데 있어 의료 현장에서 도메인 지식을 직접이든, 간접적으로든 좀 더 공부해두는 게 필요하다는 것입니다. 생성형 AI 서비스를 의료 도메인에 적용할 때, 이렇게 도메인 지식이 있을 때 해당 서비스에 대해 실질적으로 의료 현장이 원하는 부분을 빠르게 캐치하고 사용할 수 있을 것입니다. 프롬프트라는 콘텐츠로, 이 사실을 가장 크게 깨닫게 해주었습니다. 앞으로도, 생성형 AI 연구로 발전하고, 동시에 좋은 프롬프트가 많이 만들어져서 의료 현장에 적용될 때까지 기대하며 공부해보겠습니다.

 

단체 사진

 

 

읽어주셔서 감사합니다.