1件のコメントから2つの製品に矢印が伸びている。別のコメントは、2人の評価者の表の横で、欠けている文脈の確認を待っている。
ラベルを付ける前に、対象と文脈を確認します。

データ収集の設定

生データの取得には、Actorと呼ばれるホスティング型のデータ収集プログラムを使います。Reddit Commentsスクレイパーで公開スレッドを取得できます。タスクのプリセットを変更し、既知のスレッドURLを1つ指定してください。投稿ごとのコメント数の上限は1〜500で設定し、デフォルト値は100です。この初回タスクでは、上限を3行にしてください。入力のpostUrlsには、既知の公開スレッドを1〜50件指定する必要があります。maxCommentsPerPostは投稿ごとに1〜500で指定でき、試行ではプリセット値の250を3に変更します。

各コメント行のフィールド名は、正確にはpostId、commentId、parentId、depth、body、status、unavailableFields、observedAtです。空白で区切った別名に置き換えず、正確な名前を保持してください。データセットのstatusはok、deleted、removedのいずれかだけです。実行や入力の状態が一部完了または失敗であることは、行のstatusとは別です。

実行の出力データには、commentsSaved、duplicatesSkipped、hiddenBranchesRemaining、completionReason、status、isComplete、inputResultsが含まれます。入力ごとのフィールドには、commentsFound、commentsSaved、status、reasonが含まれます。現在の試行で本文が存在する3件のIDは、parentIdとdepthがnullで、hiddenBranchesRemainingもnullです。また、処理フラグがisComplete=trueでも、全体または入力ごとの結果はpartialです。これは、文脈がすべてそろっている証拠でも、分類器の品質を示す証拠でもありません。対応する返信元が必要な場合は、許可された範囲で公開情報を手動確認するか、文脈を不明のままにしてください。隣接する行を返信元だと推測してはいけません。

対象とラベルの定義

本文を読む前に、対象の集合とラベル付けの単位を定義してください。ここでの1単位は、コメントと対象の組み合わせです。コメント1件や人1人を単位にはしません。次の5つのラベルを、わかりやすいルールで定めます。

  • 肯定的:支持や好意を示している。
  • 否定的:不支持や不満を示している。
  • 中立:態度を示さず、事実を述べている。
  • 混在:肯定的な見方と否定的な見方の両方を示している。
  • 不確実:対象または態度が明確でない。

対象とは、その文章が言及している具体的な人物、製品、方針、行動です。

コメントを分析する8つの手順

  1. 読む前に、調査の問い、対象の集合、ラベル付けの単位を定義します。
  2. ソースの行と出力データを保存します。コメントの識別情報、本文、状態、欠損データを保持してください。元のフィールドに推測した感情を書き込まず、作業用のラベル表を作ります。
  3. 対応する返信元を確認できる場合は、その文脈を読みます。対象を明示した表現と代名詞を探してください。代名詞が何を指すかを確実に判断できない場合は、対象と文脈を不確実のままにします。皮肉は見直しが必要な理由として扱い、自動的に否定的なラベルを付けないでください。
  4. 複数の対象に言及する文を分けます。1件のコメントが、速度を評価する一方で料金変更に不満を示すこともあります。すべてに共通する好みを割り当てないでください。
  5. コメントID、対象、根拠となる箇所、文脈の参照元、ラベル、理由を保存します。他者からの引用と、投稿者自身の態度を分けてください。文脈を確認せずに、質問を苦情と分類してはいけません。
  6. 共通の小規模な部分集合を、2人目の読者にも分類してもらいます。単純一致率を記録し、どのルールで判断が分かれたかを書き留めてください。妥当性を説明できる参照基準がなければ、高精度だと主張してはいけません。ルールを改善し、影響する事例のラベルを付け直します。
  7. コメントと対象の組み合わせの件数と、重複を除いたコメントIDの件数を分けて報告します。複数の対象を含むコメントでは、コメント数よりラベル行数が多くなります。不確実なラベルと取得できない本文は、判定できたものを数える分母から除外し、別途確認できるように残してください。
  8. 対象別の態度を示す表、分類基準をまとめたコードブック、判断の不一致に関するメモを成果物にします。これにより、内容を点検できるデータセットが整います。このデータセットから、製品開発の優先順位、代表性のある意見、自動返信の実行内容が得られるわけではありません。

この例の文章とIDはすべて架空です。返信元の文脈Pでは、製品Aの新しい月額料金と、製品Bの利用開始時の使い方の習得について質問しているとします。

コメントを分析する8つの手順
commentID対応する文脈の参照元対象ソースの該当箇所の正確な引用ラベル理由
C1文脈P製品A「Aは今でも気に入っている」肯定的製品Aへの肯定的な態度を示している
C1文脈P料金変更(A)「新しい料金はよくない」否定的料金変更への否定的な態度を示している
C2文脈P利用開始時の使い方の習得(B)「Bは使い方を覚えやすかった」肯定的利用開始時に使い方を習得しやすい点を評価している
C2文脈P速度(A)「私たちのチームではAの方が速かった」肯定的自分たちのチームという条件付きで速度を評価している
C3文脈P(確認済み)値上げ「すばらしいね、また値上げか」否定的返信元Pから、皮肉を込めた不満だと確認できる
C4不明不明「それはオフラインで使えますか?」不確実返信元の文脈がないため、対象を特定できない

C5は本文の状態がremovedであるため、感情の表には含めません。感情ラベルを付けず、本文の取得可否を示す記録として別に残します。

架空の具体例を順に分析する

コメントC1は「Aは今でも気に入っているけれど、新しい料金はよくない」と述べています。これは2単位になります。製品Aについては肯定的です。Aの料金変更については否定的です。製品A全体に、ひとまとめの否定的な態度を割り当てないでください。

コメントC2は「Bは使い方を覚えやすかった。私たちのチームではAの方が速かった」と述べています。Bの利用開始時の使い方の習得については肯定的、Aの速度についても肯定的ですが、後者には自分たちのチームという条件があります。総合的にどちらが優れているかは述べていません。

コメントC3は「すばらしいね、また値上げか」と述べています。この対象である料金変更を数えるのは、返信元の文脈Pを確認できた場合だけです。手動で確認してから、否定的または皮肉のラベルを付けます。確認できなければ、不確実のままにしてください。

コメントC4は「それはオフラインで使えますか?」と述べています。返信元の文脈がないため、代名詞が何を指すかわかりません。対象が不明なので、不確実とラベル付けします。質問を、オフライン利用に関する否定的な意見に変えてはいけません。

コメントC5は本文が削除されているため、分析しません。表には本文の取得可否と元の位置を示す記録を残してください。

C3の返信元を確認できた場合、ラベル表には、本文を取得できる4件のコメントから6件のコメントと対象の組み合わせが入ります。内訳は、C1が2件、C2が2件、C3が1件、C4が1件です。

判定できた単位は合計5件です。肯定的なのは、C1のA、C2のB、C2のAの3件です。否定的なのは、C1の料金とC3の料金の2件です。C4の1件は不確実です。

肯定的な割合は3を5で割った60%で、判定できた対象単位だけを分母とした値です。コメント投稿者やコミュニティの意見の60%という意味ではありません。観測した記録は5件あり、本文を取得できるコメントは4件です。本文が削除されたC5は、感情分析の対象外です。

分類の一致度と限界

架空の分類担当者2人が、判定できた5単位にラベルを付けます。初回の判断は5件中4件で一致し、一致率は80%です。C3で判断が分かれたのは、皮肉と文脈に関する点です。2人は実際の返信元の条件を確認し、ルールに合意します。これによって、一般的な精度が80%だと証明されるわけではありません。C3の返信元が欠けている場合は、不確実のままにする必要があります。判定できた単位の分母は4に減ります。隣接する行を根拠に、返信元を確認できたことにしてはいけません。

最終成果物には、ソースの参照先と各対象を個別に示し、C4とC5は不明・取得不可の記録表に残します。話題の出現頻度や機能の優先順位の表は提供しません。実際の議論にも、同様のコミュニティのパターンが見られます。背景をさらに知るには、実際の感情分析プロジェクトに関する議論を確認できます。

出典と参考資料

著者 Chronometrica · 更新日

ページの先頭へ ↑