前回の記事では、Natural Languageフレームワークを利用して、OCRで取得したテキストに対して言語判定やキーワード抽出、感情分析を行うサンプルアプリを実装しました。
前回の記事はこちら:
「iOSアプリでテキストの自然言語解析を試してみた」
その中で感情分析機能を試したところ、明らかにポジティブな文章やネガティブな文章については直感に近い結果が得られた一方で、人間が読んだ印象とは異なる評価になるケースも確認できました。
そこで今回は、Natural Languageの感情分析機能に焦点を当て、どのような文章で期待通りの結果になり、どのような文章で人間の感覚とずれが生じるのかを検証してみます。
開発環境はXcode 26.2、Swift、iOS 16以上です。
なお、本記事で使用しているsentimentScoreはiOS 13以降で利用できますが、サンプルアプリは前回の記事と同じ構成を利用しているため、本記事ではiOS 16以上の環境で動作確認を行っています。
感情分析とは
Natural Languageフレームワークには、文章の感情傾向を数値として取得する機能が用意されています。
実装にはNLTaggerの.sentimentScoreを利用します。
文章全体を対象として感情分析を行うため、unitには.documentを指定しています。
import NaturalLanguage
enum SentimentAnalyzer {
static func analyze(text: String) -> Double {
let tagger = NLTagger(tagSchemes: [.sentimentScore])
tagger.string = text
if let score = tagger.tag(at: text.startIndex,
unit: .document,
scheme: .sentimentScore).0 {
return Double(score.rawValue) ?? 0
}
return 0
}
}
取得できる値は-1.0から1.0の範囲となります。
数値が-1.0に近いほどネガティブな傾向が強く、反対に1.0に近いほどポジティブな傾向が強いと判断されます。0に近い場合は中立的、あるいは明確な感情を判断しづらい文章であると考えられます。
一見すると単純な仕組みに見えますが、実際に試してみると必ずしも人間の感覚と一致するわけではありません。
AppleはNatural Languageが機械学習モデルを用いて感情分析を行うことを公開していますが、モデルの詳細や学習データ、評価基準については公開されていません。そのため、どのような特徴を重視してスコアを算出しているのかは分からず、実際にさまざまな文章を入力して挙動を確認することも重要です。
検証用アプリ
検証には、前回作成したOCR + Natural Languageのサンプルアプリをそのまま利用します。
画像から文字を抽出した後、抽出結果に対して感情分析を実行し、そのスコアを画面へ表示する構成です。
アプリの流れは以下のようになります。
まず画像を選択し、OCRによって文字列を取得します。その後、取得したテキストに対してNatural Languageの感情分析を実行し、最終的なスコアを画面へ表示します。
なお、本記事ではOCRによって取得したテキストをそのまま感情分析へ渡しており、NLLanguageRecognizerや setLanguage(_:) による言語指定は行っていません。Natural Languageによる自動判定の結果をそのまま利用しています。
本記事の目的はOCRの精度検証ではなく、感情分析の結果そのものを確認することが目的のため、OCRによる文字認識が正しく行われていることを前提として進めます。
動作確認
前回の記事でも紹介した通り、Natural Languageの一部機能は日本語では十分な結果が得られない場合があります。
そのため、本記事では感情分析の特性を確認しやすくする目的で、英語の文章を用いて検証を行います。
まずは、人間が読んでも明確にネガティブと判断できる文章から確認します。
ネガティブな文章
画像内には以下の英文を記載しました。
I am extremely disappointed. Everything went wrong and I feel terrible.
(日本語訳:とても失望しています。すべてがうまくいかず、とてもつらい気持ちです。)

解析結果は -1.0 となりました。
「disappointed」「wrong」「terrible」といった強い否定表現が含まれており、人間の感覚としてもネガティブな内容です。そのため、感情分析の結果も直感に近いものとなりました。
続いて、明確にポジティブな文章を確認します。
ポジティブな文章
画像内には以下の英文を記載しました。
Today was wonderful. I achieved my goal and feel very happy.
(日本語訳:今日は素晴らしい一日でした。目標を達成できて、とても幸せな気持ちです。)

解析結果は1.0となりました。
こちらも「wonderful」「achieved」「happy」といったポジティブな表現が含まれており、人間の印象と解析結果が一致しています。
この段階では、Natural Languageの感情分析はかなり妥当な結果を返しているように見えます。
次に、文学作品の一節を用いて確認してみます。
文学作品の文章
引用元:L. M. Montgomery『Anne of Green Gables(赤毛のアン)』第1章
Mrs. Rachel Lynde lived just where the Avonlea main road dipped down into a little hollow, fringed with alders and ladies’ eardrops and traversed by a brook.
(日本語訳:レイチェル・リンド夫人は、アヴォンリーの大通りが小さなくぼ地へと下っていく場所に住んでいました。その周囲にはハンノキやフクシアが茂り、小川が流れていました。)

解析結果は-0.6となりました。
この文章は風景や人物の状況を説明する描写であり、人間が読んだ場合には特にネガティブな印象を受ける内容ではありません。しかし感情分析では比較的大きなマイナス値が返されています。
少なくともこの結果を見る限り、感情分析は文章全体の雰囲気や文学的な表現を理解して評価しているわけではなく、文章内の単語や文の特徴に強く影響されている可能性があると考えられます。
最後に、技術文書に近い文章でも確認してみます。
技術的な説明文
画像内には以下の英文を記載しました。
The system is stable and works as expected. No major problems have been reported.
(日本語訳:システムは安定して動作しており、期待通りの結果が得られています。重大な問題も報告されていません。)

解析結果は-0.8となりました。
人間が読むと比較的ポジティブな内容に見えます。システムは安定しており、大きな問題も発生していないため、むしろ良好な状態を報告している文章と言えます。
しかし感情分析では強いネガティブ判定となりました。
文章全体の意味を考えると違和感がありますが、「problems」という単語そのものに反応している可能性も考えられます。
Appleは評価基準の詳細を公開していないため、この結果になった理由を断定することはできません。しかし、人間が文脈全体を踏まえて意味を解釈するのに対し、Natural Languageの感情分析では異なる基準で評価される場合があることがうかがえます。
検証結果から分かったこと
一連の検証を通して、明確な感情表現を含む文章については、人間の感覚に近い結果が得られました。
一方で、文学作品の描写や技術的な説明文のように、感情そのものを直接表現していない文章では、人間の印象と大きく異なる評価になるケースが確認できました。
特に興味深かったのは、ネガティブな内容とは言い難い文章であっても、感情分析の結果が大きなマイナス値になる場合があったことです。
これらの検証結果を見る限り、Natural Languageの感情分析は「人間が感じる感情」をそのまま数値化しているわけではなく、学習済みモデルが文章の特徴から感情傾向を推定した結果を返していると考えるのが適切でしょう。
そのため、得られたスコアを絶対的な評価として扱うのではなく、あくまで文章を分析する際の一つの参考情報として利用することが欠かせません。
また、ここで使用した例文はいずれもOCRによって取得したテキストをそのまま解析しており、言語指定などの追加処理は行っていません。同じ文章であっても、前処理や入力方法、OSのバージョンなどによって結果が変化する可能性もあるため、用途に応じて十分な検証を行うことが望ましいでしょう。
なお、本記事で紹介した結果は、限られたテストケースを用いてNatural Languageの挙動を確認したものです。すべての文章に対して同様の傾向となることを示すものではありませんが、感情分析を利用する際の特性を理解する一例として参考になれば幸いです。
おわりに
本記事では、Natural Languageフレームワークの感情分析機能を利用し、さまざまな文章に対する評価結果を確認しました。
ポジティブ・ネガティブが明確な文章では期待通りの結果が得られる一方で、文学作品や技術文書では人間の感覚と異なる評価になるケースも確認できました。
感情分析は数行のコードで利用できる便利な機能ですが、その結果は人間の印象をそのまま表したものではなく、機械学習モデルによる推定結果です。そのため、得られたスコアだけで判断するのではなく、どのような場面で利用するのが適しているのかを理解した上で活用することが求められます。
検証ではOCRで取得した文章を対象としましたが、チャットメッセージの分類やレビュー分析、文章の傾向把握など、さまざまな用途への応用も考えられます。興味があれば、ぜひ身近な文章を使って試してみてください。思いがけない結果から、新たな発見が得られるかもしれません。
