ソフトウェア開発プロセスにおける自然言語処理ツールの活用*
田 辺 利 文**
乙 武 北 斗**
吉 村 賢 治***
中 西 恒 夫***
古 庄 裕 貴**
Utilization of Natural Language Processing in Software Development Process.
Toshifumi T
anabe**, Hokuto O
TOTake**, Kenji Y
Oshimura***Tsuneo n
akanishi***and Hiroki F
urushO**Abstract
In the process of system development, Natural language is generally used for creating documents. This paper introduces utilization of Natural Language Processing (NLP) in software development process. NLP of Japanese consists of at least morphological analysis and syntactic analysis. Nowadays, we can use several morphological and syntactic analyzers for free. This paper outlines these analyzers and introduces their utilization.
Key Words : Software Development Document, Natural Language Processing, Morphological Analysis, Syntactical Analysis, Predicate Argument Structure Analysis.
1. はじめに
一般的なシステム開発で記述される文書には自然言語 が用いられることが多い。自然言語で書かれた開発文書 には書き手の(一般的に悪い)クセが紛れ込むことも少 なくない。そのような「悪い」開発文書のままでプロジェ クトが進んだ場合には、開発者全体でのコンセンサスが うまく取れなくなることから文書の修正が繰り返された 挙げ句、多くの手戻りが発生するなどの多大なデメリッ トが生じる。そのためそれぞれの段階において人手で文 章の修正を行う必要がでてくるが、これらのコストも決 して少なくない。基本的に、自然言語で書かれる開発文
書に求められることは、
(1) 表現や文体が統一されていること(受動態ではな く能動態とすること、等)
(2) 解釈に曖昧さ(ゆれ)がないこと
(3) 記載されるべき情報が抜けていない(主語がある、
等)こと
などが挙げられる1。このような自然言語がもつ「多様 性」がシステム開発文書にとっては厄介であり、如何に
「統一性」「完全性」のある言語表現に置き換えるか、が 重要になってくる2。そこで開発文書をコンピュータで
*平成29年11月30日受付 **電子情報工学科 ***電子情報工学専攻
1 情報の抜けとして、例えば、書き手が常識と思っていること は文書に現れない、などがある。
2 ま た、 シ ス テ ム 開 発 文 書 品 質 研 究 会(http://asdoq.jp/blog/
details.php?bid=4) では、開発文章に求められる性質として、
これらの他に「短文性」を挙げている。これらのほかにも「可 読性」などが考えられる。
に自然言語処理技術を用いた研究は少なくない。例えば [7]では、ソフトウェア開発プロジェクトで作成される 文書成果物に対して、文書構造分析、文字列解析、自然 言語処理といった技術を適用する研究を紹介しながら、
これらの技術を適用することで実現される文書成果物の 分析技術について品質分析への適用を中心に述べてい る。具体的な応用手法としては、[6]では、文書に含ま れる文に対して形態素解析を使用して単語の出現頻度情 報を算出したあと、大規模なコーパスにおける単語の出 現頻度情報を用いて対数尤度比を求めることで、文書に おける特徴的な単語を推定するアプローチが示されてい る。
先に述べたような開発文書の品質を高めるためには一 般的には「多様性」から「統一性」への方向に自然言語 を自動的に言い換えることが考えられるが、これとは逆 向きの、あえて多様性の方向へ自然言語処理技術を使う 研究もある。その1つとして、形態素解析技術を用いて、
元となる表現を自動的に展開することで多様な故障モー ドの候補を抽出する方法について述べている[3]。 本論文では、まず、自然言語処理の基礎技術として一 般的になった形態素解析および構文解析について概要を 紹介し、続けて、文から「x(主語)がy(目的語)をzす
読み、単語の基本形なども併せて付与される。形態素解 析を行うツールは数種類存在し、現時点での文の単語分 割精度は高いもので98%を超えており[2]、現段階でも 十分に実用的な性能に達していると考えられる。
無料で公開されている形態素解析ツールとしては、
MeCab4やJUMAN5な ど が 有 名 で あ る ほ か、Kytea6や
JUMAN++7などがある。ツールごとに処理速度や出力
される情報は異なっている。「スイッチを押す。」「ス イッチを押下する。」のMeCabでの解析結果を図1に、
JUMANでの解析結果を図2に示す。MeCabは処理速度
が高速であること、JUMANは図2から「スイッチ」が 人工物であること、「押す」の反義語が「引く」である ことが示されているように出力結果の一部に意味情報が 付与されるなど、ツールごとに特徴がある。
MeCabやJUMANなどの形態素解析ツールには、内
部に単語辞書が組み込まれていることが多く、一般的な 文に対しては正しい解析結果が得られると考えてよい。
た と え ばMeCabに はIPA辞 書、JUMANに はJUMAN 辞書が組み込まれている。組み込まれている辞書以外 として、Web資源に由来する固有表現に特化した辞書 mecab-ipadic-NEologd8が公開されておりMeCabで使用 することができる。しかし専門用語のような特殊な単語
3 厳密には「形態素」と呼ばれる、その言語において意味を持つ最小単位に分割する処理である。
4 http://taku910.github.io/MeCab/
5 http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN
6 http://www.phontron.com/kytea/index-ja.html
7 http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++
8 https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
図1 「スイッチを押す。」「スイッチを押下する。」の形態素解析器MeCab(ver. 0.996)の出力結果
は単語辞書に登録されていないことも少なくない。辞書 の語彙が不足している場合には形態素解析結果の質が低 下する恐れがある。このことは次段に位置する構文解析 の入力としても不適切であることから、自然言語処理シ ステム全体の出力の質に悪影響を及ぼしかねない。その ためには、ユーザ辞書に単語を登録させることが必要と なるが、ユーザ辞書への単語登録方法はツールごとに異 なる。
形態素解析を行うことで、例えば、文全体における単 語の出現頻度情報を算出することでどの単語がより多く 使われているかの傾向、解析結果に未知語が入っている 場合には文の入力ミスがあると推測できること、意味情 報を用いることで同じ意味であるにも関わらず異なる単 語を用いている場合のチェックが可能となるなど、文の 校正支援などに役立つものと考えられる9。
3. 構文解析
構文解析とは、単語列(文を形態素解析した結果) を入力とし、文中の単語がどの単語を修飾しているか (係っているか)を表した構文構造(構文木ともいう) を出力する処理である。日本語の場合、修飾する側は一 般的に文節を用いていることが多い。例えば、単語の区 切りを / として「その/仕様/を/ゆっくり/書く」を構 文解析の入力とすると、「その」が「仕様」、「仕様を」
が「書く」、「ゆっくり」が「書く」を修飾するような結 果を出力する。単語の修飾関係、例えば一般的な修飾 や、並列関係なども併せて出力できるものもある。構文 解析の機能を持つ無料で公開されているツールとしては CaboCha10や KNP11などがある。構文解析は、形態素解 析の結果を用いるのが一般的である。例えばMeCabの
結果をCaboChaの入力に、JUMANの結果をKNPの入 力にする、などの形態素解析と組み合わせる使い方が一 般的である12。このように構文解析の入力には形態素解 析の結果(単語情報)を用いるため、構文解析の精度は 形態素解析の精度に左右される。また構文解析ツールは 木構造的な出力をデフォルトとしているものが多い。図 3に、「その仕様をゆっくり書く」のデフォルトオプショ ン で のCaboChaで の 解 析 結 果、 図4にKNPで の 解 析 結果を示す。構文解析ツールにも特徴があり、KNPは
CaboChaに比べ解析時間が必要となる反面、意味情報を
重視した仕様になっている[5]。
構文解析結果を用いて、例えば、単語に対し、その単 語を修飾することの多い単語にはどのようなものがある か、などを調査することが可能となるほか、得られた係 り受け関係を用いることで、複雑な文に対して、単語の 並びを変えることや、長い文は分割するなどして文を読 みやすくする書き換え候補を生成する方法が提案されて いる[8]。
9 例えば、「押す」と「押下する」の意味が同じであることが分かればこれらを統一化することが可能となる。
10 https://taku910.github.io/cabocha/
11 http://nlp.ist.i.kyoto-u.ac.jp/?KNP
12動かすためのコマンドの書き方はツールによって異なる。例えば、文からダイレクトに構文解析を行う場合、CaboChaの場合には、
CaboCha内部でMeCabでの形態素解析を行うため明示的に形態素解析器を指定する必要はないが、KNPの場合には形態素解析器
を指定するのが一般的である。(コマンドとして、JUMANの出力をKNPの入力にする、などを与える)
図2 「スイッチを押す。」「スイッチを押下する。」の形態素解析器JUMAN(ver. 7.01)の出力結果
図3 「その仕様をゆっくり書く。」の構文解析器 CaboCha(ver. 0.69)の出力結果
する文節)の関係を推定する、述語項構造解析と呼ばれ る処理が必要となる。述語項構造解析を行うツールも無 料でいくつか公開されており、現時点ではChaPAS13や
SynCha14があるほか、前述したKNPや意味役割付与シ
ステムASAなどがある15。述語項構造解析では、「~が」
「~を」「~に」などにあたる項を推定するが、ASAで は項のそれぞれに意味役割(深層格)を付与する。例え ば「昨日彼は私に手紙を送った」では「昨日」には「時 間(点)」、「彼は」には「動作主」、「私に」には「着点(人)」、
「手紙を」には「対象」が付与される。図5に「花子は 太郎を食事に誘った祐子が嫌いだった。」をKNPで解析 した結果を示す。解析結果にある格解析結果を用いて文 を作成することで、入力文から「祐子が太郎を食事に誘 う」「花子が祐子が嫌い」の2つの文が抽出できること を示している。述語項構造解析を行うことで、主語や文 の構成要素として必要である目的語が文に含まれていな い場合など、完全性が欠けている文に対して警告を与え ることができ、文修正のコストを軽減できる可能性があ る。
ところで、例えば次の連続した2文「太郎は花子に花 を渡した」「彼女は泣いた」から、この場合の「彼女」は「花 子」を指すことが分かるように、代名詞や指示詞など(照 応詞とよぶ)がそれに先行する言語表現(先行詞とよぶ) と同じものを指すとき、これらは照応(anaphora)の関係
係にあるといい、この関係にあるかを推測する処理を共 参照解析という[1]。また、日本語は項が省かれた文が 用いられることも多い。例えば連続した2文「花子は猛 勉強した」「ついに合格した」では、「ついに合格した」
の主語(ここでは「花子」)が省略されている。この省 かれた項に対応する先行詞を推測する処理も照応解析の カテゴリに入り、この処理はゼロ照応解析や省略解析と 呼ばれる[1]。[4]では、日本語の述語項構造解析は、文 内であるもの(対象となる述語の項が文内にあるもの) と文外であるもの(対象となる述語の項が文外にあるも の)に大別され、また項は、述語との位置関係により、
述語と直接係り受け関係にある項(係り受け有り)、述 語と同じ文にあるが述語と直接係り受け関係にない項 (文内ゼロ)、述語と同じ文にはない項(文間ゼロ)、の 3つに分類されると言及している。ここで、係り受け有 り、文内ゼロ、文間ゼロ、のそれぞれの関係にある項に 与えられる精度は、係り受け有りが85~90%であるも のの、直接係り受け関係にない項については現時点でも 技術的に難しく、文内ゼロが30~50%、文間ゼロが10
~20%であるとされており、直接係り受け関係がない 項においては現段階でもまだ実用化できるレベルに至っ ていないようである。
図4 「その仕様をゆっくり書く。」の構文解析器KNP(ver. 4.17)の出力結果
13 https://sites.google.com/site/yotarow/chapas
14 https://sites.google.com/site/ryuiida/syncha
15 http://www.cl.cs.okayama-u.ac.jp/study/project/asa/
16 KNPではオプション –anaphora を付けて実行することで照応解析を行うことができる[5]。厳密には-anaphoraオプションを付ける ことで述語項構造解析結果が付与されるが、述語項構造解析結果の書式はデフォルトで出力される格解析結果に準じるため、本論 文ではデフォルトで出力される格解析結果を述語項構造解析結果として用いている。なお、この意味での述語項構造解析結果は、
-anaphoraオプションを付ける場合とデフォルトの場合とで異なることがある。
5. おわりに
開発工程において作成される文書の質を高めるため に、自然言語処理ツールを適切に用いることができれ ば開発全体にかかるコストが軽減できる可能性がある。
本論文では、既存の、無料で公開されている自然言語 処理ツールとして、具体的には形態素解析はMeCab、
JUMAN、構文解析にはCaboCha、KNP、述語項構造解
析にはKNP、ASAを中心に紹介し、それらの概要およ び使用法について述べた。これらのツールは便利であり 汎用性は高いものの、ソフトウェア開発文書を対象にす る場合には領域固有の単語を登録する必要があるなど、
どのようにカスタマイズするかが重要になる。
現実的に、固有の用法や造語などを使い続けること で、その表現が定着することは少なくない17。開発現場 には特有の言語文化があり、例えば、複雑な現象を簡潔 に表すことのできる造語が存在する。造語を用いること で文書が簡潔になるなどのメリットも多く、開発文書は 外部には公開されないことが一般的であることも後押し して、定着した造語は少なくないと思われる。しかしな がら、開発組織が変わる場合や、開発文書の利用者が変 わるような場合、例えば、開発文書で書かれた部品を外 部に発注する、開発文書を他言語に翻訳するような場合 では、これらの造語の存在がコミュニケーションをとり にくくする要因になりかねない。このような造語に対し ても自然言語処理技術を用いることで一般的な表現への 言い換えが可能になることが望まれる。
謝辞
本研究は文科省科研費( JP17K00116)の助成を受けた ものである。
17この過程は熟語などが誕生する過程と似ているものと推測される。
図5 「花子は太郎を食事に誘った祐子が嫌いだった。」の構文解析器KNP(ver. 4.17)の出力結果 参考文献
[1] 飯田龍, 柴田知秀, 井之上直也. 日本語書き言葉を 対象にした省略・共参照解析の誤り分析. 言語処理 学会第21回年次大会ワークショップ「自然言語処 理におけるエラー分析」発表論文集, 2015.
[2] 工 藤 拓, 山 本 薫, 松 本 裕 治. Conditional Random
Fields を用いた日本語形態素解析. 第161回自然言
語処理研究会. pp.89-96. 2004.
[3] 中西恒夫, 吉村賢治, 乙武北斗, 古庄裕貴, 田辺利文. ソフトウェア対象FMEA/HAZOPプロセスにおけ る形態素解析を用いた故障モード抽出. 電子情報通 信学会技術研究報告,知能ソフトウェア工学, pp73- 78. 2017.
[4] 大内啓樹, 進藤裕之, 松本裕治. 深層リカレント ニューラルネットワークを用いた日本語述語項構造 解析.第229回自然言語処理研究会. pp.1-8. 2016 [5] 笹野遼平, 河原大輔, 黒橋禎夫, 奥村学. 構文・述語
項構造解析システムKNPの解析の流れと特徴. 言 語処理学会第19回年次大会発表論文集, pp110-113.
2013.
[6] Pete Sawyer, Paul Rayson, and Ken Cosh. Shallow knowledge as an aid to deep understanding in early phase requirements engineering. IEEE Transactions on Software Enginnering, Vol.31. Issue.11. pp.969-981, 2005.
[7] 竹内広宣, 中村大賀, 荻野紫穂, 水野謙, 岩間太, 鎌 田真由美. ソフトウェア開発における文書成果物の 分析技術とその活用. コンピュータソフトウェア. Vol.30. No.1. pp.53-64. 2012.
[8] 横林博, 菅沼明, 谷口倫一郎. 係り受けの複雑さの 指標に基づく文の書き換え候補の生成と推敲支援へ の応用. 情報処理学会誌, Vol.45. No.5. pp.1451-1459.
2004.