u++の備忘録

コロケーションの指標「C-value」のPython実装

概要

  • コロケーション("Read a newspaper", "Write a blog" など、慣習的に用いられる英単語の組み合わせ)を抽出したい
  • 以下のブログで紹介されていたコロケーションの指標「C-value」をPythonで計算した

abicky.net

論文

Katerina T. Franzi and Sophia Ananiadou: Extracting Nested Collocations, In Proceedings of the 16th International Conference on Computational Linguistics (COLING ‘96), pp. 41-46, 1996.
https://www.aclweb.org/anthology/C96-1009

要旨

  • 「コロケーション度合い」の計算は、単純に単語列の出現頻度だけを見ても上手くいかない
  • 「C-value」という「コロケーション度合い」を尤もらしく計算する指標を提案
  • 具体例含めて、上述のブログで日本語で解説されている
  • ※ 1996年の論文

C-valueの算出アルゴリズム

f:id:upura:20190503153841p:plain

ここで revise は以下のように計算されます。

  • revise t(b): t(b) += (n(a) - t(a))
  • revise c(b): c(b) += 1

計算の具体例

与えられた文章群から、以下のような「コロケーションの候補」が得られたとします。コロケーションの候補は、単純にn-gramでの出現頻度の高いものを抽出します。次の表はたとえば、"Staff Reporter of The Wall Street Journal"という文字列が19回、"Wall Street Journal"が26回登場したことを意味します。

f:id:upura:20190503154330p:plain

ここで論文内のアルゴリズムに沿ってC-valueを算出すると、以下のようになりました。これは論文内で登場した結果とも一致しています。

f:id:upura:20190503154843p:plain

上位には、"Wall Street Journal", "The Wall Street Journal"など感覚的にコロケーションと判定できそうな文字列が来ています。一方で "of The Wall Street" など中途半端な単語で始まる文字列がC-valueは0(コロケーションではない)と判定されています。

実装

実装はNotebook形式でGitHub上に公開しています。

github.com