アルゴリズムの開示

ふつうのニュースアプリでは、何がどんな理由で表示されているかは公開されません。 OwnNewsは「推薦の主導権をユーザーに」を掲げる研究プロジェクトとして、 使っているアルゴリズムを実装値そのままに公開します。

全体像

サーバー側(共通データの準備だけ)あなたの端末の中(学習・推薦はここ)境界CEEK.JP NEWSRSS(見出し・抜粋)1日5回 収集記事データベース共有・個人情報なしAI解析埋め込み+栄養素記事パック直近800件+匿名集計研究用の観測利用者数・バブルの形などの集計のみCDN配信記事パック受信端末にキャッシュ閲覧行動閲覧時間・スクロール等学習率α関心ベクトル1024次元・あなた専用コサイン類似度全記事×関心ベクトルあなたのバブル類似度 0.65 以上世間の窓他の人の注目順同期(本人のみ)アカウント保管庫ベクトル・履歴

サーバー側の仕事は「全員に共通の記事データを準備して配る」ところまで。 あなたの関心の学習と推薦の計算は、すべて端末の中で行われます。 アカウント保管庫に同期されるのは端末間で引き継ぐためのデータで、本人以外は読めません。

1. 記事の収集と解析

  • 記事はニュース検索サイト CEEK.JP NEWS のRSSから 1日5回収集します(見出し・短い抜粋・リンクのみ。本文は収集しません)。
  • 各記事は多言語埋め込みモデル BGE-M31024次元のベクトルに変換されます。 意味が近い記事ほど、ベクトルの向きが近くなります。
  • AI(gpt-oss-120b等のオープンな大規模言語モデル)が各記事に「栄養素」5指標(事実・背景・視点・感情・速報、各0〜100)と中分類・キーワードを付与します。
  • 直近800記事をひとつの「記事パック」にまとめ、 全ユーザー共通のデータとして配信します。パックには記事ごとの 匿名の閲覧数・リアクション集計も焼き込まれます。
  • 記事データベースに保持するのは直近30日分のみです。 それより古い記事の見出し・解析結果は研究用アーカイブに移し、 データベースからは削除します(記事の原本は各報道機関・CEEK.JP NEWSにあります)。

2. あなたの関心の学習(端末内)

あなたの関心は、記事と同じ1024次元の「関心ベクトル」1本で表現されます。 記事を読むたびに、指数移動平均で少しずつ更新されます:

v ← normalize( (1−α)·v + α·e )   … 読んだ記事の方向へ α だけ近づく
v ← normalize( v − 0.15·e )       … 「興味なし」の記事から遠ざかる

v = あなたの関心ベクトル / e = 記事のベクトル / α = 学習率

学習率αはどれだけ真剣に読んだかで決まります。 開いただけ(5秒未満)では学習しません:

行動学習率 α
開いてすぐ閉じた(5秒未満)0(学習しない)
ざっと見た(5〜15秒)0.06
読んだ(15〜40秒)0.12
じっくり読んだ(40〜120秒)0.20
熟読(120秒以上)0.25
+最後までスクロール+0.05(上限0.3)
AIで深掘り(外部AIに質問)した0.25
ストックした0.15
興味なし(×・左スワイプ)−0.15(遠ざかる)

この計算はすべてあなたのブラウザの中で行われます。 サーバーは学習済みベクトルを端末間同期のために保存するだけで、サーバー側で推薦を計算することはありません。

3. フィードの組み立て

  • 全記事と関心ベクトルのコサイン類似度を端末内で計算します。
  • あなたのバブル: 類似度が 0.65以上の記事を類似度順に最大15件。 類似度0.88以上の記事同士は「同じ話題」として1枚のカードにまとめます(複数紙の報道の集約)。
  • バブルの外(いろいろなニュース): 類似度0.65未満の記事を、「世間の窓」スコア = 閲覧数 + リアクション数×3の高い順に並べ、さらに全ジャンルから1件ずつ交互に取り出して偏りをなくします(あなた以外の人がよく読み・反応している記事が、ジャンル均等に並ぶ)。
  • 「視野の広さ」スライダー(0.1刻み11段階)は、バブルの外の初期表示量を変えます。 どこまでも下にスクロールすれば、設定に関わらず全記事に辿り着けます。
  • 閲覧済み・「興味なし」にした記事はフィードから消えます。
  • ウォッチタグ(📌): 記事のキーワードをタップして購読すると、 そのタグを含む記事がトップの専用枠に必ず表示されます(もう一度タップで解除)。 「確実に見たい」の明示的な表明であり、関心ベクトルの学習には使いません。 購読・解除の履歴は「関心の変遷」としてあなたのアカウントに記録されます(本人のみ閲覧可)。
  • キーワード検索: サイドバーの検索は、端末にキャッシュ済みの 記事パックをその場で全文一致検索します(検索語はサーバーに送信されません)。 検索した回数だけは匿名の利用統計として記録します(検索語そのものは送信・記録されません)。 検索したキーワードはそのままウォッチタグとして購読できます。
  • 話題のキーワード: TF-IDFと同じ発想で、リフト(直近24時間の出現率 ÷ それ以前の平常時の出現率)× 注目度(その語を含む記事の閲覧数・リアクション、対数)で選びます。 訃報や株価のように毎日一定量出る語はリフト≒1倍になるため、2倍未満は除外します (「今日特有」かつ「みんなが読んでいる」言葉だけが残る)。 ランキングではないため、表示順は毎回シャッフルされます。この計算も端末内で行います。
  • トピック別ビュー: ジャンルごとのセクション表示。 偏食予防のため、セクションの並び順は訪問ごとにシャッフルされ、 各セクションの1枠は注目順の上位圏外からランダムに選ばれます(🎲印のセレンディピティ枠)。

4. あえて推薦に使っていないもの

  • リアクション(賛成・反対など)は推薦に使いません。反対した記事を減らすと「同意できる記事だけが並ぶ」意見のバブルを作ってしまうためです。 リアクションは集計の可視化にだけ使います。
  • 「もっと知る」でX・はてなブックマークを開いた記録は推薦学習に使いません。どの記事でSNSの反応を見に行ったか(開いた事実)は端末とアカウントに記録されますが、 AIで深掘りしたとき(deep_dive)とは別扱いで、関心ベクトルの学習には反映しません。 運営が観測するのは「もっと知る」を使った匿名の回数だけです。
  • 広告・スポンサー枠・「おすすめの押し付け」はありません。表示順を金銭で変える仕組みは存在しません。

5. 情報的健康の指標

  • 多様性スコア: 閲覧履歴のジャンル分布の シャノンエントロピーを0〜100に正規化したもの。全ジャンルを均等に読むと100、 1ジャンルだけだと0に近づきます。
  • 栄養バランス: 読んだ記事の栄養素5指標の平均。 「事実ばかりで視点が足りない」といった偏りが見えます。
  • 意見バランス: 自分が押した賛成と反対の比率。 賛成一色なら「同意できる記事だけを読んでいる」サインです。

6. データの置き場所

データ場所誰が見られるか
記事パック(全記事・共通)CDN配信+端末キャッシュ全員(個人情報なし)
関心ベクトル・閲覧履歴・設定端末内+アカウント同期本人のみ(アクセス制御)
リアクションアカウント同期本人+匿名の件数集計のみ公開
推薦の計算あなたのブラウザ内—(サーバーでは計算しない)

運営(研究)が観測するのは、利用者数・閲覧状況・フィルタ強度の分布・バブルの形といった研究のための集計です。詳しくはこのサービスについて をご覧ください。

このページの数値はすべて実装と同じ値です。アルゴリズムを変更した場合はこのページも更新します。 ソースコードは公開リポジトリで確認できます。