[LangChain for LLM Application Development] 랭체인 Evaluation

본 게시물은 Deeplearning.ai 코스를 수강 후 요약 및 정리한 내용입니다.


 

우리가 LangChain 을 통해 LLM 응용 문제들을 앞서 다뤄보았다! 

그렇다면 우리가 다룬 내용들이 제대로 잘 동작하고 있는지, 진행되고 있는지 확인하기 위해서는 Evaluation Metrics 와 같은 평가 지표가 필요할 것이다. 

 

대규모 언어 모델을 통해 만든 Task들을 평가하려면 어떤 과정을 거쳐야 할까?

 

  • 각각의 파트들이 어떻게 작동하는지, input output 등을 잘 알고 있어야 한다.
  • LM이 다른 LM, Chain 등을 서로 평가할 수 있다.
  • example question 을 생성하고 example ground truth 들을 생성해서 평가하는 방법을 거친다.

 

디테일하게 하나씩 실습해 보도록 하자.

 

먼저 다음 모듈을 import 하여 Langchain model로 부터 새로운 QA를 만들어낸다.

from langchain.evaluation.qa import QAGenerateChain

 

(물론 이외에도 다른 필요한 모듈들을 다 import 해주어야 합니다.)

 

다음, QA를 만들어 parse를 적용시켜 output parser를 이용해 output을 도출한다.

(Dictionary 로 된 Question & Answer 쌍을 얻고 싶기 때문)

example_gen_chain = QAGenerateChain.from_llm(ChatOpenAI(model=llm_model))

new_examples = example_gen_chain.apply_and_parse(
    [{"doc": t} for t in data[:5]]
)

 

다음과 같은 과정을 거치면 된다.

 

그리고 examples 리스트에 new_examples를 추가해주면서 LangChain을 이용해 만든 QA 예제들을 계속해서 더해 저장해준다.

 

 

Debug

LangChain에는 Debug라는 모듈이 있다. 

이를 통해서 model 이 어떤식으로 output을 도출하고 있었는지 확인할 수 있다.

import langchain
langchain.debug = True

# debug 모드를 끄고 싶다면
langchain.debug = False

디버깅 모드를 작동시키고 모델을 다시 run 시켜 중간단계를 출력해내는지 확인한다.

 

출처 : Deeplearning.AI

 

이렇게 토큰을 몇 개 사용했는지 까지 디테일하게 알려준다. (ㅋㅋ)

또한 추가적으로 Chain 을 run 하면서 어떻게 굴러가는지 과정들을 확인할 수 있다.  (부분적으로 옳은지, 옳지 않은지.. 등등)

 

 

EvalChain

from langchain.evaluation.qa import QAEvalChain

llm = ChatOpenAI(temperature = 0)
eval_chain = QAEvalChain.from_llm(llm)

graded_outputs = eval_chain.evaluate(examples, predictions)

 

Debug 보다 확실하게 평가하기 위해서는 Eval Chain을 이용한다.

 

역시 마지막으로 참고할만한 Docs 링크를 첨부합니다 ㅎㅎ

https://js.langchain.com/docs/guides/evaluation/

 

Evaluation | 🦜️🔗 Langchain

Building applications with language models involves many moving parts. One of the most critical components is ensuring that the outcomes produced by your models are reliable and useful across a broad array of inputs, and that they work well with your appli

js.langchain.com


여기서 의문이 든다..

우리는 주로 nlp, cv task를 사용할 때 평가지표로 confusion matrix를 사용하거나 f1 score를 측정해서 accuracy를 측정하곤 했는데, 정량적으로 평가하는 방법은 없는 것일까?

 

정확하게 이해한 것인진 모르겠지만 강의상에서는 Real Answer 과 Predicted Answer의 형태도 매우 다르게 출력되지만 LM이 그 자체적으로 답변이 동일함을 판단하면서 제대로 답변을 도출했는지를 평가해 나가는 것 같았다.

 

구체적으로 평가하기 위해선 string matching, exact matching, regexes... 등을 사용한다고 했지만

아직 Language model을 통해 correct인지 incorrect인지 정도만 판단하고 정확한 수치로 판단하는 evaluation metrics는 없는 것 같다..

 

혹시 알고 계시다면 댓글 부탁드립니다!