↑この辺りの記事を見て、集合とかベクトルの類似度の計算の記事を下書きのまま放置していたことを思い出したので書き上げた。分野では単語の意味を比較するときに、ある単語の周り(文脈)に出てきた単語のベクトル(文脈ベクトル)の類似度を計算することがある。これは「ある単語の意味はその周囲に出現する単語によって特徴づけられている」という仮説に基づいていて、文脈ベクトルが似ていれば似たような意味、似たような状況で使われる単語が多いということが言えるからである。encyclopedia以下のように「ご飯」などの食べ物系の単語の周りには「食べる」という単語が出てきやすい、という例で納得してもらえるとありがたい。文脈ベクトルの作り方には様々なやり方があるらしいですが、メインではないのであまり触れない。基本的にはテキストデータの中で、対象とする単語の周りnの範囲(文脈窓)に登場した単語を対象とする。ツイッターなどの短い文の場合には1文や1ツイートまるごとを対象にしてもいいかもしれない。この時品詞による限定や係り受け関係による限定などを行うこともある。文脈窓に出現した単語についてどのような値を持たせるのかというのも様々なやり方がある。単純には出現頻度を使えば良い。これに対しても確率値にしたり、対数をとったりいろいろな工夫が考えられる。Information)などのより共起性を考慮したものを使っている場合もある。先ほど例として上げたツイート内すべてを文脈とし、名詞と動詞の原形のみを数えた場合「ご飯」の文脈ベクトル(頻度)は以下のようになる。1}データ量が圧倒的に少ないですが「食べる」や「飽きる」など「ご飯」に関係ありそうな単語が含まれてることはわかると思います。Tween同様に「夕食」についてもベクトルを作っておきます。twicca同様に「布団」についてもベクトルを作っておきます。twicca類似度の計算ようやくメインの話です。上で定めた文脈ベクトルについて類似度の計算を行います。ユークリッド距離などを使う場合もありますが、比較する文脈ベクトルの長さ(0でない要素の数)が違いすぎると悪影響があるとかないとか。以下に類似度として使われるものの一部をあげます。集合に対するものそれぞれある要素が含まれるかどうかでしか考えない。基本的には次に紹介する数値に対する類似度のほうが頻度の違いを考慮しているためよさそう。以下の3つの尺度の分子は共通の要素の数であり、分母が微妙に違うだけである。Jaccard係数は2つの集合を合わせた集合の要素数、Dice係数は2つの集合の大きさの平均、Simpson係数は小さい方の集合の要素数が分母となっている。0数値ベクトルに対するものJaccard係数とDice係数について数値を考慮した場合の式が以下の本に載っていたのでついでに載せておきます。他の本ではあまり見かけないので、一般的な式かどうかはわかりません......。「ご飯」(v1)について「夕食」(v2)と「布団」(v3)についてどちらが似ているか確認してみます(極端な例ですが)。コサイン類似度を計算すると以下のようになり、「ご飯」(v1)については「夕食」(v2)のほうが似ていることがわかります。この方法で似ている単語になるものには対義語も含まれるかもしれないことに注意が必要です。Similarity参考・関連いろいろな類似度の話。Wiki*共起性を測る尺度の話。知り合いの同様の記事。Loudより細かい話。共起に基づく類似性尺度(<特集>自然言語とコンピュータ)重み付きのベクトルに対するJaccardとDice係数の定義が載っていた本。Adsenseを使っています。(1)月別アーカイブはてなブログをはじめよう!sucroseさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。