스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Natural Language 다국어 모델 알아보기
다국어를 지원하고 트랜스포머를 기반으로 하는 임베딩을 사용하여 텍스트 분류와 단어 태깅을 위한 사용자 지정 Natural Language 모델을 생성하는 방법을 알아봅니다. 적은 데이터로 모델을 훈련하면서도 서로 다른 세 가지 문자 체계에 속하는 언어 27개를 지원하는 방법을 소개합니다. 이런 임베딩을 사용해 파이토치와 텐서플로에서 훈련된 복잡한 모델을 미세 조정 하는 방법을 살펴보세요. 자연어에 대해 더 자세히 알고 싶다면 WWDC20의 'Natural Language로 앱 향상하기'를 시청하세요.
리소스
관련 비디오
WWDC23
WWDC20
WWDC19
-
다운로드
♪ ♪
반갑습니다, 여러분 더그 데이비드슨입니다 자연어 처리를 함께 살펴보죠 지난 몇 년간 수많은 세션에서 자연어 처리를 다뤘는데요 오늘은 이를 바탕으로 흥미로운 새 기능 몇 가지를 알아보려고 합니다 자연어 처리, 즉 NLP와 NLP 모델의 배경부터 우선 살펴보겠습니다 이어서 기존 기능을 간략하게 살피고 올해 새로 도입된 기능을 알아보죠 그런 다음 고급 앱을 소개하고 이번 세션을 마치겠습니다 그럼 배경부터 살펴볼게요 개략적으로 보자면 NLP 모델은 보통 흐름이 비슷합니다 텍스트 데이터로 시작해서 기계 학습이 작동할 수 있는 수치 특성 표현으로 변환하고 출력을 생성하는 입력 레이어를 갖죠 지난 여러 해에 걸쳐 소개한 가장 대표적인 예시는 텍스트 분류와 단어 태깅을 하도록 지원된 Create ML 모델입니다 필드로서 NLP 발전은 점점 더 정교해지는 입력 레이어 버전 발전만으로 상당히 밀접하게 추적할 수 있습니다
10-20년 전에는 단순한 철자 기능이었다가 10년쯤 전에 Word2Vec이나 GloVe처럼 정적 단어 임베딩 사용으로 전환되었죠 이후 CNN과 LSTM처럼 신경망 모델에 기반한 문맥 단어 임베딩으로 바뀌었고요 비교적 최근에는 트랜스포머에 기반한 언어 모델이 등장했습니다 임베딩이 뭔지 설명이 필요하겠네요 가장 간단한 형태로 보면 언어의 단어를 추상적인 벡터 공간의 벡터로 바꾸는 맵인데 벡터 공간에서 비슷한 의미를 가진 단어가 서로 가깝게 있도록 기계 학습 모델로 훈련됩니다 이를 통해 언어 지식을 통합할 수 있죠 정적 임베딩은 단어에서 벡터로 향하는 단순한 맵입니다 단어를 전달하면 모델이 표에서 검색해 벡터를 제공하죠 뜻이 비슷한 단어들이 벡터 공간에서 가까이 있도록 훈련됩니다 개별 단어를 이해하는 데 아주 유용하죠 더 정교한 임베딩은 동적이고 문맥이 있어서 각 단어가 문장 내 사용에 따라 다른 벡터로 매핑됩니다 예를 들어 영어 단어 food는 '패스트푸드'와 '마음의 양식' 두 표현에 쓰일 수 있지만 의미하는 바가 다릅니다 따라서 다른 임베딩 벡터를 얻겠죠 강력한 임베딩을 입력 레이어로 가진다는 것의 핵심은 전이 학습을 허용한다는 겁니다 임베딩은 방대한 데이터를 통해 훈련되고 일반적인 언어 지식을 캡슐화하므로 엄청난 양의 작업별 훈련 데이터를 요구하지 않고 특정 작업에 전송될 수 있습니다
현재 Create ML은 ELMo 모델을 사용하여 이런 종류의 임베딩을 지원합니다 이런 모델은 임베딩 벡터를 제작하도록 출력이 결합된 LSTM에 기반하죠 이는 Create ML을 통해 분류 및 태깅 모델 훈련에 사용될 수 있습니다 지금까지 지원해 온 모델을 함께 알아봅시다 2019년과 2020년 세션에서 자세히 다뤘던 내용이므로 이번 시간에는 간략하게 설명할게요 Natural Language는 NLP 모델에서 보이는 패턴을 일반적으로 따르는 Create ML을 사용하여 모델 훈련을 지원합니다 텍스트 분류와 단어 태깅 이 두 가지 작업을 위한 모델이 여기 포함되는데요 텍스트 분류에서 출력은 클래스 집합 중 하나를 사용해 입력 텍스트를 설명합니다 주제나 감정을 예시로 들 수 있죠 단어 태깅에서 출력은 입력 텍스트의 각 단어에 레이블을 지정합니다 음성의 일부나 역할 레이블을 예시로 들 수 있죠
지원되는 Create ML 모델은 NLP 필드의 발전을 따랐습니다 최대 엔트로피 모델과 CRF 기반 모델로 시작해 정적 단어 임베딩 지원을 추가한 다음 ELMo 임베딩을 사용해 Create ML 모델에 대한 동적 단어 임베딩을 추가했죠 자세한 내용을 알고 싶다면 2019년, 2020년에 진행했던 'Natural Language 프레임워크 개선 사항'과 'Natural Language로 앱 향상하기'를 참고하세요 올해 추가된 Natural Language의 새로운 기능을 알아봅시다 우선 트랜스포머 기반 문맥 임베딩을 지원하게 되어 아주 만족스럽습니다 구체적으로 얘기하자면 BERT 임베딩인데요 '양방향 트랜스포머 인코더 표현'의 줄임말로 마스킹된 언어 모델 훈련 방식을 통해 많은 양의 텍스트로 훈련된 임베딩 모델입니다 단어 하나가 마스킹된 문장을 모델에 넣고 단어를 제시해 달라고 요구하는 방식입니다 '마음의 양식'에서 '양식'을 빼고 모델에 넣은 뒤 더 잘해 낼 수 있도록 훈련을 거듭하죠
트랜스포머는 본질적으로 어텐션 메커니즘에 기반합니다 특히 멀티 헤드 셀프 어텐션에 토대를 두고 있죠 모델은 이를 통해 텍스트의 부분마다 가중치를 다르게 부여해 한 번에 다양한 방식으로 텍스트를 살펴볼 수 있습니다 멀티 헤드 셀프 어텐션 메커니즘은 여러 레이어로 래핑한 다음 수차례 반복하므로 대량의 텍스트 데이터를 활용하는 강력하고 유연한 모델을 제공하죠 따라서 동시에 여러 언어로 훈련해 다국어 모델을 구축할 수 있습니다 이런 덕분에 여러 언어를 즉시 지원하고 다국어 동시 지원도 가능하죠 무엇보다 언어 간 유사성 때문에 한 언어의 데이터가 다른 언어에 도움이 되는 시너지 효과도 발생합니다 따라서 다양한 계통의 언어 27개를 지원하도록 바로 설정해 두었습니다 관련 쓰기 시스템을 공유하는 언어 그룹별로 하나씩 세 가지 모델로 작업을 수행했는데요 로마자 언어용 모델과 키릴 문자 언어용 모델 그리고 한중일 모델 이렇게 세 가지예요
해당 임베딩 모델은 입력 인코딩 레이어 역할을 하면서 앞서 언급했던 Create ML 훈련에 적합합니다 다양한 모델에 강력한 인코딩이죠 훈련에 사용하는 데이터를 단일 언어로 작성할 필요는 없습니다 어떻게 작동하는지 예시를 통해 살펴보죠 메시지 앱을 작성한다고 가정해 봅시다 사용자가 메시지를 받으면 자동으로 분류되도록 설정하려고 합니다 분류할 항목은 친구에게 받은 개인 메시지 직장 동료가 보낸 업무 메시지 거래하는 가게에서 온 상업 메시지 이렇게 세 가지고요 여러 언어로 된 문자를 수신할 수 있으므로 언어 문제도 처리해야겠죠 영어와 이탈리아어 독일어, 스페인어 등 여러 언어로 된 훈련 데이터를 미리 수집해 뒀습니다 저는 JSON 포맷을 사용했지만 디렉토리나 CSV를 써도 됩니다 Create ML 앱에 들어가 프로젝트를 생성하고 훈련 데이터를 선택해 모델을 훈련해 봅시다
검증 데이터와 테스트 데이터도 함께 준비해 뒀어요
이제 알고리즘을 골라야 하는데 새로운 선택지가 생겼습니다 BERT 임베딩인데요
알고리즘 선택을 마쳤더니 문자를 고를 수 있게 됐네요 로마자 언어이므로 '로마자'를 선택하겠습니다 단일 언어를 사용한다면 여기서 지정해 줄 수 있는데 지금은 여러 언어로 돼 있으니까 그대로 '자동'으로 남겨 둘게요
'훈련하기' 버튼을 누르기만 하면 모델 훈련이 시작됩니다
이렇게 강력한 임베딩을 텍스트에 적용할 때 훈련 과정에서 가장 긴 시간이 소요됩니다 이후 모델은 높은 정확도로 빠르게 훈련되죠
훈련이 끝났으니 예시 메시지로 실행해 봅시다
영어 메시지를 넣어 볼까요
스페인어로 해 볼게요
모델에서 이 텍스트를 상업 메시지로 확신하는군요 시너지 효과를 예시로 보여 드리자면 이 모델은 프랑스어로 훈련받은 적이 없지만 프랑스어로 된 텍스트를 분류할 수 있습니다
관심 있는 언어별로 데이터를 훈련해 놓으면 좋겠죠 지금까지 Create ML로 작업해 봤는데요 Natural Language 프레임워크로도 임베딩을 작업할 수 있습니다 새로운 클래스인 NLContextualEmbedding을 사용하면 됩니다 해당 클래스를 통해 원하는 임베딩 모델을 식별하고 일부 속성을 확인할 수 있죠 언어나 문자를 비롯해 다양한 방법으로 임베딩 모델을 찾을 수 있습니다 모델을 찾으면 벡터의 차원 등 프로퍼티를 얻을 수 있죠 또한 모델별로 식별자가 있어요 모델만 식별하는 문자열을 뜻합니다 예를 들어 모델 작업을 시작할 때는 언어로 모델을 찾을 수 있지만 동일한 모델을 쓰고 있는지 나중에 확인하고 싶다면 식별자를 사용해야겠죠 이런 임베딩 모델은 여느 Natural Language 기능처럼 필요에 따라 다운로드하는 에셋에 의존한다는 점을 꼭 기억해 두세요 NLContextualEmbedding은 사용 전 다운로드를 요청하는 등 추가적인 제어가 가능하도록 몇 가지 API를 제공합니다 주어진 임베딩 모델에 현재 기기에서 사용 가능한 에셋이 있는지 물어볼 수 있으며 요청을 입력하지 않으면 다운로드될 겁니다 이런 질문이 생길 수 있어요 Create ML 말고 파이토치나 텐서플로로 모델을 훈련해도 새 BERT 임베딩을 사용할 수 있을까요? 사용할 수 있습니다 사전 훈련 된 다국어 임베딩 모델을 제공하므로 사용자가 훈련하고 싶은 모델에 입력 레이어로 사용하면 됩니다 작동 방식을 살펴보죠 macOS 기기에서 NLContextualEmbedding을 사용해 훈련 데이터에 대한 임베딩 벡터를 얻습니다 그런 다음 파이토치나 텐서플로로 이를 훈련에 입력하고 도출된 결과를 Core ML 도구를 사용해 Core ML 모델로 변환합니다
이후 기기에서 추론 시간에 NLContextualEmbedding을 사용해 입력 데이터에 대한 임베딩 벡터를 가져오고 Core ML 모델로 전달해서 출력을 얻습니다 이를 지원하고자 추가로 마련된 NLContextualEmbedding API로 모델을 로딩하고 텍스트에 적용해서 임베딩 벡터를 결과로 얻을 수 있어요
모델 식별자를 사용해서 앞서 훈련에 사용했던 모델을 검색할 수 있습니다 해당 모델을 텍스트에 적용하고 객체를 줍니다 객체 이름은 NLContextualEmbeddingResult예요 이제 해당 객체를 사용해 임베딩 벡터를 반복합니다 어떤 작업이 가능한지 살짝 보여 드리고자 간단한 예시 모델을 준비했어요 기존의 영어 안정적 확산 모델을 시작한 다음 새 BERT 임베딩을 입력 레이어로 사용하도록 다국어 데이터로 미세 조정 해서 고정된 걸로 간주하고 간단한 선형 프로젝션 레이어도 훈련해서 차원을 전환했습니다 그 결과 안정적 확산 모델이 다국어 입력을 취하게 됐어요 해당 모델의 출력을 예시로 몇 가지 살펴봅시다 '분홍빛 꽃이 만발한 정원을 가로지르는 오솔길'이라는 영어 텍스트를 전달했더니 텍스트 내용을 묘사하는 이미지를 모델이 띄워 주는군요 같은 문장을 프랑스어와 스페인어 이탈리아어, 독일어로 번역해 모델에 넣었더니 모두 분홍 꽃이 가득 핀 정원과 오솔길을 보여 줍니다 좀 더 복잡한 예시를 들어 볼게요 '구름 낀 하늘 아래 나무와 산 앞을 지나는 도로' 모델이 도로와 나무, 산, 구름을 출력합니다 마찬가지로 프랑스어와 스페인어 이탈리아어, 독일어를 비롯해 여러 언어로 같은 문장을 번역해 봤는데 도로와 나무, 산, 구름 이미지가 전부 출력됐어요 이번 세션에서 배운 내용을 요약해 봅시다 Create ML을 사용해 텍스트 분류나 단어 태깅 작업용으로 손쉽게 모델을 훈련할 수 있고 새 다국어 BERT 임베딩 모델은 이런 용도를 위해 강력한 입력 인코딩 레이어를 제공합니다 해당 모델은 단일 언어 또는 다국어를 지원하죠 또한 BERT 임베딩을 입력 레이어로 사용해 파이토치나 텐서플로로 모델을 훈련할 수 있습니다 감사합니다 이제 모델 훈련을 시작해 보세요 ♪ ♪
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.