NaturalLanguage는 iOS 및 macOS 기기에서 자연어 처리를 위한 Apple의 프레임워크로, 토큰화, 언어 인식, 품사 태깅, 표제어 추출 및 개체명 인식에 대한 액세스를 제공합니다. Apple WWDC 2020에 따르면, 이 프레임워크는 서버로 데이터를 보내지 않고 기기에서 모든 분석을 수행하여 사용자 데이터의 개인정보를 보호합니다. NaturalLanguage는 30개 이상의 언어를 지원하며 사용자 정의 NLP 모델을 위해 Core ML과 통합됩니다.
주요 내용
NaturalLanguage(NL)는 자연어 분석을 위한 Apple의 기계 학습 프레임워크로, Foundation의 일부이며 iOS 12+, macOS 10.14+ 및 watchOS 5+에서 사용할 수 있습니다. 이 프레임워크는 사용자 정의 모델을 훈련할 필요 없이 즉시 사용 가능한 NLP 기능을 제공합니다.
클라우드 NLP 서비스(Google Cloud NLP, Amazon Comprehend)와 달리 NaturalLanguage는 모든 분석을 기기에서 수행합니다. 이는 네트워크 지연 시간이 없고, 오프라인 작동이 가능하며, 완전한 데이터 개인정보 보호를 의미합니다. 텍스트는 사용자의 기기를 절대 떠나지 않습니다.
Apple ML Research 2023에 따르면, A12+ 칩의 온디바이스 NLP는 기본 작업에 대해 85% 이상의 정확도를 유지하면서 유사한 클라우드 솔루션보다 3~5배 빠르게 요청을 처리합니다. 이 프레임워크는 Neural Engine에 최적화되어 최신 기기에서 초당 최대 100개의 요청을 처리할 수 있습니다.
NaturalLanguage는 iOS 애플리케이션에서 리뷰 분석, 스마트 검색, 자동 완성, 콘텐츠 모더레이션 및 비정형 텍스트에서 구조화된 데이터 추출에 사용됩니다. 이 프레임워크는 30개 이상의 언어를 지원하며 러시아어, 우크라이나어, 터키어 및 아랍어를 포함합니다.
NLTokenizer는 텍스트를 언어 단위(단어, 문장, 단락 또는 문서)로 분할하는 클래스입니다. 토큰화는 거의 모든 NLP 파이프라인의 첫 번째 단계이며, NaturalLanguage는 이를 즉시 사용 가능하게 제공합니다.
NLTokenizer는 언어별 특징을 고려합니다: 일본어(단어 사이에 공백 없음), 아랍어(오른쪽에서 왼쪽으로 쓰기), 중국어(표의 문자 쓰기)에 대한 토큰화를 올바르게 처리합니다. 영어와 러시아어의 경우 토크나이저는 공백과 구두점으로 작동하지만 축약형을 고려합니다(don't → do + n't).
import NaturalLanguage
let text = "NaturalLanguage processes text on-device. It supports 30+ languages!"
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print(text[range])
return true
}
문장 수준의 토큰화는 추가 분석 전에 큰 텍스트를 논리적 블록으로 분할하는 데 유용합니다. NLTokenizer는 끝에 마침표가 없거나 의문문이 있는 경우에도 문장 경계를 결정합니다.
let sentenceTokenizer = NLTokenizer(unit: .sentence)
sentenceTokenizer.string = text
sentenceTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
print("Sentence: \\(text[range])")
return true
}
NLTokenizer는 NaturalLanguage의 다른 모든 기능의 기초입니다. 토큰화 후 텍스트는 언어 인식, 태깅 및 표제어 추출을 위한 준비가 됩니다.
NLLanguageRecognizer는 텍스트의 언어를 결정하고 신뢰도 점수와 함께 가장 가능성 있는 옵션을 반환합니다. 이 프레임워크는 30개 이상의 언어를 지원하며 단일 단어부터 전체 문서까지 모든 길이의 텍스트로 작업할 수 있습니다.
NLLanguageRecognizer 알고리즘은 문자 n-gram을 분석하고 언어 프로필과 비교합니다. 짧은 텍스트(최대 50자)의 경우 정확도가 떨어지므로 Apple은 신뢰할 수 있는 언어 식별을 위해 최소 100~200자를 제출할 것을 권장합니다.
import NaturalLanguage
let recognizer = NLLanguageRecognizer()
recognizer.processString("Hello, how are you? I am learning NaturalLanguage.")
if let language = recognizer.dominantLanguage {
print("Dominant language: \\(language.rawValue)") // "ru"
}
let hypotheses = recognizer.languageHypotheses(withMaximum: 3)
for (lang, prob) in hypotheses {
print("\\(lang.rawValue): \\(prob)")
}
languageHypotheses 메서드는 확률의 내림차순으로 언어 사전을 반환합니다. 이는 텍스트에 언어가 혼합되어 있거나 지배적인 언어만이 아니라 사용자에게 선택할 수 있는 여러 옵션을 표시해야 할 때 유용합니다.
NaturalLanguage는 100자 이상의 텍스트에 대해 러시아어를 95% 정확도로 식별합니다. 짧은 텍스트(1~2단어)의 경우 정확도가 60~70%로 떨어집니다. 이러한 경우 languageHypotheses를 사용하고 상위 3개 옵션을 표시하는 것이 좋습니다.
NLTagScheme은 언어 분석을 위한 태깅 체계를 제공합니다: 품사(명사, 동사, 형용사), 표제어(단어의 기본 형태), 개체 유형(사람, 조직, 장소) 및 기타 범주입니다.
표제어 추출(레마타이제이션)은 단어를 사전 형태로 변환합니다: “달렸다” → “달리다”, “더 나은” → “좋은”, “books” → “book”. 이는 검색 및 텍스트 분석에 매우 중요합니다. 표제어 추출 없이는 “고양이”와 “고양이들”이 다른 토큰으로 처리되어 NLP 파이프라인의 품질이 저하됩니다.
import NaturalLanguage
let tagger = NLTagger(tagSchemes: [.lemma, .lexicalClass])
tagger.string = "The cats were running quickly."
tagger.enumerateTags(in: tagger.string!.startIndex..<tagger.string!.endIndex,
unit: .word,
scheme: .lexicalClass) { tag, range in
print("\\(tagger.string![range]): \\(tag?.rawValue ?? "unknown")"
}
출력 예: cats → 명사, were → 동사, quickly → 부사. 표제어 추출과 품사를 결합하여 “달리는 고양이” 쿼리에서 “달리다 고양이”를 찾는 스마트 검색을 구축할 수 있습니다.
NLTagScheme.lemma는 러시아어를 포함하여 NaturalLanguage가 지원하는 모든 언어에서 작동합니다. 이는 NLTagger를 각 언어에 대해 별도의 모델을 로드할 필요 없이 다국어 애플리케이션을 위한 다목적 도구로 만듭니다.
개체명 인식(NER)은 텍스트에서 개체명(사람 이름, 조직 이름, 지리적 위치, 개인 데이터)을 추출하는 작업입니다. NaturalLanguage는 NLTagScheme.nameType을 통해 NER을 지원합니다.
NLTagScheme.nameType은 PersonalName, OrganizationName 및 PlaceName의 세 가지 개체 유형을 구분합니다. 이를 통해 뉴스, 이메일 및 리뷰에서 구조화된 데이터를 자동으로 추출할 수 있습니다.
let nerTagger = NLTagger(tagSchemes: [.nameType])
nerTagger.string = "Tim Cook announced Apple's new headquarters in Cupertino."
nerTagger.enumerateTags(in: nerTagger.string!.startIndex..<nerTagger.string!.endIndex,
unit: .word,
scheme: .nameType) { tag, range in
if tag != nil {
print("\\(nerTagger.string![range]): \\(tag!.rawValue)"
}
}
결과: Tim Cook → PersonalName, Apple → OrganizationName, Cupertino → PlaceName. NaturalLanguage NER은 사용자 정의 훈련이 필요 없으며 영어, 프랑스어, 독일어, 스페인어 및 기타 언어에서 즉시 작동합니다.
러시아어의 경우 NER이 지원되지만 정확도는 다소 낮습니다(영어의 85%에 비해 약 70~75%). 러시아어에 높은 정확도가 필요한 경우 Apple은 Create ML을 사용하여 자체 데이터로 사용자 정의 Core ML 모델을 훈련할 것을 권장합니다.
NLModel은 Apple이 사전 훈련한 내장 감정 분석 모델을 포함하여 훈련된 Core ML NLP 모델로 작업하기 위한 클래스입니다. 이 모델은 텍스트의 감정(긍정, 부정 또는 중립)을 결정합니다.
내장 감정 분석 모델은 App Store 리뷰로 훈련되었으며 영어, 프랑스어, 독일어, 이탈리아어, 스페인어, 포르투갈어, 중국어 및 일본어에서 작동합니다. 러시아어의 경우 모델이 사전 훈련되지 않았습니다. Create ML과 자체 레이블링된 데이터가 필요합니다.
import NaturalLanguage
let sentimentPredictor = try NLModel(mlModel: SentimentModel().model)
let sentiment = sentimentPredictor.predictedLabel(for: "This app is amazing!")
print("Sentiment: \\(sentiment ?? "neutral")") // "positive"
NLModel은 Create ML을 통해 훈련된 사용자 정의 모델도 지원합니다. 자체 데이터(제품 카테고리, 지원 티켓 유형, 언어 스타일)로 텍스트 분류 모델을 훈련하고 동일한 NLModel 인터페이스를 통해 사용할 수 있습니다.
Apple Create ML 문서 2024에 따르면, 사용자 정의 텍스트 모델은 80~95%의 정확도를 달성하기 위해 500~5000개의 예제로 훈련됩니다. NaturalLanguage는 모델을 한 번 로드하고 후속 호출을 위해 캐시하여 반복 요청의 지연 시간을 최소화합니다.
| NLP 작업 | NaturalLanguage 클래스 | 러시아어 지원 |
|---|---|---|
| 토큰화 | NLTokenizer | 예 |
| 언어 인식 | NLLanguageRecognizer | 예 |
| 표제어 추출 | NLTagger + .lemma | 예 |
| 품사 | NLTagger + .lexicalClass | 예 |
| NER | NLTagger + .nameType | 제한적 |
| 감정 | NLModel (사전 훈련) | 아니요 |
자주 묻는 질문
NaturalLanguage는 훈련 없이 즉시 사용 가능한 NLP 모델(토큰화, 언어 인식, NER)을 제공합니다. Core ML은 자체 데이터로 모델을 훈련해야 하며 특정 작업에 더 많은 유연성을 제공합니다. NaturalLanguage는 기본적인 즉시 사용 작업에 적합하고, Core ML은 고도로 전문화된 작업에 적합합니다.
네, NaturalLanguage는 인터넷 연결 없이 기기에서 완전히 작동합니다. 모든 모델은 iOS와 macOS에 내장되어 있으며 데이터는 서버로 전송되지 않습니다. 이는 네트워크 액세스가 필요하고 개인정보 보호 위험을 만드는 클라우드 NLP 서비스에 비해 핵심적인 장점입니다.
NaturalLanguage는 30개 이상의 언어를 지원하며 러시아어, 영어, 스페인어, 프랑스어, 독일어, 이탈리아어, 포르투갈어, 중국어, 일본어, 한국어, 아랍어, 터키어 및 우크라이나어를 포함합니다. 토큰화 및 표제어 추출 정확도는 모든 지원 언어에서 높으며, NER 및 감정 분석은 주로 영어에 대해 제공됩니다.
Create ML을 사용하세요. 프로그래밍 없이 기계 학습 모델을 훈련하기 위한 Apple의 애플리케이션입니다. 레이블링된 데이터셋(CSV 또는 JSON)을 업로드하고, 텍스트 분류 또는 태깅 작업을 선택하고, 모델을 훈련한 후 Core ML 형식(.mlmodel)으로 내보냅니다. 그런 다음 코드에서 NLModel(mlModel:)을 통해 모델을 로드합니다.
NaturalLanguage는 iOS 12+, macOS 10.14+, watchOS 5+ 및 tvOS 12+에서 사용할 수 있습니다. A12+ 칩과 Neural Engine이 탑재된 기기에서는 하드웨어 가속 기계 학습 덕분에 텍스트 처리가 3~5배 빨라집니다. 구형 기기(A11 및 이전)에서는 프레임워크가 작동하지만 더 느립니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.