前提・実現したいこと
現在Jupiter NoteBookのpython3.Xを用いて,
名詞などをKeyWordとして文章の類似度を測るシステムを作っており,
方法としては,文章はTF-IDfでベクトル化し,
その後KeyWordを任意で決めてそれをもとにcos類似度でKeyWordに近い文章を見つけます.
しかし,抽出した文章タイトルは妥当なのですが,類似度が全て0になっておりその原因が特定できませんでした.
エラー関係ではないのですが,もしよろしければ教えていただけると助かります.
よろしくお願いいたします.
実行に必要なデータは以下に挙げております(約20MB).
・Re_AllWord.txt (各文章における単語群list)
・Re_AllTitle.txt (各文章のタイトル)
・inf.csv (上記2ファイルの紐づけの確認用)
・merosu.txt (類似度を測るために用いた単語群)
https://38.gigafile.nu/1126-548e963235e3f9919a804f109419fb42
該当のソースコード
python
1import pickle 2import numpy as np 3import csv 4import pandas as pd 5import re 6import numpy as np 7from sklearn.metrics.pairwise import cosine_similarity 8from sklearn.feature_extraction.text import CountVectorizer 9from sklearn.feature_extraction.text import TfidfTransformer 10 11 12 13#呼び出し 14f = open("Re_AllWord.txt","rb") 15Word = pickle.load(f) 16 17f = open("Re:AllTitle.txt","rb") 18Title = pickle.load(f) 19 20df = pd.read_csv('inf.csv', header=0, encoding = 'sjis_2004') 21name = df["題目"].tolist() 22 23 24### 全データのTF-IDF ### 25Tname = [] 26 27vectorizer = CountVectorizer(token_pattern=u'(?u)\b\w+\b',min_df=3,max_df=5, max_features=10000) 28transformer = TfidfTransformer() 29tf = vectorizer.fit_transform(Word) # 単語の出現頻度を計算 30tfidf = transformer.fit_transform(tf) 31 32X = tfidf.toarray() 33ALL = [X,Title] 34 35 36### 類似度を確認したいデータの準備 ### 37""" 38### データの用意 ### 39test1 = ['君 私 犬 好き'] 40test2 = ['私 犬 嫌い'] 41test3 = ['あなた 木 薄い'] 42test4 = ['貴行 殿 薩'] 43corpus = test1+test2+test3+test4 44""" 45f = open("merosu.txt","rb") 46merosu = pickle.load(f) 47kye_words = merosu 48#kye_words = ['メロス セリヌンティウス'] 49#kye_words = ['犬'] 50 51sample_tf = vectorizer.transform(kye_words) 52# sampleのTF-IDFを計算する 53sample_tfidf = transformer.transform(sample_tf) 54 55# コサイン類似度の計算 56similarity = cosine_similarity(sample_tfidf, ALL[0])[0] 57topn_indices = np.argsort(similarity)[::-1][:5] 58 59for i in range(len(topn_indices)): 60 print(Title[topn_indices[i]]) 61 print(similarity[i]) 62 #上記を"similarity[topn_indices[i]]"で出てきました. 63 Tname.append(Title[topn_indices[i]]) 64 65 66#コメントアウトの箇所は,「ALL = [X,Title]」での文章タイトルがcsvファイルと一致しているか確認してます 67for i in range(len(Tname)): 68 #print(Tname[i]) 69 for j in range(len(name)): 70 if(Tname[i] == name[j]): 71 num = j 72 html =df.iloc[j][0] 73 title=df.iloc[j][1] 74 Url =df.iloc[j][2] 75 #print(df.iloc[j][1]) 76
試したこと
cos類似度の算出は,以下を参照いたしました.
https://www.pytry3g.com/entry/cosine_similarity
その際,コードにある短いコーパスでKeyWordを「犬」にすると類似度は出てきたため,単語数の兼ね合いかと思いある文章に出現した単語すべてをKeyWordにしたのですが結果は類似度は全て0になっていました.
補足情報(FW/ツールのバージョンなど)
今回対象文書数が11176文章と多く,
対象のデータは青空文庫の形態素解析データ集
http://aozora-word.hahasoha.net/download.html 内の,
・utf8_all.csv.gz (全文章の形態素解析結果)
・aozora_word_list_sjis.zip(文章とタイトルの紐づけ用)
ギガファイルのデータはここから作成しました.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。