論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
知的財産権
Intellectual Property Rights
倫理

🔖 キーワード索引

「知的財産権」を取り巻く中核キーワード群です。 検索やインデックス作成で参照する際の手がかりにしてください。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になります。

知的財産権著作権特許商標ライセンスAI著作物学習データフェアユース

これらのキーワードは「知的財産権の理解 → 適用 → 検証」のプロセスを構成します。 各章で詳しく解説します。

💡 30秒で分かる結論 — 知的財産権

🍰 まずはやさしく

アイデアを守るためのルールです。

作った人の権利を保護するために使います。

スマホのアプリや音楽などが例です。

AIと権利の関係について読みます。

最も忙しい読者のために、 まず結論だけまとめます。 詳細は以下のセクションへ:

📍 文脈 — どこで出会うか

🍰 まずはやさしく

作品の持ち主を決めるルールです。

誰が権利を持つかをはっきりさせます。

AIで描いた絵の権利などが例です。

このページをどう読むかを確認します。

Stable Diffusion で絵を生成、 ChatGPT に小説を書かせる — その絵や小説の著作権は誰のもの? 学習に使われた既存作品の権利はどう守られる? 各国法制が 急ピッチで整備中。

このページの読み方:まず 30秒結論 と 直感 を読み、 必要に応じて 数式 や 計算例、 落とし穴 に進んでください。

🎨 直感で掴む

🍰 まずはやさしく

アイデアの境界線のようなものです。

どこまでが自由かを知るために使います。

好きな絵師さんの真似などが例です。

図を使って権利の流れを読みます。

例で考えてみましょう:

🎨 概念図で押さえる

知的財産権の核心を 3 つの図で押さえる。 ① 知的財産権の体系 (産業財産権 vs 著作権)、 ② 権利の効力範囲と存続期間、 ③ データ・AI 時代の権利フロー。

知的財産権の体系
図 A: 知的財産権の体系 — 産業財産権は出願・登録で生じ、 著作権は創作と同時に発生する。
権利の効力範囲と存続期間
図 B: 権利の存続期間 — 産業財産権は短く、 著作権は死後 70 年と長い。 商標は更新可能。
データ・AI 時代の権利フロー
図 C: AI 時代の権利フロー — 元データの権利、 学習用利用 (30 条の 4)、 学習済モデル、 生成物の利用ルールの 4 段階で考える。

図のまとめ: 知的財産権は産業財産権 (出願) と著作権 (創作) の 2 系統に大別され、 存続期間は数年〜70 年と異なる。 AI 時代は元データ→学習→モデル→生成物の各段階で権利を切り分ける必要がある。

📐 定義 — 知的財産権とは

🍰 まずはやさしく

頭で考えた成果を守る権利です。

独占して使えるようにするために使います。

発明した道具やロゴのデザインが例です。

権利の種類と詳しい定義を読みます。

知的財産権は法律・制度上の概念であり、 単一の数式で定義できるものではありません。 まずは言葉による定義を押さえます。

定義
知的財産権(Intellectual Property Rights)とは、 人間の知的創作活動から生まれた無形の成果物(著作物・発明・意匠・商標など)に対して、 創作者・権利者に一定期間の独占的な利用権を認める権利の総称である。

知的財産権は大きく、 創作と同時に自動発生する 著作権 と、 出願・登録によって発生する 産業財産権(特許・実用新案・意匠・商標)に分かれ、 このほか営業秘密(不正競争防止法)なども含まれます。 定量的に扱えるのは権利そのものではなく、 「保護期間」「侵害判定のための類似度」「AI 学習データの再現率」といった周辺的な指標です。 次節では、 それらを式で確認します(いずれも権利の定義ではなく、 権利を運用・評価するための計算である点に注意してください)。

権利ごとの「いつまで」と「どこまで」

知的財産権はひとつの権利ではなく、目的の違う権利の束です。 保護される対象・期間・取得のしかたが全部違うので、混同すると判断を誤ります。

権利 守るもの 取得 期間の目安
著作権表現(文章・画像・コード)創作した時点で自動的に発生著作者の死後 70 年
特許権技術的なアイデア出願・審査を経て登録出願から 20 年
商標権商品・サービスの目印出願・審査を経て登録10 年(更新できる)
意匠権見た目のデザイン出願・審査を経て登録出願から 25 年
営業秘密秘密として管理された情報登録不要(管理が要件)秘密である限り

分析者に関係が深いのは著作権と営業秘密です。 著作権は手続きなしで自動的に発生するので、「登録されていないから自由」は成り立ちません。 一方、営業秘密は秘密として管理していることが要件なので、 社内で誰でも見られる状態に置いた時点で保護を失うことがあります。 分析基盤のアクセス権設計が、そのまま法的な保護の有無に効いてくるわけです。

なおアイデアや事実そのものには著作権が及びません。 「気温が高い県ほど消費支出が多い」という発見は誰のものでもなく、自由に述べてよい。 守られるのは、それをどう書いたか・どう図にしたかという表現の側です。 分析結果を引用するときは、数値や知見は自由に使えても、 文章や図をそのまま持ってくると複製になる、と切り分けて考えてください。

🔬 記号・要素の読み解き

著作権 (Copyright)
創作物への自動発生する権利。 表現を保護(アイデアは保護せず)。 死後 70 年。
特許 (Patent)
新規・進歩性のある発明に申請して付与。 20 年。 アルゴリズムの一部は対象。
商標 (Trademark)
ブランド名・ロゴを保護。 更新可能。
意匠 (Design)
デザインを保護。 25 年。
営業秘密 (Trade Secret)
非公開で経済価値があれば秘密管理で保護。 期間無制限だが秘密維持必須。
ライセンス
権利を持つ人が他者に利用許諾する契約。 CC, GPL, MIT 等。

🔬 数式を言葉で読み解く

知的財産権を「数学的に」 捉えるのは奇妙に聞こえますが、 実は法定の 保護期間・侵害判定・類似度はすべて数式や計算で表現できます。 ここでは AI 文脈で頻出する 3 種類の式を、 一語ずつ解きほぐします。

① 著作権の保護期間(日本・米国・EU)

日本(著作権法 51 条)
$$T_{\text{JP}} = \text{死亡年} + 70 \text{ 年}$$
2018 年改正で「死亡 + 50 年」から「死亡 + 70 年」に延長(TPP11 整合)。 法人著作物は公表後 70 年、 映画は公表後 70 年。 旧法時代に切れた作品は復活しない(不遡及)。
米国(17 U.S.C. §302)
$$T_{\text{US}} = \text{死亡年} + 70 \text{ 年 (個人)},\quad T_{\text{US,corp}} = \min(\text{公表} + 95, \text{創作} + 120) \text{ 年}$$
1998 年 Sonny Bono 法(ミッキーマウス法)で延長。 2024 年 1 月 1 日に Steamboat Willie(1928)が PD 入り。
EU(指令 2006/116/EC)
$$T_{\text{EU}} = \text{死亡年} + 70 \text{ 年}$$
EU 全 27 カ国で統一。 「太陽の沈まない著作権」と批判されることも。

② 著作物の類似度(侵害判定の代理指標)

テキスト類似度(n-gram 一致率)
$$S_{\text{ngram}}(A, B) = \frac{|N(A) \cap N(B)|}{|N(A) \cup N(B)|}$$
$N(\cdot)$ は文書の n-gram 集合。 米国 NYT vs OpenAI 訴訟では「ChatGPT が NYT 記事を逐語的に再生」できることが争点で、 5-gram 一致率が 90% 超の例が証拠提出されました。

③ AI 学習データの「リーク率」

学習データ再現率(memorization rate)
$$M = \frac{|\{x \in D_{\text{train}} : \text{LLM}(x_{\text{prefix}}) = x_{\text{full}}\}|}{|D_{\text{train}}|}$$
Carlini et al. (2022) は GPT-2 の $M \approx 0.85\%$ を報告。 これが「学習データが生成物に漏れる」根拠で、 各国の権利者がリーク率の開示を求めている。

SSDSE-B-2026 で考える「公的データの利用条件」

本リポジトリで使う data/raw/SSDSE-B-2026.csv はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際)で配布されています。 つまり:

たとえば SSDSE-B-2026 から「都道府県別人口ランキング」を作って書籍化・有償講座化することは合法ですが、 出典明記を怠ると CC BY 違反になります。

🏭 産業界での活用事例(6 件)

業界事例知財ポイントSSDSE-B-2026 との対比
生成 AI(OpenAI)GPT-4 学習に Web スクレイピングデータNYT 訴訟(2023〜)で逐語再生が問題化SSDSE-B は CC BY なので学習・商用利用可
画像生成(Stability AI)LAION-5B でモデル学習Getty Images 訴訟、 アーティスト集団訴訟SSDSE-B の表データには肖像権問題なし
翻訳(DeepL)EU 多言語コーパスで学習EU AI Act でデータ出所開示義務SSDSE-B はソースコード公開不要
音楽(Suno AI)楽曲生成モデルRIAA から訴訟(2024)、 著作隣接権が論点統計データには隣接権なし、 自由再利用可
政府(e-Stat)公的統計の API 公開政府標準利用規約 2.0(CC BY 4.0 互換)SSDSE-B-2026 もこの枠組みで配布
教材出版SSDSE-B を題材にした教科書執筆表データそのものに著作権なし、 ただし編集著作物として保護される場合ありこのページの 47 都道府県分析も自由再利用可(出典記載)

⚖️ 関連ライセンス・権利の比較表

ライセンス/権利商用利用改変出典表示派生物のライセンス継承SSDSE-B との関係
CC0(パブリックドメイン宣言)◯◯不要不要SSDSE-B より緩い
CC BY 4.0◯◯必須不要SSDSE-B-2026 はこれ
CC BY-SA◯◯必須同じ SA で再配布Wikipedia 本文
CC BY-NC×◯必須NC 継承研究用データに多い
MIT License◯◯必須不要scikit-learn など
GPL v3◯◯必須GPL 継承(強い copyleft)Linux カーネルなど
Apache 2.0◯◯必須不要TensorFlow など
政府標準利用規約 2.0◯◯必須不要e-Stat 全般、 CC BY 互換
営業秘密×(無断)×——レシピ・顧客リスト等
特許×(無断)×(無断)——新規アルゴリズムの一部

💥 失敗例から学ぶ

💥 SSDSE-B-2026 を出典明記せず教材化
CC BY 4.0 違反。 「東京都 14,086,000 人」「神奈川県 9,229,000 人」と書いた瞬間に出典記載義務が発生。 出版差し止め・賠償リスク。
💥 GitHub の MIT ライセンスコードを社内クローズドに転用
MIT は商用可だが、 ライセンス・著作権表示の保持義務あり。 削除すると違反。
💥 GPL コードを商用クローズド製品に同梱
GPL は強い copyleft。 リンクしただけで自社コードも GPL になる可能性。 ライセンス互換性チェックは必須。
💥 「自分で書いた」つもりで Stack Overflow からコピペ
Stack Overflow は CC BY-SA 4.0。 商用利用は出典+SA 継承が必要。
💥 AI 生成物の単独著作権を主張
日本・米国・EU の現在の解釈では、 AI 単独生成物は人間の創作的寄与がない限り著作権発生しない。

📝 演習問題(5 問・解答付き)

  1. 問題:SSDSE-B-2026 を Pandas で読み込み、 出典明記文を Markdown で出力するスクリプトを書け。
    ▼ 解答を見る
    📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 Prefecture(都道府県) A1101(総人口) 北海道 北海道 5,092,000 東京都 東京都 14,086,000 沖縄県 沖縄県 1,468,000 …(全 47 行)
    1
    2
    3
    4
    5
    import pandas as pd
    df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)   # 日本語の列名で読む(2 行目を見出しにする)
    d23 = df[df['年度'] == 2023]   # 47 都道府県 × 12 年度のうち 2023 年度だけ使う
    print(f"# 分析結果(2023 年度・{len(d23)} 都道府県)\n\n出典:独立行政法人統計センター. SSDSE-B-2026 ({len(df)} 行 × {len(df.columns)} 列) CC BY 4.0\n")
    print(d23[['都道府県', '総人口']].head().to_markdown(index=False))
    
    📤 実行例(実測) # 分析結果(2023 年度・47 都道府県) 出典:独立行政法人統計センター. SSDSE-B-2026 (564 行 × 112 列) CC BY 4.0 | 都道府県 | 総人口 | |:-----------|---------:| | 北海道 | 5092000 | | 青森県 | 1184000 | | 岩手県 | 1163000 | | 宮城県 | 2264000 | | 秋田県 | 914000 |

    💬 564 行 × 112 列というのはファイル全体の大きさで、表に載せた 5 行は 2023 年度に絞った 47 都道府県の先頭(北海道 509.2 万人、宮城県 226.4 万人など)。出典表記には「どの年度・どの列を使ったか」も書いておくと、他の人が同じ数値を再現できる。CC BY 4.0 は表示さえ守れば改変・商用利用も可能だが、表示が欠けると利用条件を満たさない。

  2. 問題:東京都 14,086,000 人という値を引用する場合、 何を表記すべきか?
    ▼ 解答を見る
    「独立行政法人統計センター(2024). SSDSE-B-2026, 2023 年データ, CC BY 4.0」。 数値そのものは「事実」で著作権はないが、 編集著作物として CC BY 4.0 適用。
  3. 問題:SSDSE-B-2026 を学習データに使った AI モデルを公開する場合、 ライセンス的に必要な記載は?
    ▼ 解答を見る
    日本著作権法 30 条の 4 により情報解析目的の学習は合法、 ただし AI モデルの README に学習データ出典として SSDSE-B-2026 を明記すれば CC BY も満たす。 EU AI Act 配下では別途データ出所開示が必要。
  4. 問題:あるアーティストの作風を学習した画像生成 AI を商用展開する際の法的論点は?
    ▼ 解答を見る
    日本:30 条の 4 で学習は合法。 ただし「享受目的」の生成は問題。 米国:フェアユース判断、 Andersen v. Stability AI 係争中。 EU:AI Act でオプトアウト権あり。
  5. 問題:「47 都道府県の人口 × 出生数 散布図」を作って論文に載せる。 SSDSE-B-2026 のライセンス上、 何を遵守すべきか。
    ▼ 解答を見る
    CC BY 4.0 は「出典明記」のみ要求。 図キャプション or 注釈に「出典:SSDSE-B-2026, CC BY 4.0」を入れれば OK。 派生物の再ライセンスは自由。

📖 関連用語辞典(10 語)

著作権(Copyright)
創作物の表現に自動発生。 死後 70 年保護。
著作隣接権
実演家・レコード製作者・放送事業者の権利。
特許(Patent)
新規・進歩性のある発明を出願・審査で取得。 20 年。
商標(Trademark)
ブランド名・ロゴを保護。 10 年ごとに更新。
意匠(Design)
プロダクトデザインを保護。 25 年。
クリエイティブ・コモンズ (CC)
著作物の利用条件を標準化したライセンス群。 CC0 / BY / SA / NC / ND の組合せ。
フェアユース
米国著作権法の例外規定。 4 要素テストで判断。
著作権法 30 条の 4(日本)
情報解析目的の利用を広く許容。 2018 年改正で AI 学習が原則合法に。
EU AI Act
2024 年成立。 高リスク AI の規制と学習データ出所開示。
SPDX
ソフトウェアパッケージのライセンス識別子標準(例:MIT, Apache-2.0)。

🧮 実値で計算してみる

AI 関連の代表的判例・係争(2024 年時点):

国争点状況
米国NYT vs OpenAI(学習データ)係争中
米国Getty vs Stable Diffusion係争中
米国AI 生成画像の著作権著作権局が原則否定
日本情報解析目的の学習30 条の 4 で広く許容
EU学習データ開示義務AI Act で要求

🧮 数式に値を入れて手で計算する: 特許権の存続期間

合成データで複数特許の残存期間を計算する (特許権は出願から 20 年)。

Step 1: 特許別データ

特許出願年満了年2026 残
P1201020304
P2201520359
P32020204014
P42025204519

Step 2: 平均残存年数

合計残 = 4+9+14+19 = 46 平均 = 46/4 = 11.5 年

🐍 Python で再現

1
2
3
4
5
6
7
import numpy as np
filed = np.array([2010, 2015, 2020, 2025])
expire = filed + 20
current = 2026
remain = expire - current
print(f"残存年: {remain}")
print(f"平均: {remain.mean()}")

📤 実行結果

残存年: [ 4 9 14 19] 平均: 11.5

💬 手計算 (Step 2) 11.5 年と Python 出力が完全一致。

🧮 計算 A: 著作権の保護期間を「日付」で求める — 暦年主義と改正の不遡及

🔬 の式 $T_{\text{JP}} = \text{死亡年} + 70$ は「何年まで」を表しますが、実務では「何年何月何日まで守られ、いつから自由に使えるか」を日付で答える必要があります。日本の著作権法には、この計算を左右する決まりが 2 つあります。

Step内容(2 人の著作者を比べる。どちらも架空の例)著作者 P(1967 年 12 月 20 日死亡)著作者 Q(1968 年 1 月 10 日死亡)
1起算日 = 死亡の翌年の 1 月 1 日1968-01-011969-01-01
2旧ルール(死後 50 年)での満了日 = 死亡年 + 50 年の 12 月 31 日2017-12-312018-12-31
3改正の施行日 2018-12-30 に、まだ保護されていたかいいえ(約 1 年前に満了)はい(旧ルールの満了日の前日)
4最終的な満了日2017-12-31 のまま死亡年 + 70 年 = 2038-12-31
5自由に使える最初の日2018-01-012039-01-01

死亡日の差はわずか 21 日ですが、自由に使えるようになる日は 21 年違います。同じ考え方は映画にも現れます。映画の保護期間を公表後 50 年から 70 年に延ばした改正は 2004 年 1 月 1 日施行で、1953 年に公表された映画は旧ルールで 2003 年 12 月 31 日に満了していたため延長の対象外、と最高裁が判断しています(2007 年、いわゆる「シェーン事件」)。この計算を関数にして、いくつかの場合を一度に確かめます。

🎯 このコードでやること:死亡日(または公表日)と種類(個人・団体名義・映画)から、日本の著作権法の暦年主義と 2 つの延長改正(2004 年の映画、2018 年の個人・団体名義)の不遡及を反映した満了日と「自由に使える最初の日」を返す関数を書き、上の手計算の 2 人を含む 6 つの架空の例に当てる。

📥 入力例 架空の例(実在の著作者・作品ではない) 種類 基準日(死亡日 / 公表日) 個人 1967-12-20, 1968-01-10, 1990-06-01 団体名義 1970-04-01(公表日) 映画 1953-09-01, 1954-03-01(公表日)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from datetime import date

def jp_copyright_end(base: date, kind: str) -> date:
    """日本の著作権の満了日(暦年主義・延長改正の不遡及を反映した簡易版)"""
    y = base.year                                   # 翌年 1 月 1 日起算 → 満了は y + N 年の 12/31
    if kind == "映画":
        old, new, reform = 50, 70, date(2004, 1, 1)
    else:                                           # 個人(死後)・団体名義(公表後)
        old, new, reform = 50, 70, date(2018, 12, 30)
    old_end = date(y + old, 12, 31)
    return old_end if old_end < reform else date(y + new, 12, 31)   # 施行日に切れていれば延長なし

cases = [("個人 P", date(1967, 12, 20), "個人"), ("個人 Q", date(1968, 1, 10), "個人"),
         ("個人 R", date(1990, 6, 1), "個人"), ("団体 S", date(1970, 4, 1), "団体名義"),
         ("映画 T", date(1953, 9, 1), "映画"), ("映画 U", date(1954, 3, 1), "映画")]
for name, base, kind in cases:
    end = jp_copyright_end(base, kind)
    print(f"{name}: 基準日 {base}  満了 {end}  自由に使える最初の日 {date(end.year + 1, 1, 1)}")
📤 実行例(実測) 個人 P: 基準日 1967-12-20 満了 2017-12-31 自由に使える最初の日 2018-01-01 個人 Q: 基準日 1968-01-10 満了 2038-12-31 自由に使える最初の日 2039-01-01 個人 R: 基準日 1990-06-01 満了 2060-12-31 自由に使える最初の日 2061-01-01 団体 S: 基準日 1970-04-01 満了 2040-12-31 自由に使える最初の日 2041-01-01 映画 T: 基準日 1953-09-01 満了 2003-12-31 自由に使える最初の日 2004-01-01 映画 U: 基準日 1954-03-01 満了 2024-12-31 自由に使える最初の日 2025-01-01

💬 手計算の 2 人は、P が 2017-12-31 満了(2018-01-01 から自由)、Q が 2038-12-31 満了(2039-01-01 から自由)で一致します。1953 年公表の映画 T は 2003-12-31 で満了したまま、1 年遅い 1954 年公表の映画 U は延長されて 2024-12-31 まで守られました。団体名義 S(1970 年公表)は旧ルールなら 2020 年末に満了するはずでしたが、2018 年の施行日にまだ保護中だったので 2040-12-31 まで延びています。関数は日本法の基本だけを入れた簡易版で、外国の古い作品に加算される期間(戦時加算)や、著作者が複数いる場合(最後に亡くなった人を基準にする)は入っていません。実際に利用するかどうかの判断は、必ず原典や専門家で確かめます。

🧮 計算 B: 「似ている」を数える — n-gram 一致率の読み方と限界

🔬 ② の n-gram 一致率(Jaccard 係数)は、文章がどれだけ同じ文字列を共有しているかを 0〜1 で表します。日本語は単語の区切りに空白が無いので、ここでは 3 文字ずつずらして切り出した「文字 3-gram」を使います。ある分析メモ(元の文)に対して、(a) そのままの複写、(b) 語尾や順序を少し変えた改変、(c) 同じ内容を自分の言葉で書き直した要約、(d) 同じ SSDSE の数値を別の人が独立に書いた文、の 4 つを作って一致率を測ります。すべて説明のために作った文です。

手計算の例: 「総人口は」と「総人口が」の 3-gram はそれぞれ {総人口, 人口は} と {総人口, 人口が} で、共通部分は {総人口} の 1 個、和集合は 3 個なので、一致率は 1/3 = 0.333 です。

🎯 このコードでやること:元の文と 4 つの比較文について文字 3-gram の集合を作り、Jaccard 一致率と、元の文の 3-gram のうち比較文に含まれる割合(包含率)を計算する。手計算の「総人口は/総人口が」も同じ関数で確かめる。

📥 入力例 元の文(説明のために作った分析メモ) 「2023年度の東京都の総人口は1408万6千人で、全国の11.3%を占める。 人口の集中は出生率の低さと裏表の関係にあり、地方からの転入が支えている。」
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def ngrams(text, n=3):
    t = text.replace(" ", "").replace("\n", "")
    return {t[i:i + n] for i in range(len(t) - n + 1)}

def jaccard(a, b, n=3):
    A, B = ngrams(a, n), ngrams(b, n)
    return len(A & B) / len(A | B)

def containment(a, b, n=3):          # a の n-gram のうち b にもあるものの割合
    A, B = ngrams(a, n), ngrams(b, n)
    return len(A & B) / len(A)

print("手計算の例:", round(jaccard("総人口は", "総人口が"), 3))
orig = ("2023年度の東京都の総人口は1408万6千人で、全国の11.3%を占める。"
        "人口の集中は出生率の低さと裏表の関係にあり、地方からの転入が支えている。")
others = {
    "(a) 複写": orig,
    "(b) 小さな改変": ("2023年度、東京都の総人口は1408万6千人であり、全国の11.3%を占めている。"
                   "人口の集中は出生率の低さと表裏の関係にあって、地方からの転入に支えられている。"),
    "(c) 書き直し": ("東京には国民のおよそ9人に1人が住む。一方で子どもの生まれる割合は低く、"
                  "人の数を保っているのは他県から移ってくる人たちだ。"),
    "(d) 同じ事実を別の人が": ("SSDSE-B-2026によると、2023年度の東京都の総人口は1408万6千人で、"
                         "全国の11.3%にあたる。"),
}
for name, text in others.items():
    print(f"{name:<12} Jaccard {jaccard(orig, text):.3f}  包含率 {containment(orig, text):.3f}")
📤 実行例(実測) 手計算の例: 0.333 (a) 複写 Jaccard 1.000 包含率 1.000 (b) 小さな改変 Jaccard 0.568 包含率 0.750 (c) 書き直し Jaccard 0.008 包含率 0.014 (d) 同じ事実を別の人が Jaccard 0.333 包含率 0.431

💬 手計算の 0.333 と一致します。複写(a)は当然 1.000、語尾や接続を少し変えただけの改変(b)でも Jaccard 0.568、元の文の 3-gram の 75.0% が残ります。内容は同じでも自分の言葉で書き直した(c)は 0.008 まで下がり、n-gram の一致率では「似ていない」と判定されます。注目すべきは(d)で、独立に書いた 1 文なのに Jaccard 0.333・包含率 0.431 と、元の文の 4 割以上の 3-gram を共有します。「2023年度の東京都の総人口は1408万6千人」という事実と数値の書き方がほぼ一通りしかないためで、事実やデータには著作権が及ばないので、この一致は侵害を意味しません。一致率は「どこが同じか」を探す道具としては便利ですが、「保護される表現が同じか」の判定には、一致した部分が創作的な表現か、事実や定型句かを人が見る必要があります。

🧮 計算 C: 1 回ごとの確率が小さくても — 逐語再生の起こりやすさを二項分布で見る

🔬 ③ のリーク率は「学習データの何割を再現できるか」でした。利用者の側から見ると、知りたいのは「このモデルを N 回使ったとき、学習データの文章を丸ごと再現した出力に 1 回でも出会う確率」です。1 回の生成で逐語再生が起こる確率を $p$、各回が独立だとすると、N 回で 1 回以上起こる確率は

$$P(\text{1 回以上}) = 1 - (1 - p)^N, \qquad \text{期待回数} = Np$$

です。$p$ = 0.0001(1 万回に 1 回、説明のための仮定)とすると、Step 1: 1 回も起きない確率 $(1-0.0001)^{10000}$ = $e^{10000 \ln 0.9999}$ ≈ $e^{-1.00005}$ ≈ 0.3679、Step 2: 1 回以上起きる確率 = 1 − 0.3679 = 0.6321、Step 3: 期待回数 = 10000 × 0.0001 = 1 回、となります。1 万回に 1 回という小さな確率でも、1 万回使えば 63% の確率で少なくとも 1 回は起きます。

🎯 このコードでやること:逐語再生の確率 p(1 回あたり)を 0.00001・0.0001・0.001 の 3 通り(仮定)にして、利用回数 N = 100〜100 万回で「1 回以上起きる確率」と期待回数を計算し、上の手計算(p = 0.0001, N = 10,000)と比べる。「確率 50% を超える最小の N」も出す。

📥 入力例 仮定(実在のモデルの測定値ではない) 1 回の生成で学習データを逐語再生する確率 p = 0.00001, 0.0001, 0.001 利用回数 N = 100, 1,000, 10,000, 100,000, 1,000,000
1
2
3
4
5
6
7
8
import numpy as np

Ns = [100, 1_000, 10_000, 100_000, 1_000_000]
for p in [0.00001, 0.0001, 0.001]:
    row = "  ".join(f"N={N:>9,}: {1 - (1 - p) ** N:.4f}" for N in Ns)
    n50 = int(np.ceil(np.log(0.5) / np.log(1 - p)))       # 1-(1-p)^N >= 0.5 となる最小の N
    print(f"p={p}: {row}")
    print(f"          期待回数 N=10,000 で {10_000 * p:g} 回, 50% を超える最小の N = {n50:,}")
📤 実行例(実測) p=1e-05: N= 100: 0.0010 N= 1,000: 0.0100 N= 10,000: 0.0952 N= 100,000: 0.6321 N=1,000,000: 1.0000 期待回数 N=10,000 で 0.1 回, 50% を超える最小の N = 69,315 p=0.0001: N= 100: 0.0100 N= 1,000: 0.0952 N= 10,000: 0.6321 N= 100,000: 1.0000 N=1,000,000: 1.0000 期待回数 N=10,000 で 1 回, 50% を超える最小の N = 6,932 p=0.001: N= 100: 0.0952 N= 1,000: 0.6323 N= 10,000: 1.0000 N= 100,000: 1.0000 N=1,000,000: 1.0000 期待回数 N=10,000 で 10 回, 50% を超える最小の N = 693

💬 手計算の p = 0.0001・N = 10,000 は 0.6321 で一致します。p = 0.00001 でも 100 万回使えば 1 回以上起きる確率は 0.99995(表示は 1.0000、期待回数 10 回)で、50% を超えるのは 69,315 回目です。多くの人が毎日使うサービスでは、1 回あたりの確率がどれほど小さくても「どこかで誰かが逐語再生に出会う」ことはほぼ確実になります。これが、生成 AI の提供者に、学習データの重複除去や出力側のフィルタ(既知の著作物との一致を検出して止める)が求められる理由です。ただし実際の逐語再生は独立ではなく、特定のよく知られた文章や、同じ文章が学習データに何度も入っている場合に集中して起こります。

🧮 計算 D: ライセンスを組み合わせたときの条件を「要素」で計算する

コード 3 はライセンスの組を表で引いていましたが、組み合わせが 3 つ以上になると表が爆発します。CC ライセンスは BY(表示)・SA(継承)・NC(非営利)・ND(改変禁止)の 4 つの要素の組み合わせなので、「要素ごとに、どれか 1 つの材料が要求すれば、組み合わせた成果物にも要求される」と考えると機械的に計算できます。ただし 2 つの例外があります。ND を含む材料は改変できないので、改変を伴う組み合わせ(表の結合・集計・図の作成)には使えません。SA は「同じライセンスで公開せよ」という条件なので、条件の違う SA の材料(たとえば BY-SA と BY-NC-SA)は同時には満たせません。

🎯 このコードでやること:CC ライセンス名を BY・SA・NC・ND の要素に分解し、複数の材料を組み合わせて改変した成果物が満たすべき要素と、満たせない組み合わせ(ND を含む・異なる SA が 2 つ以上)を判定する関数を書き、SSDSE-B-2026(このページの説明どおり CC BY 4.0 として扱う)を含む 5 つの組み合わせに当てる。

📥 入力例 材料の組み合わせ(ライセンス名だけを使う説明用の例) 1. SSDSE-B-2026 (CC BY 4.0) + 自作コード (CC0) 2. SSDSE-B-2026 (CC BY 4.0) + 地図データ (CC BY-SA 4.0) 3. SSDSE-B-2026 (CC BY 4.0) + 写真 (CC BY-NC 4.0) 4. 地図データ (CC BY-SA 4.0) + 統計表 (CC BY-NC-SA 4.0) 5. SSDSE-B-2026 (CC BY 4.0) + 報告書の図 (CC BY-ND 4.0)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def elements(lic):
    lic = lic.upper().replace("CC ", "").split()[0]          # "CC BY-SA 4.0" → "BY-SA"
    return set() if lic == "CC0" else set(lic.split("-"))

def combine(materials):
    # 改変を伴って組み合わせた成果物の条件(簡易版)
    els = [elements(l) for l in materials.values()]
    if any("ND" in e for e in els):
        return "不可: ND(改変禁止)の材料を改変して組み合わせることはできない"
    sa = {frozenset(e) for e in els if "SA" in e}
    if len(sa) > 1:
        return "不可: 条件の違う SA(継承)が 2 つあり、両方の『同じライセンスで』を満たせない"
    need = set().union(*els)
    if not need:
        return "条件なし(すべて CC0)"
    return "成果物は " + "-".join(k for k in ["BY", "NC", "SA"] if k in need) + " の条件で公開"

cases = [
    {"SSDSE-B-2026": "CC BY 4.0", "自作コード": "CC0"},
    {"SSDSE-B-2026": "CC BY 4.0", "地図データ": "CC BY-SA 4.0"},
    {"SSDSE-B-2026": "CC BY 4.0", "写真": "CC BY-NC 4.0"},
    {"地図データ": "CC BY-SA 4.0", "統計表": "CC BY-NC-SA 4.0"},
    {"SSDSE-B-2026": "CC BY 4.0", "報告書の図": "CC BY-ND 4.0"},
]
for i, m in enumerate(cases, 1):
    print(f"{i}. {' + '.join(m.values()):<30} → {combine(m)}")
📤 実行例(実測) 1. CC BY 4.0 + CC0 → 成果物は BY の条件で公開 2. CC BY 4.0 + CC BY-SA 4.0 → 成果物は BY-SA の条件で公開 3. CC BY 4.0 + CC BY-NC 4.0 → 成果物は BY-NC の条件で公開 4. CC BY-SA 4.0 + CC BY-NC-SA 4.0 → 不可: 条件の違う SA(継承)が 2 つあり、両方の『同じライセンスで』を満たせない 5. CC BY 4.0 + CC BY-ND 4.0 → 不可: ND(改変禁止)の材料を改変して組み合わせることはできない

💬 1 は BY だけが残り、SSDSE-B-2026 の出典を表示すれば自由に公開できます。2 は SA が加わるので、成果物も BY-SA で公開する必要があります(CC BY 4.0 の材料を BY-SA の成果物に入れることはできる)。3 は NC が加わり、成果物は非営利の範囲でしか使えなくなります。4 は SA が 2 種類(BY-SA と BY-NC-SA)あり、両方の「同じライセンスで公開せよ」を同時には満たせないので不可、5 は ND の図を改変する組み合わせなので不可です。この関数は要素の論理だけを実装した簡易版で、CC のバージョン違い(2.1 と 4.0 など)や、CC 以外のライセンス(ソフトウェアの GPL・MIT、政府標準利用規約など)との互換性は判定しません。判定結果は「確認すべき点の洗い出し」として使い、最終的には各ライセンスの原文と提供元の利用条件を確かめます。

🧮 計算 E: 特許の「出願から 20 年」は、使える独占期間ではない

上の手計算(特許の残存年数)は「満了 = 出願年 + 20」でした。しかし特許権は登録されて初めて発生するので、出願から登録までの審査期間は、20 年のうち独占できない期間として差し引かれます。医薬品などは、安全性の審査で販売できない期間を補うため、最大 5 年の延長が認められる制度があります。出願から登録までの年数が違う 4 件の架空の特許で、実際に独占できる期間を計算します。

Step内容(特許 X: 2015 年出願・2019 年登録、架空)値
1満了年 = 出願年 + 20 = 2015 + 202035 年
2審査で使った年数 = 登録年 − 出願年 = 2019 − 20154 年
3独占できる期間 = 満了年 − 登録年 = 2035 − 2019(= 20 − 4)16 年
420 年のうち独占できる割合 = 16 ÷ 200.80

🎯 このコードでやること:出願年・登録年・延長年数の違う 4 件の架空の特許について、満了年・独占できる期間・20 年に対する割合と、2026 年時点の残り年数を計算する(上の Step 1〜4 を 4 件に当てる)。

📥 入力例 架空の特許(出願年, 登録年, 延長年数) X: 2015, 2019, 0 Y: 2015, 2017, 0 Z: 2012, 2020, 0 W: 2012, 2020, 5(医薬品で延長が認められた想定)
1
2
3
4
5
6
7
8
9
10
import pandas as pd

p = pd.DataFrame({"出願年": [2015, 2015, 2012, 2012], "登録年": [2019, 2017, 2020, 2020],
                  "延長": [0, 0, 0, 5]}, index=["X", "Y", "Z", "W"])
p["満了年"] = p["出願年"] + 20 + p["延長"]            # Step 1(延長があれば足す)
p["審査年数"] = p["登録年"] - p["出願年"]             # Step 2
p["独占期間"] = p["満了年"] - p["登録年"]             # Step 3
p["独占割合"] = (p["独占期間"] / 20).round(2)        # Step 4(20 年に対して)
p["2026年の残り"] = (p["満了年"] - 2026).clip(lower=0)
print(p.to_string())
📤 実行例(実測) 出願年 登録年 延長 満了年 審査年数 独占期間 独占割合 2026年の残り X 2015 2019 0 2035 4 16 0.80 9 Y 2015 2017 0 2035 2 18 0.90 9 Z 2012 2020 0 2032 8 12 0.60 6 W 2012 2020 5 2037 8 17 0.85 11

💬 X は手計算どおり満了 2035 年・独占 16 年・割合 0.80 です。2 年で登録された Y は 18 年(0.90)、8 年かかった Z は 12 年(0.60)しか独占できず、同じ「20 年」でも実際に使える期間は 1.5 倍も違います。W は Z と同じ経過に 5 年の延長が加わり、独占期間は 17 年(0.85)まで戻ります。「特許が切れる年」を見積もるときは出願年だけでなく登録年と延長の有無を、「競合が何年独占できるか」を見積もるときは登録から満了までの年数を見る、と使い分けます。

🧮 計算 F: 延長改正の「空白の 20 年」— パブリックドメインに入る作品の流れ

計算 A の関数を、1 人ずつではなく「毎年同じ人数の著作者が亡くなる」という単純な流れに当てると、2018 年の延長改正がパブリックドメイン(保護期間が切れて誰でも使える状態)への流れにどう効いたかが見えます。死亡年 1950〜2000 年の個人の著作者が各年 1 人ずついると仮定し、それぞれの著作物が自由に使えるようになる年を数えます(戦時加算などの特例は考えない)。

🎯 このコードでやること:計算 A の jp_copyright_end を使い、死亡年 1950〜2000 年(各年 1 人、死亡日は 6 月 1 日とする)の個人の著作物が自由に使えるようになる年を求めて、2001〜2071 年のうち「新たに自由になる作品が 1 つも無い年」の範囲と数を数える。延長が無かった場合(死後 50 年のまま)とも比べる。

📥 入力例 仮定の著作者の流れ(実在の人物ではない) 死亡年 1950, 1951, …, 2000(各年 1 人, 死亡日は 6 月 1 日)→ 計 51 人 計算 A の jp_copyright_end(base, "個人") で満了日を求める
1
2
3
4
5
6
7
8
9
10
11
from collections import Counter

deaths = [date(y, 6, 1) for y in range(1950, 2001)]
free_year = Counter(jp_copyright_end(d, "個人").year + 1 for d in deaths)     # 改正後のルール
free_old = Counter(d.year + 51 for d in deaths)                              # 死後 50 年のままなら
empty = [y for y in range(2001, 2072) if free_year[y] == 0]
empty_old = [y for y in range(2001, 2072) if free_old[y] == 0]
print(f"改正後: 新たに自由になる作品が無い年 {len(empty)} 年({empty[0]}〜{empty[-1]})")
print(f"死後 50 年のままなら: 無い年 {len(empty_old)} 年({empty_old[0]}〜{empty_old[-1]})")
print("2018 年に自由になる死亡年:", [d.year for d in deaths if jp_copyright_end(d, "個人").year + 1 == 2018])
print("2039 年に自由になる死亡年:", [d.year for d in deaths if jp_copyright_end(d, "個人").year + 1 == 2039])
📤 実行例(実測) 改正後: 新たに自由になる作品が無い年 20 年(2019〜2038) 死後 50 年のままなら: 無い年 20 年(2052〜2071) 2018 年に自由になる死亡年: [1967] 2039 年に自由になる死亡年: [1968]

💬 改正後のルールでは、2019〜2038 年の 20 年間、この流れから新たに自由になる作品が 1 つもありません。2018 年に自由になったのは 1967 年に亡くなった著作者の作品で、その次は 1968 年に亡くなった著作者の作品が 2039 年に自由になるまで飛びます。延長が無ければ空白は 2052〜2071 年(死亡年 2001 年以降の著作者がこの仮定の流れにいないため)だけで、2019〜2038 年にも毎年作品が自由になっていたはずです。実際の出版・教育の現場では、「2019 年以降、日本では個人の著作物が新しくパブリックドメインに入らない期間が 20 年続く」という形で現れています。古い資料を教材やデータセットに使うときは、「作られた年」ではなく「著作者の死亡年」と改正の施行日を並べて判断します。

🧮 計算 G: 出典の表示を「4 つの要素」で点検する — TASL

CC BY の「表示」は、何を書けば満たせるのでしょうか。クリエイティブ・コモンズは、作品の題名(Title)・作者(Author)・入手先(Source、URL など)・ライセンス(License)の 4 つを書くことを勧めており、頭文字をとって TASL と呼ばれます。改変した場合は「改変したこと」も書きます。分析レポートの図のキャプションに付けた出典表示を 4 要素+改変の有無で機械的に点検する関数を作り、よくある書き方 4 つに当てます。

🎯 このコードでやること:出典表示の文字列から、題名・作者・入手先・ライセンス・改変の明記の 5 項目が書かれているかを正規表現で調べ、欠けている項目を返す関数を作る。SSDSE-B-2026 から作った図のキャプションを想定した 4 つの表示例に当てる。

📥 入力例 図のキャプションに付けた出典表示の例(説明のために作った文字列) A: 出典:SSDSE-B-2026 B: 出典:独立行政法人統計センター「SSDSE-B-2026」 C: 出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0 D: 出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0 をもとに、2023 年度の 47 都道府県を抽出し高齢化率を算出して作成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import re

CHECKS = {
    "題名 (T)": r"「[^」]+」|SSDSE-[A-Z]-\d{4}",
    "作者 (A)": r"統計センター|作成者|著者",
    "入手先 (S)": r"https?://",
    "ライセンス (L)": r"CC ?BY|CC0|政府標準利用規約",
    "改変の明記": r"もとに|改変|加工|算出",
}

def audit_credit(text):
    return [name for name, pat in CHECKS.items() if not re.search(pat, text)]

credits = {
    "A": "出典:SSDSE-B-2026",
    "B": "出典:独立行政法人統計センター「SSDSE-B-2026」",
    "C": "出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0",
    "D": ("出典:独立行政法人統計センター「SSDSE-B-2026」(https://www.nstac.go.jp/…) CC BY 4.0 "
          "をもとに、2023 年度の 47 都道府県を抽出し高齢化率を算出して作成"),
}
for k, t in credits.items():
    miss = audit_credit(t)
    print(f"{k}: {len(CHECKS) - len(miss)}/5 項目  欠け: {', '.join(miss) if miss else 'なし'}")
📤 実行例(実測) A: 1/5 項目 欠け: 作者 (A), 入手先 (S), ライセンス (L), 改変の明記 B: 2/5 項目 欠け: 入手先 (S), ライセンス (L), 改変の明記 C: 4/5 項目 欠け: 改変の明記 D: 5/5 項目 欠け: なし

💬 A は題名しか無く 1/5、B は題名と作者の 2/5、C は TASL の 4 要素がそろって 4/5 ですが「改変の明記」が欠けます。高齢化率のように元の表から計算した値を図にするのは改変(加工)にあたるので、D のように「何をもとに、どう加工したか」まで書いて 5/5 になります。この関数は文字列の有無を見るだけの簡易な点検で、入手先の URL が正しいか、ライセンスの版(4.0 など)が提供元の表示と合っているかまでは確かめません。レポートに図が多いときは、キャプションを一覧にしてこの関数を通し、欠けのある図だけを人が直す、という使い方が現実的です。

🧮 計算 H: 「引用」の主従関係を数字で点検する — ただし法律に何 % という線は無い

著作権法 32 条の「引用」として他人の文章を載せるには、判例上、引用部分が本文と明確に区別されていること、自分の文章が「主」で引用が「従」であること、出所を明示すること、などが求められます。「主従」には法律上の数値基準はありませんが、自分の原稿を点検する目安として、引用部分(「」や引用ブロックで囲んだ部分)が原稿全体の何割を占めるかを数えておくことはできます。3 つの原稿の例で、引用の割合と出所の有無を数えます。

🎯 このコードでやること:【引用】…【/引用】で囲んだ部分を引用とみなし、原稿全体の文字数に対する引用部分の文字数の割合と、引用ごとに直後に(出典:…)があるかを数える関数を作り、3 つの原稿例に当てる。

📥 入力例 原稿の例(説明のために作った文字列。【引用】…【/引用】が引用部分) 原稿 1: 自分の分析 約 180 字 + 引用 1 か所(出典つき) 原稿 2: 自分の文 約 30 字 + 引用 2 か所(1 か所は出典なし) 原稿 3: 引用だけ 1 か所(出典つき)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import re

def audit_quote(doc):
    quotes = re.findall(r"【引用】(.*?)【/引用】((出典:[^)]+))?", doc, flags=re.S)
    q_chars = sum(len(q) for q, _ in quotes)
    body = re.sub(r"【/?引用】|(出典:[^)]+)", "", doc)
    no_src = sum(1 for _, src in quotes if not src)
    return len(quotes), q_chars, len(body), q_chars / len(body), no_src

docs = {
    "原稿 1": ("2023 年度の SSDSE-B-2026 で高齢化率を比べると、秋田県の 39.1% から東京都の 22.8% まで 16 ポイント以上の開きがある。"
             "この差がどこから来るのかを、先行研究の指摘と照らして考える。"
             "【引用】人口の地域差は移動によって生まれる【/引用】(出典:架空の報告書 A, 2020)"
             "という指摘は、この結果とも整合する。ただし 47 都道府県の断面だけでは因果までは言えないので、"
             "年度をまたいだ変化も合わせて確かめる必要がある。"),
    "原稿 2": ("次の 2 つの文章を紹介する。"
             "【引用】地方の人口減少は 1990 年代から続いており、その主な要因は若年層の流出である。"
             "とくに高校卒業時と大学卒業時の 2 回に分けて流出が起きる。【/引用】(出典:架空の論文 B, 2019)"
             "【引用】都市部でも出生率は低く、流入した若年層が子どもを持つ時期は遅れがちである。【/引用】"
             "以上である。"),
    "原稿 3": "【引用】人口の地域差は移動によって生まれる【/引用】(出典:架空の報告書 A, 2020)",
}
for k, d in docs.items():
    n, q, total, share, no_src = audit_quote(d)
    print(f"{k}: 引用 {n} か所, 引用 {q} 字 / 本文 {total} 字 = {share:.1%}, 出典なし {no_src} か所")
📤 実行例(実測) 原稿 1: 引用 1 か所, 引用 17 字 / 本文 195 字 = 8.7%, 出典なし 0 か所 原稿 2: 引用 2 か所, 引用 108 字 / 本文 129 字 = 83.7%, 出典なし 1 か所 原稿 3: 引用 1 か所, 引用 17 字 / 本文 17 字 = 100.0%, 出典なし 0 か所

💬 原稿 1 は引用 17 字が本文 195 字の 8.7% で、自分の分析が中心にあり出典も付いています。原稿 2 は本文の 83.7% が引用で、自分の文は「次の 2 つの文章を紹介する」「以上である」だけです。これでは自分の文章が「主」とは言いにくく、しかも 2 か所目の引用には出典がありません。原稿 3 は引用だけの 100% で、引用の形をとった転載に近くなります。ただし、割合はあくまで点検の目安で、法律や判例に「何 % 以下なら引用」という線はありません。短い原稿でも、引用が自分の論旨を支えるために必要な範囲で、本文と明確に区別され、出所が示されていれば引用として認められる余地がありますし、割合が小さくても引用の必要性が無い部分の転載は問題になり得ます。数字は「人が読み直すべき原稿を拾う」ために使います。

🧮 計算 I: 学習データの重複を数える — 逐語再生を減らす前処理

計算 C の最後で触れたように、逐語再生は「同じ文章が学習データに何度も入っている」ときに起こりやすくなります。そこで大規模な学習の前には、完全に同じ文書だけでなく、一部だけ違う「ほぼ同じ文書」も見つけて減らす前処理(重複除去)が行われます。計算 B の文字 3-gram の Jaccard 一致率を使い、小さな文書集合の中から「一致率が 0.6 以上の組」をほぼ重複として拾い出します。文書はすべて説明のために作ったものです。

🎯 このコードでやること:8 件の短い文書(ニュース風の文、転載・言い換え・無関係な文を含む)について、全 28 組の文字 3-gram Jaccard 一致率を計算し、0.6 以上の組をほぼ重複として出す。重複を 1 件に代表させたときに文書が何件に減るかも数える。

📥 入力例 説明のために作った 8 件の文書(d1〜d8) d1 と d2: 同じ文(完全な転載) d3: d1 の語尾を変えた文 d4: d1 と同じ話題を別の言葉で書いた文 d5〜d8: 別々の話題の文(d6 は d5 の転載に 1 文を足したもの)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from itertools import combinations

def ngrams(t, n=3):
    return {t[i:i + n] for i in range(len(t) - n + 1)}

def jaccard(a, b):
    A, B = ngrams(a), ngrams(b)
    return len(A & B) / len(A | B)

docs = {
    "d1": "市の図書館は来月から開館時間を午後八時まで延長すると発表した。",
    "d2": "市の図書館は来月から開館時間を午後八時まで延長すると発表した。",
    "d3": "市の図書館は来月から開館時間を午後八時まで延長すると発表しました。",
    "d4": "来月以降、市立図書館は夜八時まで開くことになる。",
    "d5": "県内の小学校で新しい給食の献立が導入され、地元の野菜が多く使われている。",
    "d6": "県内の小学校で新しい給食の献立が導入され、地元の野菜が多く使われている。保護者からも好評だという。",
    "d7": "週末は各地で気温が上がり、海水浴場には多くの人が訪れた。",
    "d8": "駅前の再開発計画について、住民向けの説明会が開かれた。",
}
pairs = []
for a, b in combinations(docs, 2):
    s = jaccard(docs[a], docs[b])
    if s >= 0.6:
        pairs.append((a, b, round(s, 3)))
print("ほぼ重複(Jaccard ≥ 0.6):", pairs)
print("d1 と d4(言い換え):", round(jaccard(docs["d1"], docs["d4"]), 3))

group = {k: k for k in docs}                  # 重複の組を 1 つのグループにまとめる
for a, b, _ in pairs:
    ga, gb = group[a], group[b]
    for k in group:
        if group[k] == gb:
            group[k] = ga
print("文書数", len(docs), "→ 重複を除くと", len(set(group.values())), "件")
📤 実行例(実測) ほぼ重複(Jaccard ≥ 0.6): [('d1', 'd2', 1.0), ('d1', 'd3', 0.875), ('d2', 'd3', 0.875), ('d5', 'd6', 0.723)] d1 と d4(言い換え): 0.085 文書数 8 → 重複を除くと 5 件

💬 完全な転載 d1–d2(1.000)、語尾だけ違う d1–d3・d2–d3(0.875)、1 文を足した転載 d5–d6(0.723)の 4 組が拾われ、8 件は 5 件(d1〜d3 のグループ、d4、d5〜d6 のグループ、d7、d8)にまとまります。同じ話題を別の言葉で書いた d4 は d1 との一致率が 0.085 しかなく、重複とは判定されません。重複除去は「同じ表現が何度も学習される」ことを減らす処理で、「同じ事実や話題を学習させない」処理ではない、という違いがここに表れています。実際の大規模データでは全組の比較は数が多すぎるので、MinHash などで一致率を近似して候補の組だけを比べます。しきい値 0.6 は説明のための値で、低くすると言い換えに近いものまで拾い、高くすると転載に 1 文を足しただけのものを見逃します。

🧮 計算 J: 営業秘密は「秘密として管理している」ことが条件 — アクセス権を棚卸しする

📐 の表のとおり、営業秘密(不正競争防止法)は登録ではなく、秘密として管理されていること(秘密管理性)・事業に有用であること・公然と知られていないこと、の 3 つがそろって保護されます。分析基盤では、「誰が見られる状態になっているか」がそのまま秘密管理性の証拠になります。架空の会社のデータセット 4 つについて、アクセス権の設定表から実際に見られる人数を数え、「社外秘」の表示があるのに全社員が見られる、といった食い違いを洗い出します。

🎯 このコードでやること:架空の会社(社員 300 人)のデータセット 4 つについて、アクセス権の設定(グループ単位)からそれぞれを見られる人数を数え、「社外秘」の表示・見られる人数・業務上必要な人数(申告)を並べて、表示と実態の食い違いを判定する。

📥 入力例 架空の設定(実在の会社ではない) グループ: 全社員 300 人, 分析チーム 12 人, 営業部 60 人, 役員 8 人(全社員以外のグループどうしに重なりは無いとする) データセット: 顧客購買履歴, 価格決定モデル, SSDSE-B-2026 の加工表, 新製品の試験結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd

groups = {"全社員": 300, "分析チーム": 12, "営業部": 60, "役員": 8}
ds = pd.DataFrame([
    ("顧客購買履歴",       "社外秘", ["分析チーム", "営業部"],  20),
    ("価格決定モデル",     "社外秘", ["全社員"],               15),
    ("SSDSE-B-2026 の加工表", "公開可", ["全社員"],             300),
    ("新製品の試験結果",   "表示なし", ["分析チーム", "役員"],  20),
], columns=["データセット", "表示", "アクセス権", "必要な人数"])

ds["見られる人数"] = ds["アクセス権"].apply(lambda g: min(300, sum(groups[x] for x in g)))
ds["過剰な人数"] = (ds["見られる人数"] - ds["必要な人数"]).clip(lower=0)

def judge(r):
    if r["表示"] == "社外秘" and "全社員" in r["アクセス権"]:
        return "表示と実態が矛盾(全社員が見られる)"
    if r["表示"] == "表示なし" and r["見られる人数"] < 300:
        return "制限はあるが秘密の表示が無い"
    if r["過剰な人数"] > 0 and r["表示"] == "社外秘":
        return "必要以上に広い"
    return "問題なし"

ds["判定"] = ds.apply(judge, axis=1)
print(ds[["データセット", "表示", "見られる人数", "必要な人数", "過剰な人数", "判定"]].to_string(index=False))
📤 実行例(実測) データセット 表示 見られる人数 必要な人数 過剰な人数 判定 顧客購買履歴 社外秘 72 20 52 必要以上に広い 価格決定モデル 社外秘 300 15 285 表示と実態が矛盾(全社員が見られる) SSDSE-B-2026 の加工表 公開可 300 300 0 問題なし 新製品の試験結果 表示なし 20 20 0 制限はあるが秘密の表示が無い

💬 顧客購買履歴は業務上 20 人で足りるのに営業部全体へ権限を付けて 72 人が見られ、52 人分が過剰です。価格決定モデルは「社外秘」と表示しながら全社員 300 人が見られる設定で、285 人分が過剰なうえ、表示と実態が矛盾しています。このような状態では、漏えいが起きたときに「秘密として管理していた」と主張しにくくなります。新製品の試験結果は見られる人数を 20 人に絞れていますが、秘密であることの表示が無く、アクセスした人が「秘密だと分かっていた」ことを示しにくい状態です。SSDSE-B-2026 の加工表は公開可のデータなので全社員が見られても問題ありません。棚卸しで見るべきなのは人数そのものではなく、「表示」「実際に見られる範囲」「業務上の必要」の 3 つの食い違いです。

🧮 計算 K: 教材の候補を一覧で判定する — 分からない項目は「要調査」に回す

計算 A の関数を、教材やデータセットに使いたい資料の一覧にまとめて当てます。実務で困るのは計算そのものより、判定に必要な情報(著作者の死亡日など)が分からない資料の扱いです。分からないものを「たぶん古いから大丈夫」と推測で埋めず、「要調査」として別に数えるのが安全な作り方です。7 つの架空の資料で試します。なお、1970 年以前に公表・死亡した作品には旧著作権法からの経過措置(旧法のほうが長ければ旧法の期間を使う)があり、とくに映画・写真・団体名義の作品では結果が変わることがあります。ここでは新法の期間だけで判定できる例を選んでいます。

🎯 このコードでやること:架空の資料 7 件(種類・死亡日または公表日・著作者名義の区別)について、2026 年 4 月 1 日の時点で保護期間が満了しているかを判定する。基準日が分からない資料は「要調査」とし、判定の内訳を数える。

📥 入力例 架空の資料(実在の作品ではない) 資料, 種類, 基準日(個人は死亡日、団体名義・映画は公表日。不明は None) 随筆集 1, 個人, 1960-03-01 / 論文 2, 個人, 1975-08-15 / 社史 3, 団体名義, 1975-10-01 記録映画 4, 映画, 1975-05-01 / 講演録 5, 個人, 1966-11-20 古い地図 6, 個人, 不明 / 広報誌 7, 団体名義, 1990-04-01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

today = date(2026, 4, 1)
items = [("随筆集 1", "個人", date(1960, 3, 1)), ("論文 2", "個人", date(1975, 8, 15)),
         ("社史 3", "団体名義", date(1975, 10, 1)), ("記録映画 4", "映画", date(1975, 5, 1)),
         ("講演録 5", "個人", date(1966, 11, 20)), ("古い地図 6", "個人", None),
         ("広報誌 7", "団体名義", date(1990, 4, 1))]
rows = []
for name, kind, base in items:
    if base is None:
        rows.append((name, kind, "-", "要調査(基準日が不明)"))
        continue
    end = jp_copyright_end(base, kind)
    rows.append((name, kind, end, "満了(自由に利用可)" if end < today else "保護期間中(許諾が必要)"))
t = pd.DataFrame(rows, columns=["資料", "種類", "満了日", "判定"])
print(t.to_string(index=False))
print(t["判定"].value_counts().to_string())
📤 実行例(実測) 資料 種類 満了日 判定 随筆集 1 個人 2010-12-31 満了(自由に利用可) 論文 2 個人 2045-12-31 保護期間中(許諾が必要) 社史 3 団体名義 2045-12-31 保護期間中(許諾が必要) 記録映画 4 映画 2045-12-31 保護期間中(許諾が必要) 講演録 5 個人 2016-12-31 満了(自由に利用可) 古い地図 6 個人 - 要調査(基準日が不明) 広報誌 7 団体名義 2060-12-31 保護期間中(許諾が必要) 判定 保護期間中(許諾が必要) 4 満了(自由に利用可) 2 要調査(基準日が不明) 1

💬 7 件のうち満了して自由に使えるのは 1960 年・1966 年に亡くなった著作者の 2 件だけで、4 件は保護期間中、1 件は基準日が分からず「要調査」です。1975 年公表の社史(団体名義)と記録映画は、旧ルールなら 2025 年末に満了していたはずですが、延長でどちらも 2045 年末まで守られます。「50 年以上前の資料だから自由」という感覚は、2018 年以降は通用しないことが一覧で分かります。要調査の 1 件は、著作者の死亡年を調べるか、許諾を取るか、使わないかを決めるまで、教材から外しておきます。判定表には「いつの時点で判定したか」(ここでは 2026 年 4 月 1 日)を必ず残し、年が変わったら判定し直します。

計算数字で分かったこと(架空・仮定の例)実務での判断
A 保護期間死亡日が 21 日違うだけで自由になる日が 21 年違う(1967 年末と 1968 年初め)死亡年と改正の施行日を並べて判断する
B n-gram 一致率同じ事実を独立に書いた文でも包含率 0.431一致率は候補探し。創作的な表現の一致かを人が見る
C 逐語再生の確率1 回 0.0001 でも 1 万回で 0.632小さな確率も利用回数で掛け算。出力側のフィルタを置く
D ライセンスの組み合わせSA が 2 種類・ND を含むと組み合わせ不可要素に分解して点検し、原文で最終確認
E 特許の独占期間登録まで 8 年なら独占は 12 年出願年ではなく登録年から数える
F 延長の空白2019〜2038 年に新たに自由になる個人の作品が無い古い資料は死亡年で判断する
G 出典表示TASL がそろっても加工の明記が欠けがち「何をもとにどう加工したか」まで書く
H 引用の割合引用 83.7%・出典なし 1 か所の原稿割合は点検の目安。法定の線は無い
I 重複除去8 件 → 5 件、言い換えは 0.085 で残る転載・近い複製を学習前に減らす
J アクセス権社外秘なのに 300 人が閲覧可表示・閲覧範囲・必要性の食い違いを棚卸しする
K 資料の一覧判定7 件中、満了 2・保護中 4・要調査 1(1975 年公表の団体名義も 2045 年まで保護)分からない項目は推測で埋めず「要調査」。判定した日付を残す

計算で決められること・決められないこと: 計算 A〜K で機械的に答えが出るのは、日付の計算(A・E・F・K)、確率の見積もり(C)、要素の組み合わせ(D)、文字列の有無や割合(B・G・H・I・J)です。一方、「その表現に創作性があるか」「引用の必要性があるか」「享受を目的とした利用か」「秘密として管理していたと言えるか」は、事情を総合して人(最終的には裁判所)が判断する規範的な問題で、どの計算もその代わりにはなりません。計算は、判断すべき論点を漏れなく洗い出し、判断に必要な事実(死亡年・登録年・閲覧できる人数など)を正確にそろえるための道具として使います。

✏️ 理解度チェック(計算 A〜K の数字で)

  1. 著作者が 1968 年 12 月 31 日に亡くなった。日本でこの著作者の作品を自由に使えるのはいつからか(戦時加算などの特例は考えない)。
    答え: 2039 年 1 月 1 日から。起算は 1969 年 1 月 1 日、旧ルールの満了 2018-12-31 は 2018-12-30 の施行日の時点でまだ来ていないので延長され、満了は 1968 + 70 = 2038 年の 12 月 31 日。
  2. 計算 B で、同じ事実を独立に書いた文(d)が包含率 0.431 だった。このことから何が言えるか。
    答え: n-gram の一致は、表現の盗用だけでなく、事実・数値・定型的な言い回しの一致でも高くなる。一致率だけで侵害とは言えず、一致した部分が創作的な表現かどうかを人が見る必要がある。
  3. 逐語再生の確率が 1 回あたり 0.001 のモデルを 1,000 回使った。1 回以上起きる確率はおよそいくつか。
    答え: 1 − 0.999^1000 ≈ 1 − e^−1 ≈ 0.632。期待回数は 1 回。
  4. SSDSE-B-2026(CC BY 4.0)と CC BY-NC 4.0 の写真を組み合わせた教材を有料の講座で使いたい。計算 D の考え方で何が問題になるか。
    答え: NC(非営利)の要素が成果物に残るので、有料講座のような営利目的の利用はその写真については許諾を別に得る必要がある。SSDSE-B-2026 側は表示を守れば営利利用できる。
  5. 2012 年出願・2020 年登録の特許 Z の権利者が「うちの特許は 20 年守られる」と説明した。どこが不正確か。
    答え: 20 年は出願からの年数で、登録までの 8 年は独占できない。実際に独占できるのは 2020〜2032 年の 12 年。
  6. 2025 年に、日本で「今年パブリックドメインに入った作家」を紹介する企画を立てた。個人の著作者について紹介できる人はいるか(特例は考えない)。
    答え: 原則としていない。2018 年の延長で、1968 年以降に亡くなった著作者の作品は死後 70 年まで守られるので、2019〜2038 年の間は、個人の著作物で新たに自由になるものが無い(計算 F)。
  7. 図のキャプションに「出典:独立行政法人統計センター『SSDSE-B-2026』 CC BY 4.0」とだけ書いた。高齢化率を計算して描いた図として足りないものは何か。
    答え: 入手先(URL など)と、元の表をどう加工したか(「2023 年度の 47 都道府県について 65 歳以上人口 ÷ 総人口を算出」など)の明記。計算 G の点検では 3/5 項目になる。
  8. 引用部分が本文の 8.7% の原稿なら、引用として必ず認められるか。
    答え: 必ずではない。割合は点検の目安で、法律に数値の基準は無い。本文と明確に区別されているか、引用する必要があるか、出所が示されているかなどを合わせて判断する(計算 H)。
  9. 重複除去で d1(原文)と d4(言い換え)が別の文書として残った。これは除去の失敗か。
    答え: 失敗ではない。重複除去は同じ表現の繰り返しを減らす処理で、同じ話題・事実を別の言葉で書いた文書は残るのが正常(一致率 0.085)。
  10. 「社外秘」と書いたフォルダを全社員が開ける設定のまま運用していた。どんな不利益がありうるか。
    答え: 情報が持ち出されたとき、秘密として管理していた(秘密管理性)と認められにくく、営業秘密としての保護を受けられないおそれがある。表示・閲覧範囲・業務上の必要をそろえておく(計算 J)。
  11. 1975 年に会社の名義で公表された社史を、2026 年に教材へ全文掲載したい。計算 K の考え方で判定せよ。
    答え: 団体名義は公表後の年数で数える。旧ルール(50 年)の満了は 2025 年末だが、2018 年 12 月 30 日の時点でまだ保護中だったので 70 年に延び、満了は 2045 年 12 月 31 日。2026 年は保護期間中なので許諾が必要。
  12. 判定表の「古い地図 6」は著作者の死亡年が分からない。「作られたのが戦前らしいので満了」として扱ってよいか。
    答え: よくない。作られた年ではなく死亡年で決まるので、長生きした著作者なら今も保護中の可能性がある。調べるか、許諾を取るか、使わないかを決めるまで「要調査」のままにする。

🐍 Python での扱い

最小再現コード。 SSDSE-B のような実データを前提に、 4〜8 行で動く例です:

1
2
3
4
5
6
7
8
9
# 例: 公的データのライセンス確認スクリプト
import pandas as pd
LICENSES = {
    'SSDSE-B': 'CC BY 4.0',
    'e-Stat': '政府標準利用規約 2.0',
}
def can_use_commercially(name):
    return LICENSES.get(name, 'unknown') in {'CC BY 4.0', 'CC0', 'MIT'}
print(can_use_commercially('SSDSE-B'))
📤 実行例(実測) True

💬 True が返ったのは、辞書で SSDSE-B が 'CC BY 4.0' と登録され、許可リストに含まれているから。e-Stat の「政府標準利用規約 2.0」は実際には出典表示のうえ商用利用できるが、この関数では許可リストに無いので False になり、辞書に無い名前も 'unknown' で False になる。判定を自動化するなら、規約名の表記ゆれとリスト漏れが最大の落とし穴になる。

補足:ライブラリのバージョンや前処理状態によって出力は変わります。 自分の環境で動かすときは pip list でバージョンを確認し、 入力 CSV のパス・列名を実態に合わせてください。

🐍 Python 完全コード(4 要素ナレーション付き)

コード 1:SSDSE-B-2026 のライセンス遵守ロード

🎯 このコードでやること:data/raw/SSDSE-B-2026.csv を読み込み、 ライセンス情報をメタデータとして保持しつつ、 47 都道府県 × 12 年分のデータを取得する。

📥 入力データ(CSV 抜粋):

年度,地域コード,都道府県,総人口,出生数,... 2023,R13000,東京都,14086000,86348,... 2023,R14000,神奈川県,9229000,53991,... 2023,R27000,大阪府,8763000,55292,...
1
2
3
4
5
6
7
8
9
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df.attrs['license'] = 'CC BY 4.0'
df.attrs['source']  = '独立行政法人統計センター. SSDSE-B-2026'

print(f"行数: {len(df):,} / 列数: {len(df.columns)}")
print(f"年度: {sorted(df['年度'].unique())[0]}-{sorted(df['年度'].unique())[-1]}")
print(f"出典: {df.attrs['source']} ({df.attrs['license']})")

📤 実行結果:

行数: 564 / 列数: 112 年度: 2012-2023 出典: 独立行政法人統計センター. SSDSE-B-2026 (CC BY 4.0)

💬 結果の読み方:564 行は 47 都道府県 × 12 年 = 564 で一致。 メタデータに license を記録すると、 後段の集計でも出典を継承できる。 CC BY 4.0 のため出典明記をすれば商用・改変・再配布いずれも合法。

コード 2:出典明記つき要約レポートの自動生成

🎯 このコードでやること:47 都道府県の 2023 年人口 TOP 5 を抽出し、 Markdown 形式で「出典明記済みレポート」を生成する。 CC BY 4.0 違反を防ぐ実務テンプレート。

📥 入力データ:上記 df(564 行)の 2023 年抜粋。

1
2
3
4
5
6
7
top5 = df[df['年度']==2023].nlargest(5, '総人口')[['都道府県','総人口']]

report = "# 2023 年都道府県人口 TOP 5\n\n"
report += top5.to_markdown(index=False) + "\n\n"
report += "出典:独立行政法人統計センター. SSDSE-B-2026 (CC BY 4.0).\n"
report += "URL: https://www.nstac.go.jp/use/literacy/ssdse/\n"
print(report)

📤 実行結果(実測):

# 2023 年都道府県人口 TOP 5 | 都道府県 | 総人口 | |:-----------|---------:| | 東京都 | 14086000 | | 神奈川県 | 9229000 | | 大阪府 | 8763000 | | 愛知県 | 7477000 | | 埼玉県 | 7331000 | 出典:独立行政法人統計センター. SSDSE-B-2026 (CC BY 4.0). URL: https://www.nstac.go.jp/use/literacy/ssdse/

💬 結果の読み方:東京都が突出(14,086,000 人)、 2 位の神奈川県(9,229,000 人)とは約 486 万人差。 to_markdown で表にしたので、 そのまま Markdown の論文・レポートに貼れる。 表+出典で論文・レポート 1 ブロックが完成。 CC BY 4.0 は「表示」だけが義務なので、 この 2 行で完全に遵守できる。

コード 3:ライセンス互換性チェッカー

🎯 このコードでやること:SSDSE-B-2026 と他のデータ・コードを組み合わせる際、 ライセンスが両立するかチェック。

📥 入力データ:ライセンス辞書(CC BY 4.0, MIT, GPL, CC BY-NC)。

1
2
3
4
5
6
7
8
9
compat = {
    ('CC BY 4.0', 'MIT'):       True,
    ('CC BY 4.0', 'Apache-2.0'): True,
    ('CC BY 4.0', 'CC BY-SA'):   True,
    ('CC BY 4.0', 'CC BY-NC'):   '商用×',
    ('CC BY 4.0', 'GPL-3.0'):    '派生物 GPL 化',
}
for (a,b), ok in compat.items():
    print(f"{a:12s} × {b:12s} → {ok}")

📤 実行結果:

CC BY 4.0 × MIT → True CC BY 4.0 × Apache-2.0 → True CC BY 4.0 × CC BY-SA → True CC BY 4.0 × CC BY-NC → 商用× CC BY 4.0 × GPL-3.0 → 派生物 GPL 化

💬 結果の読み方:SSDSE-B-2026(CC BY 4.0)は MIT / Apache とは自由に組み合わせ可。 NC 系を混ぜると商用 NG、 GPL を混ぜると派生物全体が GPL 化する。 実務では requirements.txt と LICENSE をペアでチェックすると安全。

❓ FAQ 20 問

Q1. SSDSE-B-2026 を本に載せたい。 印税は払う?
不要。 CC BY 4.0 は無料利用可。 ただし「出典:SSDSE-B-2026 (CC BY 4.0)」の明記が必須。
Q2. CC BY 4.0 と政府標準利用規約 2.0 はどう違う?
政府標準 2.0 は CC BY 4.0 と互換(2018 年改訂)。 実質同じ条件で運用可能。
Q3. AI に学習させても合法?
日本:著作権法 30 条の 4 で原則合法。 米国:フェアユース判断(係争中)。 EU:AI Act でオプトアウト対応必要。
Q4. ChatGPT で書いた文章の著作権は?
日本・米国・EU では純 AI 生成物に著作権発生せず。 人間の創作的寄与(プロンプト工夫・編集)があれば発生し得る。
Q5. GitHub Copilot で書いたコードを社内製品に入れて良い?
基本可だが、 学習データに GPL コードが含まれているリスクあり。 心配なら Copilot Business 版で「公開コードフィルタ」を有効化。
Q6. CC BY-SA と CC BY の違いは?
SA は ShareAlike。 派生物も同じ SA で再配布する義務がある。 CC BY は派生物を任意のライセンスで OK。
Q7. 47 都道府県の人口データそのものに著作権はある?
数値・事実そのものには著作権なし(不保護)。 ただし編集著作物としての CC BY が SSDSE-B-2026 全体に適用される。
Q8. 学術論文での引用は無断で OK?
日本著作権法 32 条で「適法な引用」として 4 要件を満たせば可:(1) 公表済み、 (2) 主従関係、 (3) 必要最小限、 (4) 出典明記。
Q9. AI の学習データを開示する義務はある?
日本:現時点では義務なし。 EU AI Act:GPAI に開示義務(2026 以降)。 米国:個別法ではなし、 訴訟リスクから自主開示増加中。
Q10. 特許は何のために取る?
独占権による収益化、 防衛特許、 ライセンス収入、 投資家アピール、 標準化交渉力など。
Q11. 著作権登録は必要?
日本では著作物創作時に自動発生、 登録は任意。 米国は訴訟前提なら登録必須(法定損害賠償の対象)。
Q12. オープンソースは「無料で何でも使える」?
NO。 ライセンス条件次第。 MIT は「表示」、 GPL は「派生物のソース公開」など義務あり。
Q13. CC BY-NC のデータを社内分析で使うのは?
「商用利用」の定義次第。 営利企業の内部利用は NC 違反の解釈が一般的。 NC データの使用は避ける方が安全。
Q14. SSDSE-B-2026 を BigQuery にアップロードしても良い?
技術的・法的に可能。 CC BY 4.0 は配布チャネルを限定しない。 出典明記はメタデータかドキュメントに記載。
Q15. AI 生成画像を SNS にアップ、 著作権を主張できる?
日本・米国・EU では純 AI 生成では主張困難。 ただしプロンプト工夫+大幅編集なら創作性が認められる可能性あり。
Q16. NYT vs OpenAI の論点は?
NYT 記事を ChatGPT が逐語的に再生できることが「市場代替」「フェアユース否定」の根拠と主張。 OpenAI は「変容的利用」で反論。
Q17. 学習データセットを販売しても良い?
CC BY 4.0 データの再販は可能(出典明記必須)。 ただし「享受目的」と判断されると 30 条の 4 が適用されない。
Q18. 商標と屋号の違いは?
屋号は商号登記(自動で独占権なし)。 商標は特許庁登録で同一・類似業種の独占権。
Q19. CC0(パブリックドメイン)はなぜ存在する?
「権利を全部放棄」を法的に明確化するため。 通常はクリエイターが死後 70 年でしか PD に入らない。
Q20. このページ自体のライセンスは?
学習目的の用語解説として、 出典明記の上で自由に引用・再配布できる教育コンテンツとして提供される。

📖 知的財産権の包括ガイド(追補編)

🌏 国際比較:知財制度の差異

国・地域著作権保護期間特許審査期間AI 学習合法性商標登録費用
日本死後 70 年約 14 ヶ月著作権法 30 条の 4 で広く許容約 12,000 円〜
米国死後 70 年約 22 ヶ月フェアユース、 NYT 訴訟係争中250 ドル〜(USPTO)
EU死後 70 年EPO 約 36 ヶ月AI Act でデータ開示義務€850〜(EUIPO)
中国死後 50 年約 22 ヶ月2023 年画像 AI 著作権認容判決RMB 1,000〜
韓国死後 70 年約 12 ヶ月明確な規定なし、 個別判断₩62,000〜
インド死後 60 年約 50 ヶ月研究目的のみ免除₹4,500〜
WIPO 加盟国全般パリ条約 + ベルヌ条約準拠———

📄 SSDSE-B-2026 を題材にした出典明記テンプレート集

論文・学術引用(APA 形式)

独立行政法人統計センター. (2024). 教育用標準データセット SSDSE-B-2026 [Data set].
クリエイティブ・コモンズ 表示 4.0 国際 (CC BY 4.0).
https://www.nstac.go.jp/use/literacy/ssdse/

BibTeX 形式

@misc{ssdse_b_2026,
  author       = {独立行政法人統計センター},
  title        = {SSDSE-B-2026: 教育用標準データセット},
  year         = {2024},
  url          = {https://www.nstac.go.jp/use/literacy/ssdse/},
  note         = {CC BY 4.0}
}

HTML / Markdown

[SSDSE-B-2026](https://www.nstac.go.jp/use/literacy/ssdse/) © 独立行政法人統計センター, [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)

パッケージング(README.md)

## データの出典

本リポジトリは「SSDSE-B-2026」(独立行政法人統計センター, CC BY 4.0)を含んでいます。
URL: https://www.nstac.go.jp/use/literacy/ssdse/
ライセンスファイル: data/raw/SSDSE-B-2026.LICENSE.txt

🔒 営業秘密とデータ価値

SSDSE-B-2026 のような公開データに対し、 企業内のデータ(顧客リスト、 取引データ、 製造レシピ)は営業秘密として保護される。 不正競争防止法 2 条 6 項で要件:(1) 秘密管理性(アクセス制限)、 (2) 有用性(事業価値)、 (3) 非公知性(公知でない)。 ハッキング・退職者持ち出しに対し差止め・損害賠償・刑事罰。

🤖 AI 倫理ガイドライン主要 10 件

  1. OECD AI 原則(2019):人間中心、 透明性、 説明責任、 公平性
  2. EU 信頼性 AI ガイドライン(2019):7 原則
  3. EU AI Act(2024):法的拘束力ある世界初の包括法
  4. 米国 NIST AI RMF(2023):リスク管理フレームワーク
  5. 日本 AI 事業者ガイドライン(2024):開発者・提供者・利用者向け
  6. 文化庁「AI と著作権」報告書(2024):著作権法 30 条の 4 解釈
  7. UNESCO AI 倫理勧告(2021):人権・包摂・持続可能性
  8. G7 広島 AI プロセス(2023):国際協調枠組み
  9. Anthropic Responsible Scaling Policy(2023):自主規制例
  10. OpenAI Usage Policies:商用利用での制限

📊 SSDSE-B-2026 を「権利マップ」で表現

各データ要素を権利の観点で分類:

データ要素権利の種類SSDSE-B-2026 該当列
個人を特定できる情報個人情報(PII)含まれない(都道府県レベル集計)
事実・数値著作権なし(不保護)総人口、 出生数、 気温など全列
編集著作物(データセット全体)著作権あり、 CC BY 4.0SSDSE-B-2026 全体
解説テキスト・図表著作権あり、 CC BY 4.0付属の解説資料
派生統計(自分で計算)計算者の著作権 + 元データのライセンス継承あなたの分析結果

⚖️ NYT vs OpenAI 訴訟(2023〜)の論点詳解

2023 年 12 月、 ニューヨーク・タイムズが OpenAI と Microsoft を提訴。 争点:

  1. 学習データへの NYT 記事の無断使用:数百万件の記事が GPT モデルの学習に使われた疑い
  2. 逐語的再生(verbatim reproduction):ChatGPT に特定プロンプトを与えると NYT 記事を完全再生できる例が提示
  3. 市場代替性:ChatGPT が「無料の NYT 代替」となり購読減
  4. 変容的利用かどうか:OpenAI 側は「学習=変容的」、 NYT 側は「市場代替=非変容的」
  5. 請求:差し止め、 損害賠償(数十億ドル)、 学習データからの NYT コンテンツ削除

この訴訟の判決は AI 産業全体の方向性を左右する見込み。 2025 年現在も係争中。 SSDSE-B-2026 のような CC BY 4.0 データは「最初から学習許諾済み」のため、 こうしたリスクから自由。

🗾 日本の AI と著作権をめぐる法制度

著作権法 30 条の 4(情報解析のための利用)

「著作物は、 次に掲げる場合その他の当該著作物に表現された思想又は感情を自ら享受し又は他人に享受させることを目的としない場合には、 …利用することができる」。 これにより:

文化庁「AI と著作権の関係等について」(2024 年 3 月)

文化庁が公表した「AI と著作権に関する考え方について」では、 (1) 学習段階、 (2) 生成段階、 (3) 既存作品との類似性、 の 3 段階で論点を整理。 「学習は広く許容、 生成段階で侵害判定」が基本姿勢。

🌐 EU AI Act の SSDSE-B-2026 への影響

2024 年成立の EU AI Act は段階適用。 主な義務:

適用時期義務SSDSE-B-2026 への影響
2025 年 2 月禁止 AI(社会スコア、 サブリミナル)の禁止SSDSE-B 用途は無関係
2025 年 8 月GPAI(汎用 AI モデル)の透明性義務学習データ要約に SSDSE-B も含まれる可能性
2026 年 8 月高リスク AI の規制(医療、 採用、 教育)SSDSE-B を採用 AI で使う場合に影響
2027 年 8 月全規定の完全適用—

SSDSE-B-2026 は CC BY 4.0 で出所明確、 EU AI Act の透明性要件を最も容易に満たす種類のデータ。

💼 知的財産権マネジメントのベストプラクティス

  1. IP 監査:自社が保有する特許・商標・著作権を年 1 回棚卸し
  2. 使用許諾の記録:すべての外部データ・OSS のライセンスを SBOM で管理
  3. 従業員教育:Stack Overflow コピペ、 GPL コード混入、 商標利用の研修
  4. 侵害監視:自社商標のドメイン取得、 Google アラートで言及検知
  5. 契約レビュー:ベンダー契約に IP 帰属条項を明記
  6. AI 利用ポリシー:ChatGPT / Copilot 利用時の入力データ制限
  7. 係争対応:警告書受領時の初動マニュアル整備
  8. 国際出願:PCT 制度を活用した特許の海外展開

🔍 知財検索ツール

📈 AI 関連特許の世界動向

WIPO(2024)統計:

🎓 SSDSE-B-2026 で「知財教育」を実践する 5 ステップ

  1. SSDSE-B-2026 を pd.read_csv で読み込み、 出典コメントを付与
  2. 分析結果(グラフ・表)に CC BY 4.0 ロゴと出典文を埋め込む
  3. 派生データセットを to_csv で出力、 同梱 LICENSE.txt を作成
  4. HTML/PDF レポートにライセンス情報をフッターで明示
  5. GitHub にコードを公開する際、 README に SSDSE-B-2026 のライセンス継承を明記

⚠️ よくある落とし穴

知的財産権 を実務で扱うとき、 多くの分析者が同じところでつまずきます。 代表的な失敗パターンを先回りで押さえておくと、 後工程のトラブルを大幅に減らせます。

❌ 「Web 上にあるから自由」誤解
Web 公開=著作権放棄ではありません。 利用には許諾またはフェアユース該当性が必要。
❌ 生成物の権利を誤解
AI が出した文章を「自分が書いた」と主張するのは契約・倫理上の問題。 利用規約も確認。
❌ 国際差を無視
学習データの扱いは日米欧で大差。 グローバル展開時は最も厳しい法に合わせる。
❌ オープンソースライセンス違反
GPL コードを商用クローズドに混ぜると違反。 LLM 生成コードの出所も注意。
❌ 商標とドメイン名
他社商標を含むサービス名は商標権侵害リスク。 事前調査を。

※ 上記は文献調査・現場経験で報告される頻度の高い注意点。 ドメインや手法のバージョンによって追加の落とし穴がある場合があります。

データ分析者がいちばん近いところ — 著作権法 30 条の 4

知的財産権のうち、データ分析の現場に直接効いてくるのは 著作権法 30 条の 4(著作物に表現された思想又は感情の享受を目的としない利用)です。 2018 年改正で入った条文で、情報解析のためであれば、原則として著作物を許諾なく利用してよい と定めています。機械学習の学習データやテキストマイニングが、ここに乗ります。

やること 30 条の 4 に乗るか 理由
Web 記事を集めて語の出現頻度を数える乗りやすい表現を享受せず、統計量だけを取り出している
画像を集めて分類モデルを学習する乗りやすい学習は「享受」を目的とした利用ではない
集めた記事を全文そのまま社内 Wiki に載せる乗らない人が読むための提供=享受目的
学習した生成モデルで、元作品によく似た出力を売る乗らない出力側は別途、複製権・翻案権の問題になる
有料データベースを規約に反して収集する乗らない著作権とは別に契約違反になる

誤解しやすいのは最後の 2 行です。30 条の 4 は「入口」の話しかしていません。 学習に使ってよいことと、出てきたものを配ってよいことは別問題です。 また、著作権が及ばなくても利用規約という契約は生きています。 「著作権法上は適法だが、規約違反なので損害賠償」という事態は普通に起こります。 スクレイピングを始める前に、robots.txt と利用規約を読むのはこのためです。

本教材が使っている SSDSE(教育用標準データセット)は、 独立行政法人統計センターが教育目的での利用を前提に公開しているデータです。 公的統計の数値そのものには著作権が生じないと解されますが、 データセットとしての編集著作物性や、提供元が示す利用条件は別途確認するのが安全です。 「公的統計だから何でも自由」と決めつけず、 出典を明記し、提供元の条件に沿って使う — これが実務での最低限の作法になります。

🗺 概念マップ

関連概念を視覚的に整理した概念マップ。

ip rights CC ライセンス SPDX EU AI Act 生成 AI ガイドライン パブリックドメイン 著作権 / 特許権

上図中心の「知的財産権 (IP rights)」から、 著作権 ・ 特許権 ・ パブリックドメイン ・ 生成 AI に関する政府ガイドライン ・ 落とし穴 (Web 公開イコール自由誤解等) の軸が放射する。 データサイエンスの実務では、 学習データの著作権 / モデルの特許性 / 出力物の権利帰属が日常的な論点。

🔗 隣接手法への橋渡し

知的財産権はデータサイエンスの「データ収集」「モデル開発」「成果物配布」のすべての段階で関わる横断的な制約。 倫理・規制と密接に連携する。

生成 AI の登場で従来の枠組みが揺らいでいる: 学習データの著作物利用 (日本は著作権法 30 条の 4 で原則 OK)、 出力物の著作権 (人間の創作性なしでは認められない)、 商標的類似性など。 最新の政府ガイドライン (文化庁・経産省) と判例を継続的に確認する必要がある。

🌳 手法選択フロー

データ・モデル・成果物の IP 取り扱いを、 用途別に 3 段階で判定する。

  1. 学習データの出所は? 自社収集 → 利用規約で明示、 オープンデータ (政府統計・Wikipedia) → ライセンス (CC-BY 等) 遵守、 Web スクレイピング → robots.txt + 著作権法 30 条の 4 (情報解析目的) を確認
  2. モデルの公開方式は? 内部利用のみ → 営業秘密で保護、 OSS 公開 → MIT / Apache 2.0 等のライセンス選択、 商用 API → 特許出願 + 利用規約整備
  3. 出力物の権利帰属は? 人間が編集 → 著作権発生、 AI 完全自動 → 著作権なし (パブリックドメイン的扱い)、 商用利用 → 利用者と提供者の合意を契約で明文化

「Web に公開されているから自由に使える」は誤解。 利用には許諾またはフェアユース該当性が必要で、 学習目的の利用も日本以外では制限される場合がある。

最後に、実務でいちばん多い相談を 1 つ。 「社外のデータで作ったモデルは誰のものか」という問いには、 法律だけでは答えが出ません。学習データの利用条件、開発委託契約の成果物条項、 クラウド事業者の利用規約 — この 3 つが重なって決まります。 権利の所在は、分析を始める前に契約で決めておくのが唯一の確実な方法です。 始めてから揉めると、モデルを捨てるしかなくなることもあります。

❌ 「Web 上にあるから自由」誤解
Web 公開=著作権放棄ではありません。 利用には許諾またはフェアユース該当性が必要。
❌ 生成物の権利を誤解
AI が出した文章を「自分が書いた」と主張するのは契約・倫理上の問題。 利用規約も確認。
❌ 国際差を無視
学習データの扱いは日米欧で大差。 グローバル展開時は最も厳しい法に合わせる。
❌ オープンソースライセンス違反
GPL コードを商用クローズドに混ぜると違反。 LLM 生成コードの出所も注意。
❌ 商標とドメイン名
他社商標を含むサービス名は商標権侵害リスク。 事前調査を。
💥 SSDSE-B-2026 を出典明記せず教材化
CC BY 4.0 違反。 「東京都 14,086,000 人」「神奈川県 9,229,000 人」と書いた瞬間に出典記載義務が発生。 出版差し止め・賠償リスク。
💥 GitHub の MIT ライセンスコードを社内クローズドに転用
MIT は商用可だが、 ライセンス・著作権表示の保持義務あり。 削除すると違反。
💥 GPL コードを商用クローズド製品に同梱
GPL は強い copyleft。 リンクしただけで自社コードも GPL になる可能性。 ライセンス互換性チェックは必須。
💥 「自分で書いた」つもりで Stack Overflow からコピペ
Stack Overflow は CC BY-SA 4.0。 商用利用は出典+SA 継承が必要。
💥 AI 生成物の単独著作権を主張
日本・米国・EU の現在の解釈では、 AI 単独生成物は人間の創作的寄与がない限り著作権発生しない。

📜 ひとことヒストリー

知的財産権 は「倫理」分野の中で発展してきた概念・手法です。 学術的には継続的な研究で精緻化され、 実務的にはツール・ライブラリの普及で誰でも使えるようになってきました。 用語の使い方・意味は時代と分野で少しずつ変わるため、 文脈に応じた解釈が大切です。 入門書だけでなく、 標準的な教科書(例:データサイエンス・統計学の定本)や信頼できるオンライン教材も併用すると、 ぶれない理解に近づけます。

✅ 実務チェックリスト — 知的財産権

  • □ 用語の定義を自分の言葉で説明できるか
  • □ 使うべき場面と使ってはいけない場面を区別できているか
  • □ 数式や指標の前提条件を確認したか
  • □ 入力データの尺度・分布・サンプル数を確認したか
  • □ 結果の不確実性(信頼区間・標準誤差)を把握しているか
  • □ 解釈と限界を区別できているか
  • □ 関連用語・落とし穴を一通り点検したか
  • □ レポートに必要な情報(出典・前提・限界)を含められるか

🎯 まとめ — このページで押さえること

「知的財産権」 はこのページで詳しく扱った概念です。 持ち帰ってほしい 3 つの要点:

  1. 知的財産権(IP Rights)=著作権・特許・商標・意匠など、 創作物や発明を保護する権利の総称。
  2. AI 文脈での争点:(1) 学習データの利用、 (2) 生成物の権利、 (3) スタイル模倣の合法性。
  3. 日本の著作権法 30 条の 4:情報解析目的の学習は原則合法(2018 改正)。 ただし「享受目的」と区別。

さらに学ぶには、 関連用語 や 関連グループ教材 を参照してください。 各用語ページを縦断的に読むことで、 体系的な理解が育ちます。