|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| TextRepresentationPyTorch.ipynb | ||
| TextRepresentationTF.ipynb | ||
| assignment.md | ||
README.md
텍스트를 텐서로 표현하기
강의 전 퀴즈
텍스트 분류
이 섹션의 첫 번째 부분에서는 텍스트 분류 작업에 집중할 것입니다. 우리는 AG News 데이터셋을 사용할 것이며, 이 데이터셋에는 다음과 같은 뉴스 기사들이 포함되어 있습니다:
- 카테고리: 과학/기술
- 제목: Ky. 회사가 펩타이드 연구를 위한 보조금을 받다 (AP)
- 본문: AP - 루이빌 대학교의 화학 연구자가 설립한 회사가 개발을 위한 보조금을 받았다...
우리의 목표는 텍스트를 기반으로 뉴스 기사를 특정 카테고리로 분류하는 것입니다.
텍스트 표현
신경망을 사용하여 자연어 처리(NLP) 작업을 해결하려면 텍스트를 텐서로 표현할 방법이 필요합니다. 컴퓨터는 이미 ASCII나 UTF-8 같은 인코딩을 사용하여 화면의 글꼴에 매핑되는 숫자로 텍스트 문자를 표현합니다.
사람은 각 글자가 무엇을 나타내는지 이해하고, 모든 문자가 함께 문장의 단어를 형성하는 방식을 이해합니다. 그러나 컴퓨터는 스스로 이러한 이해를 가지지 못하며, 신경망은 학습 중에 의미를 배워야 합니다.
따라서 텍스트를 표현할 때 다양한 접근 방식을 사용할 수 있습니다:
- 문자 수준 표현: 텍스트를 각 문자를 숫자로 취급하여 표현합니다. 텍스트 코퍼스에 C개의 서로 다른 문자가 있다고 가정하면, 단어 Hello는 5xC 텐서로 표현됩니다. 각 글자는 원-핫 인코딩에서 텐서 열에 해당합니다.
- 단어 수준 표현: 텍스트의 모든 단어로 어휘를 생성하고, 단어를 원-핫 인코딩으로 표현합니다. 이 접근 방식은 문자 자체가 큰 의미를 가지지 않기 때문에 더 나은 방법입니다. 따라서 더 높은 수준의 의미적 개념인 단어를 사용함으로써 신경망의 작업을 단순화합니다. 그러나 큰 사전 크기로 인해 고차원 희소 텐서를 처리해야 합니다.
어떤 표현을 사용하든 먼저 텍스트를 토큰의 시퀀스로 변환해야 합니다. 하나의 토큰은 문자, 단어 또는 때로는 단어의 일부일 수 있습니다. 그런 다음 어휘를 사용하여 토큰을 숫자로 변환하며, 이 숫자는 원-핫 인코딩을 통해 신경망에 입력될 수 있습니다.
N-그램
자연어에서 단어의 정확한 의미는 문맥에서만 결정될 수 있습니다. 예를 들어, 신경망과 어망의 의미는 완전히 다릅니다. 이를 고려하는 한 가지 방법은 단어 쌍을 모델에 포함시키고 단어 쌍을 별도의 어휘 토큰으로 간주하는 것입니다. 이렇게 하면 문장 I like to go fishing은 다음과 같은 토큰 시퀀스로 표현됩니다: I like, like to, to go, go fishing. 이 접근 방식의 문제는 사전 크기가 크게 증가하며, go fishing과 go shopping 같은 조합이 서로 다른 토큰으로 표현되어 동일한 동사를 사용했음에도 불구하고 의미적 유사성을 공유하지 않는다는 점입니다.
경우에 따라 세 단어의 조합인 tri-grams를 사용할 수도 있습니다. 따라서 이러한 접근 방식은 일반적으로 n-그램이라고 불립니다. 또한 문자 수준 표현에서 n-그램을 사용하는 것이 합리적일 수 있으며, 이 경우 n-그램은 대략적으로 서로 다른 음절에 해당합니다.
Bag-of-Words와 TF/IDF
텍스트 분류와 같은 작업을 해결할 때, 텍스트를 고정 크기의 벡터로 표현할 수 있어야 하며, 이를 최종 밀집 분류기에 입력으로 사용할 것입니다. 이를 수행하는 가장 간단한 방법 중 하나는 개별 단어 표현을 결합하는 것입니다. 예를 들어, 각 단어의 원-핫 인코딩을 더하면 텍스트 내에서 각 단어가 나타나는 빈도를 보여주는 벡터를 얻게 됩니다. 이러한 텍스트 표현을 Bag-of-Words(BoW)라고 합니다.
이미지 제공: 저자
BoW는 텍스트에 어떤 단어가 어떤 빈도로 나타나는지를 나타내며, 이는 텍스트가 무엇에 관한 것인지에 대한 좋은 지표가 될 수 있습니다. 예를 들어, 정치 관련 뉴스 기사는 대통령, 국가와 같은 단어를 포함할 가능성이 높고, 과학 논문은 충돌기, 발견됨 등의 단어를 포함할 것입니다. 따라서 단어 빈도는 많은 경우 텍스트 내용의 좋은 지표가 될 수 있습니다.
BoW의 문제는 and, is와 같은 일반적인 단어가 대부분의 텍스트에 나타나며 가장 높은 빈도를 가지기 때문에 실제로 중요한 단어를 가리는 것입니다. 이러한 단어의 중요도를 낮추기 위해 문서 전체 컬렉션에서 단어가 나타나는 빈도를 고려할 수 있습니다. 이것이 TF/IDF 접근 방식의 주요 아이디어이며, 이 강의에 첨부된 노트북에서 더 자세히 다룹니다.
그러나 이러한 접근 방식은 텍스트의 의미를 완전히 고려할 수 없습니다. 이를 위해서는 더 강력한 신경망 모델이 필요하며, 이는 이후 섹션에서 논의할 것입니다.
✍️ 연습: 텍스트 표현
다음 노트북에서 학습을 계속하세요:
결론
지금까지 우리는 단어의 빈도 가중치를 추가할 수 있는 기술을 공부했습니다. 그러나 이러한 기술은 의미나 순서를 표현할 수 없습니다. 유명한 언어학자 J. R. Firth는 1935년에 "단어의 완전한 의미는 항상 문맥적이며, 문맥을 고려하지 않은 의미 연구는 진지하게 받아들일 수 없다"고 말했습니다. 우리는 이후 강의에서 언어 모델링을 사용하여 텍스트에서 문맥 정보를 캡처하는 방법을 배울 것입니다.
🚀 도전 과제
Bag-of-Words와 다양한 데이터 모델을 사용하여 다른 연습을 시도해 보세요. 이 Kaggle 대회에서 영감을 받을 수 있습니다.
강의 후 퀴즈
복습 및 자기 학습
Microsoft Learn에서 텍스트 임베딩과 Bag-of-Words 기술을 연습하세요.
과제: 노트북
면책 조항:
이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.