본문 바로가기
NLP/Prompt & Problem Solving

ChartInstruct (2024) 논문 리뷰

by 아르카눔 2025. 4. 27.

ChartInstruct의 논문 제목은 ChartInstruct: Instruction Tuning for Chart Comprehension and Reasoning이다. (링크)

 

저자는 Ahmed Masry, Mehrad Shahmohammadi, Md Rizwan Parvez, Enamul Hoque, Shafiq Joty다.

 

Github: 링크

 

논문 제목에서 알 수 있듯이 차트 데이터에 대한 instruction tuning을 다룬 논문이다.

 

본 논문에서는 Llama2와 Flan-T5를 사용했지만 Gemma를 사용한 ChartGemma라는 별도의 논문 (링크)도 존재한다.

 

 

 

Abstract

Charts 차트는 데이터에 대한 시각적 표현으로 매우 중요하다. 비전에 대해서 fine-tune을 해왔지만 아직 부족하다.

이를 해결하기 위해서 ChartInstruct에서는 71K 개의 차트를 활용한 191K 개의 instructions을 이용해서 (1) 차트 이해를 위한 비전 인코더와 LLM을 연결하는 end-to-end 모델, (2) 차트 데이터 테이블을 추출하여 LLM에 입력하는 two-step 2단계 접근법을 사용하는 파이프라인 모델을 제안한다. 

 

 

 

3. Chart Instruction Data Generation

 

Figure 1에 나온 9가지 태스크에 대한 chart-related tasks를 생성하여 instruction datasets을 구성했다.

 

 

 

위 Figure 2에서는 데이터의 생성부터 Instruction fine-tuning 까지의 과정을,

그리고 Table 1에서는 데이터에 대한 태스크의 종류별 개수를 보여준다. 

 

3.1. Chart Corpora Collection

 

다양한 현실 세계의 차트 데이터를 만들어서 모델의 일반화 능력을 향상시키고자 한다.

이를 위해서 다음의 두 가지 메인 소스를 활용한다. 

 

첫 번째는 UniChart로 가장 크고 다양한 차트와 pretraining corpora를 제공한다. 총 611 K개의 차트와 data tables, titles, captions와 같은 메타 데이터도 제공한다. 하지만 Pew, Statista, OECD, OWID 라는 한정된 데이터 소스를 가진다.

 

이 한계를 넘기 위해서 두 번째 데이터 WebCharts를 사용한다. 총 41K개의 다양한 차트 이미지를 가진다. 

 

WebCharts를 chart images, graphs, visual data로 구분하기 위해서 차트인지 아닌지를 구분하는 binary ViT classifier를 구축하여 구분했다. 하지만 인스트럭션 생성에 중요하게 필요한 데이터 테이블이 부족하기 때문에 Gemini Pro Vision을 이용해서 데이터 테이블과 차트 제목을 추출했다. Gemini를 고른 이유는 비용과 무제한의 API rate를 가지기 때문이다.

 

 

3.2. Instruction Data Generation

 

총 70,882개의 차트에 대해서 190,774개의 인스트럭션을 생성했으며 이는 차트 이해와 차트 추론을 포함한다. 

 

 

3.2.1. Tasks Selection

 

  1. Summarization and QA
  2. Fact Checking
  3. Chain-of-thought (CoT) Reasoning
  4. Code Generation
  5. Novel Tasks

 

3.2.2. Prompt Design

 

각 태스크별로 인스트럭션을 생성해야 하기 때문에 템플릿 셋을 구성한다.

각각의 템플릿은 task description, input (chart data table과 metadata), output constraints, output format으로 구성된다.

아래 Figure 5가 템플릿의 예시다. 

 

 

 

3.2.3. Input and Output Generation

 

프롬프트 디자인을 완료한 다음에 instructions, input-output instances를 생성하기 위해서 GPT3.5 Turbo와 GPT4를 사용했다. 두 API 사이의 선택은 태스크가 얼마나 복잡하냐에 따라 결정했다. 복잡한 추론의 경우 GPT4를 사용했다.

다운스트림 태스크의 종류별로 사용한 API의 종류는 아래 Table 4에 나와있다.

 

 

Figure 3에서는 인스트럭션을 만들 때 사용된 가장 많이 사용된 동사의 어근을 보여준다. 

 

 

 

Figure 8에서는 WebChart의 차트 종류별 비중을 나타낸다.

 

4. Modeling

End-to-End에서는 LLaVA와 CLIP 대신 UniChart의 vision encoder를 사용했고, decoder only인 LLama2 2B와 7B, 그리고 encoder-decoder 모델인 Flan-T5를 실헝했다.

End-to-end에서는 사전학습 단계에서 LLM을 프리즈하고 인스트럭션 튜닝 단계에서만 학습을 한다. 

 

 

 

 

 

Pipeline에서는 UniChart를 활용하여 차트 이미지로부터 데이터 테이블을 뽑아냈으며 LLM으로는 Llama2와 Flan-T5를 선택했다. Encoder를 프리즈하고 LLM을 업데이트한다. 

 

 

구체적인 학습 configurations는 아래 Table 5에 나와있다.

 

 

 

 

 

5. Experiments and Results

 

엔드 투 엔드에서는 Flan-T5와 Llama의 성능이 거의 비슷하나 Flan-T5의 파라미터 수가 훨씬 적다.

파이프라인에서는 대체로 Flan-T5의 성능이 더 좋다는걸 알 수 있다.

 

 

 

 

 

ChartInstruct-Llama가 UniChart에 비해서 성능이 압도적으로 좋은건 아니라는 생각이 들었지만,

 

Table 3에서 사람이 평가한 결과와 위 Figure 7에서의 일관적인 답변을 보니 ChartInstruct-Llama가 장점이 있다는걸 알 수 있다.

 

 

 

 

여담

 

이 논문은 기본적으로 Instruct Tuning이라서 LLM 모델 자체를 학습을 시키게 된다.

 

특히 차트를 이미지 형태로 처리하게 된다.

 

OpenAI나 Gemini나 Claude의 API를 활용하는 형식에서는 이미지를 어떻게 처리해야할까?

 

RAG 형식으로 처리해야하는지 어떤지에 대한 영상 (링크)를 마침 찾아서 공부를 해야겠다.

 

그리고 Multimodal LLM으로 그림이나 테이블을 생성하는 경우는 claude 등을 보니 HTML 형식인것 같다.

 

이에 대해서로 알아봐야겠다. 

 

 

References:

https://www.lgresearch.ai/blog/view?seq=475