Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[feat] text similarity 추가 및 LLM 서버 API 연결, MySQL Full text Index 추가 #39

Merged
merged 29 commits into from
Jul 15, 2024

Conversation

Hoya324
Copy link
Member

@Hoya324 Hoya324 commented Jul 15, 2024

혼자 작업하다보니.. branch 생명주기가 너무 길다.. 작업량도 너무 많이 넣었다. 반성..

Elasticsearch를 사용하는 것이 나을지 MySQL의 Full Text Index를 사용하는 것이 나을지 고민했습니다.
프로젝트 | 텍스트 유사도 검색 어떻게 구현할까?(1) - Elasticsearch를 안 쓴 이유와 MySQL Full Text Index 해당 블로그는 이에 대해 고민한 내용을 정리한 문서입니다.
어떤 방식으로 한글 문장의 유사도를 측정해야할지 고민했고, Cosine Similarity와 TF-IDF를 어떤 방식으로 적용할지 고민했스빈다.
프로젝트 | 텍스트 유사도 검색 어떻게 구현할까?(2) - Cosine Similarity과 TF-IDF 해당 블로그는 이에 대해 고민한 내용을 정리한 문서입니다.

고민했던 내용을 실제로 적용했습니다.

✅ 작업 내용

  • 텍스트 유사도 로직을 질문간의 유사도를 확인하는데 적용했습니다.

  • 질문의 토큰(문장 어구 분리(명사만))을 분리합니다.

  • 해당 토큰으로 MySQL에서 Full Text Index Search를 진행합니다.

  • 가져와진 질문이 없는경우 바로 LLM서버에 질문을 요청합니다.

  • 질문이 있는 경우에는, 해당 질문들과 들어온 질문의 유사도를 검사하고, 0.95를 넘는 경우 가장 유사도가 높은 질문의 대답을 응답합니다.

  • 위의 조건을 만족하는 질문이 없는 경우엔 LLM서버에 질문을 요청합니다.

  • 위의 작업을 위해

  • MySQL Full Text Search - QueryDSL을 적용했습니다

  • LLM 서버와의 통신 - WebClient 적용

  • WebClient를 mocking하여 Test하기 위해 MockServer를 도입했습니다.

  • QuestionService 각 조건에 따른 Test를 분기하여 작업했습니다.

🤔 고민 했던 부분

  • 처음 질문이 들어왔을 때 처음부터 질문의 토큰을 뽑아서 MySQL의 원본 질문과 비교할지 토큰과 비교할지 고민했으나 DB에서는 조금더 넓은 범위로 검색하고, 유사도검사에서는 토큰간의 비교를 통해 유사도가 0.95가 넘는 가장 유사도가 높은 질문을 가져오도록 했습니다.

@Hoya324 Hoya324 self-assigned this Jul 15, 2024
@Hoya324 Hoya324 merged commit 777ffd6 into develop Jul 15, 2024
@Hoya324 Hoya324 deleted the feat/text-similarity branch July 15, 2024 15:59
@Hoya324 Hoya324 added 📄문서화 블로그에 정리한 pr입니다. 💡새로운 시도 새로운 시도를 기록한 pr입니다. labels Jul 20, 2024
@Hoya324 Hoya324 added this to the SW 경진대회 AI 부분 milestone Aug 5, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
💡새로운 시도 새로운 시도를 기록한 pr입니다. 📄문서화 블로그에 정리한 pr입니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant