機械学習を用いたテキスト分類によるライセンス特定のためのルール作成プロセス支援
東 裕之輔
和歌山大学 システム工学研究科
s151039@sys.wakayama-u.ac.jp

眞鍋 雄貴
熊本大学 大学院自然科学研究科
y-manabe@cs.kumamoto-u.ac.jp

大平 雅雄
和歌山大学 システム工学部
masao@sys.wakayama-u.ac.jp

要旨

ソフトウェア開発が盛んに行われている．ソフトウェアを再利用する際には，著作者からライセンスを得ること

近年では，OSS を利用したソフトウェア開発が盛んにが義務付けられている．OSS の場合，一般的には，ソー行われており，1 つのソフトウェアに多数のライセンス

スコードのコメントアウト部分に明示されている，ライが含まれている場合がある．ライセンス違反を回避する

センスを遵守することで OSS の再利用が可能となる．

ために，ソースファイル単位でのライセンス特定を行う

ただし，一つのソフトウェアが複数の異なるソフトことが必要である．最も精度の高いライセンス特定ツー

ウェアを再利用し構成される場合，複数のライセンスが，ルである Ninka[5] は，未知ライセンスの存在を検出する

一つのソフトウェアに共存することが想定される．OSSことができる．しかし，未知のライセンスが何であるかを含めたライセンスには不整合問題というものが存在す

は利用者が目視により確認する必要がある．また，大量る．ライセンス不整合問題とは，異なるライセンスの条の未知ライセンスが出力される場合もある．このような項間に矛盾した条項が存在し，両方のライセンスに違反

未知ライセンスを特定するには，ライセンスルールを手している状態のことを指す．ライセンスに違反すると，作業で作成する必要があり，複雑で労力がかかる．本研

最悪の場合，訴訟問題に発展する恐れがある．例えば，

究では，ライセンスルール作成支援を目的とし，Debian2007 年に GPL 違反で提訴され VoIP 電話機の仮販売差

v7.8.0 のソフトウェアパッケージを入力として Ninka が未知ライセンスと判定したファイル群に対して K-means法を適用し，ライセンス記述の分類精度を定性的および定量的評価を行った．また，Random Forest 法を用いて，類似ライセンスの推定をおこなった．実験の結果，ライ
センスのルール作成プロセスにおいて，機械学習を用いたテキスト分類が有用であることがわかった．

止め処分に至った Skype 社などの事例がある 1 ．ライセ
ンス違反の回避を目的として，ライセンスをソースファ
イル単位で機械的に特定する手法やツールが複数提案されている．German らの研究 [5] では，Ninka と呼ばれるライセンス特定ツールが，現時点で最も精度の高いツールであることを示している．ただし，ライセンス記述が検出された場合に，他の手法やツールは何らかの既知ラ
イセンスを出力として返す（誤判別）するのに対して，

Ninka は，未知ライセンスの存在が検出されたことを出

1. はじめに力する．しかし，未知ライセンスそのものは，目視により確認する必要がある．

生産性向上の手段として，ソフトウェアの再利用は必

本研究では，まず，特定を行ったファイルの内，Ninka

要不可欠なものとなっている [9]．特に近年では，オープ
1 OSS ライセンスの比較および利用動向ならびに係争に関する調
査:http://www.ipa.go.jp/files/000028335.pdf

ンソースソフトウェア（以降，OSS と呼ぶ）を利用した

70

が未知ライセンスと判別したソースファイルが，どの程表 1. 本論文で使用する一般的なライセンスとその度の割合を占めているかを予備的に調査する．調査の結略称果，特定を行ったソースファイルの内，未知ライセンス
ファイルが大量に含まれていることがわかった．すなわ
ち，Ninka は誤検知そのものは少ないが，未知ライセンスとして判定したライセンスを多く含むことがわかった．
次に，大量の未知ライセンスファイルをすべて目視により調査しライセンスを特定するには相当な労力がかかる
ため，未知ライセンスファイルをクラスタリング（分類）し，クラスタの代表的なファイルを目視するのみでライセンスを特定できるかどうかを調査した．本研究では，

Debian v7.8.0 のソフトウェアパッケージを入力として，
Ninka が判別した未知ライセンスファイル集合に対して
K-means 法を適用し，ライセンス記述の分類精度を定性
的および定量的評価を行った．また，Random Forest 法を用いて，類似ライセンスの推定をおこなった．実験の結果，ライセンスのルール作成プロセスにおいて，機械学習を用いたテキスト分類が有用であることがわかった．

略語.

説明

Apachev2
BSD4
BSD3
BSD2
CeCillCDDL
CPLv1.0
EPLv1.0
FreeType
GPLv1
GPLv2
GPLv3
GPLnoVersion
LGPLv2.1
LGPLv3LibraryGPLv2.0
MIT/X11
MIToldMPLv1.1
PythonPostgreSQLSameAsPerl
SeeFileZLIB
publicDomain

Apache License version 2.0
初期の BSD License，BSD4clause License
BSD3clause License
BSD2clause License
Cea Cnrs Inria Logiciel Libre License
Common Development and Distribution License
Common Public License version 1.0
Eclipse Public License version 1.0
FreeType License
General Public License version 1
General Public License version 2
General Public License version 3
GPL with no version indicatedLesser General Public License version 2.1
Lesser General Public License version 3
Library General Public License version 2.0
MITLicense，MIT が X11 のためにリリースしたライセンス
昔の MIT/X11
Mozilla Public License version 1.1
Python License
Postgre SQL License
Perl に適応されているライセンス
別のファイルへの参照
ZLIB/libpng license
パブリックドメインとされているライセンス

2. 用語が載っているものと，ライセンス全文への参照が記
本章では，本論文で用いる用語を定義する．

述されているものがある．

ソフトウェアライセンス ソフトウェアの利用許諾であ未知ライセンスファイル Ninka がライセンス特定の際，る．ソフトウェアの利用者は，ライセンスを遵守す

未知のライセンスと判別したソースファイルである．

ることで，ソフトウェアを利用することができる．

未知ライセンス記述 未知ライセンスファイルのライセ

ライセンスはソフトウェア全体だけではなく，ソーンス記述である．

スファイルについても決まっている．ライセンスには条項の修正を受けた，複数のバージョンが存在す

類似ライセンス 既存ライセンスをベースに作られたラる．例えば，GPL には現在 3 種類のバージョンがイセンスであり，ライセンス記述が類似しているラ存在するが，全て別のライセンスである．本論文

イセンスである．

では，ライセンスが複数のバージョンを持つ場合，ライセンスルール 正規表現などのルールベースによる

特定のバージョンを示すために接尾辞 v を用いる．

ライセンスの特定に必要な知識．

また本論文では “or later” を接尾辞+で表現する．

“or later” とは，例えば，GPL のライセンス記述に“either version 2 of the License, or (at your option)
any later version” と記載されている場合，version
2 以降のバージョンのうちのどれかでの再頒布が可能となる．表 1 に本論文で使用するライセンスの名前と略称を示す．

3. ライセンス特定手法
ソフトウェアが複数の異なるソフトウェアを再利用し構成される場合，複数のライセンスが，一 つのソフト
ウェアに共存することが想定される．ライセンスには，不整合問題が存在する．ライセンス不整合問題とは，異なるライセンスの条項間に矛盾した条項が存在し，両方

ライセンス記述 ライセンスの明示を行っている文章でのライセンスに違反している状態である．

ある．主にソースコードのコメントアウト部分にてライセンスの不整合問題を回避するため，ソースファ

明示される．ライセンス記述には，ライセンス全文

イル単位でのライセンス特定を行う必要があるが，全71

てのソースファイルのライセンスを目視で確認するのはファイルとなった．表 2 に作成した Firefox v25.0 のソー相当な労力がかかる．そのため，正規表現などのルール

スファイル集合のライセンスを Ninka で特定したライセ

ベースでソースファイルのライセンスを機械的に特定すンスの内，上位 10 件のライセンスを示す．

る手法やツールが複数提案されている．Ninka[5] は，ライセンス記述を複数の文に分解したライセンス文を特定

表 2. FireFox v25.0 のライセンス（上位 10 件をし，ライセンス文で構成される既知ライセンスを特定結表示）

果として出力する．Fossology[6] は，b-SAM2 アルゴリ

Ninka 特定結果

ファイル数

ズムを用いて既知のライセンス記述とソースコード中のNONE

コメントを比較し，最も類似している既知ライセンスを

spdxBSD3959

特定結果として出力する．他にも，単純な正規表現を利Apachev2

752

FreeType

481

BSD3

240

MPL1 1andLGPLv2 1,MPLv1 1

204

SeeFile143

MITX11135

spdxBSD2

90

MITmodern

60

UNKNOWN

17,678用したソフトウェアライセンス特定ツールも存在する．

OSLC3 はソースコード中のコメントとライセンス記述
間での最長一致列を類似度とする．次に最も類似度が高かったライセンスを特定結果として出力する．Ohcount4
は各ライセンス記述に対応した正規表現を用いて，ソースコード中のコメントにマッチした正規表現からライセ
ンスを特定する．
現時点で，どの手法が最も有用なのか検証するため，
German ら [5] は各ツールを Debian v5.0.2 からランダムに選出した 250 のソースファイルのライセンスを各ツールで特定し，その性能の評価を F-尺度法を用いて行った．その結果，最も F 値が高かったツールは Ninka であった．ただし，ライセンス記述が検出された場合に，他の手法やツールは何らかの既知ライセンスを出力として返す（誤判別）するのに対して，Ninka は，未知ライ
センスが存在が検出されたことを出力する．しかし，未知のライセンスそのものは手作業によりライセンスの確認を行わなければならない．そこで本研究では，未知ラ
イセンスファイルに着目した分析を行う．

1,390

特定に成功したライセンスのうち，未知ライセンス
ファイルは 17,678 ファイル存在し，特定を行ったソース
ファイルの内，約 79%を占めていた．予備調査の結果，Firefox v25.0 は，大量の未知ライセンスファイルが含まれていることがわかったが，大量の未知ライセンスファ
イルのライセンスを目視で特定するのは相当な労力がかかる．そのため，未知ライセンスファイルのライセンスを特定できなければ，実用的とはいえない．未知ライセ
ンスを特定するには，新しくライセンスルールを作成する必要がある．

5. ライセンスルール作成プロセスの問題点
4. 予備調査
5.1. ライセンスルール作成プロセス
Ninka が特定したソースファイルの内，未知ライセン
Ninka のライセンスルール作成プロセスは以下の 4 つの手順から成る．

スファイルがどの程度の割合を占めているかを予備的に5調査する．データセットとして，Firefox v25.0 のソース
ファイルを選んだ．対象とする言語は Java (.java), C (.c1. 未知ライセンスファイルを調査し，追加する未知ラ
イセンス記述を決定する．

, .h), C++ (.cpp, .cxx, .cc, .hxx), Lisp (.el), Perl (.pmand .pl), Python (.py), Ruby (.rb), ShellScript (.sh),
Makefile (.mk) である．これらの拡張子を条件にソース
ファイル集合を作成した結果，Firefox v25.0 では 22,413

2. 未知ライセンス記述を複数のライセンス文に分解する．

2 http://fossology.org/symbolic alignment matrix

3. 既知なライセンス文が存在しないか調査し，ユニー
クなライセンス文を決定する．

3 http://sourceforge.net/projects/oslc/
4 http://github.com/blackducksw/ohcount5 ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/25.0/
source/irefox-25.0.source.tar.bz272

4. 新規に追加するライセンス文の正規表現を作成し，ライセンスルールを追加する．

（PostgreSQL の類似箇所）

Permission to use, copy, modify, and distribute
this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above
copyright notice and this paragraph and the following two paragraphs appear in all copies.


手順 1 では，ライセンス特定ツールに追加すべきライ
センスを決定するため，未知ライセンスファイル集合を調査する．ここでは，未知ライセンスファイル数に対して多くを占めているライセンスがライセンス特定ツールに追加すべきライセンスである．
手順 2 では，未知ライセンス記述を複数のライセン
ス文に分解する．このプロセスは Ninka を用いて行う．

（Python の類似箇所）

Ninka はライセンス特定時にオプションを指定すること
で中間生成ファイル “ファイル名.goodsent”（以降では，
goodsent ファイルと呼ぶ）を出力する．goodsent ファイ
ルはライセンス記述を抽出し，Ninka によってライセン
ス文に分解されたライセンス記述が出力されているファイルである．追加すべきライセンスのソースファイルに対して Ninka を実行し，goodsent ファイルを出力させることができれば，手順 2 は完了する．
手順 3 は，手順 2 で分解したライセンス文の一部は，既知である場合がある．同じライセンス文が違う名前で登録されることになってしまい，正しいライセンス特定が行えなくなるため，ライセンス特定ツールにとって既知であるライセンス文を調査し，追加するライセンス
文と，同一のライセンス文を明らかにする必要がある．
Ninka の場合，ライセンス文は表記ゆれを考慮した拡張
正規表現で登録されているため，単純な検索だけでは，
このプロセスは行うことはできない．
最後に，手順 4 では，新しく追加するライセンス文の正規表現を作成し，ライセンスルールを追加する．

Permission to use, copy, modify, and distribute
this software and its documentation for any purpose and without fee is hereby granted, provided
that the above copyright notice appear in all copies
and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertisingor publicity pertaining to distribution of the software without specific, written prior permission.

図 1. 類似ライセンス例（Python と PostgreSQLの例）

以上により，ライセンスルール作成プロセスを自動化できることが望ましい．しかし，自動化のためには，未知ライセンスファイル集合からライセンスルールに追加すべきライセンスを抽出することがまず必要になる．追5.2. ライセンスルール作成プロセスの問題点

加すべきライセンスを抽出する手段の 1 つとして，機械学習を用いたテキスト分類が挙げられる．テキスト分類

ライセンスルール作成プロセスにおける問題点として，を行うことで，類似する未知ライセンス集合を抽出する

ライセンスルール作成プロセスは労力がかかると考えらことが容易になると考えられる．ただし，機械学習でのれる．特に労力がかかる手順は，手順 1，手順 3 がある．

テキスト分類をライセンスに対して行った研究はまだな

手順 1 は，未知ライセンス集合のライセンスを目視で確い．ライセンスルール作成プロセス自動化の支援を行う

認し，未知ライセンスファイル集合に存在するライセンには，まず，機械学習を用いたテキスト分類の限界を明スの内訳を明らかにする必要がある．手順 3 は，ライセ

らかにする必要がある．そこで本研究では，機械学習を

ンス特定ツールの知識の調査を行わなければならない．

用いたテキスト分類が，既存 OSS ライセンス特定手法

ライセンスには，ライセンス記述が酷似している類似ラのルール作成プロセスの支援にどれくらい有用かを明ら

イセンスが多数存在する．図 1 の Python と PostgreSQL

かにすることを目的とした分析を行う．

のような類似ライセンスは他にも存在するため，ライセ
ンス記述の違いを見極めなければならないライセンスを全て探す必要がある．

73

6. 分析方法

であり，ソフトウェア企業が，独自のライセンスを作成する際の雛形とすることが多いからである．K-means 法

本章では，ライセンスルール作成プロセスである手順の最適クラスタ数は不明なため，本研究で用いる主要な

1，手順 3 の支援に，機械学習を用いたテキスト分類がどれくらい有用であるかを明らにするための分析方法を説明する．

ライセンスに従って 14 とし，Random Forest 法の学習

567
$%&7

データは表 3 の OSS プロジェクトから，100 ファイル分のライセンス記述をコメントアウト単位で抽出した．

867

表 3. 推定を行う類似ライセンス及び取得先!"#()7!"#'-.7!"#!$%&"#$%&''()"#$%&*+,'

9:;<=>?'@A&BC-'$%&'-.7-."#$%&/'
01234'

図 2. 分析方法の概要
具体的には，図 2 のように，GPL や MIT で構成されている未知ライセンス記述群を入力とし，GPL と MITの 2 つの類似ライセンスのグループにクラスタリングすライセンス

ライセンス記述の取得先取得した日付Apachev2

OpenOﬃce v3.4.0

2014/11/16

BSD3

j-gitv3.5.1

2014/10/14

BSD2

OpenSSh v6.7p1

2014/11/19

GPLv1

Gcc v2.9.0

2014/11/21

GPLv2

Gcc v3.0.1

2014/11/29

GPLv3

Gcc v4.9.2

2014/11/16

LGPLv2.1

Glibc v2.20

2014/11/20

LGPLv3

OpenOﬃce v3.3.0

2014/10/18

LibraryGPLv2.0

Gcc v4.9.2，Glibc v2.2.0，FireFox v9.0-

MIT

FireFox v33.0

2014/11/15

MPLv2.0

FireFox v33.0

2014/11/15

MPLv1.1

FireFox v9.0

2014/11/20

CDDLv1.0

zfs-fuse v0.6.9

2015/2/2

EPLv1.0

Eclipse MARS

2014/11/19

ることがどれくらいできるかどうかを明らかにする．
機械学習を用いたテキスト分類を行うには，まず，未以降では，分析方法の各処理（前処理，クラスタリン

知ライセンス記述を単語文書行列 (TDM) を用いて数量

グ，類似ライセンス推定）の詳細を説明する．

化する前処理が必要である．
次に，手順 1 を支援するため，前処理後の未知ライセ

6.1. 前処理：TDM の構築

ンス記述群に対して K-means 法によるクラスタリングを行う．クラスタリングにより，一つのライセンスから

文章を数量化する方法の一つとして，単語文書行列

成るクラスタを生成することができれば，追加すべきラ(Term-DocumentMatrix: TDM) を構築する方法がある．TDM とは全文書に現れた単語一つ一つが行，各文書を列とした行列であり，総単語数を N，総文書数を Mとすると N × M の行列となる．その [ i , j ] 番目の要素
は，単語 i が文書 j に現れる回数に対応する．次に TDMを構築するまでの過程と処理を順に説明する．
最初に改行の除去を行う，未知ライセンス記述の改行を空白に置換する．次に，未知ライセンス記述の数値の英単語化を行う．ライセンスには複数のバージョンが存在することを 2 章で述べた．このバージョンの値を学習させたいため，数値を英単語として扱う．1 → one，2 →two のように 1−9 までの数値を英単語に置換する．
次に，未知ライセンス記述から英語の文書によく出てくる単語，例えば，“i”，“me”，“my” などの人称代名詞や “and”，“but” などの接続詞などを除去するため，ストップワードの設定を行う．ストップワードには，R のテキストマイニングパッケージ 7 で利用できイセンスを探すための調査が容易に行えると考えられる
ため，手順 1 を支援することができる．
次に，手順 3 を支援するため，前処理後の未知ライセ
ンス記述に対して Random Forest 法による類似ライセンスの推定を行う．未知ライセンス記述の類似ライセンスを推定することができれば，ライセンス特定ツールの知識内に存在する既知のライセンス文を把握することが容易に行えるようになると考えられるため，手順 3 を支援することができる．
本実験で用いる K-means 法のクラスタ数，Random
Forest で推定を行う類似ライセンスは，OSI が発表している主要なライセンスを参考に決定した．本実験で推定を行う類似ライセンスを表 3 に示す．OSI が発表している主要なライセンスとは，人気でかつ広く使用されているライセンス 6 13 種類と MPLv1.1 を含めた 14 種類である．MPLv1.1 を含めた理由は，MPLv1.1 はマルチラ
イセンスを採用した古くから用いられているライセンス
6 http://opensource.org/licenses/category

7 http://cran.r-project.org/web/packages/tm/tm.pdf

74

る stopwords(kind = ”en”) で表示される単語 174 語をランダムに選び，Ninka でライセンスを特定できなかっ設定する．最後に，R のテキストマイニングパッケー

た未知ライセンス記述群をデータセットとして抽出する．

ジで利用できる関数 T ermDocumentM atrix と設定し7.1. 評価基準

たストップワードを用いて TDM を構築する．ただし，Random Forest 法においては，実験に使用した計算機環境 8 では，計算時間が膨大となったため，学習データと未知ライセンスファイルから構築した TDM から，1 回
のみ出現した単語を削除し，再構築した TDM を用いる．

本研究では特に労力がかかるプロセスは，手順 1, 手
順 3 であると述べた．以下の 2 点が確認できれば，手順1 を支援できるとする．
• 評価基準 A. ライセンス記述が存在しないクラスタは存在するか6.2. K-means 法によるテキスト分類

械学習アルゴリズムである K-means 法 [8] を用いる．テ• 評価基準 B. 一つのライセンスで 75%以上を占めているクラスタは存在するか

キスト分類に K-means を用いた理由は，未知ライセン

評価基準 A は，ライセンス記述が存在しないクラスタ

ス記述に対して機械学習を用いたテキスト分類を行ったが存在すれば，明らかに調査の対象外な未知ライセンス

例がなく，クラスタリング結果が予想できないことから，記述を除外できる可能性があるということである．評価

複雑なクラスタリングアルゴリズムを使用すると結果の基準 B は，一つのライセンスで 75%以上を占めている

考察が困難になると考えたからである．本研究で用いるクラスタが存在すれば，クラスタの選別などを行うこと

K-means 法は，クラスタ数を 14，類似度はユークリッ
ド距離とした．

で，容易に追加すべきライセンスを抽出できそうである

未知ライセンス記述群のテキスト分類に，教師なし機と考えられる．評価基準 B の判定を行うとき，未知ライ
センス記述数が 10 以下のクラスタは除外する．評価基

6.3. Random Forest 法による類似ライセンス推定

準 A,B を満たしていれば，テキスト分類が OSS ライセ
ンス特定ツールのライセンスルール作成プロセス支援にクラスタの類似ライセンスの推定として Random For-

有効であるとする．

est 法 [2] を用いる．テキスト判別手法に Random Forest
を用いた理由は，多値分類アルゴリズムの中で精度が最も高いことで知られているためである．クラスタの類似
ライセンスは，各クラスタの未知ライセンス記述の類似
ライセンス推定結果を多数決することにより決定する．
Random Forest 法により，未知ライセンス記述群から構築した TDM を，表 3 から取得した学習用のライセンス
記述から構築した TDM を学習し，類似しているライセ
ンスを出力する．

次に，以下を確認できれば，手順 3 を支援できるとする．

• 評価基準 C．目視により特定したクラスタのライセ
ンスの類似ライセンスであったクラスタが 50%以上存在したか
Random Forest で推定した，クラスタの類似ライセ
ンスが，目視により特定したクラスタのライセンスの類
似ライセンスであったクラスタが 50%以上存在すれば，
類似ライセンス推定を全く行わない状況と比べると，違7. 実験

いを見極める必要のある類似ライセンスを探すのに有用であるとする．なお，類似ライセンスかどうかは，ライ

本実験は，機械学習を用いたテキスト分類がライセン

センス記述と一致している文章が存在すれば類似ライセ

スルール作成プロセスの支援にどれくらい有用であるかンスとする．

どうかを明らかにすることが目的である．6 章で述べた分析方法を用いて，OSS ライセンスルール作成支援プロ

7.2. データセット

セス手順 1，手順 3 にどれくらい有用かどうかを明らか
本実験では Linux ディストリビューションである Debian v7.8.0 のソフトウェアパッケージのソースファイル 9にするための実験を行う．本実験では Debian v7.8.0 の各ソフトウェアパッケージから 1 つのソースファイルを

9 http://ftp.riken.jp/pub/Linux/debian/debian-cd/
7.8.0/source/iso-dvd/

8 OS:OS X Yosemite，CPU:2.3GHz Intel Core i7，メモリ:16GB

75

の未知ライセンス記述群をデータセットとして抽出した．
表 4. K-means 法によるクラスタリング結果

Debian には 48,55910 のソフトウェアパッケージを含んでいるため，多数のライセンスを含んでいる．本実験では “.zip”， “.tar.gz” ， “.tar.xz” ， “.tar.bz2” をソース
コードアーカイブと見なし解凍した．ソースファイルの拡張子は，Gonzalez ら [7] によって報告された Debianでよく使われているプログラミング言語 8 種類のうち，シェルスクリプトと PHP を除く，6 種類のプログラミン
グ言語の拡張子，Java (.java), C (.c), C++ (.cpp , .cxx
, .cc), Lisp (.el ，.jl), Perl (.pm , .pl), Python (.py) を選んだ．これらのプログラミング言語で書かれている
12,725 パッケージから各 1 ファイルをランダムで抽出
し，Ninka でライセンス特定を行った結果，ソースファ
イル 12,725 ファイルのうち未知ライセンスファイルは
2,838 ファイルであった．この未知ライセンスファイル集合から goodsent ファイルに書かれている文章を未知ライセンス記述群として取得しデータセットとする．

クラスタ

目視によるライセンスの内訳

データ数

1

NONE

2

GFDL ライセンス全文

23
1

3

NONE，GPL，GPLv2

382

4

SameAsPerl（248/312），GPL，GPLv2

312

5

Apachev2，Cecil，LGPLv2.1+

55

6

GPLv2+，GPL，LGPLv2.1+

278

7

Zlib（41/46），SOFA，Other

43

8

BSD3，BSD2，BSD-style

85

9

NONE

2

10

CC の全文1

11

CPL のライセンス全文

1

12

MIT（105/118），BSD4

118

13

NONE

14

Copyright，SeeFile，ライセンス名のみ

1
1536

成功したとし，クラスタのライセンスが Random Forest
法が推定可能なライセンスではなかった場合とクラスタ

7.3. 実験結果のファイル数が 10 以下の場合は推定不可とし評価には含めない．推定が可能であった 6 クラスタのうち，4 ク

7.3.1

K-means のクラスタリング結果

ラスタは類似ライセンスの推定に成功した．その精度は

4/6 = 約 67%（小数点第 2 位四捨五入）である．クラス
タ 12 に関しては Random Forest 法により推定したクラスタの類似ライセンスは，目視で確認したクラスタの類
似ライセンスと一致している．
次に，類似ライセンスが一致しているクラスタ 12 以
外の類似ライセンスの推定が成功したものに関して類似箇所を示す．
LGPLv3+ と GPLv2+の類似箇所
LGPLv3 と GPLv2 は大部分が同一の記述であり，異なる箇所は，バージョンの数字の違いと，“GNU General Public License” と “GNU Lesser General Public
License” の違いの 2 箇所のみである．
MIT と ZLIB の類似箇所
MIT と ZLIB の類似箇所はいくつか存在する．MIT の免責条項 “THE SOFTWARE IS PROVIDED ‘AS IS’,WITHOUT WARRANTY OF ANY KIND, EXPRESSOR IMPLIED,” と ZLIB の冒頭にある免責条項 “Thissoftware ‘as-is’, without any express or implied warranty.” の箇所では，大文字表記と小文字表記の点に違いがあるが，文章は類似している．もう一つは MIT の冒頭にある “Permission is hereby granted” と ZLIB の“Permission is granted” である．
BSD2 と BSD3 の類似箇所

未知ライセンス記述群を 14 のクラスタに分類した．クラスタの未知ライセンスを目視で特定し，各クラスタで最も多かったライセンスのうち上位３つと，クラスタのデータ数をまとめたものを表 4 に示す．表 4 において，ラ
イセンス記述が無かったクラスタは，クラスタ 1，9，13の 3 クラスタで確認できた．一つのライセンスで 75%以上を占めているクラスタは，クラスタ 4，7，12 の 3 つのクラスタで確認できた．特に，クラスタ 7 に関しては，

ZLIB が 95%以上を占めている．以上から，K-means 法によるクラスタリングは，評価基準 A，B を満たしているため，ライセンスルール作成プロセスに有用であると
する．

7.3.2

Random Forest 法の類似ライセンス推定結果

Random Forest 法による各クラスタの類似ライセンス
推定結果を表 5 に示す．各クラスタのライセンスは，各クラスタの未知ライセンス記述のライセンス特定，あるいは推定した結果から多数決を行い決定する．目視により特定したクラスタのライセンスと Random Forest 法
により推定したライセンスが類似していた場合，推定に10 https://packages.debian.org/stable/allpackages?format=txt.gz76表 5. Random Forest 法による類似ライセンス推定
クラスタ

目視の結果

正解集合

推定結果

推定の成否

1

NONE

なし

MIT

-

2

GFDL

GFDL

MPLv1.1

-

3

NONE

なし

MIT

-

4

SameAsPerl

GPLv1，GPLv2，GPLv3，LGPLv2.1，LGPLv3

MIT

失敗

5

Apachev2

Apachev2，BSD2，BSD3

MIT

失敗

6

GPLv2+

GPLv1，GPLv2，GPLv3，LGPLv2.1，LGPLv3

LGPLv3

成功

7

ZLIB

MIT

MIT

成功

8

BSD3

Apachev2，BSD2，BSD3

BSD2

成功

9

NONE

なし

MIT

-

10

CC

CC

BSD2

-

11

CPLv0.5

なし

BSD2

-

12

MIT

MIT

MIT

成功

13

NONE

なし

MIT

-

14

Copyright

なし

MIT

-

各クラスタの類似ライセンスの推定を行った結果，約67%の精度で，類似ライセンスを推定することができた．
本実験では，推定を行うライセンスを 14 種類に設定し，類似ライセンスの推定を行った．しかし，未知ライセン
スファイル集合には，14 種類以外のライセンスが多数含まれていることが考えられる．推定を行うライセンスの種類を増やすことで，精度の向上が期待できる．また，ライセンス記述がないクラスタが確認できたことから，
ソースコードを学習し，ライセンス記述がないクラスタの推定が可能であると，ライセンスルール作成プロセスの手順 1 の支援においても有用であると言える．

BSD2 と BSD3 は大部分が同一の記述であり，この 2つのライセンス記述の異なる箇所は “3.Neither〜” 条項が存在するか否かのみである．
以上により，評価基準 C を満たしているので，Random
Forest 法を用いた類似ライセンスの推定は，ライセンス
ルール作成プロセス支援に有用ではないかと考えられる．

8. 考察
8.1. ライセンスルール作成プロセス支援の可能性
データセットのクラスタリングを行った結果，1 つの8.2. 類似ライセンスの推定結果

ライセンスで 75%以上を占めているクラスタが 3 つのク
ラスタで確認できた．特にクラスタ 7 においては，ZLIB

本実験で行った類似ライセンスの推定では，Random

ライセンスが 95%以上を占めていた．しかし，各クラス
タのライセンスの内訳は，クラスタ内の未知ライセンス

Forest 法の予測結果は MIT とされることが多かった．ク

記述を目視で確認しなければ，把握することができない．

ラスタ単位では 14 クラスタ中 9 クラスタに，2,838 の未各クラスタのライセンスの内訳を把握するには，同一ラ

知ライセンス記述の内，2,415 ファイルが MIT ライセン

イセンスであるライセンス記述の定義を行い，ライセンスと推定された．MIT は類似ライセンスが多いことでス特定ツールに追加すべきライセンスを各クラスタからも知られている．Fedora Project はソースファイル上で抽出することができれば，ライセンスルール作成プロセ

見つかった 36 種類の MIT の類似ライセンスを報告してスの手順 1 を支援することが可能である．また，クラス

いる 11 ．また MIT ライセンスには，BSD，Apachev2，

タ 14 に 1536 の未知ライセンス記述がクラスタリングさ

ZLIB などにも記述される免責条項が存在する．以上のことから MIT ライセンスの類似ライセンスであると推定されるライセンスが多いのではないかと考えられる．

れた．クラスタ 14 は，Copyright のみや，ライセンス
名のみなど，比較的短い文章が多数存在した．ライセン
ス名のみの記述については，ライセンス名が未知であった場合，ライセンスルールに追加するなど，未知のライ
センス名の抽出にも用いることができる．

11 https://fedoraproject.org/wiki/Licensing:MIT77

8.3. 企業におけるライセンス特定ツールの利用シナリオ

9. 関連研究

ライセンス特定ツールは，特定精度が 100%でない限

9.1. ライセンス特定に関する研究

り，企業の法務部門などではすべてのライセンスを目視
本論文でも紹介したライセンス特定に関する研究は，で確認する必要があり，ライセンス特定ツールの利用自他にも行われている．例えば，Tunnanen ら [10] は，ラ体の意義が不明確な場合がある．
我々は，現時点でライセンス特定ツールを利用せず目イセンスを指定する記述と適合する正規表現を作成し，視ですべてのライセンスを確認している企業にも，ライどの正規表現に適合するかによりライセンスを特定する

センス特定ツールを利用することに意味があると考え方法を提案している．ただし，特定されていないソースている．すべてのライセンスを目視で確認する場合，本ファイルについては，利用者自身がライセンスの正規表

論文で紹介したように軽微な表記ゆれを見落とす可能性

現を作成しなければならない．眞鍋ら [11] は，ライセンがあり，目視であっても特定精度が 100%になるとは限ス特定支援に関する研究を行っている．ライセンス記述

らない．そのため現状では，2 名以上の担当者でダブルには共通した記述が用いられることに着目し，頻出文字

チェックするなどして対応していると思われる．

列を提示することで作成すべきライセンス記述のためのライセンス特定ツールによる特定結果は，人為的ミス

正規表現を作成支援する手法を提案している．本研究でを防ぐためのダブルチェックとしても用いることができは，K-means 法による単語の出現頻度による類似度に基ると我々は考えている．ライセンス特定ツールと目視にづいたテキスト分類を行っている部分で，眞鍋らのアプよる特定結果に差異があれば，いずれかの方法に誤りがローチとは異なっている．

ある可能性が高い．特に，本論文の実験で用いた Debian

9.2. ライセンス不整合問題に関する研究のように，膨大な数のライセンスを確認しなければならない状況においては，目視による確認にもミスが増える

ライセンス不整合問題を解決するために，Agawal らと考えられる．ライセンス特定ツールをダブルチェック[1] は，ライセンスの条項をタプルで表現したライセン
スメタモデルを構築し，ArchStudio4 上で義務の衝突，利用できる権利を計算する手法を提案している．また，
German ら [4] は，ライセンス不整合を起こした場合，ラ
イセンス不整合をどのように解消するか，ライセンサーとライセンシの観点から解決方法をまとめている．これ
らの研究と本研究は，ライセンス不整合問題を問題意識として持っているが，本研究では，ライセンス特定ツー
ルにおけるライセンスルール作成支援を行うことで，ライセンス不整合問題を解決しようとしている．

の手段として利用することで，作業コストの大きな削減にもつながると期待できる．

8.4. 制約本研究では，OSI の主張する主要なライセンスとMPLv1.1 を含めた 14 ライセンスのみを用いて分析を行った．そのため本研究の実験結果は一般性が高いとは言えない．K-means 法によるテキスト分類時のクラスタ数を，それぞれのプロジェクトのライセンス分布に基づいたクラスタ数にするとクラスタリングや Random

9.3. ライセンスとソフトウェア開発者に関する研究

Forest 法の類似ライセンス推定の精度向上が期待できる．
本研究では，支援すべきライセンス特定ツールのルー
ル作成支援プロセスとして Ninka のみを選んでいる．そのため本研究の実験結果は一般性が高いとはいえない．
特に，Ninka が未知ライセンスを判別する仕組みに着目しているため，他のライセンス特定ツールのルール作成
支援プロセスと異なる部分が生じる場合がある．しかし，どのようなライセンス特定ツールもライセンス記述を調査する部分は共通しているはずなので，本実験結果が部
分的には当てはまると考えられる．

ソフトウェア開発者のライセンスに対する認識を分析した研究がいくつか行われている．例えば，Colazo ら[3] は，コピーレフト性のある OSS ライセンスを用いる
OSS プロジェクトはコピーレフト性のない OSS ライセ
ンスの OSS プロジェクトと比べて，開発者の地位やコー
ディング量，活動の永続性が高く，開発期間が短くなる
ことを示している．Sojer ら [9] は，ソフトウェア開発者にソフトウェアの再利用に関するインタビューとライセンスに関するクイズを実施したところ，65%のソフト
ウェア開発者は，ソフトウェアの再利用に関する知識を，78主にインターネットのような非公式な情報を元に勉強し[3] Jorge Colazo and Yulin Fang. Impact of licensechoice on open source software development activity. American Society for Information Scienceand Technology, Vol. 60, No. 5, pp. 997–1011, May
2009.

ていることがわかった．また，ライセンスに関するクイズから開発者自身のライセンスに関する知識を過剰評価していることがわかった．この結果から，効果的なソフ
トウェア再利用に関する勉強方法が確立されていないことを示した．これらの分析結果を踏まえ，本研究では，[4] Daniel M. German and Ahmed E. Hassan. License integration patterns: Addressing license
mismatches in component-based development. In
Proc. of ICSE ’09, pp. 188–198, May 2009.

ソフトウェア開発者のライセンスに関する知識が不十分であることを前提とし，ソフトウェア開発者が容易にラ
イセンスルールの作成を行えるようにするための支援を最終目標にしている．

[5] Daniel M. German, Yuki Manabe, and Katsuro
Inoue. A sentence-matching method for automatic
license identification of source code files. In Proc.
of ASE ’10, pp. 437–446, Sep. 2010.

10. おわりに本研究では，機械学習を用いたテキスト分類がルール作
成支援にどれくらい有用かどうかを明らかにすることを[6] Robert Gobeille. The fossology project. In Proc.
of MSR’08, pp. 47–50, May 2008.

目的として，K-means 法によるテキスト分類，Random

Forest 法による類似ライセンスの推定を Debian v7.8.0のソースファイルから抽出した未知ライセンス記述群に対して行い結果を分析した．本研究ではルール作成支援
プロセスを 4 つに分割して定義し，手順 1 の追加すべきライセンス記述の調査，手順 3 の既知ライセンス文の調査を支援対象とした．ライセンス記述を K-mean 法を行うと追加すべきライセンスルールを容易に発見できる可能性があることを述べた．Random Forest 法でクラスタの類似ライセンスの推定を行うと，約 67%の精度で類似
ライセンスを推定できることを述べた．
今後の課題としては，実用的な手法を提案するため，分類するクラスタ数や，推定を行う類似ライセンスの種類を増やすことで，より細分化が可能なクラスタリング
や，より精度の高い類似ライセンス推定を可能にすること．また，同一ライセンスであるライセンス記述の定義を行い，ライセンス特定ツールに追加すべきライセンス
を各クラスタから抽出可能にすることなどが挙げられる．

[7] Jesus M. Gonzalez-Barahona, Gregorio Robles, Martin Michlmayr, Juan José Amor, andDaniel M. German. Macro-level software evolution: A case study of a large software compilation.
Empirical Software Engineering, Vol. 14, No. 3,
pp. 262–285, June 2009.
[8] J. A. Hartigan and M. A. Wong. A k-means clustering algorithm. Royal Statistical Society, Vol. 28,
No. 1, pp. 100–108, 1979.
[9] Manuel Sojer and Joachim Henkel. License risks
from ad hoc reuse of code from the internet. Communications of the ACM, Vol. 54, No. 12, pp. 74–
81, Dec. 2011.
[10] Timo Tuunanen, Jussi Koskinen, and Tommi
Krkkinen. Retrieving open source software licenses. In OSS ’06, pp. 35–46, June 2006.

参考文献[11] 眞鍋雄貴, 市井誠, 早瀬康裕, 松下誠, 井上克郎. コ
メント中の頻出文字列を用いたソフトウェアライ
センスの特定支援. ソフトウェア工学の基礎 XIV，
日本ソフトウェア科学会 FOSE2007, pp. 105–114,
Nov. 2007.

[1] Thomas A. Alspaugh, Hazeline U. Asuncion, andWalt Scacchi. Analyzing software licenses in open
architecture software systems. In Proc. of ICSE
’09 Workshop on Emerging Trends in FLOSS ’09,
pp. 54–57, May 2009.
[2] Leo Breiman. Random forests. Machine Learning,
Vol. 45, No. 1, pp. 5–32, Oct. 2001.

79