NLP(Natural Language Processing)
사람의 언어와 관련된 모든 것을 이해하는 데에 중점을 둔 언어학 및 기계 학습(머신 러닝) 분야
- 전체 문장 분류: 리뷰에 드러난 감정 파악하기, 스팸 메일 분류하기, 문장이 문법적으로 올바른지 혹은 문장 쌍이 논리적으로 관련이 있는지 없는지 결정하기
- 문장 내 단어 분류: 문장 구성 성분(명사, 동사, 형용사 등) 혹은 개체명(사람, 장소, 기관) 식별하기
- 텍스트 컨텐츠 생성: 자동 생성 텍스트로 프롬프트 작성하기, 텍스트 내 마스킹 된 단어의 빈칸 채우기
- 텍스트 안에서 정답 추출하기: 지문과 질의가 주어질 때 지문에 주어진 정보를 이용해 질의에 대한 정답 추출하기
- 입력 텍스트로부터 새로운 문장 생성하기: 입력 텍스트를 다른 언어로 번역하거나, 요약하기
텐서플로우(Tensorflow)
- 구글 브레인 팀에서 개발한 오픈소스 머신러닝 및 딥러닝 프레임워크
- 데이터를 텐서라는 다차원 배열로 표현하며 이 텐서의 흐름을 정의하고 계산하는 그래프 기반의 구조를 사용
- 대규모 데이터셋과 복잡한 모델에 적합
특징
- 확장성: 대규모 분산 시스템부터 모바일 기기까지 다양한 플랫폼에서 실행 가능.
- 유연성: 사용자 정의 가능한 신경망 구조를 쉽게 구성할 수 있음.
- 오픈소스: 누구나 무료로 사용 가능하며, 커뮤니티가 활발하게 발전 중.
- 멀티 언어 지원: Python을 중심으로, C++, JavaScript, Swift 등 다양한 언어를 지원.
정적 계산 그래프(Define-and-Run)구조
- 계산 그래프를 설계한 다음 그래프에 데이터를 넣는다
- 연산의 정의와 실행이 분리되어 있어 코드가 직관적이지 않다
- 2.x 버전에는 동적 계산 그래프도 허용
데이터 플로우 그래프(Data Flow Graph)
그래프는 노드와 노드를 잇는 엣지로 구성되어있다.

-
오퍼레이션(Operation)
그래프 상의 노드. 오퍼레이션은 하나 이상의 텐서를 받을 수 있다. 오퍼레이션은 계산을 수행하고, 결과를 하나 이상의 텐서로 반환할 수 있습니다.
-
텐서(Tensor)
내부적으로 모든 데이터는 텐서를 통해 표현된다. 텐서는 일종의 다차원 배열인데, 그래프 내의 오퍼레이션 간에는 텐서만이 전달된다.
-
세션(sisseon)
그래프를 실행하기 위해 필요. 오퍼레이션의 실행 환경을 캡슐화한 것.
-
변수(Variables)
변수는 그래프의 실행시, 패러미터를 저장하고 갱신하는데 사용. 메모리 상에서 텐서를 저장하는 버퍼 역할.
ex) 데이터 1.0을 갖는 노드1과 데이터 2.0을 갖는 노드2를 합친 연산 node3

- 각 노드 사이의 연결이나 다차원 배열 등을 의미하는 텐서 사이의 연결 관계를 풍부하게 표현할 수 있다
장점
그래프를 구축하면, 동일한 그래프를 반복적으로 다시 사용하게 되므로 프레임워크에서 그래프에 대한 최적화를 할 수 있다
단점
코드가 직관적이지 않고
그래프가 정의된 후에는 연산을 변경하기 어렵다
파이토치(Pytorch)
파이썬 기반 오픈소스 머신러닝 라이브러리
- 간결하고 구현이 빨리 되며, 텐서플로우보다 익히기 쉽다
- 그래프가 동적으로 변화할 수 있다
- 코드 자체가 파이썬과 유사
- Tensorflow에 비해 실제 생산 환경으로 배포할 때 더 복잡할수가 있음
특징
동적 계산 그래프 (Define-by-Run)
- 코드를 실행하는 순간 모델이 어떻게 동작할지를 결정
- 순방향 계산을 통해 동적으로 정의된다
- 사용자가 코드를 순차적으로 작성하고 실행 할 수 있음
- 모델 구축 및 디버깅이 더 직관적
차이점
| 텐서플로우 | 파이토치 |
|---|
| Define-and-Run(정적 계산 그래프) | Define-by-Run(동적 계산 그래프) |
| 계산 그래프를 정의한 다음 데이터를 넣는다 | 데이터를 흘려보냄으로써 계산 그래프 정의 |