본문 바로가기
AI/개발일지

나만의 챗봇 Service해보기(2) : WIZnet Doc에 있는 데이터를 학습시키자!

by 민윤홍 2024. 1. 19.
728x90

안녕하세요 오늘은 나만의 챗봇 서비스해보기 2탄으로 돌아왔습니다.

 

오늘은 나만의 챗봇을 학습하기 위한 데이터를 가져오는 방법을 알려드리려고 합니다.

우선 데이터를 구축하기 위한 예시로 WIZnet의 doc를 가져와봅시다. 아래 Github링크를 들어가면 WIZnet의 doc를 마크다운 파일로 확인할 수 있습니다.

https://github.com/Wiznet/document_framework

 

GitHub - Wiznet/document_framework

Contribute to Wiznet/document_framework development by creating an account on GitHub.

github.com

이중 W5500를 예시로 가져왔습니다.

 

## W5500

![W5500 Photo 1](/img/products/w5500/img_w5500h.jpg)

The W5500 chip is a Hardwired Internet controller designed as a full
hardwired TCP/IP stack with WIZnet technology. W5500 provides Internet
connectivity to your embedded systems by using SPI(Serial Peripheral
Interface). SPI provides easy connection via external MCU to W5500. The
clock speed of W5500 SPI supports upto 80MHz.

Since W5500 integrates the Hardwired TCP/IP stack with 10/100 Ethernet
MAC and PHY, it is truly a one-chip solution for the stable internet
connectivity. WIZnet's Hardwired TCP/IP stack supports TCP, UDP, IPv4,
ICMP, ARP, IGMP, and PPPoE - and it has been proven through various
applications over the last decade.

W5500 provides 8 independent SOCKETs to be used simultaneously and 32KB
internal memory for data communication. Users can develop an Ethernet
application easily by using the simple W5500 SOCKET program instead of
handling a complex Ethernet controller. W5500 also provides WOL (Wake on
LAN) and a Power Down Mode in order to reduce power consumption.

## Features

  - Supports following Hardwired TCP/IP Protocols : TCP, UDP, ICMP,
    IPv4, ARP, IGMP, PPPoE
  - Supports 8 independent sockets simultaneously
  - Supports Power down mode
  - Supports Wake on LAN over UDP
  - Supports High Speed Serial Peripheral Interface(SPI MODE 0, 3)
  - Internal 32Kbytes Memory for Tx/Rx Buffers
  - 10BaseT/100BaseTX Ethernet PHY embedded
  - Support Auto Negotiation (Full and half duplex, 10 and 100-based)
  - Not support IP Fragmentation
  - 3.3V operation with 5V I/O signal tolerance
  - LED outputs (Full/Half duplex, Link, Speed, Active)
  - 48 Pin LQFP Lead-Free Package (7x7mm, 0.5mm pitch)

### Language

  - [Japanese Version](./japanese-v.md)

### Material

  - [W5500 Datasheet](Datasheet.md)
  - [W5500 Driver](./Driver.md)
  - [W5500 Reference Schematic](Ref.-Schematic.md)
  - [Migration from W5200 to W5500](./Migration-from-W5200.md)
  - [W5500 TCP Function](Application/TCP.md)
  - [W5500 UDP Function](Application/UDP.md)
  - [W5500 Application Note (IPRAW)](Application/IPRAW.md)
  - [W5500 Application Note (PPPoE)](Application/PPPoE.md)
  - [W5500 Confirmation of ESD Test](Application/SPI-Performance.md)

W5500 에 대한 스펙, 이미지, 소개 등 W5500에 대한 정보들이 담겨있습니다. 이를 .md파일로 저장해도 되지만, txt파일로 저장을 하였습니다. W5500와 같은 WIZnet의 Chip과 Module들이 담긴 doc들만 따로 정리하여 아래와 같이 txt파일로 저장하였습니다.

이렇게 txt파일로 저장만 해둬도 데이터셋 구성은 절반은 완성입니다! 임베딩, VectorDB 구축에 대해 어렵게 생각할 필요 없이 데이터를 수집하고 모아두는 행위 자체가 곧 데이터셋 구성의 시작임을 알아두시면 될 것 같습니다.

 

원하는 데이터들을 구축하였다면 이제 LangChain의 Document loaders를 사용하여 데이터를 불러와야 합니다. LangChain의 경우 정말 수십가지의 방식으로 데이터를 가져올 수 있습니다.

LangChain공식 문서이다. 종류가 무수히 많고, 내용이 정말 많고, 절망적으로 많다!

 

어떤식으로 사용할지는 공식문서를 뒤져가면서 고생해도 되지만 아래의 Loader들이 제일 만만했습니다. 

from langchain.document_loaders import TextLoader, DirectoryLoader, PyPDFLoader, CSVLoader

 

순서대로 txt, pdf, csv이다. DirectoryLoader의경우 TextLoader와 같이 쓰입니다.

loader = DirectoryLoader(file_path, glob="*.txt", loader_cls=TextLoader)
documents = loader.load()
print(documents)

가장 많이 쓰이는 Json의 경우 아래 방법처럼 호출하면 됩니다.

import json

if file_path.endswith('.json'):
	with open(file_path, 'r', encoding='utf-8') as file:
		json_data = json.load(file)
		# JSON 파일에서 'content' 키의 값을 추출하여 리스트로 변환
		documents = [json_data['content']]

 

저는 txt파일을 통해 데이터들을 불러왔고, 아래 코드처럼 chromaDB를 이용해 vectorDB 임베딩을 시킵니다.

from langchain.vectorstores import Chroma

vectordb = Chroma.from_documents(
    documents=texts,
    embedding=embedding,
    persist_directory=persist_directory)

이후 vectorDB를 print로 실행해보면 아래와 같이 data를 잘 load를 해오는 것을 볼 수 있습니다.

 

 

이번시간은 간단하게 데이터 셋을 모으는 방법에 대해 소개 해보았습니다. 다음 시간에는 LangChain을 구축하고, streamlit을 통해 웹 서비스를 해보는 것까지 해보겠습니다.

 

나만의 챗봇 Service해보기(3) : Streamlit과 Langchain을 사용하여 웹 서비스를 해보자!

 

728x90