NaturalLanguage は、iOSおよびmacOSデバイス向けの自然言語処理フレームワークであり、トークン化、言語認識、品詞タグ付け、見出し語化、固有表現認識へのアクセスを提供します。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以上の言語をサポートし、1語から文書全体まで、あらゆる長さのテキストで動作します。
NLLanguageRecognizer のアルゴリズムは、文字のnグラムを分析し、言語プロファイルと比較します。短いテキスト(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 の3種類のエンティティを区別します。これにより、ニュース、メール、レビューから構造化データを自動的に抽出できます。
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 は、トレーニング済みのCore ML NLPモデルを操作するためのクラスであり、Appleが事前トレーニングした組み込みの感情分析モデルを含みます。このモデルはテキストの感情(ポジティブ、ネガティブ、ニュートラル)を判定します。
組み込みの 感情分析 モデルは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 によると、カスタムテキストモデルは500〜5000のサンプルでトレーニングされ、80〜95%の精度を達成します。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アプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。