"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > d[IA]gnosis: 내장된 Python 및 LLM 모델을 사용하여 진단 벡터화

d[IA]gnosis: 내장된 Python 및 LLM 모델을 사용하여 진단 벡터화

2024-09-02에 게시됨
검색:210

이전 기사에서는 ICD-10의 진단 코딩을 지원하기 위해 개발된 d[IA]gnosis 애플리케이션을 소개했습니다. 이 기사에서는 InterSystems IRIS for Health가 사전 훈련된 언어 모델을 사용하여 ICD-10 코드 목록에서 벡터를 생성하는 데 필요한 도구를 제공하는 방법, 해당 저장 및 생성된 모든 벡터에 대한 유사점에 대한 후속 검색을 살펴보겠습니다. .

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

소개

AI 모델 개발과 함께 등장한 주요 기능 중 하나는 컨텍스트를 모델에 통합하여 LLM 모델의 결과를 향상시킬 수 있는 RAG(검색 증강 생성)입니다. 음, 우리 예에서 컨텍스트는 ICD-10 진단 세트로 제공되며 이를 사용하려면 먼저 벡터화해야 합니다.

진단 목록을 벡터화하는 방법은 무엇입니까?

SentenceTransformers 및 내장 Python

벡터 생성을 위해 우리는 사전 훈련된 모델의 자유 텍스트 벡터화를 크게 촉진하는 Python 라이브러리 SentenceTransformers를 사용했습니다. 자체 웹사이트에서:

Sentence Transformers(일명 SBERT)는 최첨단 텍스트 및 이미지 임베딩 모델에 액세스하고, 사용하고, 교육하기 위한 Python 모듈입니다. Sentence Transformer 모델(빠른 시작)을 사용하여 임베딩을 계산하거나 Cross-Encoder 모델(빠른 시작)을 사용하여 유사성 점수를 계산하는 데 사용할 수 있습니다. 이를 통해 의미 검색, 의미 텍스트 유사성, 의역 마이닝을 포함한 광범위한 애플리케이션을 활용할 수 있습니다.

SentenceTransformers 커뮤니티에서 개발한 모든 모델 중에서 우리는 786차원 벡터를 생성하는 사전 훈련된 모델인 BioLORD-2023-M을 발견했습니다.

이 모델은 임상 문장 및 생물 의학 개념에 대한 의미 있는 표현을 생성하기 위한 새로운 사전 훈련 전략인 BioLORD를 사용하여 훈련되었습니다.

동일 개념을 지칭하는 이름 표현의 유사성을 극대화하고, 대조 학습을 통해 붕괴를 방지하는 최첨단 방법론이 작동합니다. 그러나 생의학적 이름은 항상 자명한 것이 아니기 때문에 때로는 의미론적이지 않은 표현이 되는 경우도 있습니다.

BioLORD는 생물의학 온톨로지로 구성된 다중 관계형 지식 그래프에서 파생된 짧은 설명뿐만 아니라 정의를 사용하여 개념 표현을 기반으로 이 문제를 극복합니다. 이러한 기반 덕분에 우리 모델은 온톨로지의 계층 구조와 더 밀접하게 일치하는 더 의미론적인 개념 표현을 생성합니다. BioLORD-2023은 임상 문장(MedSTS)과 생물 의학 개념(EHR-Rel-B) 모두에서 텍스트 유사성에 대한 새로운 최첨단 기술을 확립했습니다.

정의에서 볼 수 있듯이 이 모델은 ICD-10 코드와 자유 텍스트를 모두 벡터화할 때 유용할 의학 개념으로 사전 훈련되었습니다.

우리 프로젝트에서는 벡터 생성 속도를 높이기 위해 이 모델을 다운로드할 것입니다.

if not os.path.isdir('/shared/model/'):
    model = sentence_transformers.SentenceTransformer('FremyCompany/BioLORD-2023-M')            
    model.save('/shared/model/')

팀에 합류하면 목록에 벡터화할 텍스트를 입력하여 프로세스 속도를 높일 수 있습니다. 이전에 ENCODER.Object.Codes 수업.

st = iris.sql.prepare("SELECT TOP 50 CodeId, Description FROM ENCODER_Object.Codes WHERE VectorDescription is null ORDER BY ID ASC ")
resultSet = st.execute()
df = resultSet.dataframe()

if (df.size > 0):
    model = sentence_transformers.SentenceTransformer("/shared/model/")
    embeddings = model.encode(df['description'].tolist(), normalize_embeddings=True)

    df['vectordescription'] = embeddings.tolist()

    stmt = iris.sql.prepare("UPDATE ENCODER_Object.Codes SET VectorDescription = TO_VECTOR(?,DECIMAL) WHERE CodeId = ?")
    for index, row in df.iterrows():
        rs = stmt.execute(str(row['vectordescription']), row['codeid'])
else:
    flagLoop = False

보시다시피, 아직 벡터화하지는 않았지만 CSV 파일에서 추출한 후 이전 단계에서 기록한 ICD-10 코드 테이블에 저장된 코드를 먼저 추출한 다음 목록을 추출합니다. 설명을 벡터화하고 Python sentence_transformers 라이브러리를 사용하여 모델을 복구하고 관련 임베딩을 생성합니다.

마지막으로 UPDATE를 실행하여 벡터화된 설명으로 ICD-10 코드를 업데이트합니다. 보시다시피 모델이 반환한 결과를 벡터화하는 명령은 IRIS의 SQL 명령 TO_VECTOR입니다.

IRIS에서 사용하기

자, Python 코드가 있으므로 Ens.BusinessProcess를 확장하는 클래스로 래핑하고 프로덕션에 포함시킨 다음 검색을 담당하는 비즈니스 서비스에 연결하면 됩니다. CSV 파일만 있으면 끝입니다!

이 코드가 우리 프로덕션에서 어떻게 보일지 살펴보겠습니다.

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

보시다시피, 우리는 코드 파일을 수집하고 모든 작업을 수행할 비즈니스 프로세스로 리디렉션할 수 있는 EnsLib.File.InboundAdapter 어댑터가 포함된 비즈니스 서비스를 보유하고 있습니다. 벡터화 및 저장 작업을 통해 다음과 같은 레코드 세트를 제공합니다.

d[IA]gnosis: Vectorizing Diagnostics with Embedded Python and LLM Models

이제 애플리케이션은 우리가 보내는 텍스트와 일치하는 항목을 찾을 준비가 되었습니다!

다음 글에서...

다음 기사에서는 Angular 17에서 개발된 애플리케이션 프런트 엔드가 IRIS for Health의 프로덕션과 통합되는 방법과 IRIS가 분석할 텍스트를 수신하고 벡터화하며 ICD-10에서 유사점을 검색하는 방법을 보여줍니다. 코드 테이블.

놓치지 마세요!

릴리스 선언문 이 기사는 https://dev.to/intersystems/diagnosis-Vectorizing-diagnostics-with-embedded-python-and-llm-models-3n8a?1에서 복제됩니다. 침해가 있는 경우, [email protected]에 문의하십시오. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3