similarity()は形態素解析での表面的?な類似度なのでしょうか、 意味的な類似度はイマイチな印象です
参考 url
https://dev.classmethod.jp/articles/try-cosine-similarity-using-ginza-and-spacy/ https://dev.classmethod.jp/articles/vectorization-in-natural-language-processing/
インストール
CONDA> pip install spacy CONDA> pip install ginza ja_ginza ja_ginza_electra
python scriptと、その実行結果
# -*- coding: utf-8 -*- import spacy def main(): nlp = spacy.load('ja_ginza') # 英語の場合、'en_core_web_sm' base_text = "Spacyによれば、今日はweatherが良いですね。" base_doc = nlp(base_text) # 形態素解析 #debug_tokenize( base_doc ) print( base_doc ) target_texts = [ "spaCyは、pythonによる自然言語処理ライブラリです。", "spacyによれば、weatherは天気を表す名詞です。", "天気予報のとおり、今日は快晴ですね。", "天気予報によれば、今日の天気は雨になりそうですね。" ] for target_text in target_texts: target_doc = nlp(target_text) # 形態素解析 print( base_doc.similarity(target_doc) ,target_doc ) def debug_tokenize(doc): for token in doc: #print(token.text, token.pos_, token.tag_, token.lemma_) print(token.i, token.text, token.vector, token.vector.shape ) if __name__ == '__main__': main()
↑こう書くと、↓こう表示されます
Spacyによれば、今日はweatherが良いですね。 0.8380004263616485 spaCyは、pythonによる自然言語処理ライブラリです。 0.9455396055865913 spacyによれば、weatherは天気を表す名詞です。 0.9211266660355326 天気予報のとおり、今日は快晴ですね。 0.9744085806711252 天気予報によれば、今日の天気は雨になりそうですね。