メインコンテンツへスキップ
見出し画像

書記が数学やるだけ#798 シソーラス,カウントベースの手法

    今回から自然言語処理について見ていくことにする。


    問題

    (2)の例文は以下を参照した:


    画像


    説明

    近年話題となっているChatGPTは,自然言語処理モデルの一つである。

    画像


    シソーラス(類語辞典)の代表例としてWordNetが挙げられる。

    画像


    次にカウントベースの手法について,例として共起行列を用いた方法を紹介する。共起行列とは,コーパス中の単語の共起頻度を要素とする行列であり,単語同士の関係性を示す。単語の類似度の指標としてコサイン類似度や相互情報量があり,これは共起行列の各行を取り出すことで計算できる。

    画像


    解答

    今回はNLTKというPythonのオープンソースライブラリからWordnetを用いる。

    import nltk
    assert(nltk.download('wordnet'))
    from nltk.corpus import wordnet as wn


    単語検索はsynsets()より行う。

    # 単語検索
    wn.synsets('write')

    結果:
    [Synset('write.v.01'), Synset('write.v.02'), Synset('publish.v.03'), Synset('write.v.04'), Synset('write.v.05'), Synset('compose.v.02'), Synset('write.v.07'), Synset('write.v.08'), Synset('spell.v.03'), Synset('write.v.10')]

    NLTKには'write'の項目は複数存在しており,それぞれ異なる意味を収録している。次にこれらの意味をdefinition()を用いて抽出する。

    [[x, x.definition()] for x in wn.synsets('write')]

    結果:
    [[Synset('write.v.01'), 'produce a literary work'], [Synset('write.v.02'), 'communicate or express by writing'], [Synset('publish.v.03'), "have (one's written work) issued for publication"], [Synset('write.v.04'), 'communicate (with) in writing'], [Synset('write.v.05'), 'communicate by letter'], [Synset('compose.v.02'), 'write music'], [Synset('write.v.07'), 'mark or trace on a surface'], [Synset('write.v.08'), 'record data on a computer'], [Synset('spell.v.03'), 'write or name the letters that comprise the conventionally accepted form of (a word or part of a word)'], [Synset('write.v.10'), 'create code, write a computer program']]


    類義語の検索にはlemma_names()を用いる。

    print(wn.synsets('write')[0].lemma_names())

    結果:
    ['write', 'compose', 'pen', 'indite']


    上位構造を示すにはhypernym_paths()を用い,繰り返すことで依存関係を繋げていく。

    for x in wn.synsets('write')[0].hypernym_paths()[0]:
        print(x, x.definition())


    類似度の比較にはpath_similarity()を用いる。

    word1="write"
    word2="create"
    wn.synsets(word1)[0].path_similarity(wn.synsets(word2)[0])

    結果:
    0.3333333333333333


    次に共起行列を用いた手法について。例えばsayは,youとgoodbye,Iとhelloと共起関係にある。これらを全単語で集計することで共起行列が得られる。

    コサイン類似度は,ベクトルの向きの関係を示したもので,-1~1の値を取る。

    画像


    相互情報量は,もとは情報理論の概念で,文中における単語の頻度を加味することができる。

    画像


    本記事のもくじはこちら:


    あなたへのおすすめ