# 자연어 처리 소개 이 강의에서는 *계산 언어학*의 하위 분야인 *자연어 처리*의 간략한 역사와 중요한 개념을 다룹니다. ## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) ## 소개 일반적으로 NLP라고 알려진 자연어 처리는 기계 학습이 적용되고 생산 소프트웨어에서 사용되는 가장 잘 알려진 분야 중 하나입니다. ✅ 매일 사용하는 소프트웨어 중 일부에 NLP가 포함되어 있을 것 같은 소프트웨어를 생각해 보세요. 자주 사용하는 워드 프로세싱 프로그램이나 모바일 앱은 어떤가요? 다음 내용을 배울 것입니다: - **언어의 개념**. 언어가 어떻게 발전했는지와 주요 연구 분야가 무엇인지. - **정의와 개념**. 컴퓨터가 텍스트를 처리하는 방법, 구문 분석, 문법, 명사와 동사를 식별하는 방법 등에 대한 정의와 개념을 배울 것입니다. 이 강의에는 몇 가지 코딩 과제가 있으며, 다음 강의에서 코딩을 배우게 될 중요한 개념들이 소개됩니다. ## 계산 언어학 계산 언어학은 수십 년에 걸쳐 연구되고 개발된 분야로, 컴퓨터가 언어와 함께 작업하고 심지어 이해하고 번역하고 의사소통할 수 있는 방법을 연구합니다. 자연어 처리(NLP)는 컴퓨터가 '자연어', 즉 인간 언어를 처리하는 방법에 중점을 둔 관련 분야입니다. ### 예시 - 전화 받아쓰기 전화 대신 음성을 받아쓰거나 가상 비서에게 질문한 적이 있다면, 당신의 음성은 텍스트 형식으로 변환된 후 당신이 말한 언어로부터 *구문 분석*되었을 것입니다. 감지된 키워드는 전화나 비서가 이해하고 실행할 수 있는 형식으로 처리되었습니다. ![이해](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ko.png) > 실제 언어 이해는 어렵습니다! 이미지 출처: [Jen Looper](https://twitter.com/jenlooper) ### 이 기술은 어떻게 가능할까요? 이것은 누군가가 이를 수행하는 컴퓨터 프로그램을 작성했기 때문에 가능합니다. 몇 십 년 전, 몇몇 공상 과학 작가들은 사람들이 대부분 컴퓨터와 대화할 것이며 컴퓨터는 항상 그들의 의미를 정확히 이해할 것이라고 예측했습니다. 안타깝게도, 이는 많은 사람들이 상상한 것보다 더 어려운 문제로 밝혀졌으며, 오늘날에는 훨씬 더 잘 이해되는 문제이지만 문장의 의미를 이해하는 '완벽한' 자연어 처리를 달성하는 데에는 여전히 상당한 도전 과제가 있습니다. 특히 유머를 이해하거나 문장에서 풍자를 감지하는 것은 매우 어려운 문제입니다. 이 시점에서 학교 수업에서 문장의 문법 부분을 다루었던 수업을 기억할 수도 있습니다. 일부 국가에서는 학생들이 문법과 언어학을 전용 과목으로 배우지만, 많은 국가에서는 이러한 주제가 언어를 배우는 과정의 일부로 포함됩니다: 초등학교에서 모국어를 배우거나(읽기와 쓰기 배우기) 중등학교나 고등학교에서 제2외국어를 배우는 과정에서. 명사와 동사 또는 부사와 형용사를 구분하는 전문가가 아니더라도 걱정하지 마세요! *단순 현재*와 *현재 진행형*의 차이점을 이해하는 데 어려움을 겪는다면, 당신은 혼자가 아닙니다. 이는 많은 사람들, 심지어 언어의 원어민에게도 도전적인 문제입니다. 좋은 소식은 컴퓨터가 공식 규칙을 적용하는 데 매우 능숙하다는 것이며, 인간처럼 문장을 *구문 분석*할 수 있는 코드를 작성하는 방법을 배우게 될 것입니다. 나중에 검토할 더 큰 도전 과제는 문장의 *의미*와 *감정*을 이해하는 것입니다. ## 전제 조건 이 강의를 위해 주된 전제 조건은 이 강의의 언어를 읽고 이해할 수 있는 것입니다. 수학 문제나 방정식을 풀 필요는 없습니다. 원래 저자가 이 강의를 영어로 작성했지만, 다른 언어로 번역되었을 수도 있으므로 번역본을 읽고 있을 수도 있습니다. 여러 언어의 문법 규칙을 비교하기 위해 여러 언어가 사용된 예가 있습니다. 이러한 예는 번역되지 않지만, 설명 텍스트는 번역되므로 의미가 명확해야 합니다. 코딩 과제에서는 Python을 사용하며 예제는 Python 3.8을 사용합니다. 이 섹션에서는 다음이 필요하고 사용됩니다: - **Python 3 이해**. Python 3의 프로그래밍 언어 이해, 이 강의에서는 입력, 루프, 파일 읽기, 배열을 사용합니다. - **Visual Studio Code + 확장**. Visual Studio Code와 Python 확장을 사용할 것입니다. 원하는 Python IDE를 사용할 수도 있습니다. - **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob)은 Python용 간단한 텍스트 처리 라이브러리입니다. TextBlob 사이트의 지침에 따라 시스템에 설치하세요(아래와 같이 말뭉치도 설치하세요): ```bash pip install -U textblob python -m textblob.download_corpora ``` > 💡 팁: VS Code 환경에서 Python을 직접 실행할 수 있습니다. 자세한 내용은 [문서](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott)를 확인하세요. ## 기계와 대화하기 컴퓨터가 인간의 언어를 이해하려는 역사는 수십 년 전으로 거슬러 올라가며, 자연어 처리를 처음으로 고려한 과학자 중 한 명은 *앨런 튜링*이었습니다. ### '튜링 테스트' 튜링이 1950년대에 *인공지능*을 연구할 때, 인간과 컴퓨터(타이핑으로)에게 대화 테스트를 제공하여 대화 중인 인간이 다른 인간과 대화하고 있는지 컴퓨터와 대화하고 있는지 확신할 수 없는 상황을 고려했습니다. 일정 길이의 대화 후에 인간이 컴퓨터의 답변인지 아닌지를 판단할 수 없다면, 컴퓨터가 *생각*한다고 할 수 있을까요? ### 영감 - '모방 게임' 이 아이디어는 *모방 게임*이라는 파티 게임에서 영감을 받았습니다. 이 게임에서 조사관은 방에 혼자 있고 다른 방에 있는 두 사람 중 각각이 남자인지 여자인지를 판단해야 합니다. 조사관은 메모를 보낼 수 있으며, 작성된 답변이 신비한 사람의 성별을 드러내는 질문을 생각해내야 합니다. 물론, 다른 방에 있는 플레이어들은 조사관을 혼란스럽게 하거나 오도하는 방식으로 질문에 답변하려고 하면서도 정직하게 답변하는 모습을 보이려고 합니다. ### 엘리자 개발 1960년대에 MIT 과학자인 *조셉 바이젠바움*은 [*엘리자*](https://wikipedia.org/wiki/ELIZA)라는 컴퓨터 '치료사'를 개발하여 인간에게 질문을 하고 그들의 답변을 이해하는 듯한 모습을 보였습니다. 그러나 엘리자는 문장을 구문 분석하고 특정 문법 구조와 키워드를 식별하여 합리적인 답변을 제공할 수 있었지만, 문장을 *이해*한다고 할 수는 없었습니다. 엘리자가 "**나는** 슬프다" 형식의 문장을 받으면 "얼마나 오랫동안 **당신은** 슬펐나요"라는 답변을 만들기 위해 문장을 재구성하고 단어를 대체할 수 있었습니다. 이는 엘리자가 진술을 이해하고 후속 질문을 하고 있는 듯한 인상을 주었지만, 실제로는 시제를 변경하고 몇 가지 단어를 추가한 것이었습니다. 엘리자가 답변할 키워드를 식별할 수 없으면, 대신 여러 다른 진술에 적용될 수 있는 임의의 답변을 제공했습니다. 예를 들어 사용자가 "**당신은** 자전거입니다"라고 작성하면, 엘리자는 "얼마나 오랫동안 **나는** 자전거였나요?"라는 답변을 제공할 수 있으며, 이는 더 합리적인 답변이 아닙니다. [![엘리자와 대화하기](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "엘리자와 대화하기") > 🎥 위 이미지를 클릭하면 원래 엘리자 프로그램에 대한 비디오를 볼 수 있습니다 > 참고: 1966년에 발표된 [엘리자](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract)의 원본 설명을 ACM 계정이 있으면 읽을 수 있습니다. 또는 [위키백과](https://wikipedia.org/wiki/ELIZA)에서 엘리자에 대해 읽어보세요. ## 실습 - 기본 대화형 봇 코딩 엘리자와 같은 대화형 봇은 사용자 입력을 유도하고 이해하고 지능적으로 응답하는 것처럼 보이는 프로그램입니다. 엘리자와 달리, 우리의 봇은 지능적인 대화를 하는 것처럼 보이기 위해 여러 규칙을 가지지 않을 것입니다. 대신, 우리의 봇은 거의 모든 사소한 대화에서 작동할 수 있는 임의의 응답을 제공하여 대화를 계속할 수 있는 능력만을 가질 것입니다. ### 계획 대화형 봇을 만들 때의 단계: 1. 사용자가 봇과 상호작용하는 방법을 알려주는 지침을 출력합니다. 2. 루프를 시작합니다. 1. 사용자 입력을 받습니다. 2. 사용자가 종료를 요청했으면 종료합니다. 3. 사용자 입력을 처리하고 응답을 결정합니다(이 경우 응답은 가능한 일반적인 응답 목록에서 임의로 선택됩니다). 4. 응답을 출력합니다. 3. 2단계로 다시 돌아갑니다. ### 봇 만들기 다음으로 봇을 만들어 보겠습니다. 몇 가지 문구를 정의하는 것부터 시작하겠습니다. 1. 다음과 같은 임의의 응답을 사용하는 Python으로 직접 봇을 만드세요: ```python random_responses = ["That is quite interesting, please tell me more.", "I see. Do go on.", "Why do you say that?", "Funny weather we've been having, isn't it?", "Let's change the subject.", "Did you catch the game last night?"] ``` 아래는 샘플 출력입니다(사용자 입력은 `>`로 시작하는 줄에 있습니다): ```output Hello, I am Marvin, the simple robot. You can end this conversation at any time by typing 'bye' After typing each answer, press 'enter' How are you today? > I am good thanks That is quite interesting, please tell me more. > today I went for a walk Did you catch the game last night? > I did, but my team lost Funny weather we've been having, isn't it? > yes but I hope next week is better Let's change the subject. > ok, lets talk about music Why do you say that? > because I like music! Why do you say that? > bye It was nice talking to you, goodbye! ``` 작업에 대한 가능한 해결책은 [여기](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)에서 확인할 수 있습니다. ✅ 멈추고 고려해보세요 1. 임의의 응답이 봇이 실제로 사용자를 이해한다고 생각하게 만들 수 있을까요? 2. 봇이 더 효과적이기 위해 어떤 기능이 필요할까요? 3. 봇이 문장의 의미를 실제로 이해할 수 있다면, 대화 중 이전 문장의 의미를 '기억'해야 할까요? --- ## 🚀도전 위의 "멈추고 고려해보세요" 요소 중 하나를 선택하고 이를 코드로 구현하거나 의사 코드로 종이에 해결책을 작성해보세요. 다음 강의에서는 자연어를 구문 분석하고 기계 학습을 사용하는 여러 가지 접근 방식을 배울 것입니다. ## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) ## 복습 및 자습 아래 참고 자료를 살펴보세요. ### 참고 자료 1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . 2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. ## 과제 [봇 검색](assignment.md) **면책 조항**: 이 문서는 기계 기반 AI 번역 서비스를 사용하여 번역되었습니다. 정확성을 위해 노력하고 있지만, 자동 번역에는 오류나 부정확성이 있을 수 있습니다. 원본 문서가 해당 언어로 작성된 경우, 이를 권위 있는 출처로 간주해야 합니다. 중요한 정보의 경우, 전문 인간 번역을 권장합니다. 이 번역을 사용하여 발생하는 오해나 오역에 대해 당사는 책임을 지지 않습니다.